C语言第三次博客作业---单层循环结构
一、PTA实验作业
题目1:
1.实验代码
int N,i;/*N为用户数*/
double height,perfect;/*height为用户身高1.0<=height<=3.0,perfect表示最佳身高*/
char sex; /*sex为用户性别*/
i=1;
scanf("%d",&N);/*N为用户数*/
getchar();
while(i<=N){
scanf("%c%lf",&sex,&height);
getchar();
switch(sex){
case 'F':perfect=height*1.09;printf("%.2f\n",perfect);break;
case 'M':perfect=height/1.09;printf("%.2f\n",perfect);break;}
i++;
2.设计思路
- (1)定义整型变量N来存放用户数,用i来控制循环次数,定义浮点型变量perfect来存放最佳情侣身高,height来存放用户的身高,定义字符型变量sex来存放用户性别
- (2)i=1
- (3)输入N的数据
- (4)当i<=N时执行步骤5.6.7.8
- (5)分别输入性别sex变量和用户身高height变量
- (6)当sex为‘F’时,执行步骤7;当sex为‘M’时,执行步骤8
- (7)perfect=height*1.09,输出最佳身高perfect
- (8)perfect=height/1.09,输出最佳身高perfect
- (9)i++
3.本题调试过程碰到问题及解决办法
-
(1)答案错误:未在switch语句里的每个输出分支后加“break;”,导致结果错误
解决方法:语句后添加break退出循环
4.本题PTA实验结果
贴图展示,如图:
题目2.
1.实验代码
int a,n,b,s=0,i=1;//将a的值存在b中
scanf("%d%d",&a,&n);
b=a;
for(i=1;i<=n;i++){
s=s+a;
a=a+b*pow(10,i);
}
printf("s = %d",s);
2.设计思路
- (1)定义整型变量a,n,b,i,s存放和,b存放数字a,i用来控制循环次数
- (2)输入a和n
- (3)b=a
- (4)当i<=n时执行步骤5,否则退出循环并输出
- (5)s=s+a;a=a+b*pow(10,i);
- (6)输出s
3.本题调试过程碰到问题及解决办法
- (1)格式错误:return 0;后粘贴的时候漏了‘}’
- (2)一开始题意理解错误,以为是求a+a2+a3+....a^n求和,结果总是错误,后舍友提醒理解。
- (3)一开始没有定义b,没有将a赋值给b保留原数字
,导致输出结果很大,跟踪变量a发现a的值变化导致错误,添加变量b来存原数字,答案正确
4.本题PTA实验结果
贴图展示,如图:
题目3.
1.实验代码
int n,i,number,min;
scanf("%d",&n);
scanf("%d",&number);
min=number;
for(i=1;i<n;i++){
scanf("%d",&number);
if(min>number)
min=number;
}
printf("min = %d",min);
2.设计思路
- (1)定义整型变量n表示输入数据的个数,i用来控制循环次数,number表示每个输入的数据,min表示最小值
- (2)输入n
- (3)输入number
- (4)min=number
- (5)当i<n时,执行步骤6,7,否则执行步骤8
- (6)输入number
- (7)如果min>number,min=number
- (8)输出最小值min
3.本题调试过程碰到问题及解决办法
- (1)没注意到一开始已经输入一个数据,按习惯写i<=n,结果错误,改成i<n结果正确
4.本题PTA实验结果
贴图展示,如图:
题目4.
1.实验代码
int i,n,mynumber,yournumber;
scanf("%d%d",&mynumber,&n);
getchar();
for(i=1;i<=n;i++){
scanf("%d",&yournumber);
if(yournumber>mynumber){
printf("Too big\n");}
else if(yournumber<mynumber){
if(yournumber>=0){
printf("Too small\n");}
else if(yournumber<0){
printf("Game Over\n");break;}}
else{
if(i==1){
printf("Bingo!\n");break;
}
else if(i>1&&i<=3){
printf("Lucky You!\n");break;
}
else if(i>3&&i<=n){
printf("Good Guess!\n");break;
}
}
}
while(i>n){
printf("Game Over\n");break;
}
2.设计思路
- (1)定义整型变量i,n,mynumber,yournumber,i控制循环次数,mynumber存放随机产生数,yournumber存放猜测数,n存放输入数字个数
- (2)分别输入变量mynumber,n
- (3)当i<=n时,执行步骤4.5.6
- (4)输入变量yournumber
- (5)当yournumber>mynumber时,输出"Too big"并换行
- (6)当yournumber<mynumber时,执行7或8
- (7)如果yournumber>=0,输出“Too small”并换行
- (8)否则,输出"Game Over”并换行,break跳出for循环
- (9)当yournumber=mynumber时,执行步骤10或11或12
- (10)如果i=1,输出"Bingo!"并换行,break跳出for循环
- (11)如果1<i<=3,输出"Lucky You!"并换行,break跳出for循环
- (12)如果3<i<=n,输出"Good Guess!"并换行,break跳出for循环
3.本题调试过程碰到问题及解决办法
-
(1)部分正确:多次部分错误,根据PTA的测试点对程序程序进行调试,一开始没有考虑周全yournumber<mynumber时,yournumber小于0的情况(即输入负数直接退出循环),将小于0单独分出到for循环外,运行结果不正确,后跟踪变量yournumber<0的情况:
,发现错误修改代码后正确 -
(2)编译错误:因为此代码里包含多个括号,提交前没把括号对应好,导致前面正确的代码也错了,检查后修改正确
4.本题PTA实验结果()
贴图展示,如图:
二、截图本周题目集的PTA提交列表及最后排名。
1.PTA提交列表
2.最后排名
三、本周学习总结
1.你学会了什么?
- 我学会了相对熟练的使用嵌套语句,也在反复调试的过程中感受到了崩溃和答案正确的高兴,开始能够耐下心来慢慢调试复杂的代码,沉迷代码世界,用debug寻找错误
- 在做题中逐渐熟练嵌套的用法,开始了解嵌套语句的逻辑,对问题用不同分支来计算结果,需要对每个问题的算法先有个大概的构思再开始做题,思维会清晰一些
2.本周的内容,你还不会什么?
- 对题目意思的理解有待提高,像韩信点兵和a+aa+...那两题题意一开始就理解有误,造成解题思路偏差
- 嵌套语句的使用还不熟练,将问题转化为计算机的逻辑,把每题算法先搞清楚用时很长
3.分支结构上机考试总结。
- 对于诸如break没有添加,==写成=的细节等问题应该在平时做PTA的时候就加以注意,考试就不会因为少了break愁半天(学会调试以后也可以通过调试找毛病)
- 注意输入里面‘空格’也算一个字符,在输入字符的时候要特别小心
- 对成绩不太满意,考试的时候多次因为细节问题求助老师,最后也因为忘记加break退出循环让结果部分正确,写代码用时也比较长,以后要勤加练习,记住在PTA犯的小毛病,并用PTA不断锻炼自己将复杂问题转化为多个分支的嵌套的思维能力