zoukankan      html  css  js  c++  java
  • 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
    源程序(有错误的程序)

    #include <stdio.h>
    int main(void)
    {    
        int fahr , lower, upper;  /* fahr表示华氏度 */
        double celsius;        /* celsius表示摄氏度 */ 
    
        printf("Enter lower:");
        scanf("%d",&lower);
        printf("Enter upper:");
        scanf("%d",&upper);
        printf("fahr  celsius
    ");             /* 显示表头 */
        /* 温度转换 */
        for (fahr = lower , fahr <= upper, fahr ++) ;
            celsius = 5 /9 * (fahr - 32.0); 
            printf("%3.0f %6.1f
    ", fahr, celsius); 
    
       return 0; 
    }
    

    错误信息1:
    错误原因:for循环中的条件应该用逗号隔开。
    改正方法:逗号改成封号。
    错误信息2:编译正确,结果不是想要的,如图

    错误原因: for最后的语句有封号。
    改正方法:for最后的封号去掉。
    错误信息3:

    错误原因:for下面要执行的语句没有用大括号括起来。
    改正方法:for下面的用大括号括起来。
    错误信息4:
    错误原因:源程序第16行的输出语句中 fahr 与 celsius 对应的是 %3.0f %6.1f 。
    改正方法:fahr整形输入的,应该用%d输出;celsius是用double输入,结果应保留一位小数。

    错误信息5:
    错误原因:这个公式中5/9始终为0。
    改正方法:除以9最后写
    错误信息6:
    错误原因:增加了1
    改正方法:题中要求每次增加2
    运行结果:正确
    二)学习总结

    1.有如下程序:

    include <stdio.h>

    int main()
    {
    int i,num,odd,even;
    odd = 0;
    even = 0;
    for(i = 1; i <= 10;i++)
    {
    scanf("%d",&num);
    if(num % 2 == 0)
    {
    even++;
    }
    else
    {
    odd++;
    }
    }
    printf("%d %d",even,odd);
    return 0;
    }
    详细描述程序的执行过程,即说明程序的每一步是执行的哪条代码,执行顺序如何。循环需描述前两次循环和最后一次循环的详细执行过程。最后说明程序实现的功能是什么。
    1.定义整型变量 i,num,odd,even
    2.将odd,even赋值为0
    3.执行for循环(i=1时,判断输入的数除以2,是否为偶数,如果是偶数,even+1,如果是奇数,odd+1)
    4.输出even和odd
    实现的功能就是将10个数字分类,分为奇数和偶数,最后输出结果是奇数和偶数的个数
    2.增量运算符
    (1)运行下面程序,结果是什么?增量运算符在单独使用时,前缀和后缀形式有区别吗?

    include <stdio.h>

    int main()
    {
    int i,j;
    i = 2;
    j = 2;
    i++;
    ++j;
    printf("i = %d ",i);
    printf("j = %d ",j);
    return 0;
    }
    运行结果:
    增量运算符在单独使用时没有区别,都是表示加1
    (2)运行下面的程序,结果是什么?两条输出语句的执行过程是怎样的?说明什么问题?这两条输出语句执行完后,i和j的值分别是多少?

    include <stdio.h>

    int main()
    {
    int i,j;
    i = 2;
    j = 2;
    printf("%d ",i++);
    printf("%d ",++j);
    return 0;
    }

    运行结果:
    执行过程:i++代表先使用,在加1;++j表示先加1,在使用。
    说明:++的位置不同,执行的过程也不同。
    这两条输出语句执行完后,i和j的值分别是2,3.

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

    include <stdio.h>

    int main()
    {
    int i;
    for(i = 1;i <= 5;i++)
    printf("*");
    printf(" ");
    return 0;
    }
    运行结果:

    2)

    include <stdio.h>

    int main()
    {
    int i;
    for(i = 1;i <= 5;i++)
    printf("*");
    printf(" ");
    return 0;
    }
    运行结果:

    (3)

    include <stdio.h>

    int main()
    {
    int i;
    for(i = 1;i <= 5;i++)
    {
    printf("*");
    printf(" ");
    }
    return 0;
    }
    运行结果:

    (4)

    include <stdio.h>

    int main()
    {
    int i;
    for(i = 1;i <= 5;i++)
    {
    printf("*");
    }
    printf(" ");
    return 0;
    }
    运行结果:

    运行结果的不同在于:*的排列方式不同。
    循环体的认定与缩格形式无关,与{}有关。
    应该如何正确判断一个循环语句中的循环体:{}扩起来的
    下面的程序中,哪几种格式是正确的缩进格式:1.3.4
    4.对其他你认为需要进行总结的内容进行总结。
    for循环中条件用封号隔开,而不是逗号。

    (三)实验总结(我的学号尾数是单数,应写1.3.5.7)
    (1)题目
    7-1 求奇数分之一序列前N项和(10 分)
    本题要求编写程序,计算序列 1 + 1/3 + 1/5 + ... 的前N项之和。
    (2)流程图

    (3)源代码

    include<stdio.h>

    int main()
    {
    int i,x = 1,N;
    double sum = 0,y;
    scanf("%d",&N);
    for(i = 0;i<N;i++)
    {
    y = (double)1/x;
    sum = sum+y;
    x = x+2;
    }
    printf("sum = %lf",sum);
    return 0;
    }
    (4)实验分析
    本题较简单,自己可以独立做出
    (5)本题PTA提交列表

    7-3 奇偶分家(10 分)
    (1)题目
    给定N个正整数,请统计奇数和偶数各有多少个?
    (2)流程图

    (3)源代码

    include<stdio.h>

    int main()
    {
    int N,i,a,b=0,c=0;
    scanf("%d",&N);
    for(i = 0;i < N;i++)
    {
    scanf("%d",&a);
    if(a % 2 != 0)
    {
    b++;
    }
    else
    {
    c++;
    }
    }
    printf("%d %d",b,c);
    return 0;

    }
    (4)实验分析
    记得初始化所定义的变量
    (5)本题pta提交列表

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

    (3)源代码

    include<stdio.h>

    include<string.h>

    int main()
    {
    int i,letter = 0,blank = 0,digit = 0,other = 0;
    char s;
    for(i = 0;i<10;i++)
    {
    scanf("%c",&s);
    if(s >= 'A'&&s <= 'Z'||s >= 'a'&&s <= 'z')
    {
    letter++;
    }
    else if(s == ' '||s == ' ')
    {
    blank++;
    }
    else if(s >= '0'&&s <= '9')
    {
    digit++;
    }
    else
    {
    other++;
    }

    }
    printf("letter = %d, blank = %d, digit = %d, other = %d", letter,blank,digit,other);
    return 0;
    

    }
    (4)实验分析
    问题:不知道怎么判断这些字符
    解决:问同学,现在知道了
    (5)本题pta提交列表

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

    (3)源代码

    include<stdio.h>

    include<math.h>

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

    }
    (4)实验分析
    问题:pow函数不会用
    解决:看书,现在已解决。
    (5)本题pta提交列表

    (四)博客互评
    1.

    2.

    3.

  • 相关阅读:
    mysql表分区
    .NET面试题
    .NET中CORS跨域访问WebApi
    一些VS2013的使用技巧(转载)
    java enum(枚举)使用详解 + 总结(转载)
    java枚举类型(转载)
    解析oracle的rownum,数据库查询结果返回行数设置
    使用jquery-qrcode生成二维码(转载)
    Spring 之注解事务 @Transactional(转载)
    spring @Transactional注解参数详解(转载)
  • 原文地址:https://www.cnblogs.com/zrx--/p/7814055.html
Copyright © 2011-2022 走看看