C语言I博客作业09


这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/CST2020-2/
这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2020-2/homework/11635
这个作业的目标 了解c语言中函数的概率,熟悉自定义函数的用法,辨别好形参与实参,辨别局部变量与全局变量
学号 20208999
参考文献 C Primer Plus,b站,csdn论坛

1.PTA实验作业(20分/题)

1.1 6-2 统计各位数字之和是5的数 (20分)

本题要求实现两个函数:一个函数判断给定正整数的各位数字之和是否等于5;另一个函数统计给定区间内有多少个满足上述要求的整数,并计算这些整数的和。。

1.1.1数据处理

数据表达:本题定义了sum,n,i三个整型变量,i是个通过for循环控制条件,并且用来赋值;n用来计算满足条件的正整数个数,sum用来计算符合条件的数的和。
数据处理:	int is( int number ){
    int sum,i;
    sum=0;
    for(i=number;i>0;i/=10){
        sum+=i%10;
    }
    if(sum==5){
        return 1;
    }
    else{
        return 0;
    }
    
}

void count_sum(int a, int b) {
    int i, sum,n;
    sum = 0;
    n = 0;
        for (i = a; i <= b; i++) {
        if (is(i)) {
            sum += i;
            n++;
        }
    }
    printf("count = %d, sum = %d",n,sum);
}
本题利用自定义函数的调用,在定义其他函数时可以嵌套使用早已定义好的函数,利用for循环,将符合条件的数统计下来并求和

1.1.2实验代码截图

1.1.3 造测试数据

输入数据 输出数据 说明
104 999 104 is counted.count = 15, sum = 3720 实验样例
0 1000 count = 21, sum = 3885 当区间最大时

1.1.4 PTA提交列表及说明

提交列表说明:

答案错误:输出的格式没有按照pta上的说明写,并且在定义第一个函数时,返回值输入错误
编译错误:当自定义函数前有void时说明没有返回值,而我写了返回值
处理方式:将多余的返回值删去

1.2 7-1 解一元二次方程 (10分)

1.2.1 数据处理

数据表达:本题用了a,b,c,d,x,p,q,x1,x2,这十个个变量,其中a,b,c是接受初始值,x,x1,x2是解一元一次方程的解,p和q都是用来判断一元二次方程的根,
数据处理:    if (a == 0)  //判断a的值是否为0 
    {
        if (b != 0) {    // 假设b的值不为为0 
            x = -c / b;  //解出方程的根 
            printf("x = %g", fabs(x)); //题目要求考虑实数的负零问题和误差问题;所以用绝对值函数 
        }
        else if (b == 0 && c != 0)  //假设吧b的值为0,c的值不为0 
        {
            printf("无解");//方程无解 
        }
        else if (b == 0 && c == 0) {
            printf("无穷多解"); //方程有无穷多解 
        }
    }
    else if (a != 0) {
        d = b * b - 4 * a * c; // 判断▲的值,看方程是否有实根 
        if (d > 0)  //假设方程有俩个不同实根 
        {
            x1 = (-b + sqrt(d)) / (2 * a);
            x2 = (-b - sqrt(d)) / (2 * a);
            if (x1 == -0) {
                x1 = 0;
            }
            if (fabs (x1-x2) < 0.001){
                  printf("x1 = x2 = %g\n", x1);
                }
            else {
                printf("x1 = %g, x2 = %g\n", x1, x2); //输出俩个实根 
            }
        }
        if (d == 0) {   //假设方程有两个相同实数根 
            p = -b / (2 * a);
            printf("x1 = x2 = %g\n", fabs(p)); // 题目要求考虑实数的负零问题和误差问题;所以用绝对值函数 
        }

        else if(d<0) { //假设方程的两个共轭的虚根。
            p = -b / (2 * a);
            q = fabs(sqrt(-d) / (2 * a));
            printf("x1 = %g+%gi, x2 = %g-%gi", fabs(p), q, fabs(p), q);//输出方程的的两个共轭的虚根。 
        }
    }
利用if与else if判断各种情况并分别进行计算与输出

1.2.2 实验代码截图

1.2.3 造测试数据

输入数据 输出数据 说明
0 0 3.6 无解 b=0,c!=0,a=0
0 0 0 无穷多解 a,b,c都为0
-1 0.2 0 x1=0,x2=0.2 有两个实根且其中一个为零时
1 0.4 0.04 x1=x2=0.2 两个实根相等时

1.2.4 PTA提交列表及说明


提交列表说明:

部分错误1:当两个实根相等时,x1与x2分开输出了,而没有一起输出
解决方案:精度问题,添加一个if(fabs(x1-x2)<0.001)语句
部分错误2:当一个实根为零时,输出了x1=-0
解决方案:输入一个语句if(x1==-0){x1=0}
答案错误:没有按题目要求输出

2.代码互评(5分)

题目:7-1 解一元二次方程 (10分)

同学代码:


本人代码:

  • 不同点:1.定义的数量不同,我定义了多个中间值用来存储答案
    2.对于平方的计算,同学利用了pow()函数,而我只是简单的相乘,看起来不够简洁
    3.我对输出的值的精度没做过多要求,而同学将输出值精确在小数点后两位,这样使答案看起来更精确

3.学习总结(15分)

3.1 学习进度条(5分)

周/日期 这周所花时间 代码行 学到的知识点简介 目前比较疑惑的问题
第一周/11.2-11.8 15h 350 学习了for循环结构
第二周/11.9-11.15 21h 480 学习了自定义函数的调用
第二周/11.16-11.22 35h 540 学习了if else分支结构,字符型定义
第四周/11.23-11.29 46h 660 学习了switch语句
第五周/11.30-12.6 50h 780 学习了while语句与do while语句 在while内镶嵌其他语句
第六周/11.7-12.13 60h 830 学习了嵌套循环,认识了continue和break的区别 在嵌套循环的用法
第七周/11.14-12.20 70h 900 对函数的概念更加输入了,深入学习了自定义函数以及形参与实参,局部变量与全局变量 自定义函数时的返回值用法

3.2 累积代码行和博客字数(5分)

3.3 学习内容总结和感悟(5分)

3.3.1 学习内容总结

3.3.2 学习体会

  • 作业越来越难了,空闲时间多看看书学习,练习代码能力
  • 每天都要打一段时间的代码,可以经常看看视频教学
  • 要多去参考资料,打代码不能只是照猫画虎,那样毫无作用
  • 这次作业还是比较有难度的,自己一很多不理解。
  • 同时这个应该是最后一次作业,自己还是认真的对待,努力做题。
  • 自己现在开始学会做一点笔记这个可以让我们对自己的代码感觉了解,有些不理解的还是问同学们好一点。
  • 不会的题目不要死杠着,可以多借鉴其他同学的代码,避免浪费时间


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM