C语言第三次博客作业---单层循环结构
一、PTA实验作业
题目1:最佳情侣身高差
1.实验代码
int N,i; //N为输入身高和性别的个数 double height; //height表示身高 char sex; //sex表示性别 (height>=1.0&&height<=3.0); (N>0&&N<=10); scanf("%d",&N); for(i=1;i<=N;i++){ scanf("\n%c%lf",&sex,&height); if(sex=='F'){ printf("%.2f\n",height*1.09); } else{ printf("%.2f\n",height/1.09); } }
2.设计思路
- 第一步:首先定义整型变量N,i,双精度浮点型变量height存放身高,字符型变量sex存放性别,输入N的范围1.0<=hight<=3.0
- 第二步:输入N的值
- 第三步:输入性别sex,输入身高hight,变量初始化 i =1
- 第四步:如果输入的sex为F,则输出hight*1.09的值,并保留两位小数;否则,则输出hight/1.09的值,并保留两位小数。i 加一
- 第五步:重复步骤3,直到 i >N
3.本题调试过程碰到问题及解决办法
- 这一题写了各种方法,for语句,while语句,switch语句但还是输出答案等于0.00,后来请教了同学要在输入的地方加上换行符,改成这样scanf("\n%c%lf",&sex,&height);输入的M或者F就不会被空格吸收了。
4.本题PTA提交列表
题目2:特殊a串数列求和
1.实验代码
int a,n,i,s,item; //item用于存放每一项,s用于存放累加和,n用于存放输入的项数 (a,n>0&&a,n<=9); scanf("%d%d",&a,&n); i=1; s=0; item=0; while(i<=n){ item=item+a*pow(10,i-1); s=s+item; i++; } printf("s = %d\n",s);
2.设计思路
- 第一步:定义变量a,n,i,s,item,item用于存放每一项,s用于存放累加和,输入a,n的范围0<a,n<=9
- 第二步:变量初始化 i =1;s=0;item=0并且输入a,n的值
- 第三步:item=item+a*pow(10,i-1); s=s+item; i++;
- 第四步:重复步骤3,直到 i >N
- 第五步:输出s的值
3.本题调试过程碰到问题及解决办法
- 本题没有太大的问题,在最开始思考的时候没有引进变量item,后来思考了几分钟想到公式就正确了。
4.本题PTA提交列表
题目3:找出最小值
1.实验代码
int n,i,number,min; //min为最小值,number为输入的数值,n为输入number的个数 (n>0); scanf("%d",&n); scanf("%d",&number); min=number; for(i=1;i<n;i++){ scanf("%d",&number); if(number<min) min=number; } printf("min = %d\n",min);
2.设计思路
- 第一步:定义整型变量i,n,number,min,n>0
- 第二步:输入n的值,和一个number的值,并且将number的值赋给min
- 第三步:再输入一个number,如果number>min,则把number的值再赋给min,i++;
- 第四步:重复步骤3,直到i>=n
- 第五步:输出miin的值
3.本题调试过程碰到问题及解决办法
- 把提示放进了循环里,输出了多个Enter marks:看到与题目输出不符,就把printf调了出去,然后devc++上对了pta还是答案错误,后来想到题目给出的输出格式里只有min等于多少,就把所有的输出提示都删掉了就对了。
4.本题PTA提交列表
题目4:猜数字游戏
1.实验代码
int yournumber,mynumber,N,count; //mynumber用于存放被猜数,yournumber用于存放用户输入的数,N为yournumber最多输入的次数 scanf("%d%d",&mynumber,&N); for(count=1;count<=N;count++){ scanf("%d",&yournumber); if(yournumber<0){ printf("Game Over\n");break; } else if(yournumber>mynumber&&count<=N)printf("Too big\n"); else if(yournumber<mynumber&&count<=N)printf("Too small\n"); else if(yournumber==mynumber){ if(count==1){ printf("Bingo!\n"); break; } if(count==2||count==3){ printf("Lucky You!\n"); break; } if(count>3&&count<=N){ printf("Good Guess!\n"); break; } } } if(yournumber!=mynumber&&count>N)printf("Game Over");
2.设计思路
- 第一步:定义变量 mynumber,yournumber,i,N。
- 第二步:输入变量mynumber和N的值,mynumber表示系统随机产生数,N控制循环次数。
- 第三步:进入循环语句判断输入的数与系统随机产生数的大小,如果在第一次就猜中就输出Too big,在前三次猜中就输出Lucky You!,在规定次数内猜中就输出Good Guess!,如果太大就输出Too big,太小就输出Too small,在游戏次数超过或者输入超出范围就输出Game Over。
3.本题调试过程碰到问题及解决办法
- 这题真的是印象深刻,devc++上的运行是对的,但是改了好几次提交了一直都只有一分,然后就一直修改,最后问了同学之后才发现,一直没有关注输入的顺序,mynumber与N输入顺序调换了,应该先mynumber再N。在当i>N时输出的game over也在循环外,可是就算在循环里面也是运行正确的,最后我还是把输出语句放到了循环外。如图
4.本题PTA提交列表
二、截图本周题目集的PTA最后排名。
PTA排名
提交列表
三、本周学习总结
1.你学会了什么?
- 学会了for语句循环,在约分最简分式那一题打破了惯性思维(惯性只使用i=1;i<=n;i++)。学会了字符型变量的输入,要注意回车和空格,回车空格也算字符,否则需要输入的字符就会被空格或者回车代替。
- 会在恰当的位置使用break结束循环。
- 学会了利用devc++进行简单的调试,根据输入数据的变化找出出错的地方。
2.本周的内容,你还不会什么?
- 比较复杂的题目错了还是对调试比较不懂,自己的思路很难理清
- do-while语句很少用,可能是不太判断,所以经常都是用while或者for语句
- 对于没有输入的题目,像那个韩信点兵的题,就感觉会很吃力,但是这种例型我觉得多做做就会懂得的。
3.分支结构上机考试总结。
(1)哪些地方错了,为什么?
- 那个输出时间的,最开始把12点也减去了12,然后加上PM,因为我看题目认为中午12点单位是PM,就把它跟下午的时间放在一起,导致答案错误
(2)后续要怎么找程序错误?
- 后续我想多利用一下调试,看看具体是哪一步出的问题导致答案错误,再进行修改。并且多练习调试。
(3)对自己成绩满意么?不满意的话要怎么改进?
不满意。调试还是不太会,不知道在哪里断点比较好,有的时候就只会干看着,然后自己觉得哪里不对再去修改,并且打代码太慢,都很浪费时间。向同学请教,并且经常使用调试来寻找错误,然后打字练练练。