C语言第三次博客作业---单层循环结构

一、PTA实验作业

题目1

1.实验代码

#include<stdio.h>
int main()
{
	int i,N;//N表示查询的用户数
	double height1,height2;//height1表示该用户的身高,height2表示该用户的最佳情侣身高
	char ch;
	(N>0&&N<=10);
	(height1>=1.0&&height1<=3.0);
	scanf("%d",&N);//输入用户数
	scanf("%c %lf\n",&ch,&height1);//输入性别和身高
	for(i=1;i<=N;i++){
		scanf(" %c %lf",&ch,&height1);	
		switch(ch){
			case 'M':height2=height1/1.09;break;//查询用户为男性时
			case 'F':height2=height1*1.09;break;//查询用户为女性时
		}
		printf("%.2lf\n",height2);//输出最佳情侣身高
	}

2.设计思路

-第一步:定义整型变量i,N;定义浮点型变量height1,height2;定义字符型变量ch
-第二步:给出N的范围为(0,10],身高的范围为[1.0,3.0]
-第三步:输入用户数、性别和身高
-第四步:当i<=N时进入循环,如果用户为男性:height2=height1/1.09,如果用户为女性:height2=height1*1.09
-第五步:i=i+1;
-第六步:重复步骤3、4、5直到i>N时结束循环,输出height2

3.本题调试过程碰到问题及解决办法




两次查询输出的最佳情侣身高都是第一个用户的最佳情侣身高,利用dev c++调试时发现第二次进入不了switch语句,经过仔细思考后,知道了是因为回车被当成了第二次的字符型变量,在for循环体的scanf语句中(" %c %lf",&ch,&height1)的%c前面加上空格后,问题得到了解决

4.本题PTA提交列表

题目2

1.实验代码

	int i,a,n,s,item,sum;//i表示循环的次数,n表示一个数最多有n个a,item表示每次不同的a数列,sum表示总和
	(a>0&&a<9);//给出a的取值范围
	(n>0&&n<9);//给出n的取值范围
	s=0;
	item=0;
	sum=0;
	scanf("%d %d",&a,&n);
	for(i=1;i<=n;i++){
		item=a+item*10;//表示每次不同的a数列
		sum=sum+item;//将数列累加起来
	}
	printf("s = %d",sum);//输出总和

2.设计思路

-第一步:定义整型变量i,a,n,s,item,sum
-第二步:给出a,n的取值范围(0,9)
-第三步:s=0,item=0,sum=0
-第四步:输入a,n的值
-第五步:当i小于n时进入循环,item=a+item*10;sum=sum+item;
-第六步:重复步骤5,直到i>n时结束循环
-第七步:输出总和

3.本题调试过程碰到问题及解决办法

一开始没有思路要如何实现输出a,aa,aaa这种形式的数字,后来想到老师布置的作业中有一题类似的题目
由此得到启发

4.本题PTA提交列表

题目3

1.实验代码

	int n,number,min,i;//n表示输入的正整数个数,number表示输入的正整数,min代表最小值,i表示循环次数
	scanf("%d",&n);//输入n的值
	scanf("%d",&number);//输入正整数
	min=number;
	i=1;
	while(i<n){
		scanf("%d",&number);
		if(min>number)
		{
			min=number;
		}
		i++;
	} 
	printf("min = %d",min);//输出最小值

2.设计思路

-第一步:定义整型变量i,n,number,min
-第二步:输入n和正整数number的值
-第三步:min=mark,i=1
-第四步:当i小于n时,进入循环,输入下一个正整数的值,如果min>number,那么min=number
-第五步:i=i+1
-第六步:重复步骤4、5,直到i>n时结束循环
-第七步:输出最小值min

3.本题调试过程碰到问题及解决办法




4.本题PTA提交列表

题目4

1.实验代码

        int mynumber,yournumber,count,N;//定义整型变量
	scanf("%d %d",&mynumber,&N);//输入被猜数和被猜的最大次数
	(N>3);
	count=1;
	scanf("%d",&yournumber);//输入猜测的数字
        while(yournumber>0){
	 	if(yournumber==mynumber&&count==1){
	 		printf("Bingo!");break;
		 }
		 else if(yournumber==mynumber&&count<=3) {
		 	printf("Lucky You!") ;break;
		 }
		 else if(yournumber==mynumber&&count>3&&count<=N){
		 	printf("Good Guess!");break;
		 }
		 else if(yournumber==mynumber&&count>3&&count>N){
		 	printf("Game Over");break;
			 }
		 else if(yournumber>mynumber){
		 	printf("Too big\n");
		 	count++;
		 }
		 else if(yournumber<mynumber){
		 	printf("Too small\n");
		 	count++;
		 }	
		 scanf("%d",&yournumber);
	}
	if(yournumber<0){
		 	printf("Game Over");
			 }

2.设计思路

-第一步:定义整型变量yournumber,mynumber,count,N
-第二步:输入mynumber和N(猜测的最大次数),给出N的取值范围N>3
-第三步:赋值count=1
-第四步:输入yournumber
--第五步:当yournumber>0,进入第六步
-第六步:如果yournumbermynumber,count=1时,输出Bingo!,结束循环
-第七步:否则如果yournumber
mynumber,count<=3时,输出Lucky You!,结束循环
-第八步:否则如果yournumbermynumber,count>3并且count<=N时,输出Good Guess!,结束循环
-第九步:否则如果yournumber
mynumber,count>3并且count>N时,输出Game Over,结束循环
-第十步:否则如果yournumber>mynumber,输出Too big,count=count+1,重新进入步骤5
-第十一步:否则如果yournumber<mynumber,输出Too small,count=count+1,重新进入步骤5
-第十二步:如果yournumber<0,输出Game Over,结束循环

3.本题调试过程碰到问题及解决办法


在猜对后程序仍然没有结束,后面发现自己忘了用break中止循环
在所有输出语句后面都加了\n,提交上去后pta不给过,后面只在Too big和Too small后面加了\n就通过了
这题刚开始用另一种写法,让程序自己产生随机猜数和最大的猜测次数N,调试了好多天,输入输出都没问题,但pta不给过,后面换了本题的这种写法就可以了

4.本题PTA提交列表


二、截图本周题目集的PTA最后排名。

三、本周学习总结

1.你学会了什么?

1.嵌套语句的基本表达语句

  for(i=1;i<=N;i++)
    for(j=1;j<=N;j++)
      for(k=1;k<=N;i++)

2.学会了用dev c++调试程序。当程序有错误自己又发现不了时,调试是个很有用的方法。但有时候虽然找到了错误的地方,却不知道该如何修改,这是个有点尴尬的问题。
3.循环次数如果确定的话,最好选用for语句,因为它看起来最清晰,当循环次数不确定的时候,选用while语句或do while语句。

2.本周的内容,你还不会什么?

1.循环的题目还不是很会,比如这周作业的猜数字游戏和龟兔赛跑,从周末写到周四,每一天都在熬夜写这两题,每天晚上都在调试找错误,改来改去还是错,弄得心态快崩了,还好坚持了下来,终于把这两道题做出来了。
2.代码不够简洁,思考还不够,老是写得很复杂,有时自己都被绕晕了,在编写代码这方面还是要加强自己的能力
3.有时候不确定循环控制条件到底是哪个

posted @ 2017-11-02 22:16  hoppp  阅读(286)  评论(9编辑  收藏  举报