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

一、PTA实验作业

题目1:最佳情侣身高差

1.实验代码

  int N,i;  //N为输入身高和性别的个数
  double height;  //height表示身高
  char sex;  //sex表示性别
  (height>=1.0&&height<=3.0);
  (N>0&&N<=10);
  scanf("%d",&N);
  for(i=1;i<=N;i++){
      scanf("\n%c%lf",&sex,&height);
      if(sex=='F'){
          printf("%.2f\n",height*1.09);
      }
      else{
          printf("%.2f\n",height/1.09);
      }
  }

 

2.设计思路

  • 第一步:首先定义整型变量N,i,双精度浮点型变量height存放身高,字符型变量sex存放性别,输入N的范围1.0<=hight<=3.0
  • 第二步:输入N的值
  • 第三步:输入性别sex,输入身高hight,变量初始化 i =1
  • 第四步:如果输入的sex为F,则输出hight*1.09的值,并保留两位小数;否则,则输出hight/1.09的值,并保留两位小数。i 加一
  • 第五步:重复步骤3,直到 i >N

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

  • 这一题写了各种方法,for语句,while语句,switch语句但还是输出答案等于0.00,后来请教了同学要在输入的地方加上换行符,改成这样scanf("\n%c%lf",&sex,&height);输入的M或者F就不会被空格吸收了。

4.本题PTA提交列表

 

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

1.实验代码

 int a,n,i,s,item;  //item用于存放每一项,s用于存放累加和,n用于存放输入的项数
  (a,n>0&&a,n<=9);
  scanf("%d%d",&a,&n);
  i=1;
  s=0;
  item=0;
  while(i<=n){
    item=item+a*pow(10,i-1);
    s=s+item;
    i++;
  }
  printf("s = %d\n",s);

 

2.设计思路

  • 第一步:定义变量a,n,i,s,item,item用于存放每一项,s用于存放累加和,输入a,n的范围0<a,n<=9
  • 第二步:变量初始化 i =1;s=0;item=0并且输入a,n的值
  • 第三步:item=item+a*pow(10,i-1);  s=s+item;  i++;
  • 第四步:重复步骤3,直到 i >N
  • 第五步:输出s的值

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

  • 本题没有太大的问题,在最开始思考的时候没有引进变量item,后来思考了几分钟想到公式就正确了。

4.本题PTA提交列表

 

题目3:找出最小值

1.实验代码

  int n,i,number,min;   //min为最小值,number为输入的数值,n为输入number的个数
  (n>0);
  scanf("%d",&n);
  scanf("%d",&number);
  min=number;
  for(i=1;i<n;i++){
      scanf("%d",&number);
      if(number<min)
          min=number;
  }
  printf("min = %d\n",min);

 

2.设计思路

  • 第一步:定义整型变量i,n,number,min,n>0
  • 第二步:输入n的值,和一个number的值,并且将number的值赋给min
  • 第三步:再输入一个number,如果number>min,则把number的值再赋给min,i++;
  • 第四步:重复步骤3,直到i>=n
  • 第五步:输出miin的值

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

  • 把提示放进了循环里,输出了多个Enter marks:看到与题目输出不符,就把printf调了出去,然后devc++上对了pta还是答案错误,后来想到题目给出的输出格式里只有min等于多少,就把所有的输出提示都删掉了就对了。

4.本题PTA提交列表

 

 

题目4:猜数字游戏

1.实验代码

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

 

2.设计思路

  • 第一步:定义变量 mynumber,yournumber,i,N。
  • 第二步:输入变量mynumber和N的值,mynumber表示系统随机产生数,N控制循环次数。
  • 第三步:进入循环语句判断输入的数与系统随机产生数的大小,如果在第一次就猜中就输出Too big,在前三次猜中就输出Lucky You!,在规定次数内猜中就输出Good Guess!,如果太大就输出Too big,太小就输出Too small,在游戏次数超过或者输入超出范围就输出Game Over。

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

  • 这题真的是印象深刻,devc++上的运行是对的,但是改了好几次提交了一直都只有一分,然后就一直修改,最后问了同学之后才发现,一直没有关注输入的顺序,mynumber与N输入顺序调换了,应该先mynumber再N。在当i>N时输出的game over也在循环外,可是就算在循环里面也是运行正确的,最后我还是把输出语句放到了循环外。如图

     

     

4.本题PTA提交列表

 

 

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

 PTA排名

提交列表

 

三、本周学习总结

1.你学会了什么?

  • 学会了for语句循环,在约分最简分式那一题打破了惯性思维(惯性只使用i=1;i<=n;i++)。学会了字符型变量的输入,要注意回车和空格,回车空格也算字符,否则需要输入的字符就会被空格或者回车代替。
  • 会在恰当的位置使用break结束循环。
  • 学会了利用devc++进行简单的调试,根据输入数据的变化找出出错的地方。

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

  • 比较复杂的题目错了还是对调试比较不懂,自己的思路很难理清
  • do-while语句很少用,可能是不太判断,所以经常都是用while或者for语句
  • 对于没有输入的题目,像那个韩信点兵的题,就感觉会很吃力,但是这种例型我觉得多做做就会懂得的。

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

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

  • 那个输出时间的,最开始把12点也减去了12,然后加上PM,因为我看题目认为中午12点单位是PM,就把它跟下午的时间放在一起,导致答案错误

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

  • 后续我想多利用一下调试,看看具体是哪一步出的问题导致答案错误,再进行修改。并且多练习调试。

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

不满意。调试还是不太会,不知道在哪里断点比较好,有的时候就只会干看着,然后自己觉得哪里不对再去修改,并且打代码太慢,都很浪费时间。向同学请教,并且经常使用调试来寻找错误,然后打字练练练。

 
 
好文要顶 关注我 收藏该文  

posted on 2017-11-02 22:58  黑白熊熊  阅读(477)  评论(5编辑  收藏  举报

导航