随着C++的越发深入的学习,难度越发加大,而我比较薄弱的点主要是结构体和现在学习的指针的应用。结构体类型中,我一直不能正确地应用,在各类数据多起来的时候,就会乱了阵脚。后来在我对结构体PPT、书本及后期作业的仔细反复查看后,才对结构体有了较为熟练度应用。而我们现在在学的指针,因为要点很多,让我在“&”和“*”之间不能分清。并且指针类型使用时需要的严苛的格式条件,让我有时摸不到头脑。更不用说后来加入的用指针表示字符串、数组了。这些我不懂的地方时刻提醒着我,让我抓紧时间去复习,去弄请我现在还不懂的地方。
在数组的学习过程中当然也有颇具挑战性的题目。就像cpp7编程题第二题:给定某数字A(1≤A≤9)以及非负整数N(0≤N≤100000),求数列之和S=A+AA+AAA+⋯+AA⋯A(N个A)。例如A=1, N=3时,S=1+11+111=123。这道题目要注意a[i]的赋值不能由小到大,而是要从大到小,这样就能方便“%”在数组中的使用。现算法如下:1.定义并输出A、N;2.定义并赋值a[i],a[i]== (N - i)*A; 3.当a[i]!=0时,将A用a[i]%10表示,再用叠加法,最终输出结果。代码如下:
#include<iostream>
using namespace std;int a[100000] = {0};int main(){ int A, N; int i, j; cin >> A >> N; if(N != 0) { for(i = 0;i<N; i++) { a[i] = (N - i)*A; } while(a[j] != 0) { A = a[j] % 10; a[j + 1]= a[j] / 10 + a[j + 1]; a[j] = A; j++; } for( int i = j - 1;i>=0;i-- ) { cout << a[i]; } } else cout<< "0"; return 0;}这道题主要是循环与数组的运用,要求思路清晰,解决之前找到相应的流程和算法。
存在的问题主要是a[i]的赋值是要从高位到低位,这一点时我在两种赋值中逐渐找到的真正规律。其次,本体要求最后输出的数字后无空格,这点一开始我没关注,最后显示结构错误,后来我用循环和if语句解决了这个问题。
学无止境,在C++的道路上我还有很长一段路要走。