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不断锻炼自己将复杂问题转化为多个分支的嵌套的思维能力
posted @ 2017-11-02 19:55  evfun  阅读(198)  评论(3编辑  收藏  举报