C语言第三次博客作业---单层循环结构
一、PTA实验作业
题目1
1.实验代码
int N,i;
char ch1,ch2;//ch2存放性别
double Height,Height1; //Height为情侣的标准身高,Height1为计算者身高
scanf("%d",&N);
for(i=1;i<=N;i++){
ch1=getchar(); //吸收换行符
ch2=getchar();
scanf("%lf",&Height1);
switch(ch2){
case 'F':
Height=Height1*1.09;
printf("%.2f\n",Height);
break;
case 'M':
Height=Height1/1.09;
printf("%.2f\n",Height);
break;
}
}
2.设计思路
- 第一步:定义两个整数变量N,i,定义两个字符型变量ch1,ch2,ch2用来存放性别,ch1用来存放换行符,定义两个双精度浮点型变量,Height,Height1。
- 第二步:输入N。
- 第五步:i=1。
- 第六步:输入ch1,ch2,Height。
- 第七步:用switch语句判断ch2,若为F 则Height=Height1*1.09,并输出Height,并保留两位小数。
- 第八步:若为M,则 Height=Height1/1.09,并输出Height,并保留两位小数。
- 第九步:i++。
- 第九步:循环第六步,直到i大于N。
3.本题调试过程碰到问题及解决办法
-
(1)在运行过程中发现循环第二次不能输入数据,通过调试监测ch2,我发现ch2会自动变成别的数据,解决方法:通过输入ch1存放换行符,使得ch2可以正确存放数据。
-
(2)在运行中发现输入什么都没有结果,通过调试监测ch2发现是漏了''。
4.本题PTA提交列表
题目2
1.实验代码
int i,a,n,s,vaule;//vaule用来存放a的初值
s=0;
scanf("%d%d",&a,&n);
vaule=a;//给vaule赋值
for(i=1;i<=n;i++){
s=s+a;
a=a*10+vaule;
}
printf("s = %d",s);
2.设计思路
- 第一步:定义五个整形变量i,a,n,s,vaule,其中vaule用来存放a的初值。
- 第二步:s=0,输入a,n,vaule=a,i=1。
- 第三步:s=s+a。
- 第四步:a=a*10+vaule。
- 第五步:i++。
- 第六步:循环第三步,直到i大于n。
- 第七步:输出s。
3.本题调试过程碰到问题及解决办法
- (1) 本题没有遇到什么问题,主要是a的值如何求出比较困难,但想一会儿就能解决。
4.本题PTA提交列表
题目三
1.实验代码
int i,n,min,number;//number存放输入数,min用来存放最小值
scanf("%d",&n);
scanf("%d",&number);
min=number;/*初始化min,让它的值为number */
for(i=1;i<=n-1;i++){
scanf("%d",&number);
if(number<=min)min=number; /*判断number和min的大小关系,选出最小值 */
}
printf("min = %d",min);
2.设计思路
- 第一步:定义四个整数变量i,n,number,min。
- 第二步:输入n和number, min=number,i=1。
- 第三步:输入number,如果number小于等于min,那么min=number。
- 第四步:循环第三步,直到i大于n-1。
- 第五步:输出min。
3.本题调试过程碰到问题及解决办法
- (1)本题较为简单,主要是一开始min的取值比较困难,所以错误几次。
4.本题PTA提交列表
题目四
1.实验代码
int number,i,N,yournumber; //number表示系统随机产生数,yournummber表示猜的数
scanf("%d%d",&number,&N);
for(i=1;i<=N;i++){
scanf("%d",&yournumber);
if(yournumber<0) {printf("Game Over");//判断yournumber的值是否小于0
break;
}
else if(yournumber>number) printf("Too big\n");//对比yournumber和number的大小关系
else if(yournumber<number) printf("Too small\n");
else if(yournumber==number&&i==1) {printf("Bingo!");
break;
}
else if(yournumber==number&&i>1&&i<=3) {printf("Lucky You!");
break;
}
else if(yournumber==number&&i>3) {printf("Good Guess!");
break;
}
}
if(yournumber!=number&&i>N) printf("Game Over");
2.设计思路
- 第一步:定义number,,i,N,yournumber,number用来存放系统产生数,yournumber用来存放猜的数。
- 第二步:输入number,N,i=1。
- 第三步:如果yournumber小于0,输出Game Over,并退出循环。
- 第四步:否则如果yournumber大于number,输出Too bif并还行。
- 第五步:否则如果yournumber小于number,输出Too small,并还行。
- 第六步:否则如果yournumber等于number而且i等于1,输出Bingo!,并退出循环。
- 第七步:否则如果yournumber等于number而且i大于1而且i小于等于3,输出Lucky You!,并退出循环。
- 第八步:如果yournumber等于number而且i大于3,输出Good Guess!,并退出循环。
- 第九步:i++。
- 第十步:循环第三步,直到i大于N。
- 第十一步:如果yournumber不等于number并且i大于N,输出Game Over。
3.本题调试过程碰到问题及解决办法
- (1)输入yournumber小于0,循环没有结束,解决方法:在这种情况后面打break
- (2)审题出错,超过N次结束循环,我第N次也结束了循环
- (3)错把if(yournumber!=number&&i>N) printf("Game Over");写在循环体里,通过调试发现进不去这个if,发现循环的条件是i小于等于N,找了很久,解决方法:认真审题,将这段写在for外。
4.本题PTA提交列表
二、截图本周题目集的PTA最后排名
三、本周学习总结
1.你学会了什么?
学会了新的循环体,while 以及do-while,格式为 while(进入循环条件){循环体},do{循环体}while(循环条件);。两种区别在于,while会先判断在进入循环,do-while先循环一次在判断。while与do-while 跟for的区别为for只能控制循环次数,而while和do-while适用面更广,本周还学了嵌套循环,用以解决更复杂的问题。对于分支结构,掌握的更加透彻。
2.本周的内容,你还不会什么?
对于嵌套循环的运用,掌握的不够深刻,做起题来还有点吃力,对于带有循环体的题目的算法写的不够好,总是带有主观性。