C语言第三次博客作业---单层循环结构
一、PTA实验作业
题目1
1.实验代码
int N;
scanf("%d", &N);//输入用户数N;
for (int i = 0; i < N; i++) {
char sex;//sex表示性别;
float height;//height表示身高;
scanf("\n%c %f", &sex, &height);//输入性别,身高;
if (sex == 'M')
printf("%.2f\n", height / 1.09);//当性别为男性时最佳情侣的身高;
else
printf("%.2f\n", height'1.09);//当性别为女性时最佳情侣的身高;
}
2.设计思路
- (1)定义变量N表示用户数;
- (2)输入用户数;
- (3)定义变量sex表示性别,height表示身高;
- (4)输入性别,身高;
- (5)当sex为M时最佳情侣身高为height / 1.09;当sex为其他时,最佳情侣身高为height'1.09;
- (6)循环执行第2到第5步,直到i==N,结束循环。
3.本题调试过程碰到问题及解决办法
- 问题:答案错误,查阅书籍和上网百度,可能是回车被%c输入,经过调试发现sex不能正常读入性别“M”;
- 解决方法:在scanf语句%c的前面加上换行符\n,此时sex能读入“M”。
4.本题PTA提交列表
题目2
1.实验代码
int a,n,s,A,i;
scanf("%d%d",&a,&n);
A=a;
s=a;
for(i=1;i<=n-1;i++)
{
a=a*10+A;
s=a+s;
}
printf("s = %d",s);
2.设计思路
- (1)定义变量i控制循环,a表示给定的整数,n表示a的个数,s表示和,A用于储存a的值;
- (2)赋初值:A=a,s=a;
- (3)a=a'10+A;
- (4)s=s+a;
- (5)当i<=n-1时重复循环第3,4步;
- (6)直到条件不满足时输出s。
3.本题调试过程碰到问题及解决办法
- 问题:本题未给A,s赋初值导致结果错误
- 解决方法:在循环前,使A=a,s=a,同时因为s的初值为a,需要减少一次循环,即当条件i<=n时不再进入循环。
此时结果能正确输出。
4.本题PTA提交列表
题目3
1.实验代码
int N,n,min,i;
scanf("%d%d",&N,&n);
min=n;
for(i=1;i<N;i++)
{
scanf("%d",&n);
if(n>=min) continue;
if(n<min) min=n; continue;
}
printf("min = %d",min);
2.设计思路
- (1)定义整数N表示整数个数,用n存放整数值,min表示最小值,i用于控制循环;
- (2)赋初值:min=n;
- (3)输入整数n;
- (4)若n>=min则结束本次循环继续下一轮,若n<min,则令min=n,并继续下一轮循环;
- (5)当i=N时条件不满足退出循环,并输出最小值min。
3.本题调试过程碰到问题及解决办法
- 问题:刚开始对循环控制的条件是i<=N,在输入数值时发现要多输入一个数(如图),否则程序无法进行;
- 解决方法:将i<=N改成i<N,因为n在循环外已经输入了一次。
4.本题PTA提交列表
题目4
1.实验代码
int guess,N,i,num,flag;// guess表示系统的随机数,n表示猜测的最大次数,num是玩家猜的数,flag用于控制输出
scanf("%d%d",&guess,&N);
flag=0; //flag为0时表示未猜中,flag为1时表示猜中了
for (i=1;i<=N;i ++)
{
scanf("%d",&num);
if(num<0)
break;//直接退出循环
if(num>guess)
printf("Too big\n");
if(num<guess)
printf("Too small\n");
if(num==guess)
{
if (i==1)
{
flag=1;
printf("Bingo!\n");
break;
}
if (i==2 || i==3)
{
flag = 1;
printf("Lucky You!\n");
break;
}
if (i>3)
{
flag = 1;
printf("Good Guess!\n");
break;
}
}
}
if (flag == 0)
printf("Game Over\n");
2.设计思路
- (1) 定义变量guess表示随机数,N表示猜测的最大次数,i用来控制循环,num表示玩家输入的猜的数,用flag控制输出;
- (2)flag=0,flag为0时表示未猜中,flag为1时表示猜中了;
- (3)输入所猜数值num;
- (4)若num<0,停止循环;
若num>guess,输出Too big;
若num<guess,输出Too small; - (5)重复循环第4步,当i为1时输出Lucky You;当i为2或3时输出Lucky You;当i大于3时输出Good Guess;
- (6)当i>N时结束循环;
- (7)若flag为0,则输出Game Over。
3.本题调试过程碰到问题及解决办法
【本题未遇到困难】
4.本题PTA提交列表
二、截图本周题目集的PTA最后排名。
三、本周学习总结
1.你学会了什么?
- 在循环结构中可以借助变量flag使循环结构更加清晰明了;
- for语句和while语句都能实现循环,当指明了循环次数用for语句更清晰,其他情况多用while;
- while语句中无法确定循环条件时可以用一个特殊的数据作为正常输入数据的结束标志;
- do-while语句无论循环条件的值如何,至少会执行一次循环体;
- break语句强制使循环结束,而continue语句仅仅跳过本次循环中continue后的语句,然后继续下一次循环;
- break语句除了可以中止循环外还可以用于switch语句,而continue语句只能用于循环;
2.本周的内容,你还不会什么?!
- 对于多重循环语句的使用还不熟练;
- 循环输入的次数有时候忘记减一;
- 对如何定义函数还不太明了,还需继续看书。