第三次作业

作业要求https://edu.cnblogs.com/campus/hljkj/CS201802/homework/2360

PTA作业

第十一周 第六次作业 7-4 输出华氏-摄氏温度转换表

题目:输入2个正整数lower和upper(lower≤upper≤100),请输出一张取值范围为[lower,upper]、且每次增加2华氏度的华氏-摄氏温度转换表。 温度转换的计算公式:C=5×(F−32)/9,其中:C表示摄氏温度,F表示华氏温度。

输入格式:在一行中输入2个整数,分别表示lower和upper的值,中间用空格分开。

输出格式:第一行输出:"fahr celsius" 接着每行输出一个华氏温度fahr(整型)与一个摄氏温度celsius(占据6个字符宽度,靠右对齐,保留1位小数)。 若输入的范围不合法,则输出"Invalid." 

1.实验代码

#include<stdio.h>
int main()
{
int lower,fahr,upper;
double celsius;
scanf("%d %d",&lower,&upper);
if(lower<=upper&&upper<=100){
printf("fahr celsius\n");
for(fahr=lower;fahr<=upper;fahr=fahr+2){
celsius=5*(fahr*1.0-32)/9;
printf("%d %5.1f\n",fahr,celsius);}
}
else{
printf("Invalid.");
}
return 0;
}

 2 解题思路

(1)算法: **利用if语句判断数据。利用for语句实现循环,对华氏温度在[lower,upper]内的每个值,使用温度转换公式计算得出的摄氏温度。         

        *用if语句判断输入数据的合法性,即lower是否小于upper

     *lower小于upper时,进行温度转换

        *lower大于upper时,输出错误提示。         

      *温度转换:用for语句进行重复转换,从lower开始,到upper结束,步长为1。         

(2)流程图:

 

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

(1)错误:for语句后加了“;”

(2)有错误提示的截图

   没有输出温度转换表,而是只输出一次结果

(3)编译器设置断点、单步调试的界面截图

(4)解决办法:";"代表空语句,这时循环体为空语句,应删去“;”,循环体语句才能被正常循环。

 

第十二周 第九次作业 7-2 输出闰年

题目:输出21世纪中截止某个年份以来的所有闰年年份。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。

输入格式:输入在一行中给出21世纪的某个截止年份。

输出格式:逐行输出满足条件的所有闰年年份,即每个年份占一行。输入若非21世纪的年份则输出"Invalid year!"。若不存在任何闰年,则输出“None”。

1.实验代码

#include<stdio.h>
int main()
{
  int i,x,n;
  scanf("%d",&n);
  if(n<=2000){
    printf("Invalid year!");
  }
  else if(n<2004){
    printf("None");
  }
  else if(n<=2100){
    for(i = 2004;i<=n;i+=4){
      if(i%100!=0||i%400==0){
        printf("%d\n",i);
      }
      
    }
  }
  else{
    printf("Invalid year!");
  }
    
      return 0;}

2解题思路

(1)算法: **利用else if语句和for语句嵌套实现多分支结构和循环结构        

      *利用else if语句,实现n小于2000,n大于2000小于2004,n大于2004三种情况。

         *n小于2000时,打印“Invalid year!”      

         *n大于2000小于2004时,打印“None”

      *n大于2004时,利用for循环中嵌套if语句的结构判断n是否是闰年,如果是闰年,就输出。

(2)流程图

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

(1)错误:if和else配对错误。

(2)有错误提示的截图

(3)编译器设置断点、单步调试的界面截图

 

(4)解决办法:count, sum写程序时要注意缩进,这样可以一目了然,避免了不必要的错误。

 

第十三周 第十次作业 7-1 统计素数并求和

题目:本题要求统计给定整数M和N区间内素数的个数并对它们求和。

输入格式:输入在一行中给出两个正整数M和N(1≤M≤N≤500)。

输出格式:在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。

1.实验代码

#include <stdio.h>
int main()
{
 int M,N,sum,count,i,o;
 
 scanf("%d %d",&M,&N);
 
 sum=0;
 count=0;

  for(i=M;i<=N;i++){
                   for(o=2;o<=i/2;o++){
                                       if(i%o==0){
                                                  break;
                                      }
                   }
                   if(o > i/2 && i != 1){
                                         sum=sum+i;
                                         count++;
                   }
 }
 printf("%d %d", count, sum);
 return 0; 
}

2 解题思路

(1)算法: **利用if语句和for语句嵌套实现分支结构和循环结构           

      *利用for语句实现[n,m]区间内每个数字的循环。         

      *第一个for语句中嵌套第二个for语句

     *第二个for语句中嵌套一个if语句,以实现是否为素数的判断

     *如果不是,跳出循环;如果是,进行下一步。         

      *利用if语句,满足条件则sum(素数和)加一,count(素数个数)加一。         

(2)流程图

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

(1)错误:将“printf("%d %d", count, sum);”语句错放在了for语句中,导致每次循环都打印一次count和sum的值。 (2)有错误提示的截图

(3)编译器设置断点、单步调试的界面截图

(4)解决办法:将“printf("%d %d", count, sum);”语句放在了for语句外面,只打印一次。

 

个人总结

1.本周我学习了的内容:for语句,while语句,do while语句,以及它们和if语句,if else语句,else if语句的相互嵌套    我的收获:for语句,while语句,do while语句虽然都是用来实现循环的语句,它们有相似的地方,但也有很大区别。循环次数确定时,宜用for语句;循环体至少执行一次时,用do while语句

2.难点: *三种语句形式的区别和正确选择最合适最简便的语句         

      *嵌套时语句之间的逻辑关系

     *调试的过程始终不太清楚,操作生疏   

  措施: *多加练习,熟悉三种语句  

      *勤于思考,多动脑  

       *写程序时要做好缩进,使代码一目了然,便于检查

     *求助于身边的同学,从她们身上我学习到了许多有用的东西

 

累积代码行数和时间:

时间 11.21 11.22 11.23 11.24 11.25 11.26 11.27
代码行数 30 25 22 18 20 15 33

 

累积博客字数和时间:

时间 11.21 11.22 11.23 11.24 11.25 11.26 11.27
博客字数 0 0 0 0 500 700 1100

 

点评:

https://www.cnblogs.com/mayijing/p/10017399.html

https://www.cnblogs.com/chumengGTRlhz/p/9991154.html

https://www.cnblogs.com/abcdsjjs/p/10029383.html

 

 

 

 

posted on 2018-11-28 22:54  DXDX  阅读(1173)  评论(9编辑  收藏  举报