一、PTA实验作业
题目1(7-2)
1.实验代码
int i,N;/*i循环,N为用户数*/
double height,height1;/*,height2,height1为男身高,height2为女身高*/
char ch;
scanf("%d",&N);
for(i=1;i<=N;i++){
scanf(" %c%lf",&ch,&height1);
switch(ch){
case'M':height=height1/1.09;break;
case'F':height=height1*1.09;break;
}
printf("%.2f
",height);
}
2 设计思路
- 第一步:定义整型变量i为循环条件,N为用户数,双浮点变量height表输出身高,height1表示应输出的身高;字符型变量char;
- 第二步:输入用户数N;
- 第三步:for循环开始:for(i=1;i<=N;i++);
- 第四步:循环内使用switch()来选择男女;
- 第五步:若为F 则Height=Height1*1.09,break,若为M,则 Height=Height1/1.09,break;
- 第六步:输出height,保留两位小数;
3.本题调试过程碰到问题及解决办法
- (1)字符与数字混合输入,只添加了一个N数值后就没法到下一步,其他监测不了,没有变化;
解决方法:看其他同学也有遇见此类问题咨询,原来在第二个输入的%c前需要加一个空格,来吸收回车,否则回车会以字符形式给到ch,ch就无法得到F或M,咨询解决;
- (2)直接跳过了循环
解决方法:取好断点位置,一般不取输入语句;
4.本题PTA提交列表
题目2(7-5)
1.实验代码
{
int i,a,n,s,j,item;
scanf("%d %d",&a,&n);
j=1;
s=0;
item=j*a;
for(i=1;i<=n;i++){
s=s+item;
item=(item*10)+a;
}
printf("s = %d",s);
return 0;
}
2 设计思路
- 第一步:定义整型变量i,a,n,s,j,item;
- 第二步:输入给定的a,n的值;
- 第三步:初始化j=0,s=0,item=j*a;
- 第四步:进入for循环,for(i=1;i<=n;i++);
- 第五步:s=s+item;
- 第六步:item=(item*10)+a;
- 第七步:重复第四步,直到i>n,结束循环,跳出;
- 第八步:按题目格式输出s;
3.本题调试过程碰到问题及解决办法
- (1)之前item=a;item=item+(item*10);
解决:重新审题,理解题目意思,要求编写程序求a+aa+aaa++⋯+aa⋯a(n个a)之和;
4.本题PTA提交列表
题目3(7-7)
1.实验代码
{
int i,n,min,number;
scanf("%d
",&n);
scanf("%d",&number);
if(n==0||n==1)
min=number;
for(i=1;i<=n;i++){
scanf("%d",&number);
if(min>number)
min=number;
break;
if (min<number)
min=min;
}
printf("min = %d",min);
return 0;
}
2 设计思路
- 第一步:定义四个整形变量i,n,min,number;
- 第二步:输入n表输入数个数的多少;
- 第三步:输入数字number;
- 第四步:判断特殊情况if(n==0||n=1),min=number;
- 第五步:进入for循环for(i=1;i<=n;i++),再输入一个数与一开始输入数比较;
- 第六步:if(min>number) min=number,if (min<number) min=min;
- 第七步:重复第六步,直到i>=n;
- 第九步:按题目要求格式输出最小值printf("min = %d",min);
3.本题调试过程碰到问题及解决办法
- (1)部分正确,提示1&&0,后来自己慢慢思索,调试发现少了1,0两种特殊情况没考虑到,解决;
- (2)无法进行下一步,错误:
解决方法:源文件未编译,先重编译;
4.本题PTA提交列表
题目4(7-9)
1.实验代码
int main(){
int i,N,number,yournumber;/*number存放电脑随机数*/
scanf("%d %d",&number,&N);
for(i=1;i<=N;i++){
scanf("%d",&yournumber);
if(yournumber<0){
printf("Game Over");
break;
}
else if(yournumber>number)
printf("Too big
");
else if(yournumber<number)
printf("Too small
");
else if(yournumber==number&&i==1){
printf("Bingo!
");
break;
}
else if(yournumber==number&&i>1&&i<=3){
printf("Lucky You!
");break;}
else if(yournumber==number&&i>3&&i<=N){
printf("Good Guess!
");break;}
}
if(yournumber!=number&&i>N){
printf("Game Over
");}
return 0;
}
2 设计思路
- 第一步:定义四个整形变量i,N,number,yournumber;
- 第二步:输入被猜数number和最大猜测次数N,scanf("%d %d",&number,&N);
- 第三步:进入for循环 for(i=1;i<=N;i++);
- 第四步:输入猜的数yournumber;
- 第五步:判断yournumber是否为负数,若为负数,则输出Game Over;
- 第六步:若不为负数,判断输入的数yournumber和被猜数number的大小关系;
- 第七步:如果yournumber<number,输出Too Small;
- 第八步:如果yournumber>number,输出Too Big;
- 第九步:如果yournumber=number,判断用户所用的次数,若i=1,则输出Bingo!;
- 第十步:如果i>1&&i<=3,则输出Lucky You!;
- 第十一步:如果i>3&&i<=N,则输出Good Guess!
- 第十二步:如果i>N,则输出Game Over!;
3.本题调试过程碰到问题及解决办法
- (1)进不去循环
解决方法:每个if后面都要加上{ }和break;使它能执行进去下一条语句;
4.本题PTA提交列表
二、截图本周题目集的PTA最后排名
三、本周学习总结
1.你学会了什么?
- (1) do while和while循环结构的运用,do属于直到型循环,是先执行后判断是否继续循环还是结束然后输出;while是先判断再执行;
- (2) while与for的相同点与差别,它们都可以实现循环,但是for一般用于已经知道循环次数的题,while可使用的范围会更广;
- (3)break、continue两个的各自作用:break语句强制循环结束,continue语句跳过循环体中该句话后面内容,继续下一次循环;
- (4)学会了嵌套循环(即多重循环),大循环中嵌套了小循环,在使用这个时要注意外循环与内循环的区别,要把累加的变量放对位置;
2.本周的内容,你还不会什么?
- (1)本周循环结构的知识是学习了也在具体写代码时大部分可以懂得使用,但有时会纠结使用哪个来循环比较好,对题来说都可以的时候就会更偏向for循环,对另外的不熟,使用还不是很清晰;
- (2)老师在讲课时有复习到前面课时的getchar(),putchar()这些发现还不是很能掌握;
- (3)本次PTA里有用到辗转相除法,这个不是很清楚,不会进行编程使用;
3.分支结构上机考试总结
- (1)首先,这次的上机考试很糟糕,没有在规定时间内答完题,而且做出来的题目也很少,几乎没分数;
- (2)记忆最深的就是几题都是scanf()里的&忘记,使程序错误,后来当天晚上才发现这个问题;
- (3)本身的程序就是错误的,或者没思路;
- (4)造成这样的原因:平时代码独立完成的不够,致使在不借助任何工具情况下没法正确完成,平时在写代码时总喜欢看着书敲,基本上没有自己的思考过程,某些模板书上都有就会不自觉看书,遇到问题也很少自己思考哪里错了,就去找同学帮忙·····这些都是平时应该努力一点点改过来的;
- (5)在本周学会了调试,可以更清楚的知道自己的错误,尤其是些细节方面,这个调试需要多多使用,让平时完成代码效率提高;