C语言第三次博客作业---单层循环结构
一、PTA实验作业
题目1
1.实验代码
int N,i;//N为用户数,i为循环变量
double height_in,height_out;//输入和输出的身高
char ch;//判断符,F为女,M为男
scanf("%d",&N);
for(i=1;i<=N;i++){
scanf(" %c%lf",&ch,&height_in);
switch(ch){
case 'F':
height_out = 1.09*height_in;
break;
case 'M':
height_out = height_in/1.09;
break;
}
printf("%.2f
",height_out);
}
2 设计思路
- 1.定义变量:int类型变量N为用户数,i为循环变量;double类型变量height_in和height_out作为输入和输出的身高,字符型变量ch作为判断符,F为女,M为男。
- 2.输入用户数N。
- 3.i=1
- 4.若i<=N,重复步骤5到8。
- 5.输入字符ch和身高。
- 6.判断ch:若ch为F,height_out = 1.09*height_in;若ch为M,height_out = height_in/1.09。
- 7.输出保留两位小数的height_out。
- 8.i++
3.本题调试过程碰到问题及解决办法
-
字符与数字混合输入,每个值无法精确给到。
解决方法:在第二个输入的%c前加了一个空格,用于吸收回车,否则回车会以字符形式给到ch,ch就无法得到F或M。
4.本题PTA提交列表
题目2
1.实验代码
int a,n,i;//a为每一项重复的数字,n为项数,i为循环变量
int sum = 0;//变量初始化
int item = 0;
scanf("%d%d",&a,&n);
for(i=1;i<=n;i++){
item = item*10+a;//计算每一项
sum = sum + item;//累加每一项
}
printf("s = %d",sum);
2 设计思路
- 1.定义int类型变量a,n,i,sum和item,a为每一项重复的数字,n为项数,i为循环变量,sum和item初始值均为0。
- 2.输入a和n
- 3.i=1
- 4.若i<=n,重复步骤5到7
- 5.item = item*10+a
- 6.sum = sum + item
- 7.i++
- 8.输出sum。
3.本题调试过程碰到问题及解决办法
-
刚开始为设置item变量,直接累加到sum里面,导致结果错误。解决方法:设置了item,计算每项的值再累加。
-
调试结果:
4.本题PTA提交列表
题目3
1.实验代码
int i,n,min,num;//i为循环变量,n为输入数据个数,num为输入数据
scanf("%d",&n);
scanf("%d",&num);
min=num;//将第一输入的值给min,为暂定最小值
for(i=1;i<=n-1;i++){
scanf("%d",&num);
if(min<=num)//每一轮输入的num与min比较,最小值给min
min=min;
else
min=num;
}
printf("min = %d",min);
2 设计思路
- 1.定义int变量i,n,min,num,i为循环变量,n为输入数据个数,num为输入数据。
- 2.输入n和num
- 3.min=num
- 4.i=1
- 5.若i<=n-1,重复步骤6到8
- 6.输入num
- 7.若min<=num,min=num,否则min=min
- 8.i++
- 9.输出min
3.本题调试过程碰到问题及解决办法
-
本题第一次提交时为如下代码:
虽然结果也正确但是有点取巧,所以改为现在的样子。
-
调试过程:
4.本题PTA提交列表
题目4
1.实验代码
int yournum,time,guessnum,i;//yournum表示输入数据,time表示输入次数,guessnum为被猜数,i为循环变量
int count = 0;//计数器初始化
scanf("%d%d",&guessnum,&time);
for(i=1;i<=time;i++){
scanf("%d",&yournum);
count++;//计算输入次数
if(yournum==guessnum&&count==1){
printf("Bingo!
");
break:
}//如果1次猜出该数,提示“Bingo!”
else if(yournum==guessnum&&count<=3){
printf("Lucky You!
");
break;
}//如果3次以内猜到该数,则提示“Lucky You!”
else if(yournum==guessnum&&count>3){
printf("Good Guess!
");
break;
}//如果超过3次但是在N(>3)次以内(包括第N次)猜到该数,则提示“Good Guess!”
else if(count>time){
printf("Game Over
");
break;
}//如果超过N次都没有猜到,则提示“Game Over”,并结束程序。
else if(0<yournum){//提示大了(“Too big”),还是小了(“Too small”)
if(yournum<guessnum)
printf("Too small
");
else if(yournum>guessnum)
printf("Too big
");
}
else if(yournum<0){
printf("Game Over
");
break;
}//如果在到达N次之前,用户输入了一个负数,也输出“Game Over”,并结束程序。
}
if(yournum!=guessnum&&count==time){
printf("Game Over
");
}//补充最后一次没猜对仍输出提示大小,然后才输出“Game Over”,并结束程序。
2 设计思路
- 1.定义变量yournum,time,guessnum,i,count,yournum表示输入数据,time表示输入次数,guessnum为被猜数,i为循环变量,count计算输入次数,初始值为0
- 2.输入guessnum和time
- 3.i=1,若i<=time,重复步骤4到12
- 4.输入getnum
- 5.count++
- 6.如果yournumguessnum&&count1,输出Bingo!并换行。
- 7.如果yournum==guessnum&&count<=3,输出Lucky You!并换行。
- 8.如果yournum==guessnum&&count>3,输出Good Guess!并换行。
- 9.如果count>time,输出Game Over并换行。
- 10.如果0<yournum,判断如果yournum<guessnum,输出Too small并换行。如果yournum>guessnum,输出Too big并换行。
- 11.如果yournum<0,输出Game Over并换行。
- 12.i++
- 13.如果yournum!=guessnum&&count==time,输出Game Over并换行。
3.本题调试过程碰到问题及解决办法
- 本题条件复杂,循环里面和外面都要考虑到多种情况,而自身的测试数据不够很多隐藏的条件没有注意到。解决方法:放到pta里一遍遍测试,慢慢补充条件直到最后通过。
4.本题PTA提交列表
二、截图本周题目集的PTA最后排名。
三、本周学习总结
1.你学会了什么?
- 本周通过做pta题目,能更加熟练的使用循环语句了。
- 对字符及数字的混合输入有了进一步的认识,输入数字后跟的空格会被%c接受,要能准确输入字符要在%c前加一个空格,相当于留一个位置给空格,之后输入的字符才能被%c吸收。
- 学到了循环的嵌套,可以套判断,也可以套循环。
2.本周的内容,你还不会什么?
对于循环嵌套还不是很熟练,其他的内容基本上都会了。