C语言第三次博客作业---单层循环结构
一、PTA实验作业
题目1
1.实验代码
int n,i;
double height;
char sex; /*height为用户的身高,n为用户的数量,sex为性别,i用来判别循环何时结束*/
i=1;
scanf("%d",&n);
getchar();
while(i<=n){
scanf("%c%lf",&sex,&height);
getchar();
if(sex=='M')
{printf("%.2f\n",height/1.09);}
else
{printf("%.2f\n",height*1.09);}
i++;
}
2 设计思路
- 1、定义用户量n,循环判别数i,用户身高height,性别sex
- 2、i=1
- 3、输入要测的用户数量
- 4、这里输入一个字符(即空格),避免影响下面要输入的性别
- 5、输入性别,身高,再输入一个字符避免影响输入的数据(同上)
- 6、如果性别为男,输出最佳身高(height/1.09),如果性别为女,输出最佳身高(height*1.09),并且i自增1
- 7、当i小于等于n时,跳回步骤5
3.本题调试过程碰到问题及解决办法
- (一)、
这里在循环前没有输入一个字符,影响到了性别的判定,向同学请教才得以发现错误
4.本题PTA提交列表
题目2
1.实验代码
int a,n,i,b; /*a为式子每一项变化的值,b为a变化的过渡量,i循环条件判别量,n为循环次数*/
double s; /*s为各项的累加量*/
i=1;
scanf("%d%d",&a,&n);
b=a;
while(i<=n) {
s=s+a;
a=a+b*10;
b=b*10;
i++;
}
printf("s = %.0f",s);
2 设计思路
- 1、定义a为式子中每一项的值,b为a变化的过渡量,i为循环判别条件,n为循环次数
- 2、定义s为式子结果,因为量可能较大,用double型
- 3、i=1
- 4、输入a,n
- 5、b=a
- 6、s=s+a,a=a+b10,b=b10,i自增1
- 7、当i小于等于n时,跳回步骤6
- 8、输出s
3.本题调试过程碰到问题及解决办法
思考错误,把循环里的式子顺序搞错了,导致输入题目给的数据后少加了刚开始的a值,调试后发现问题并改正完成
4.本题PTA提交列表
这里因为是调试完才在pta上输入答案,所以一次就对了,下面那题也是一样...
题目3
1.实验代码
#include<stdio.h>
int main ()
{
int n,integer,min; /*n为输入的整数个数,integer为输入的整数,min为输入整数中最小的一个*/
scanf("%d",&n);
scanf("%d",&integer);
min=integer;
for(int i=1;i<n;i++) {
scanf("%d",&integer);
if(min>integer)
min=integer;
}
printf("min = %d",min);
2 设计思路
- 1、定义n为输入整数个数,integer为输入的整数,min为最小的一个整数
- 2、输入n
- 3、输入一个整数
- 4、将刚刚输入的整数的值赋给min
- 5、i=1
- 6、输入另一个整数,如果min大于输入的整数,将这个整数的值赋给min
- 7、当i小于n时,跳回步骤6
- 8、输出min
3.本题调试过程碰到问题及解决办法
开头已经输入一个整数了,所以这里i只需小于n即可,否则就要输入n+1个数,通过调试发现此问题并改正
4.本题PTA提交列表
题目4
1.实验代码
int n,number1,number2; /*n为猜数次数,number1为你猜的数,number2为游戏随机产生的数*/
scanf("%d%d",&number2,&n);
for(int i=1;i<=n;i++){
scanf("%d",&number1);
if(number1<0)
{printf("Game Over\n"); break;}
else if (number1<number2 && number1>0)
{printf("Too small\n"); }
else if (number1>number2)
{printf("Too big\n"); }
else
{
if(i==1)
printf("Bingo!\n");
if(i>1 && i<=3)
printf("Lucky You!\n");
if (i>3 && i<=n)
printf("Good Guess!\n");
break;
}
}
if(i>n)
printf("Game Over\n");
2.设计思路
- 1、定义n为猜数次数,number1为用户猜的数,number2为游戏产生的随机数
- 2、输入number2,n
- 3、i=1
- 4、输入你猜的数,如果该数小于0,输出game over,结束循环;如果该数大于0且小于要猜的数,输出too small;
如果该数大于要猜的数,输出too big;如果该数等于要猜的数,当i等于1时,输出bingo!,当i大于1且小于等
于3时,输出lucky you!,当i大于3且小于等于n时,输出 good guess!,之后结束循环 - 5、当i小于等于n时,跳回步骤4
- 6、如果i大于n,输出game over
3.本题调试过程碰到问题及解决办法
-
(一)
第一次没有使用break,导致猜中后后面输入的数据依然进入循环判断 -
(二)
第二次将所有if后面的语句全加上了break,导致判断一次后就退出了循环 -
(三)
第三次发现问题后删了很多break,把小于0情况的也删了,所以导致了输入一个小于0的数后后面的数依然进入循环 -
(四)由于做这道题时dev的调试不知道为什么不能用,所以这道题我是根据pta提交结果,自己的观察,还有向舍友请教才一步步解决的
4.本题PTA提交列表
二、截图本周题目集的PTA最后排名
三、本周学习总结
1.你学会了什么?
- 1、原本对break的语法很有自信,但做了猜数游戏的题目后才发现自己掌握不好,而通过猜数游戏的程序,我对break的应用变得更好了
- 2、本周做题时,我都先在dev上调试再移到pta,通过dev的调试,使提交时的错误更少,也更容易发现问题。甚至有两题我通过dev调试后再提交,一次就正确了,当时其实是很开心的
- 3、本周最满意的地方就是我一些小细节做得较好,基本没有编译错误的情况发生,不过scanf语句中&还是偶尔会漏掉,这点要多注意,争取下次不会再犯这个错误
2.本周的内容,你还不会什么?
- 1、我觉得我对题目的理解力不够,这可能是思维拓展不够宽,或许多做题应该能很好的解决这个问题
- 2、对循环的应用只能说可以,但不能说精通,还需要多多联系循环结构
3.分支结构上机考试总结
- 1、考试中小细节错误多,虽然可以通过调试发现的,但是耽误时间,不过在本周作业中,这个情况大有改善
- 2、最后一题没能在考试中做出来,感到很可惜,毕竟已经部分正确了,而且也看到自己错误的地方,但是时间不够,没能改过来,可能要加快自己的做题速度了,避免真正考试时因为时间影响做题效率
- 3、分支结构算是简单的,没能做到满分很可惜,而循环以及后面的内容越来越难了,希望自己能更加努力,下一次做得比这次更好!!!