C语言I博客作业07
| 问题 | 答案 | 
|---|---|
| 这个作业属于那个课程 | C语言程序设计II | 
| 这个作业要求在哪里 | 作业链接 | 
| 我在这个课程的目标是 | 学会并掌握C语言基本知识,能够相关C语言的各种代码 | 
| 这个作业在那个具体方面帮助我实现目标 | 学会使用switch语句 | 
| 参考文献 | C语言程序设计(第3版)、百度、360浏览器 | 
1.PTA实验作业(20分/题)

1.1 7-12 统计学生成绩 (15 分)
题目内容描述:本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则:大于等于90分为A;小于90且大于等于80为B;小于80且大于等于70为C;小于70且大于等于60为D;小于60为E。输入格式:输入在第一行中给出一个正整数N(≤1000),即学生人数;第二行中给出N个学生的百分制成绩,其间以空格分隔。输出格式:在一行中输出A、B、C、D、E对应的五分制成绩的人数分布,数字间以空格分隔,行末不得有多余空格。
1.1.1数据处理
数据表达:我用了N、i、mark、sum、A、B、C、D、E这些变量,其中N和mark都是用scanf函数来赋值,i定义初始值为1,sum是用if-else语句来进行赋值,A、B、C、D、E定义初始值都为0,它们都是整型;
数据处理:数据用到的表达式为for(i=1; i<N; i++)、case 常量表达式: 语句段;流程结构用了for循环、if-else语句、switch语句
伪代码:
    Begin(算法开始)
    输入N的值
    for(i=1; i<=N; i++)  //进行for循环
    输入mark
    if mark>=90
    则sum=1
    if mark>=80
    则sum=2
    if mark>=70
    则sum=3
    if mark>=60
    则sum=4
    else sum=5
    switch(sum)
    case 1: A累加; 退出; 
    case 2: B累加; 退出;
    case 3: C累加; 退出;
    case 4: D累加; 退出;
    case 5: E累加; 退出;
    输出A、B、C、D、E的值 
    End(算法结束)
1.1.2实验代码截图


1.1.3 造测试数据
| 输入数据 | 输出数据 | 说明 | 
|---|---|---|
| 7,77 54 92 73 60 65 69 | 1 0 2 3 1 | 用题目所给数据 | 
| 5,100 100 100 100 100 | 5 0 0 0 0 | 都为满分 | 
| 5,90 80 70 60 50 | 1 1 1 1 1 | 五分制中都有人 | 
1.1.4 PTA提交列表及说明

提交列表说明:
    1.答案错误:在后面出现了sum这个变量,而在前面没有定义sum;
    2.答案正确:int后面加一个sum答案就正确了。
1.2 7-13 整数的分类处理 (20 分)
题目内容描述:给定 N 个正整数,要求你从中得到下列三种计算结果:A1 = 能被 3 整除的最大整数A2 = 存在整数 K 使之可以表示为 3K+1 的整数的个数A3 = 存在整数 K 使之可以表示为 3K+2 的所有整数的平均值(精确到小数点后 1 位)输入格式:输入首先在第一行给出一个正整数 N,随后一行给出 N 个正整数。所有数字都不超过 100,同行数字以空格分隔。输出格式:在一行中顺序输出 A1、A2、A3的值,其间以 1 个空格分隔。如果某个数字不存在,则对应输出NONE。
1.2.1数据处理
数据表达:我用了n、i、a1、a2、k、max、number、sum、integer这9个变量,其中i、a1、a2、k、max、sum定义的初始值为0,n和integer通过scanf函数来赋值,number是通过if判断语句来进行赋值,除了sum是浮点型,其余都是整型;
数据处理:数据用到的表达式为for(i=0; i<n; i++)、integer%==1~3、case 常量表达式:语句段;流程结构用了for循环、if-else语句、switch语句;
伪代码:
    Begin(算法开始)
    int n,i,integer,a2=0,a1=0,k=0,max=0,number;
    double sum=0;
    输入n值
    for(i=0; i<n; i++)
    输入integer值
    if integer%3==0
    则number=1{
    if integer>max
    则max=integer}
    if integer%3==1
    则number=2
    if integer%3==2
    则number=3
    k累加1
    switch (number)
    case 1: 把max的值赋给a1; 退出;
    case 2: a2累加; 退出;
    case 3: sum不断累加integer的值; 退出;
    if a1==0
    则输出NONE
    否则输出a1的值
    if a2==0
    则输出NONE
    否则输出a2的值
    if sum==0
    则输出NONE
    否则输出sum/k的值
    End(算法结束)
1.2.2 实验代码截图


1.2.3 造测试数据
| 输入数据 | 输出数据 | 说明 | 
|---|---|---|
| 8,5 8 7 6 9 1 3 10 | 9 3 6.5 | 题目所给数据 | 
| 8,15 18 7 6 9 1 3 10 | 18 3 NONE | 题目所给数据 | 
| 5,6 2 1 4 5 | 6 2 3.5 | 随机数 | 
1.2.4 PTA提交列表及说明

提交列表说明:
    1.编译错误:后面用到a1而前面没有定义a1;
    2.多种错误:有两个表达式用错变量;
    3.格式错误:在printf输出时都在输出变量后面空格,然后都改在前面空格;
    4.格式错误:在第一个printf("NONE")表达式中也在前面空格;
    5.答案正确:改正错误后答案正确。
2.代码互评(5分)
题目:7-10 计算天数
同学代码截图




自己代码截图


不同之处:
    1.定义的变量不同;
    2.switch语句里面的语句表达式不同,第一个同学只写了平年的表达式,第二个同学分大月、小月;
    3.switch语句末尾用了default。
3.学习总结(15分)
3.1 学习进度条(5分)
| 周 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 | 
|---|---|---|---|---|
| 第一周(9/17-9/22) | 5小时 | 43行 | 学会写最简单的代码 | 无 | 
| 第二周(9/24-10/4) | 6小时 | 62行 | 学会温度转换 | 无 | 
| 第三周(10/6-10/13) | 11小时 | 86行 | 学会写函数程序 | 不知道怎么在什么情况下调用scanf()函数 | 
| 第四周(10/14-10/20) | 10小时 | 105行 | for循环语句和循环结构 | 不知道定义多少个变量 | 
| 第五周(10/21-10/27) | 10.5小时 | 114行 | 学会怎样去定义一个函数和它的基本格式 | 对于函数题的编程不知道该怎么样去设计 | 
| 第六周(10/28-11/3) | 12小时 | 135行 | 学会二分支结构和if-else语句 | 对于输入一个正整数,然后输入对应数量的数值的代码编写存在迷惑 | 
| 第七周(11/4-11/10) | 13.5小时 | 173行 | 学会怎样用switch简化代码的复杂性 | 使用switch语句时怎么能够很好的与其他语句很好的衔接 | 
3.2 累积代码行和博客字数(5分)

3.3 学习内容总结和感悟(5分)
3.3.1 学习内容总结
这周我们学习了C语言中的switch语句,switch有的时候可以简化if-else语句的繁琐性,还可以实现多分支结构,当符合条件时用break跳出然后输出。switch语句要与前面有很好的衔接,而且要思考怎么去设计常量表达式可以体现出程序有条不紊。

3.3.2 学习体会
这一周的PTA作业题目的量减少了好多,但是题目的难度系数越来越大,而且老师规定必须每个题目要用switch语句,有些题目好用,但有些题目感觉上不怎么好用,因为我理不清逻辑关系,并且还存在题目都没有看懂。我觉得switch语句的关键在于那个常量表达式,如果没有理清关系,就会导致答案出错。当然,这都需要自己去不断努力,而且还得需要不断坚持多练,才可以让自己变得更加优秀。     
 
                    
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号