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

一、PTA实验作业

题目1

1.实验代码

  int n,i;
  double height;
  char sex;                     /*height为用户的身高,n为用户的数量,sex为性别,i用来判别循环何时结束*/
  i=1;
  scanf("%d",&n);
  getchar();
  while(i<=n){
  scanf("%c%lf",&sex,&height);
  getchar();
  if(sex=='M')
  {printf("%.2f\n",height/1.09);}
  else
  {printf("%.2f\n",height*1.09);}
  i++;
  }

2 设计思路

  • 1、定义用户量n,循环判别数i,用户身高height,性别sex
  • 2、i=1
  • 3、输入要测的用户数量
  • 4、这里输入一个字符(即空格),避免影响下面要输入的性别
  • 5、输入性别,身高,再输入一个字符避免影响输入的数据(同上)
  • 6、如果性别为男,输出最佳身高(height/1.09),如果性别为女,输出最佳身高(height*1.09),并且i自增1
  • 7、当i小于等于n时,跳回步骤5

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

  • (一)、
    这里在循环前没有输入一个字符,影响到了性别的判定,向同学请教才得以发现错误

4.本题PTA提交列表

题目2

1.实验代码

        int a,n,i,b;            /*a为式子每一项变化的值,b为a变化的过渡量,i循环条件判别量,n为循环次数*/
	double s;            /*s为各项的累加量*/
	i=1;
	scanf("%d%d",&a,&n); 
	b=a;
	while(i<=n) {
		s=s+a;
		a=a+b*10;
		b=b*10;
		i++;
	}
	printf("s = %.0f",s);

2 设计思路

  • 1、定义a为式子中每一项的值,b为a变化的过渡量,i为循环判别条件,n为循环次数
  • 2、定义s为式子结果,因为量可能较大,用double型
  • 3、i=1
  • 4、输入a,n
  • 5、b=a
  • 6、s=s+a,a=a+b10,b=b10,i自增1
  • 7、当i小于等于n时,跳回步骤6
  • 8、输出s

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


思考错误,把循环里的式子顺序搞错了,导致输入题目给的数据后少加了刚开始的a值,调试后发现问题并改正完成

4.本题PTA提交列表


这里因为是调试完才在pta上输入答案,所以一次就对了,下面那题也是一样...

题目3

1.实验代码

#include<stdio.h>
int main ()
{
	int n,integer,min;    /*n为输入的整数个数,integer为输入的整数,min为输入整数中最小的一个*/
	scanf("%d",&n);
	scanf("%d",&integer);
	min=integer;
	for(int i=1;i<n;i++) {
		scanf("%d",&integer);
		if(min>integer)
		min=integer;
	}
	printf("min = %d",min);

2 设计思路

  • 1、定义n为输入整数个数,integer为输入的整数,min为最小的一个整数
  • 2、输入n
  • 3、输入一个整数
  • 4、将刚刚输入的整数的值赋给min
  • 5、i=1
  • 6、输入另一个整数,如果min大于输入的整数,将这个整数的值赋给min
  • 7、当i小于n时,跳回步骤6
  • 8、输出min

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


开头已经输入一个整数了,所以这里i只需小于n即可,否则就要输入n+1个数,通过调试发现此问题并改正

4.本题PTA提交列表

题目4

1.实验代码

int n,number1,number2;        /*n为猜数次数,number1为你猜的数,number2为游戏随机产生的数*/
  scanf("%d%d",&number2,&n);
  for(int i=1;i<=n;i++){
    scanf("%d",&number1);
    if(number1<0)
    {printf("Game Over\n"); break;}       
    else if (number1<number2 && number1>0)
    {printf("Too small\n"); }
    else if (number1>number2)
    {printf("Too big\n"); }
    else
    {
    	if(i==1)
    	printf("Bingo!\n"); 
        if(i>1 && i<=3)
    	printf("Lucky You!\n");  
    	if (i>3 && i<=n)
    	printf("Good Guess!\n"); 
	  	break;
  	}
  }
   if(i>n)
   printf("Game Over\n");

2.设计思路

  • 1、定义n为猜数次数,number1为用户猜的数,number2为游戏产生的随机数
  • 2、输入number2,n
  • 3、i=1
  • 4、输入你猜的数,如果该数小于0,输出game over,结束循环;如果该数大于0且小于要猜的数,输出too small;
    如果该数大于要猜的数,输出too big;如果该数等于要猜的数,当i等于1时,输出bingo!,当i大于1且小于等
    于3时,输出lucky you!,当i大于3且小于等于n时,输出 good guess!,之后结束循环
  • 5、当i小于等于n时,跳回步骤4
  • 6、如果i大于n,输出game over

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

  • (一)
    第一次没有使用break,导致猜中后后面输入的数据依然进入循环判断

  • (二)
    第二次将所有if后面的语句全加上了break,导致判断一次后就退出了循环

  • (三)
    第三次发现问题后删了很多break,把小于0情况的也删了,所以导致了输入一个小于0的数后后面的数依然进入循环

  • (四)由于做这道题时dev的调试不知道为什么不能用,所以这道题我是根据pta提交结果,自己的观察,还有向舍友请教才一步步解决的

4.本题PTA提交列表

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

三、本周学习总结

1.你学会了什么?

  • 1、原本对break的语法很有自信,但做了猜数游戏的题目后才发现自己掌握不好,而通过猜数游戏的程序,我对break的应用变得更好了
  • 2、本周做题时,我都先在dev上调试再移到pta,通过dev的调试,使提交时的错误更少,也更容易发现问题。甚至有两题我通过dev调试后再提交,一次就正确了,当时其实是很开心的
  • 3、本周最满意的地方就是我一些小细节做得较好,基本没有编译错误的情况发生,不过scanf语句中&还是偶尔会漏掉,这点要多注意,争取下次不会再犯这个错误

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

  • 1、我觉得我对题目的理解力不够,这可能是思维拓展不够宽,或许多做题应该能很好的解决这个问题
  • 2、对循环的应用只能说可以,但不能说精通,还需要多多联系循环结构

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

  • 1、考试中小细节错误多,虽然可以通过调试发现的,但是耽误时间,不过在本周作业中,这个情况大有改善
  • 2、最后一题没能在考试中做出来,感到很可惜,毕竟已经部分正确了,而且也看到自己错误的地方,但是时间不够,没能改过来,可能要加快自己的做题速度了,避免真正考试时因为时间影响做题效率
  • 3、分支结构算是简单的,没能做到满分很可惜,而循环以及后面的内容越来越难了,希望自己能更加努力,下一次做得比这次更好!!!
posted @ 2017-11-01 23:24  网络1711王艺斌  阅读(363)  评论(4编辑  收藏  举报