C语言程序设计第五次作业

(一)改错题

1.输出华氏摄氏温度转换表:输入两个整数lower和upper,输出一张华氏摄氏温度转换表,华氏温度的取值范围是{lower,upper},每次增加2℉。计算公式如下:
c = 5×(f-32)/9
其中,c表示摄氏温度,f表示华氏温度。
错误信息1:

错误原因1:for语句后不能加分号。

改正方法:将if后的分号去掉

错误信息2:

错误原因2:for循环内语句大于一句时要加{}

改正方法:将for内语句用{}括起

错误信息3:

错误原因3:for内的语句要用;间隔

改正方法3:将for内的逗号改为;

编译错误!

仔细查看程序后,发现变量输入输出格式并不匹配

错误信息4:fahr变量定义为整型,但输出确是以浮点型输出

改正方法4:将%3.0f改为%d

错误信息5:

错误信息5:celsius为double型,与计算结果不匹配

改正方法5:在5/9前加强制类型转换(double)

运行正确!

二.学习总结:

1.详细描述程序的执行过程,即说明程序的每一步是执行的哪条代码,执行顺序如何。循环需描述前两次循环和最后一次循环的详细执行过程。最后说明程序实现的功能是什么。

答:①定义了四个整形常量i num odd even

②分别给odd和even赋初值0

③进入for循环,i=1,条件为真

④输出一个整数num,判断num的奇偶性,并给相应的统计奇偶的个数的数值加一,此为第一次循环

⑤执行i++,此时i=2,条件为真,开始第二次循环

⑥输入一个整数num,判断奇偶性并给统计其个数的数值加一,此为第二次循环

⑦重复执行

⑧当i=11时,条件为假,无法执行该循环,故循环结束

实现功能:输入任意的10个整型数,分别统计其中奇数的个数和偶数的个数

2.增量运算符

(1)运行下面程序,结果是什么?增量运算符在单独使用时,前缀和后缀形式有区别吗?

结果为

该增量运算符本身是有不同的,++i指先让i自加,而后执行语句,i++指先执行语句,而后i自加,但在本程序中,增量运算符在单独使用时,前缀和后缀并没有影响。

(2)运行下面的程序,结果是什么?两条输出语句的执行过程是怎样的?说明什么问题?这两条输出语句执行完后,i和j的值分别是多少?

结果为

第一条输出语句printf("%d\n",i++);是先输入i的值,而后i的值加一;第二条输出语句printf("%d\n",++j); 是先讲j的值加一,而后输出。说明增量运算符在语句运行时是有一定区别的。两条输出语句执行完后,i和j的值均为3.

3.有些循环语句后面有{},有些没有,有些语句有缩进,运行下面的四个小程序,运行结果有什么不同?循环体的认定与缩格形式是否有关?与{}是否有关?那么,应该如何正确判断一个循环语句中的循环体?下面的程序中,哪几种格式是正确的缩进格式。

1、

2、

3、

4、

结合1,2来分析,缩进的格式并不相同,但结果是一样的,因此循环体与缩格并无关系。

结合2,3来分析,很明显3多了{},输出结果不同;结合3,4都有{},但是里边所含的语句个数不同,输出结果也不同,因此与{}有关。

第二种缩进不正确

4.对其他你认为需要进行总结的内容进行总结。

1、要注意增量符i++与++i的区别,正确使用。

2、for语句中的判断条件是否成立应用“==”来表示,“=”为赋值不要混淆。

三.实验总结
1.(1)题目
 求奇数分之一序列前N项和
本题要求编写程序,计算序列 1 + 1/3 + 1/5 + ... 的前N项之和。
(2)流程图

(3)源代码

  #include<stdio.h>

  int main()
  {
   int i,N,x=1;
   double y,S=0.0;
   scanf("%d",&N);
   for(i=1;i<=N;i++)
   {
       y=(double)1/x;
    S=S+y;
    x=x+2;
   }
   printf("sum = %.6f",S);
   return 0;
  }

(4)实验分析:

问题:把“sum = sum + 1.0 / i”写成了“sum = sum + 1 / i”

原因:精确度不准确,导致结果错误

解决办法:把“sum = sum + 1 / i”改为“sum = sum + 1.0 / i”

(5)本题PTA提交列表

3. (1)题目:奇偶分家
 给定N个正整数,请统计奇数和偶数各有多少个?

(2)流程图

(3)源代码

  #include<stdio.h>

  int main()
  {
   int N,i,x,count1=0,count2=0;
   scanf("%d",&N);
   for(i=0;i<N;i++)
   {
    scanf("%d",&x);
    if(x%2==1)
      count1++;
    else
      count2++;
   }
   printf("%d %d",count1,count2);

  }

(4)实验分析

问题:if语句内的判断只写了一个等号

原因:=为赋值,if内==才是判断

改正方法:改为==

(5)本题PTA提交列表

5.(1)题目:统计字符
本题要求编写程序,输入10个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。
(2)流程图

(3)源代码

  #include <stdio.h>

  #include <string.h>
  #define N 10
  int main()
  {
      int letter=0,blank=0,digit=0,other=0,i;
      char x;
      for(i=0;i<N;i++)
      {
       scanf("%c",&x);
       if((x>=‘a‘&&x<=‘z‘)||(x>=‘A‘&&x<=‘Z‘))
          {
              letter++;
          }
          else if(x==‘ ‘||x==‘\n‘)
          {
              blank++;
          }
          else if(x>=‘0‘&&x<=‘9‘)
          {
              digit++;
          }
          else
          {
              other++;
          }
  }     
      printf("letter = %d, blank = %d, digit = %d, other = %d",letter,blank,digit,other);
      return 0;
  }

(4)实验分析

问题:if((a >= "a"&& a <="z")||(a >= "A"&& a <= "Z"))

原因:判断的是字符,要用‘’

改正方法:if((a >= ‘a‘ && a <= ‘z‘)||(a >= ‘A‘ && a <= ‘Z‘))

(5)本题PTA提交列表

7.(1)题目:求交错序列前N项和
本题要求编写程序,计算交错序列 1-2/3+3/5-4/7+5/9-6/11+... 的前N项之和。
(2)流程图

(3)源代码

  #include<stdio.h>

  int main()
  {
  int i,j=3,N;
  double a=1,b;
  scanf("%d",&N);
  if(N!=1)
  {
  for(i=2;i<=N;i++)
  {
  b=(double)i/j;  
  if(i%2==0)
  {
  b=-b;
  } 
  a=a+b;
  j=j+2;
  }
  }
  printf("%.3f",a);
  return 0;
  }

(4)实验分析

发现运行结果i数据不精确时,要仔细检查,常常是要使用强制类型转换的!

(5)本题PTA提交列表

四.博客互评

http://www.cnblogs.com/zrx--/p/7814055.html

http://www.cnblogs.com/ziluo/p/7819483.html

http://www.cnblogs.com/xiaoqi1/p/7821666.html

时间: 2024-10-08 11:48:19

C语言程序设计第五次作业的相关文章

C语言程序设计第五次作业——循环结构(1)

(一)改错题 输出华氏摄氏温度转换表:输入两个整数lower和upper,输出一张华氏摄氏温度转换表,华氏温度的取值范围是{lower,upper},每次增加2℉.计算公式如下:c = 5×(f-32)/9其中,c表示摄氏温度,f表示华氏温度.输入输出样例1: Enter lower:32 Enter upper:35 fahr celsius 32 0.0 34 1.1输入输出样例2: Enter lower:40 Enter upper:30 fahr celsius源程序(有错误的程序)

C语言程序设计第5堂作业

一.本次课学习主要内容及知识结构点: 二.实验内容:(60分) 1. 求奇数和.输入一批正整数(以零或负数为结束标志),求其中的奇数和.试编写相应程序. 2. 展开式求和.输入一个实数 x,计算并输出下式的值,直到最后一项的绝对值小于0.00001 (保留4 位小数).要求定义和调用函数fact(n)计算n 的阶乘,可以调用pow()函数求幂.试编写相应程序. 3. 求序列前n项和(2/1+3/2+5/3+8/5+...).输入一个正整数n,输出 2/1+3/2+5/3+8/5 +"的前n项之和

C语言程序设计第3堂作业

第3次作业的Deadline:? 2016-09-29 23:00pm 本次课学习主要内容: 常用数学函数 掌握for语句 分支结构中的二分支结构.多分支结构和else-if语句 通过四则运算程序掌握字符型数据的输入和输出及逻辑运算 通过简单程序进一步理解掌握数据类型和运算符的特点及应用. 实验内容: 1.计算平方根序列√?1???+√?2???+√?3???+?的前N项之和.可包含头文件math.h,并调用sqrt函数求平方根. 2. 本题要求编写程序,计算交错序列 1-2/3+3/5-4/7

C语言程序设计第11次作业

一.本次课主要内容: 本章主要介绍指针相关的基础知识,本节课的主要如下 (1)通过示例"密码开锁"引入指针的概念和主要知识点,分析了密码开锁的过程来说明变量.内存单元和地址之间的关系,从而引入指针的基本概念,接着介绍了指针的基本运算以及指针变量的初始化. (2)通过例子"角色互换"引入指针作为函数参数的用途和用法,区分按值调用和引用调用,分析了3个swap()函数进行对比,最后通过给定的年和天数计算是某年某月某日的实例学习了如何使用指针作为函数参数返回多个值,解决了

C语言程序设计第13次作业

一.本次课主要内容: 本章主要介绍结构的基本概念与定义.结构变量的定义和使用.结构数组应用.结构指针概念.重点介绍结构的定义与成员引用方式.同时也介绍了文件的基本概念,文件操作处理基本步骤和过程,常用文件操作函数等知识. (1)通过综合示例"输出平均分最高的学生信息"引出结构的概念和主要知识点.重点学习了结构变量使用的三种情况:结构成员引用方式.相同类型结构变量的相互赋值.结构变量作为函数参数. (2)通过例子"学生成绩文件统计"引出文件的基本概念和主要知识点,实现

C语言程序设计第7堂作业

     一.本次课主要内容: 本次以计算圆柱体体积为例,通过定义体积计算功能的函数和主函数调用的例子,引出函数定义的一般形式:函数首部加函数体,且在函数结尾处通过return 语句返回结果.本节要重点掌握两点: (1)形参.实参及参数传递.形参只能用变量表示,在函数中起作用:实参可以是变量.常量或表达式,在主调函数中.实参与形参要个数一致,类型一致.参数传递时,实参把变量.常量的值或者表达式结果值传递给形参. (2)函数定义首部与声明.二者形式相似,函数声明的目的主要是说明函数的类型和参数的情

C语言程序设计第八次作业

一.学习内容     本次课学习了一维数组的基本知识,需要大家对如下知识点进行总结:     1. 数组的定义,数组元素的引用,数组的初始化和赋值.     2. 明确以下问题:能否给数组名赋值?为什么?C语言会对数组下标做越界检查吗?那么我们写程序时应该注意什么?     3. 对数组数据的访问一定是跟循环结构分不开的,一般情况下,循环变量的值随数组元素的下标变化.学会灵活运行循环结构完成对数组数据的处理.     4.通过火柴棍等式问题,理解利用函数.数组对程序的优化. 二.实验内容    

C语言程序设计第6堂作业

          一.  本次课主要内容:             通过几个实例来进一步掌握循环结构的应用. 二. 实验内容:(70分) 1. 穷举算法(古典算术问题-搬砖头)某地需要搬运砖块,已知男人一人搬3块,女人一人搬2块,小孩两人搬一块.问用45人正好搬45块砖,有多少种搬法? 2. 猴子吃桃问题.一只猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个:第二天早上又将剩下的桃子吃掉一半,又多吃了一个.以后每天早上都吃了前一天剩下的一半加一个.到第n天早上想再吃时,见只剩下一

C语言程序设计第12次作业

一.本次课主要内容: 本章主要介绍指针相关的基础知识,本节课的主要如下 (1)通过示例"电码加密"引入字符指针与字符串处理.首先重点介绍字符指针和字符串的关联和区别,然后对常用字符串处理函数进行讲解,通过对比示例强调字符串运算的特殊性并分析原因. (2)通过例子"任意个整数求和"引入用指针实现内存动态分配.首先要分析为什么要进行内存的动态分配管理,然后介绍了动态内存分配的一般步骤和具体分配函数. 二.实验内容:(70分) 1. 输入一个字符串,把该字符串的前三个字母