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

一、PTA实验作业

题目1

1.实验代码

	int N;
	double height;//height用于存放身高数据 
	char sex;//sex用于存放性别 
	scanf("%d",&N);//输入用户数N 
	if(N>0&&N<=10){
		while(N!=0){
			scanf(" %c %lf",&sex,&height);
			if(sex=='F'){//如果sex为女性 ,执行以下内容 
				height=height*1.09;
				printf("%.2f\n",height);
			}
			if(sex=='M'){//如果sex为男性,执行以下内容 
				height=height/1.09;
				printf("%.2f\n",height);
			}
			N--;
			}

2.设计思路

  • 第一步:定义整型变量N用于存放用户数,定义双精度变量height用于存放男女身高以及输出时的最佳情侣身高,定义字符型变量sex用于存放性别
  • 第二步:输入用户数N
  • 第三步:如果0<N<=10,执行第四步
  • 第四步:输入变量sex,height
  • 第五步:如果sex为F,则运算height=height*1.09并以保留2位小数的方式输出height
    如果sex为M,则运算height=height/1.09并以保留2位小数的方式输出height
  • 第六步:N=N-1
  • 第七步:如果N不等于0,执行第四步,否则执行第下一步

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

  • 问题:
    虽然程序能运行,但单组数据用了两次结束程序,无法进行下一组数据的输入和输出
  • 解决方法:在输入语句%c的前面加个空格,就能实现数据的再读取

4.本题PTA提交列表

题目二

1.实验代码

int a,n,i,sum,b;
	scanf("%d %d",&a,&n);
	sum=0;
	b=0; 
	if(a>0&&a<=9&&n>0&&n<=9){
		for(i=1;i<=n;i++){
			b=b+a*pow(10,i-1);
			sum=sum+b;
		}
		printf("s = %d",sum);

2.设计思路

  • 第一步:定义整型变量a,n,i,sum,b用于存放正整数,存放最后输入正整数的位数,存放运算次数,存放求和
  • 第二步:赋予sum的初值为0,b的初值为0
  • 第三步:如果同时满足0<a<=9,0<n<=9的条件,执行以下步骤
  • 第四步:令i=1
  • 第五步:运算b=b+a*pow(10,i-1),sum=sum+b,i=i+1
  • 第六步:如果满足i<=n的条件,则执行第五步,否则执行下一步
  • 第七步:以“s = ”的形式输出sum

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

  • 问题:一开始用一个变量c去代替b,是算法变得稍微麻烦些,但结果是对的
  • 解决方法:直接把b用于运算步骤中,无需c代替

4.本题PTA提交列表

题目三

1.实验代码

int min,n,number,number2,i;
	scanf("%d",&n);
	scanf("%d",&number);
	min=number;
	for(i=1;i<n;i++){
	scanf("%d",&number2);
	if(min>=number2){
		min=number2;
	}
	else{
		min=min;
	}
	}
	printf("min = %d",min);

2.设计思路

  • 第一步:输入整型变量min,n,number,number2分别用于存放最小的正整数,有几个正整数比大小,第一个输入的正整数数,后面输入的正整数
  • 第二步:输入变量n,输入变量number
  • 第三步:让min的初值为第一个输入的正整数number
  • 第四步:令i的初值为1
  • 第五步:输入一个新的数据number2
  • 第六步:如果min>=number2,则令min=number2,否则令min=min
  • 第七步:运算i=i+1,如果满足i<n的条件就执行第五步
  • 第八步:以“min = ”的形式输出min的值

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

  • 问题:最先的代码中循环条件为i<=n,number2=0时调试中再循环一次,在第五步scanf("%d",&number2)时,无新数据读入,卡住进行不了下一步
  • 解决方法:调试中发现,因为最先输入的数据number已经算一次输入了,所只要让i<n,少循环一次就好了

4.本题PTA提交列表

题目四

1.实验代码

	int number,number2,N,i=0;
	scanf("%d",&number);
	scanf("%d",&N);
	do{
	scanf("%d",&number2);
	if(number2<0){
		break;
	}
	 if(number2>number){
	 	printf("Too big\n");
	 }
	 if(number2<number){
	 	printf("Too small\n");
	 }
	 i++;
}while(number2!=number);
    if(number2<0){
    	printf("Game Over");
	}
	else if(i==1){
		printf("Bingo!");
	}
	else if(i>1&&i<=3){
		printf("Lucky You!");
	}
	else if(i<=N){
		printf("Good Guess!");
	}
	else if(i>N){
		printf("Game Over");

2.设计思路,

  • 第一步:输入整型变量number,number2,N,i,分别存放游戏机随机产生的数,,用户输入的一个数,猜测的最大次数,猜测次数
  • 第二步:输入变量number,N
  • 第三步:输入并读取新数据number2
    如果number2<0,则使用break语句跳出该循环,执行第五步
    如果number2>number,则输出Too big并换行
    如果number2<number,则输出Too small并换行
  • 第四步:运算i=i+1,如果满足number2不等于number则执行第二步,否则执行下一步
  • 第五步:如果number2<0,则输出Game Over
    否则如果i的值等于1,则输出Bingo
    否则如果1<i<=3,则输出Lucky You!
    否则如果i<=N,则输出Good Guess!
    否则如果i>N,则输出Game Over

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

  • 问题:最开始代码第五步中条件是i=1,执行代码时Bingo!一直出现

  • 解决方法:发现到上述一步时printf语句执行,重新审视条件,发现需要让i==1

4.本题PTA提交列表

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

三、本周学习总结

1.你学会了什么?

  • (1)首先我对调试的重要性得到了一次充分的认识,上周的分支结构程序调试过程中相当于一场练兵
    而这周的循环结构,特别是嵌套循环,使用调试功能来找出错误,解决错误,就像是一场实战,大部分时间再调试当中度过
  • (2)学会了使用for语句,while语句,do-while语句,特别是for和while语句,用得已经有的顺手了,写带有循环特性的题目,第一时间想到的就是这两个
  • (3)也学会了更深奥一点的嵌套循环语法

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

  • 大体上都掌握了,但是还不够熟悉,看到题目,要思考好一会儿才能下手,正确率也不高,
    对循环结构的题,尤其是嵌套循环,起初看专业书的时候,愣是看了半天也不能很好的理解
    要先做题目,从题目中去理解含义,再回过头来看书,才能有大致的领悟,还有需要用到类似
    字符型变量的代码的题目(虽然是上周的内容,但这周老师课堂上有提到),比如乘法口诀里的杨辉三角
    如何换行,如何整齐排版输出结果,还不是掌握得很充分.
posted @ 2017-11-01 22:41  朱杰伟  阅读(218)  评论(3编辑  收藏  举报