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

一、PTA实验作业

题目1: 最佳情侣身高

1.实验代码

	char sex; //定义字符型变量sex存放性别
	int N;     //定义整型变量N 表示人数
	double height;   //定义浮点型变量height表示身高
	scanf("%d",&N);
  for(N=N;N>0;N--){      //判断条件是否成立,成立则进入循环体
		scanf(" %c%lf",&sex,&height);    //输入性别代表字符和身高
		if(sex=='F'){        //判断性别
		height=height*1.09;
		printf("%.2f\n",height);
	}
		if(sex=='M'){
		height=height/1.09;
		printf("%.2f\n",height);
	}
	}

2.设计思路

  • 第一步:定义字符型变量sex,F表示女性,M表示男性,定义变量N表示人数,定义浮点型变量hight表示身高
  • 第二步:输入N
  • 第三步:满足N>0,N--
  • 第四步:输入sex,hight
  • 第五步:若性别为女,hight=hight*1.09;
  • 第六步:输出hight
  • 第七步:若性别为男,hight=hight/1.09;
  • 第八步:输出hight

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

  • 每次只能输出一组数据,就结束程序。
  • 通过观看翁恺视频,知道了可以在scanf语句的第一个%d前面加一个空格,避免每按一次回车都开始执行,可以实现多组数据
  • 有过编译错误,for语句中要用;隔开

4.本题PTA提交列表

题目2: 特殊a串数列求和

1.实验代码

int a,n,s=0,i,m=0;//定义变量a,n,s,m,i,初始化变量s=0,m=0
	
	scanf("%d%d",&a,&n);//输入a和n
	for(i=1;i<=n;i++){        //判断条件,条件成立则进入循环体
	   m=m+a*pow(10,i-1);    //调用函数pow,用于计算每一项的值
	    s=s+m;                      
	}
	printf("s = %d",s);

2.设计思路

  • 第一步:定义变量a、n表示两个不超过9的整数,m表示每一项的值,s表示和,定义i
  • 第二步:输入a、n
  • 第三步:判断i<=n是否成立,若成立,进行第四步
  • 第四步: m=m+a*pow(10,i-1);
    s=s+m;
    n++
  • 第五步:重复三,四步,直到i>n
  • 第六步:输出s

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

  • 答案错误,误把题目理解为要求a+aa......+aa*a...的和,导致代码错误,输出14的结果
  • 格式错误,输出结果要用空格隔开
  • 通过重新看题,重敲代码改正错误

4.本题PTA提交列表

题目3: 找出最小值

1.实验代码

	int i,num,min,n;//定义变量num存放数字,min用于存放最小值,n存放数字个数
	scanf("%d",&n);//输入n
	scanf("%d",&num);//输入num
	min=num;//将输入的第一个数赋值给min
	for(i=1;i<n;i++){       //进行判断,条件成立则进入循环体
		scanf("%d",&num);
		if(min>num)
		min=num;
	}
	printf("min = %d\n",min);

2.设计思路

  • 第一步:定义变量i,mark表示输入的数字,min表示最小值,n表示输入数字的个数
  • 第二步:输入n和第一个数据num
  • 第三步:赋值min=num
  • 第四步:判断i<n是否成立,若成立,执行步骤五
  • 第五步:输入数据num,
  • 第六步:若min>num
  • 第七步:min=num
  • 第八步:i++
  • 第九步:跳到步骤四,重复执行,直到i>=n
  • 第十步:输出最小值min

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

  • 运行程序,输入数据样例后,得到的结果是min=100

  • 经过几组数据检验,发现if中的条件打错了,应该是min>num,否则后面的数只要大于第一个输入的数就会结束

4.本题PTA提交列表

题目4: 猜数字游戏

1.实验代码

int number,N,mynumber,i;//number用于存放被猜数,N存放最大次数,mynumber存放猜的数
	scanf("%d%d",&number,&N);
	for(i=0;i<=N;){
		i++;
		scanf("%d",&mynumber);
		if(mynumber<0){           //判断被猜数是否小于0
			printf("Game Over");
			break;
		}
		else{                           //否则进入下面的判断
			if(mynumber>number){
				printf("Too big\n");
			}
			else if(mynumber<number){
				printf("Too small\n");
			}
			else if(mynumber==number&&i==1){
				printf("Bingo!");
				break;
			}
			else if(mynumber==number&&i<=3){
				printf("Lucky You!");
				break;
			}
			else if(mynumber==number&&i>3&&i<=N){
				printf("Good Guess!");
				break;
			}
			else{
				printf("Game Over");
			}
		}
	}

2.设计思路

  • 第一步:定义变量number,mynumber,N,i=0,number表示正确数字,mynumber表示猜的数字,N表示最大次数
  • 第二步:输入number和N
  • 第三步:判断i<=N是否成立,若成立,跳到第四步执行
  • 第四步:i++
  • 第五步:输入mynumber
  • 第六步:如果mynumber<0,输出Game Over,结束程序
  • 第七步:如果mynumber>0,跳到第八步执行
  • 第八步:判断若mynumber>number,输出Too big,并跳到第三步
  • 第九步:若mynumber<number,输出Too Small,并跳到第三步
  • 第十步:若mynumbernumber&&i1,输出Bingo!,结束程序
  • 第十一步:若mynumber==number&&i<=3,输出Lucky You!,结束程序
  • 第十二步:若mynumber==number&&i>3&&i<=N,输出Good Guess!,结束程序
  • 第十三步:否则,输出Game Over

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

  • 第N次时,没有猜对是输出too big或者too small,不会输出game over,条件关系有点混乱,没有完全正确
  • 原先在for循环之前加了一个条件判断,判断number是否大于零,用数据尝试时无法执行
  • 后来去掉for前的判断,在循环体里面进行判断,得到了完全正确的答案

4.本题PTA提交列表

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

三、本周学习总结

1.你学会了什么?

  • for循环结构,基本形式为for(expr1;expr2;expr3){ 循环体 }
    注意for中的三个expr要用;隔开
    基本流程:
    a.执行expr1
    b.判断expr2,若为真,则执行c,否则退出循环
    c.执行循环体
    d.执行expr3
    e.转到b执行
  • while循环结构,基本形式为while(expr){ 循环体 }
    注意while循环先判断再执行
    基本流程:
    a.判断expr,若为真则执行b,否者退出循环
    b.执行循环体
    c.转到a执行
  • do-while循环结构,基本形式do{ 循环体 }while(expr)
    注意do-while先执行再判断
    基本流程:
    a.执行循环体
    b.判断expr,若为真,则执行a,否则退出循环
  • 对for的嵌套循环有一定的了解,首先执行第一个大循环,若成立,进入小循环,直到小循环条件不成立,再跳到大循环判断,重复执行,直到条件都不成立,输出结果

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

  • 循环结构中常要进行条件判断,如if else等的语句,对这样的条件判断做的还不太好,经常要漏掉,导致结果部分正确
  • 对flag的运用还不太熟练,不大会用
  • 对for的嵌套循环还不太熟悉,真正操作有点困难
  • while循环中对while后面的条件判断应怎么选择还不太会
  • 对极端值的处理不太懂

3.分支结构上机考试总结

  • (1)这次分支结构上机考试中犯了很多大小错误,在第一题分段函数中,对数的表达错误,对于整型数除以整型数得到的也是整型数的遗忘,导致此题便耗费了大量的时间;在第二题计算个人所得税中,犯了if条件句中不能出现类似3500<w<=4500的语句,还有对w>0&&w<=1600条件下的处理不合理,导致答案频频错误;第三题,由于前两题的失误,还有看到输入语句要处理:的符号,此时心里已经乱成一团,所以此题甚至还没开始做答;对于第四题成绩转换,一开始想到的是运用switch语句,但是由于格式等没有记牢,后面改用if语句,期间耗费了不少时间;第五题还没开始看题。我觉得,会犯这些错误的主要原因就是不够熟练,代码量还远远不够,对于一些基本的语法、格式还不熟,而且对调试工具的使用也不熟练;还有就是心态问题,有点紧张,遇到难点卡住了就不知所措。
  • (2)首先要保证程序的基本语法正确,不出现一些低级的语法错误,可以节省时间;其次,要熟练掌握对调试工具的使用,遇到程序错误时,要用调试监视变量的变化情况,找出错误的地方,并改正;再者,要学会用printf语句来调试程序,验证一些数据,比如极端值,看输出的结果是否正确,也可以找到程序的错误;最后,要调整心态,遇到程序问题不着急,冷静分析,才能找到错误。
  • (3)对自己这次的考试成绩非常不满意,甚至因此郁闷许久。我认为最大的问题就是自己的懒,练习量太少,课本还没有去看,考前也没复习。所以,在此之后,我要克服的最大困难就是自己,多去看书、看视频、查阅资料,巩固基础知识,还有就是要多打代码,遇到不会的自己先思考,再和同学讨论,或者请教老师,不心急,不暴躁,不应付,不放弃,我相信对改进学习是有帮助的。
posted @ 2017-11-02 13:59  晴天*  阅读(381)  评论(3编辑  收藏  举报