《程序设计A》课程设计报告
班级:___数学类三班___学号:2019215259_____报告人姓名:蔺泽芳 实验地点: _______图信楼511_________________完成起止日期: ___2020/1/4~2020/1/10__________目录:《程序设计A》课程设计报告 1Problem A 3Problem B 4Problem C 4Problem D 6Problem E 6Problem F 7Problem G 8Problem H 9Problem I 10Problem J 11Problem K 12Problem L 13Problem M 15Problem N 16Problem O 16Problem P 17Problem Q 18Problem R 19Problem S 21Problem T 21Problem U 22Problem V 23Problem W 25Problem X 26Problem Y 27Problem Z 28课程设计心得 30Problem A 输入一个数字,判断数字所在区间,输出代表该区间的字符。思路形成:先将数字分成两部分:在0~100之间和不在0~100之间。在0~100之间有五种情况,所以选择switch分支语句,将A B C D E五种情况判断输出。不在0~100之间的,先排除小于零的,大于100的在switch语句中默认处理。最后完善整个程序。源码:#includeusing namespace std;int main(){ int a; while(cin>>a) { if(a<0) cout<<“Score is error!”<<endl; else { int n=a/10; switch(n) { case 0: case 1: case 2: case 3: case 4: case 5:cout<<“E”<<endl;break; case 6:cout<<“D”<<endl;break; case 7:cout<<“C”<<endl;break; case 8:cout<<“B”<<endl;break; case 9: case 10:cout<<“A”<<endl;break; default:cout<<“Score is error!”<<endl; } } } return 0;}小感想:这个题的关键是分清情况,写全各个情况的输出结果。注意情况较多,程序要条理清晰。Problem B输入n和n个数,找出这n个数中的奇数,输出奇数的乘积。思路形成:用if语句把奇数找出来,然后做乘积存在b中,最后输出b。考虑到多组数据,所以用while(cin>>n)输入多组,用for语句输入n个数,再把内容写入完善好程序。源码:#includeusing namespace std;int main(){ int n,a; int b=1; while(cin>>n&&n>=1) { b=1; for(int i=1;i<=n;i++) { cin>>a; if(a%2!=0) { b=ba; } } cout<<b<<endl; } return 0;}小感想:这道题不算很麻烦,思路也很清楚,但要注意的是这是多组数据的判断,所以在while后要把b初始化。第一次提交时没注意到这里,错了才发现输入第二组测试数据时,b的值是接着第一组的结果继续算的。Problem C输入一个区间,找出区间内满足各位数的立方和等于它本身的数,有则输出这个数,没有输出no。思路形成:把区间内的每个数取出来,判断是否满足条件。数据都是三位数,取出后先把各个位数上的数分离,做立方和,然后判断是否与原数相等。在while语句后加a=0,当有满足条件的数时,a加1,没有时,a还是0,这样就可以分别输出两种情况下的值了。源码:#includeusing namespace std;int main(){ int m,n; int x,y,z; while(cin>>m>>n) { int a=0; int sum; for(int i=m;i<=n;i++) { x=i/100; y=(i/10)%10; z=i%10; sum=(xxx)+(yyy)+(zzz); if(sumi) { a++; if(a1) cout<<i; else cout<<" "<<i; } } if(a==0) cout<<“no”; cout<<endl; } return 0;}小感想:这个题主要是输出情况较复杂,在有水仙花数时,一行输出用空格隔开,没有时输出no,我在空格问题上卡了很久,它只是两数之间加空格,最后输出的数后面不加空格,最终用一个if语句解决了。Problem D给定一个多项式,求它的前n项和。思路形成:这题是一组测试数据,所以直接输入m,用for语句输入m个整数,因为多项式中既有正数也有负数,所以考虑分成奇数项和偶数项,偶数项加负号再求和,即为多项式的前n项和。最后完善程序,用小数格式保留两位小数输出多项式的和。源码:#include#includeusing namespace std;int main(){ int n,m; double x; cin>>m; for(int i=1;i<=m;i++) { cin>>n; x=0; for(int i=1;i<=n;i++) { if(i%2!=0) x+=(double)1/i; else x-=(float)1/i; } cout<<fixed<<setprecision(2)<<x<<endl; } return 0;}小感想:这道题需要注意的地方很多,首先整型和浮点型变量的定义,奇数项和偶数项的正负号问题,还有输出形式,保留两位小数,加头文件。还要注意每次循环时x初始化。Problem E给定一个表达式,当表达式的自变量在给定的区间内取整数时,判断表达式的值是否为素数。思路形成:我将这个问题分为四步:输入给定区间内的所有整数,求出所有表达式的值,判断是否全为素数,按要求输出。因为要判断的素数很多,先定义了一个函数用来判断是否为素数。在主函数中,用while 输入多组数据,用循环语句求出表达式的值,引用函数判断是否为素数,是素数的用a++计数,最后按要求输出yes 和no,用if判定输入0 0 时结束。源码:#includeusing namespace std;bool prime(int n){ for(int i=2;ii<=n;i++) if(n%i0)return false; return true;}int main(){ int x,y,n; while(cin>>x>>y) { int a=0; for(int i=x;i<=y;i++) { n=i*i+i+41; if(prime(n)) a++; } if(x0&&y0)break; if(a(y-x+1)) cout<<“OK”<<endl; else cout<<“Sorry”<<endl; } return 0;}小感想;这个题我开始时没有用函数,直接在主函数中判断了素数,结果发现我潜意识中改变了题意,判断了i到41是否为素数,最后发现还是用函数比较方便。Problem F给出一个数字规律,第二个数是第一个数的一半减一,当第n个数是一时求第一个数是几。思路形成:发现这个数字规律后,编程就很简单了。多组数据用while 输入,第n个数是一,它的前一个数就是(1+1)2,用for循环n次就是第一数,最后输出就可以了。源码:#includeusing namespace std;int main(){ int n,a; while(cin>>n) { a=1; for(int i=1;i<n;i++) { a=(a+1)2; } cout<<a<<endl; } return 0;}小感想:这题关键在找规律,然后循环求值,最后输出就可以了。Problem G输入多组数,求各组数中去掉最大值和最小值后的平均值,各组数的结果以小数形式分行输出。思路形成:我将每一组数定义在一个数组内,将数组排序去掉第一个和最后一个,把剩下的求和取平均值即为结果。用for语句将一组数输入一个数组,用插入排序的方法将数组排序,求出数组中2到n-1的和取平均值,最后保留两位小数按小数形式输出。源码:#include#includeusing namespace std;int main(){ int n,i,j,k,temp,a[100]; double x,v; while(cin>>n) { x=0; for(i=1;i<=n;i++)cin>>a[i]; for(i=2;i<=n;i++) { temp=a[i]; k=1; while(a[k]<=temp&&k<i)k++; for(j=i-1;j>=k;j–)a[j+1]=a[j]; a[k]=temp; } for(int i=2;i<n;i++) { x+=a[i]; v=x/(n-2); } cout<<setprecision(2)<<fixed<<v<<endl; } return 0;}小感想:这个题把分数定义成一个数组,关键就是数组排序,而数组排序时最应注意超时问题。Problem H已有从2开始的递增偶数列,规定长度为n,求每m个的平均值,不足m个以剩余数量求平均值。思路形成:先用for语句输入这个递增数列,分两种情况计算平均值,当数列的个数小于求平均值的个数时,直接按数列的个数求平均值;当数列的个数大于求平均值的个数时,每m个数取一个平均值,我把每m个数分开时用了if条件语句,把整个输入的递增偶数列分成多个m长的数列,取平均值,最后不足m的按实际数求平均值。源码:#includeusing namespace std;int main(){ int n,m,c,k,sum,ans; while(cin>>n>>m) { c=0; sum=0; ans=0; k=0; for(int i=2;;i=i+2) { if(c>=n)break; c++; k++; sum+=i; if(km&&c!=n) { ans=sum/k; cout<<ans<<" "; k=0; sum=0; } if(cn) { cout<<sum/k; } } cout<<endl; } return 0;}小感想:我觉得这个题的难点在,把这n个偶数列分成m个一组,每组求平均值,主要是这个题的情况较多,用到的if语句较多,注意不要判断乱了。还有开始时输入偶数列时,我想了很久不知道怎样输入,因为这个数列没有上限,最后同学告诉我在for语句中不要限定i的范围就可以,又学到了一点。Problem I数据有一定的规律,如同一个斐波那契数列,求第n个数。思路形成:从第四年开始,数据发生变化,所以先定义了前三个数,那么从第四个数开始第i个数就是第i-3个数加上第i-1个数。这样定义一个数组,用循环语句就可以求第n 个数了。当n等于0时,用一个if语句结束循环就可以了。源码:#includeusing namespace std;int main(){ int f[50],i,n; while(cin>>n) { f[1]=1; f[2]=2; f[3]=3; for(i=4;i<=n;i++) { f[i]=f[i-3]+f[i-1]; } if(n0)break; else cout<<f[n]<<endl; } return 0;}小感想:这个题如同一个斐波那契数列,只要找到规律就非常好写了。Problem J 插入排序,在一个有序的序列中插入一个数使新数列仍然有序。思路形成:既然是排序问题,我把原序列看作一个数组,先把新数放进去,再将数组排序,采用了数组的插入排序,最后用for语句输出新数组,同时去除行末的空格。源码:#includeusing namespace std;int main(){ int n,m,i,j,temp; while(cin>>n>>m,n!=0||m!=0) { int a[n]; for(i=0;i<n;i++) cin>>a[i]; a[n]=m; for(i=0;i<=n;i++) { for(j=n;j>i;j–) if(a[j]<a[i]) { temp=a[j]; a[j]=a[i]; a[i]=temp; } } for(i=0;i<=n;i++) { if(i0) cout<<a[i]; else cout<<" “<<a[i]; } cout<<endl; } return 0;}小感想:把数列看作一个数组后,排序问题简单了,起初担心超时问题,提交后发现并没有,看了一下题目发现数量挺少的,以后看题时还要注意数据范围啊。Problem K工资求人民币张数问题。思路形成:我考虑了一种很笨拙的方法,输入工资数,用条件语句依次判断六中人民币的张数,最后汇总输出结果。源码:#includeusing namespace std;int main(){ int a[110]; int n,i; while(cin>>n) { if(n==0)break; int x=0; for(i=1;i<=n;i++) { cin>>a[i]; if(a[i]>=100) { x+=a[i]/100; a[i]%=100; } if(a[i]>=50) { x+=a[i]/50; a[i]%=50; } if(a[i]>=10) { x+=a[i]/10; a[i]%=10; } if(a[i]>=5) { x+=a[i]/5; a[i]%=5; } if(a[i]>=2) { x+=a[i]/2; a[i]%=2; } if(a[i]!=0) x++; } cout<<x<<endl; } return 0;}小感想:这个题主干思想很简单,有一些需要注意的地方,比如n的取值问题,为0时结束循环。最后一元人民币的计数,还有总的人民币张数的计数。Problem L判断是否为回文串。思路形成:要判断是否为回文数,我先定义了一个函数,用来判断是否回文。使用for语句,循环判断的。在主函数中用数组输入字符串,直接引用函数判断是否为回文数,最后按要求输出yes 或no。源码:#include#include<string.h>using namespace std;int fun(char a[]){ int i,k,r=1; k=strlen(a)-1; for(i=0;i<=k;k–,i++) { if(a[i]!=a[k]) { r=0;break; } } return r;}int main(){ char a[20]; int i,n; cin>>n; for(i=0;i<n;i++) { cin>>a; if(fun(a)==0) cout<<“no”<<endl; else cout<<“yes”<<endl; } return 0;}小感想:这个题之前也练习过相似的,还有一种判断方法是,用倒序的方法,把字符串倒过来判断与原字符是否相等,但这个题我发现不太适用,以后看见相似的题也不能固定思维,还要就题思考。Problem M时间的加法问题,两个时间相加,按时间的规则输出。思路形成:将两个时间输入相加求和,秒大于60时,分加1,秒减60;再判断分是否大于60,大于60,时加1,分减60。最后输出时分秒。源码:#includeusing namespace std;int main(){ int n; cin>>n; while(n–) { int ah,am,as; int bh,bm,bs; int h,m,s; cin>>ah>>am>>as; cin>>bh>>bm>>bs; s=as+bs; m=am+bm; h=ah+bh; if(s>=60) { s=s-60; m++; if(m>=60) { m=m-60; h++; } } cout<<h<<” “<<m<<” "<<s<<endl; } return 0;}小感想:这个题处理好时间的规则,就可以了,我觉得没有什么难点。Problem N求a的b次方的后三位整数。思路形成:用循环语句求出a的b次方,结果取余1000,就是后三位。源码:#include using namespace std;int main(){ int a,b,x,i; while(cin>>a>>b,a!=0||b!=0) { x=1; for(i=1;i<=b;i++) x=(ax)%1000; cout<<x<<endl; } return 0;}小感想:这个题按要求输入多组,输0 0 时结束,一个简单的循环就做出来了。Problem O判断两个数是否是亲和数,即一个数的所有真约数之和是否等于另外一个数,同时另一个数的真约数之和等于这个数。思路形成:我定义了一个函数,用于求一个数的真约数之和,在主函数中,直接用if条件句判断两数的真约数之和是否分别等于另一个数,在if语句中输出yes或no。源码:#includeusing namespace std;int sum(int x){ int i; int sum=0; for(i=1;i<x;i++) { if(x%i==0) sum=sum+i; } return sum;}int main(){ int m,a,b,i; cin>>m; for(i=0;i<m;i++) { cin>>a>>b; if((sum(a)==b)&&(sum(b)==a)) cout<<“YES”<<endl; else cout<<“NO”<<endl; } return 0;}小感想:这个题关系到了求真约数,经过多次修改,找到了一种简洁的方法,将原数从1开始循环取余,如果能整除就把i加到sum中,这样循环到原数减一,就可以得到真约数的和了。问题的解决也是可以有巧妙方法的。Problem P 走楼梯:求走上m级楼梯有多少种方法。思路形成:走前三级楼梯分别有0,1,2,种方法,从第四级开始用循环语句,所求的第n级的方法数等于前一级加前两级的方法数。找到规律后用while语句输入,直接求解输出就可以了。源码:#includeusing namespace std;int main(){ int f[41]; int n,m,i; f[1]=0; f[2]=1; f[3]=2; for(i=4;i<41;i++) f[i]=f[i-1]+f[i-2]; cin>>n; while(n–) { cin>>m; cout<<f[m]<<endl; } return 0;}小感想:这个题需要找规律,之前也练习过多次,找到规律后求解就非常简单了。Problem Q兔子以一种方式,乌龟用两种方式,在乌龟用两种方式结合的最佳方式下,进行赛跑,在一定路程中判断乌龟用时是否比兔子少。源码:#include #include #include using namespace std;int main(){ int L,N,C,T,VR,VT1,VT2,p[105]; double tr,time; double dp[1005]; while(cin>>L) { memset(p,0,sizeof§); cin>>N>>C>>T; cin>>VR>>VT1>>VT2; for(int i = 1;i<=N;i++) { cin>>p[i]; } p[N+1] = L; dp[0] = 0; tr = L1.0/VR; for(int i = 1;i<=N+1;i++) { double Min = 99999999; for(int j = 0;j<i;j++) { int x = p[i]-p[j]; if(C>=x) { time = x1.0/VT1; } else { time = C1.0/VT1+(x-C)1.0/VT2; } if(j) time+=T; if(Min>dp[j]+time) { Min = dp[j]+time; } } dp[i] = Min; } if(dp[N+1]>tr) cout<<“Good job,rabbit!”<<endl; else cout<<“What a pity rabbit!”<<endl; } return 0;}小感想: 这个题我看题目时就很困难了,特别是对乌龟的行进方式,再用代码写出来,我是无法独立完成的,这个题最后是在多人的帮助下完成的,我也认识到大佬的能力确实很强,多向别人学习。Problem R输入多行数,一行两个,当某两行的两数相等时,代表可以组合,但已组合的数不能再重复,求最后可以组合几组。源码:#include #include <string.h>#include <math.h>#include <stdlib.h>#define N 1010#define INF 0x3f3f3f3fusing namespace std;int G[N][N],used[N],vis[N],n;bool Find(int u){ int i; for(i = 1;i<=n;i++) { if(vis[i]==0&&G[u][i]!=0) { vis[i] = 1; if(used[i]==0||Find(used[i])==true) { used[i] = u; return true; } } } return false;}int main(){ int k,m,i,a,b,ans; while(cin>>k,k!=0) { ans = 0; memset(G,0,sizeof(G)); cin>>m>>n; while(k–) { cin>>a>>b; G[a][b] = 1; } memset(used,0,sizeof(used)); for(i = 1;i<=m;i++) { memset(vis,0,sizeof(vis)); if(Find(i)==true) { ans++; } } cout<<ans<<endl; } return 0;}小感想:这个题也不在我的能力之内,看着题目挺好理解的,但代码不太会写,求助了同学完成了。Problem S给出一个手机号,输出6加手机号的后五位。思路形成:我把每个号码看作一个数,取余100000后就是号码的后五位,把6乘以100000加上去就是校园短号了,把所有手机号输入数组中,用循环语句把每个号码处理成短号,最后分行输出。源码:#includeusing namespace std;int main(){ int n; long long a,b,t[201]; cin>>n; for(int i=0;i<n;i++) { cin>>t[i]; a=t[i]; b=600000+(a%100000); cout<<b<<endl; } return 0;}小感想:我感觉我的方法很简单粗暴,但是非常好理解,还要注意数据的长度。Problem T给出一个方程,给出数据求方程的解。思路形成:数据是小数形式,所以先定义double类型,因为给出的是a0和an+1,所以在求an时要先得到an-1和cn我用两个循环的方式求得an-1,最后求出an并用小数形式输出。源码:#include#includeusing namespace std;int main(){ int n,i,k,j; double a[3005],c[3005],ans; while(cin>>n) { ans=0; cin>>a[0]>>a[n+1]; for(i=1;i<=n;i++) { cin>>c[i]; } for(j=1,k=0;j<=n;k++,j++) { ans+=((2n-2k)c[j])/(n+1); } ans=na[0]/(n+1)+a[n+1]/(n+1)-ans; cout<<fixed<<setprecision(2)<<ans<<endl; } return 0;}小感想:我不是独立完成的这个题目,一开始我并没有完全理解题目的含义,没有看懂方程的意思,感觉自己的数学思维也不够强,最后还在同学的帮助下完成了题目,体会到编程中数学的思维也是很重要的。Problem U判断给出的数中是否有4或62,有则为不吉利数,没有则为吉利数,最后输出吉利数的个数。思路形成:我用n取余10和n取余100的方式找原数中是否有4或62,先定义一个函数,来找吉利数和不吉利数,主函数中,直接输入n到m,找这个区间内的不吉利数,最后输出总数减去不吉利数。源码:#include using namespace std;int a[1000001] = {0};int zhao(int n){ while(n) { if(n%104||n%10062) return 0; n/=10; } return 1;}int main(){ int n,m,i; for(i = 1;i<1000001;i++) a[i] = a[i-1]+zhao(i); while(cin>>n>>m) { if(n0&&m0) break; cout<<a[m]-a[n-1]<<endl; } return 0;}小感想:这个题我的写法很容易出现超时问题,最后输出时不用循环嵌套两次,一减就可以了。Problem V输出字符三角形。思路形成:输入多组,每组输入字符和数字,在每两组之间加空格,输出三角形的时候,是空心的所以用for循环加空格填充出三角形,具体编程是,从底层向上循环输出,成正三角形。源码:#includeusing namespace std;int main(){ char a; int n=0; int j=0,k=0; while(cin>>a>>n,a!=’@’) { if(k!=0) { cout<<endl; } k++; for(int i=1;i<n;i++) { for(j=0;j<n-i;j++) { cout<<" "; } cout<<a; if(i!=1) { for(j=0;j<2i-3;j++) { cout<<" “; } cout<<a<<endl; } else { cout<<endl; } } for(j=0;j<2n-1;j++) { cout<<a; } cout<<endl; } return 0;}小感想:这个问题要多重循环来解决,在编程时必须要明确的思路,一口气写完才行,不然写写再思考就很容易思路中断,连不起来,之后我还要先在纸上写写草稿。Problem W 给出两数之和和两数之积,判断满足这个条件的数是否存在。思路形成:我为了好判断,先把负数取正,取数的一半进行循环判断两数的乘积,当给出的乘积数被整除时,立即判断除数和被除数的和是否等于给出的和数,相等标志变量1,输出yes。当不相等时,输出no。源码:#include #include using namespace std;int main(){ int a,b,t; while(cin>>a>>b,a!=0||b!=0){ int flag = 0; if(b<0){ t = -b; } else{ t = b; } int m = (int)sqrt(t); for(int i = 1;i<=m;i++){ if(b%i0){ int y = b/i; if(((y+i)a)||((-y-i)a)){ flag = 1; cout<<“Yes”<<endl; break; } } } if(flag0&&b0) cout<<“Yes”<<endl; if(flag0&&b!=0) cout<<“No”<<endl; } return 0;}小感想:这个题我也是改了很多次,才A过的,关键是一些小的判断的地方,很纠结怎么写,我在最后条件语句的判断上就卡了很久,总是不太明白两数一加等于0的情况,最后求助了同学终于明白了。Problem X 给出一个十进制数,判断它的十进制、十六进制、十二进制的四位数之和是否相等。思路形成:求一个十进制数的转换,用一个函数非常方便,我先定义一个函数, 用来求十进制数的转换后的数,在主函数中直接用if判断各进制数的后四位之和是否相等,再按要求输出就好了。源码:#includeusing namespace std;int change(int m,int n){ int sum=0; while(m) { sum+=m%n; m=m/n; } return sum;}int main(){ int n,a,b,c; while(cin>>n,n!=0) { a=change(n,10); b=change(n,12); c=change(n,16); if(ab&&bc) cout<<n<<" is a Sky Number."<<endl; else cout<<n<<" is not a Sky Number."<<endl; } return 0;}小感想:这个题定义了函数后就很简单了,我第一次提交的时候,没有注意n和is之间的空格,导致格式错了,做题还要细心啊。Problem Y把一个偶数拆成两个不同素数的和,统计有几种拆法。思路形成:我还是选择了用函数来判断素数,但在这个题中,复杂一点,先从最小的开始找素数,找到后用给出的偶数做差,再判断差是否为素数就可以了,如果也是素数,计数最后输出。源码:#includeusing namespace std;bool prime(int n){ int i; if(n==2) return true; else if(n>2) { for(i=2;ii<=n;i++) { if(n%i0) return false; } return true; }}int main(){ int a,i,sum; while(cin>>a,a!=0) { sum=0; for(i=2;i<a/2;i++) { if(prime(i)&&prime(a-i)) sum++; } cout<<sum<<endl; } return 0;}小感想:这个题要注意题目要求,两个不同的素数之和。Problem Z一个数知道前几位不知道末两位,但能被某个数整除,求可能的末两位。思路形成:定义一个数组用来存储可能的两位数,用for语句和if语句来循环判断a乘以100加上循环的两位数能否被给出的数整除,能整出就把这个两位数存储在数组中,最后输出时,用固定格式输出。源码:#include#includeusing namespace std;int main(){ int a,b,c[100]={0}; while(cin>>a>>b,a!=0||b!=0) { int k=0; for(int i=0;i<100;++i) { if((a*100+i)%b0) { c[k++]=i; } } int j; for(j=0;j<k-1;++j) printf(”%02d “,c[j]); printf(”%02d\n",c[j]); } return 0;}小感想:我一直喜欢用流的形式输入输出,在输出这个题的时候,如果两位数是零几,则前面的零没法输出,最后改用printf格式输出了。课程设计心得我在大学以前,没有接触过计算机语言,之前就听闻计算机语言不太好学,能力要求很高,亲身体验后才感受到c++语言的魅力,在学习c++语言时心态变化过程有三个阶段:首先一开始,学习编程a+b之类的基本问题,我觉得编程挺有趣的,仿佛一个万能计算机。但学到条件语句和循环语句时,我就感觉有些听不懂,而且题目也变得复杂起来,此时心情就是焦躁的,心态就是得过且过,最后在一周的课程设计后,我又感觉程序是神奇的,对于解决实际问题真的很方便,而且问题对数学思维要求很高,正与我的专业契合,我又产生了兴趣。对我来说,学习c++语言很有挑战性,对学过的编程语言运用也不太熟练,在编程解题时,我总习惯用固定的方式,比如在学习分支结构时,我们学习了if else语句,switch case语句,而我在解题时,大部分会用if else,在很多判断情况时,我就特别容易出错。在学习循环结构时,有while do-while语句,for语句,而我就习惯用for语句,对while语句几乎不用,在程序设计时加强了对while语句的使用。我觉得目前学习的最重要的部分就是条件语句和循环语句,而最有难度的就是语句的嵌套,一个稍有难度的问题,难免会用到很多语句的嵌套,一层一层的嵌套也代表了一步一步的解题思路,在编程时有了明确的解题思路,才能很流畅的写完整个题的程序,程序运行也不会出很多问题。同时我也感受到了一个题的解题思维也很重要,拿到一个题怎样考虑解题方法,就会有怎样的语言程序,如果考虑复杂了,程序就会冗长繁琐,且容易出错,而如果考虑到巧妙方法就会使程序优化,变得简洁易懂,由此我觉得,数学的思维方式一定要灵活,而且做过了这么多的题后,我发现这种优化思维也是可以提升的。一个学期的学习过后,对计算机语言有了一定的认识和自己的体会,看到博客上很多大佬级别的人物的博文,我发现自己学习的只是一些皮毛,只能解决一点简单的问题,稍一复杂我就要思考很长时间,甚至很长时间后也解不出来。我就是一个菜鸟级的,面对编程问题很头疼,但是一周的课程设计,连续做这么多题后,我又感觉挺有趣的,我的能力也提升了许多,今后不管能否会用到这些知识,自己也算是具备了新技能,有了一定的能力。