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

一、PTA实验作业。

题目1

1.实验代码

 int n,i;
double height1,height2;//1为输入身高,2为输出身高。
char sex;
//1<=height1<=3;
//N<=1;
scanf("%d",&n);
while(n--){
	getchar();
	scanf("%c%lf",&sex,&height1);
	
	switch(sex){
		case 'M':height2=height1/1.09;break;
		case 'F':height2=height1*1.09;break;
	}
	
	
printf("%.2f\n",height2);
}

return 0; 

2.设计思路

主要描述题目算法。可以用文字描述:

  • 第一步:定义height1为输入身高,height2为输出身高,sex为性别,n为人数。
  • 第二步:输入人数。
  • 第三步:输入性别和输入身高,若性别男height2=height1/1.09;break;,若为女height2=height1*1.09;break;
  • 第四步:输出height2的值。
  • 第五步:重复步骤三,知道n>0.

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

  • (1)第一次输出后需要一个回车,应用getchar读掉回车,这点没注意到。
  • (2)case后面的字符需要用‘’引出来 否则编译错误。

4.本题PTA实验结果

贴图展示:

题目2

1.实验代码

int i,a,n,s;
s=0;
scanf("%d %d",&a,&n);//输入a,n
for(i=1;i<=n;i++)
	s=i*a+s*10;//计算公式
	printf("s = %d",s);

2 设计思路

  • (1)定义整型变量i,n,a,s存放计算结果
  • (2)输入a,n
  • (3)计算s=ia+s10
  • (4)重复步骤3,直到i>n时结束循环
  • (5)输出s

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

)
看题目计算a+aa+aaa+...+aa..a的和以为是a*a的意思,所以就很疑惑为什么题目的例子会输出246的答案。

  • 2.想了很久还是没懂这个题,就求助了室友,才明白aa是22的意思。

题目3

1.实验代码

int i,number,min,n;
scanf("%d",&n);
scanf("%d",&number); //输入number
min=number; //赋值min为number
for(i=1;i<n;i++){
scanf("%d",&number); //再次输出number
if(min>number) //比较min和number的大小
min=number;
}
printf("min = %d",min); //输出min

2 设计思路

  • (1)定义整型变量i,n,number表示输入的数字,min代表最小值
  • (2)输入n.number,赋值min=number
  • (3)再次输入number,若number小于min,赋值min=number
  • (4)重复步骤3,直到i<n结束循环
  • (5)输出min

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

![](http://images2017.cnblogs.com/blog/1231997/201711/1231997-20171102183202607-2020958412.png

)
通过调试发现忘了对min赋值,虽然对于这个题没有影响,但有可能这种细节不注意,对于以后的编程有一定的影响。

题目4

1.实验代码

    int i,N,number,n;
    scanf("%d%d",&number,&N);//输入电脑产生的数和循环次数
    for(i=1;i<=N;i++){
        scanf("%d",&n);//输入玩家猜的数字
        if(n>number)//n大于number
        printf("Too big\n");
        else if(n<number&&n>0)//n大于0且小于number
        printf("Too small\n");
        else if(n==number&&i==1){//n等于number且i等于1
        printf("Bingo!\n");break;}
        else if(n==number&&i>1&&i<=3){//n等于number且i等于2或3
        printf("Lucky You!\n");break;}
        else if(n==number&&i>3&&i<=N){//n等于number且i大于3小于N
        printf("Good Guess!\n");break;}
        else if(n<0){//n小于0
        printf("Game Over");break;}
    }
    if(n!=number&&i>N)//n不等于number且i大于N
        printf("Game Over\n"); 

2 设计思路

  • (1)定义整型变量i,N为可以猜的次数,number为电脑随机产生的数字,n为玩家输入的数字
  • (2)输入number,N
  • (3)输入n为玩家输入的数字
  • (4)当i<=N时,若n大于0小于number, 输出Too small. 若n 大于number, 输出Too big. 若i=1且n等于number 输出Bingo!
    若i 等于1或2且n 等于number 时,输出Lucky you! 若i 大于3小于等于N 且n 等于number 时输出Good Guess! 若n 小于0时输出Game Over
  • (5)当i>=N且n不等于number时输出Game Over

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

)
发现如果猜中后程序并没有结束,通过调试想起来没有加break语句跳出循环。

  • 2.对于输出Too small的条件没有严谨,忘记n大于0的条件,输入负数的时候会输出Too small的情况。

题目4.

1.实验代码

int main()
//60/120=1/2
{int number1,number2;
scanf("%d/%d",&number1,&number2);
int a,b,c;
a=number1,b=number2;//a=60,b=120
if(a%b==0||b%a==0){
while(c!=0){
	if(a<b){
	c=a%b;//c=60%120=60//c=60%60=0
	a=b;//a=120//a=60
	b=c;
	}//b=c=60//b=0
	else if(a>b){
	c=b%a;
	b=a;
	a=c;
	
	}
}
if(a<b){
	printf("%d/%d",number1/a,number2/a);
}
else{printf("%d/%d",number1/b,number2/b);
}}
else
{
printf("%d/%d",number1,number2);}
return 0;

2 设计思路

主要描述题目算法。可以用文字描述:

  • 第一步:定义number1存放分子,number2存放分母
  • 第二步:如果可化简,a>b,则c=a%b,a=b,b=c
  • 第三步:循环2得到结果
  • 第四步:a<b,则c=b%a;b=a;a=c;
  • 第五步:循环4得到结果

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

  • (1)运行发现无论输入什么结果都为1/1,调试后发现是算法中有错误。
  • (2)运行发现当a大于b时不会进行化简,调试发现else被镶嵌在if里,也就是if{}的有漏

4.本题PTA实验结果。

二、截图本周题目集的PTA提交列表及最后排名。(2分)

1.提交列表:





2.最后排名:

三、本周学习总结(1分)

1.你学会了什么?
我学会了循环结构的简单用法
2.本周的内容,你还不会什么?
对于循环的算法还不是很了解,应学习更多算法。
3.你碰到什么困难,打算如何解决?
(1)多次出现编译错误,解决方法为在Dev C++中运行,看看提示你除了什么错误,实在不行发群上问老师助教同学。
(2)格式错误(答案错误)是最常见的问题,解决方式为将输出样例复制粘贴下来,还是错误就向老师助教寻求帮助。
(3)部分正确是最难受的,说明你成功完成了大部分,但是还有部分没完成,这时候应该静下心来好好想想是什么地方出了问题,可以重新敲一次代码,和原来进行核对

posted @ 2017-11-02 21:51  林怡鹏  阅读(225)  评论(1编辑  收藏  举报