C语言第三次作业

一·PTA实验作业

题目一:最佳情侣身高

1.实验代码

	int N,i;//N为输入次数,i用于调整循环次数//
	double high,result;//high为用户身高,result为最佳情侣身高//
	char op;
	scanf("%d",&N);
	getchar();
	for(i=1;i<=N;i++){
		scanf("%c %lf",&op,&high);
		getchar();
	if(op=='M'){
		result=high/1.09;
		printf("%.2f\n",result);
	}
	else if(op=='F'){
		result=high*1.09;
		printf("%.2f\n",result);
	}
	}

2.设计思路

  • 第一步,定义N,i,high,result等变量,其中N为输入次数,i用于调整循环次数,high为用户身高,result为最佳情侣身高。
  • 第二步,输入N,使用for循环语句,输入用户身高。
  • 第三步,如果用户为M,result=high/1.09。否则result=high*1.09。
  • 第四步,输出答案。

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

scanf语句放错位置,输不出答案,调试的时候连M都打不进去,改正后,出现一个新问题,只能输入一次语句,于是又添了一个getchar()

4.本题PTA提交列表

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

1.实验代码

	int a,n,sum,i,j;//a,n为所输入的数据,sum是求的和,i用于调整循环次数,j用于赋值为a //
	scanf("%d %d",&a,&n);
	sum=0;
	j=a;
	for(i=0;i<n;i++){
		sum=sum+a;
		a=j+a*10;
	}
	printf("s = %d",sum);
	
	return 0;
}

2.设计思路

  • 第一步,定义a,n,sum,i,j等变量,其中a,n为所输入的数据,sum是求的和,i用于调整循环次数,j用于赋值为a。
  • 第二步,输入a,n,同时将sum的初值赋值为0,将j赋为a的值,用于后续的计算
  • 第三步,使用for循环语句,公式为sum=sum+a,a=j+a*10。
  • 第四步,输出sum.

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

刚开始直接写a=a*10+a,使得a的值一直在变化,故而答案不对

后来我就定义了一个j来存放a的值,累加和记为sum,答案正确了。

4.本题PTA提交列表

题目三:找出最小值

1.实验代码

	int n,number,min,i;//n为输入的次数,number为输入的数据,min为最小值,i用于调整循环次数 //
	scanf("%d",&n);
	min=n;
	for(i=1;i<=n;i++){
		scanf("%d",&number);
		if(min<=number){
			min=min;
		}
		else if(min>number){
			min=number;
		}
	}
	if(n==1){
		min=number;
	}
	printf("min = %d",min);
	
	return 0;
}

2.设计思路

  • 第一步,定义n,number,min,i等的变量,其中n为输入的次数,number为输入的数据,min为最小值,i用于调整循环次数。
  • 第二步,输入n,且将min的值先赋值为n。
  • 第三步,使用for循环语句,输入number,将min与number相比较,每次都将min赋值为更小的那一个,直至退出循环。
  • 第四步,当n等于1时,将min赋值为number
  • 第五步,输出min。

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

一开始,我的scanf语句放在了for语句前,所以循环一开始就从第二个值开始输入,跳过了第一个数据,后来又忘了当n等于1的情况,PTA提交的时候发现并改正。

4.本题PTA提交列表

题目四:猜数字游戏

1.实验代码

	int yournumber,mynumber,N,i;//yournumber为用户输入数据,mynumber为被猜数,N为猜的最多次数,i用于调整循环次数// 
	scanf("%d%d",&mynumber,&N);
	for(i=1;i<=N;i++){
		scanf("%d",&yournumber);
		if(yournumber<0){
			printf("Game Over");
			break;
		}
		else if(yournumber>mynumber){
			printf("Too big\n");
		}
		else if(yournumber<mynumber){
			printf("Too small\n");
		}
		else if(i==1&&yournumber==mynumber){
			printf("Bingo!");
			break;
		}
		else if(i>1&&i<=3&&yournumber==mynumber){
			printf("Lucky You!");
			break;
		} 
		else if(i>3&&yournumber==mynumber){
			printf("Good Guess!");
			break;
		}
    }
    if(i>N){
    	printf("Game Over");
	}

2.设计思路

  • 第一步,定义yournumber,mynumber,N,i,其中yournumber为用户输入数据,mynumber为被猜数,N为猜的最多次数,i用于调整循环次数。
  • 第二步,输入number和n.
  • 第三步,使用for循环语句,按题目要求输出答案。

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

一是有两个too big 和too small语句都没写,二是scanf语句写在在for语句最后一行而且忘了加&,三是有些语句没有写break,所以调试的时候总出现已停止工作。如图是我第一次调试的截图,后来忘了截。

4.本题PTA提交列表

二、本周PTA排名

三、本周学习总结

1.我学会了什么?

  • 学会了怎么使用调试工具一步步追踪变量的值,由此推算或找出错误。
  • 我发现在使用循环结构时,一进入语句就已经输入了number,所以我的scanf语句要放在循环语句的最后面。然后这就得特别注意循环次数的控制,否则最后一次可能number输入导致出错。
  • 学会了一些新的语句,while,do-while的使用。

2.我还不会什么?

不大熟练使用while语句,一遇到循环问题使用for语句,因为用while语句的时候总出错。而且不管使用哪个语句,表达式中是该i<n还是i<=n经常搞混,所以要花挺多的时间调试找问题。

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

(1)哪些地方错了,为什么?

当所要数据为double型时,公式写成整形除以整形,没有乘以1.0;二十四小时制的那道题,没有理解题目意思,写出了错误的表达式;计算所得税的那道题,有些值要乘以百分之十,写成了乘以0.1,正确应写为0.10。

(2)后续要怎么找程序错误?

通过调试找程序错误,或者在程序中使用printf语句输出一些值,查看它能否输出,输出的值又为多少。

(3)对自己成绩满意么?不满意的话要怎么改进?

不满意,多做一些题目,练习题感,加快速度。

posted @ 2017-11-02 19:51  一叶落而秋将至  阅读(268)  评论(4编辑  收藏  举报