一、PTA实验作业
题目1:6-4 400~499 中4出现的次数
1. 本题PTA提交列表
2. 设计思路
- 第一步:自定义函数int fun(int x),函数名为 fun(),返回值为整型,输入的数值为整型;
- 第二步:定义变量count表示4的个数,ge,shi,bai分别表示个位数,十位数,百位数;
- 第三步:bai=x/100;shi=x/10%10;ge=x%10;
- 第四步:如果bai=4,count++;如果shi=4,count++;如果ge=4,count++;
- 第五步:返回结果count。
3.本题调试过程碰到问题及PTA提交列表情况说明
- 碰到的问题:取出各个位置上的数时出错十位上的数字应该为shi=number/10%10;忘记将结果返回,导致答案错误;
- 解决方法:用scanf语句自己输入一个数值,再用调试找出十位上的数值计算错误;至于返回值纯属疏忽,加上返回值后得到正确答案。
题目2:6-7 使用函数输出指定范围内的完数
1. 本题PTA提交列表
2. 设计思路
- 第一步:自定义函数int factorsum( int number ),函数名factorsum( ),返回值为整型,输入数据number为整型;
- 第二步:定义变量i,total=0;
- 第三步:如果number==1,返回结果为1;否则进入循环for(i=1;i<number;i++);
- 第四步:如果number%i==0,total=total+i;
- 第五步:重复3,4,直到i=number,如果循环结束后total==number,返回total;
- 第六步:自定义函数void PrintPN( int m, int n ),函数名为 PrintPN( ),函数无返回值,输入m,n为整型;
- 第七步:定义变量i,j,r,sum=0,flag=0,
- 第八步:如果m==1;printf("%d = %d ",m,m),flag=1;
- 第九步:否则进入循环for(i=m;i<=n;i++),如果factorsum(i)i,sum=0; flag=1,并进入子循环for(j=1;j<i;j++),如果i%j0,sum=sum+j;
- 第十步:重复执行步骤九,直到条件不成立;
- 第十一步:如果sumi,printf("%d = ", i);并输出第一个因子1;进入循环for(r=2;r<i;r++),如果i%r0,printf(" + %d",r);循环结束后输出一个换行符;
- 第十二步:如果flag==0,输出No perfect number。
3.本题调试过程碰到问题及PTA提交列表情况说明
- 一开始factorsum( )函数里的返回值弄错了,导致只能返回1或者0;
- 当i=28的时候,循环到了sum=28时,也就是sum=i时并没有跳出执行if(sum==i)的语句,后面经过调试,在每次大循环后没有将sum的值赋为0,导致下一次的计算错误,从而结果不对;
- 当输入的数为空集时没有考虑,导致结果没有完全正确,后来加了一个flag变量,令flag初始值为0,如果输出数据可行,flag=1,;否则flag=0,当flag=0时就是表示空集的时候。
题目3:7-1 求组合数
1. 本题PTA提交列表
2. 设计思路
主函数:
- 第一步:定义整型变量m,n,浮点型变量C;
- 第二步:输入m,n;
- 第三步:C=fact(n)/(fact(m)*fact(n-m));
- 第四步:输出C;
自定义函数:
- 第一步:定义函数double fact(int n),函数名fact(),返回值为double型,输入n为整型;
- 第二步:定义浮点型变量i=1,result=1;
- 第三步:进入循环for(i=1;i<=n;i++)
- 第四步: result=result*i;
- 第五步:重复步骤三、四;
- 返回result值。
3.本题调试过程碰到问题及PTA提交列表情况说明
- 一开始,定义函数里变量i和result定义成整型,导致结果部分正确;
- 最后输出的结果不带小数,我原先定义C为double型,在输出时用了“%f”,导致答案错误,应该用“%.0f”;
二、同学代码结对互评
2.我的代码、互评同学代码截图
我的:
李梦冰的:
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题
- 不同点:我是直接算出它个,十,百的数字,然后再判断它们是不是等于4;而梦冰的代码用了while循环,循环一次判断一次;
- 优劣:她的代码更简洁,而且代码量少,可执行的数字比较广;而我的代码仅仅限制在三位数里面,代码量较大,效率比较低,比较适合脑子不太灵活的人。
三、截图本周题目集的PTA最后排名
四、本周学习总结
1.你学会了什么?
- C语言有三种基本数据类型为整型,实型,字符型。整型,包括short, int, long等;实型,即浮点型,包括float, double等;字符型,即char型,用来表示各种字符,与ascii码表一一对应;
- 输入字符型数据时不要有空格或者其他隔开,因为回车等其他符号会被当成变量输入;
- 自增自减符号,如i++,++i,i--,--i,注意无论是前缀还是后缀,i自增后的值就是i+1,自减后的值就是i-1,而表达式i++的值为原来的值,++i的值为自增后的值,自减的表达式类似也是如此;
- 课堂派中有一题自增的做错了, 原因是忽略了每次自增,变量的值都会变,而不是原来的那个值;
- 学会了用函数解决一些问题。
2.本周的内容,你还不会什么?
- 对于运算符的优先级还不是太熟悉,对一些一大窜的表达式分析它的结果还很晕,经常出错;
- 对一些有关字符型的编程题比较不会,比如上级考试的最后一题;
- 对三种数据类型的应用还不是很了解,特别是short和long;
- 函数题中,对那些逻辑性强的题目还是想不明白,算法不是很清楚。
3.循环结构考试总结
1.哪题做错了,怎么改?
- 第三题做错了,原因在于,我将判断它是素数的if语句放在了循环的里面,导致每个数最后都会输出,而正确的做法是放在循环外面,因为,要将所有数都判断完才能确定它是不是素数;以下是我原来的代码和改正后的代码
- 第四题因为对二进制的数比较陌生,而且时间不够所以没做;
- 第五题输出结果有错,部分正确,提示开头结尾多空格,到现在还没有改正过来,以下是我的代码
2.考试结果满意么,怎么改进?
- 不满意,我的目标是及格,因为上次上机考试我不及格了,但是很遗憾我这次还是不及格,上次我给自己总结出的结论是花的时间太少,然后近阶段花的时间多了,效果还是不明显,所以我不得不反思是不是自己的学习方法有问题,所以我不再把这次的不及格定义为失利,而要定义为失败,因此我觉得应该寻找适合自己的学习方法,不要让自己花了和别人一样多的时间,却没有得到像别人一样的效果。