• C语言I博客作业11


    一、表格

    问题 答案
    这个作业属于那个课程 C语言程序设计II
    这个作业要求在哪里 点击此处查看本次作业要求
    我在这个课程的目标是 深入了解C语言,争取掌握更多的数据类型及结构,熟练地编译有效代码
    这个作业在那个具体方面帮助我实现目标 学习到了循环的嵌套,深入学习了循环,更加提升使用循环的能力
    参考文献 C语言程序设计、百度

    二、本周作业

    1. PTA实验作业

    1.1 题目名1

    6-2 统计各位数字之和是5的数 (20分)
    
    本题要求实现两个函数:一个函数判断给定正整数的各位数字之和是否等于5;另一个函数统计给定区间内有多少个满足上述要求的整数,并计算这些整数的和。
    函数接口定义:
    int is( int number );
    void count_sum( int a, int b );
    函数is判断number的各位数字之和是否等于5,是则返回1,否则返回0。
    函数count_sum利用函数is统计给定区间[a, b]内有多少个满足上述要求(即令is返回1)的整数,并计算这些整数的和。最后按照格式
    count = 满足条件的整数个数, sum = 这些整数的和
    进行输出。题目保证0<a≤b≤10000。
    裁判测试程序样例:
    #include <stdio.h>
    int is( int number );
    void count_sum( int a, int b );
    int main()
    {
        int a, b;
        scanf("%d %d", &a, &b);
        if (is(a)) printf("%d is counted.
    ", a);
        if (is(b)) printf("%d is counted.
    ", b);
        count_sum(a, b);
        return 0;
    }
    /* 你的代码将被嵌在这里 */
    输入样例:
    104 999
    输出样例:
    104 is counted.
    count = 15, sum = 3720
    

    1.1.1 数据处理

    定义整型变量int(number是形参、s=0赋初始值为0用于求和、remainder存放余数)
    int is( int number )
    自定义函数
    while(number!=0){//此循环用于计算一个数的各位数之和,当不等于0就一直循环,不满足条件就跳出循环。
    remainder=number%10;//计算余数
    number=number/10;//去掉最后一位数
    s+=remainder;//求和
    if(s==5)
        return 1;//满足条件返回1
        else
            return 0;//否则返回0
    此定义函数结束
    
    void count_sum( int a, int b )
    自定义函数
    定义整型变量(a,b都是形参,用于接收上面传递的数值。x赋初始值为a,用于控制循环。count赋初始值为0用于计数。sum赋初始值为0用于求和)
      for(;x<=b;x++){//x从a到b一次循环
            if(is(x)){
                count++;
                sum+=x;//满足条件则计数、求和
    printf("count = %d, sum = %d",count,sum);//打印输出
    此定义函数结束
    

    1.1.2 实验代码截图

    1.1.3 造测试数据

    输入 输出 说明
    104 999 验证题目数据
    23 41 a都满足条件
    104 104 a=b的情况

    1.1.4 PTA提交列表及说明

    部分正确:第二个函数除了错误。原因是x<=b忘记=的情况了。之后加上就对了。


    1.2 题目名2

    7-1 解一元二次方程(*) (10分)
    
    请编写程序,解一元一次方程 ax
    ​2
    ​​+bx+c=0 。
    要求:
    若a=0,则解一元一次方程。
    若方程有唯一解,则输出方程的根;
    若方程无解,则输出“无解”;
    若方程有无穷多解,则输出“无穷多解”。
    若a≠0,则解一元二次方程。
    若Δ>0,则输出方程的两个不等的实根;
    若Δ=0,则输出方程的两个相等的实根;
    若Δ<0,则输出方程的两个共轭的虚根。
    所有实数均以%g输出。
    输入样例1
    0 4.5 -3.6
    输出样例1
    x = 0.8
    输入样例2
    0 0 3.6
    输出样例2
    无解
    输入样例3
    0 0 0
    输出样例3
    无穷多解
    输入样例4
    -2 0.8 -0.06
    输出样例4
    x1 = 0.1, x2 = 0.3
    输入样例5
    -3 1.2 -0.12
    输出样例5
    x1 = x2 = 0.2
    输入样例6
    -0.2 0.04 -0.01
    输出样例6
    x1 = 0.1-0.2i, x2 = 0.1+0.2i
    提示:注意实数的负零问题和误差问题。
    

    1.2.1 数据处理

    定义双精度浮点型变量double(ac分别为一元二次方程的三个系数)
    输入变量
    if(a==0){//当a=0的情况为大条件
            if(b!=0)
                if(-c/b!=0)
            	printf("x = %.2g",-c/b);//a=0的条件下b不等于0且x不等于0,则输出,
    	    if(-c/b==0||-c/b==-0)
                    printf("x = %.2g",fabs(-c/b));x等于0或-0,加绝对值号是考虑负零的问题
            if(b==0){//b等于0的情况
                if(c!=0)
                    printf("无解");b=0的条件下c不等于0,则输出
                else
                    printf("无穷多解");c等于0,则输出
          else{//a不等于0的情况,考虑到误差问题,这里用delt与0.000001比较不直接与0 比较
            if(-0.000001<=(b*b-4*a*c)&&(b*b-4*a*c)<=0.000001)
                printf("x1 = x2 = %.2g",fabs(-b/(2*a)));//delt接近于0时输出
            else if(b*b-4*a*c>0.000001)
            	printf("x1 = %.2g, x2 = %.2g",fabs((-b+sqrt(b*b-4*a*c))/(2*a)),(-b-sqrt(b*b-4*a*c))/(2*a));
    //delt大于0.000001时输出
                else
                    printf("x1 = %.2g+%.2gi, x2 = %.2g-%.2gi",fabs(-b/(2*a)),fabs(sqrt(-b*b+4*a*c)/(2*a)),fabs(-b/(2*a)),fabs(sqrt(-b*b+4*a*c)/(2*a)));
    //delt小于0.000001时输出
     程序结束  
    

    1.2.2 实验代码截图

    1.2.3 造测试数据

    输入 输出 说明
    0 2 3 x = -1.5 a=0有解的情况
    0 0 0 无穷多解 验证题目数据
    0 0 3.6 无解 验证题目数据
    0 2 0 x = 0 0的情况
    -2 0.8 -0.06 x1 = 0.1, x2 = 0.3 验证题目数据
    -0.2 0.04 -0.01 x1 = 0.1+0.2i, x2 = 0.1-0.2i 验证题目数据

    1.2.4 PTA提交列表及说明



    答案正确:这最后一个点是前面有一个题的正负问题,加上绝对值号就可以了

    部分正确:没找到错误,就随便试试,也没解决问题

    部分正确:应该是解决误差问题的,之前是按照高中数学思维让delt与0比较,但由于误差就给了一个范围,让dele与0.000001比较

    部分正确:考虑到负零的问题,就加了绝对值号

    部分正确:只考虑到题目上给的六种情况,结果就对了六个测试点


    2. 代码互评

    自己代码①

    同学代码①


    评论:

    1.这道题我和这位同学的方法有很大的差别,他用到了数组,而我只是根据学到的知识来解决这个问题。
    2.我在第一个函数中用while(number!=0)来控制循环的,在第二个函数多定义一个变量给其赋值为a。
    3.这位同学是用数组的次数来运算的,其实我也不是很理解,我对于数组这个知识还是很陌生的。这位同学很厉害,看来是自己学习到新的知识并加以运用。


    自己代码②

    同学代码②


    评论:

    1. 这道题是个简单却不容易全对的题目,因为它有10个测试点,还有需要注意但不容易想到的点。
    2. 我就是在能想到的就直接根据数学知识写的,在同学那里了解到要注意负零和误差问题后就加上绝对值和0.000001这个误差值。
    3. 这位同学运用了一个陌生的知识点就是宏,应该是用于解决误差问题的,但是我却不是很能理解。

    3. 学习总结

    3.1 学习进度条

    周/日期 这周所花的时间 代码行 学到的知识点简介 目前比较困惑的问题
    1/9-21 2天 30 初步接触编程,学习编译Hello,World!
    2/9-30 2天 20 学习了浮点型变量,及温度转换
    3/9-15 3天 76 使用分段函数了解到if-else语句以及数据类型 对于定义数值还是不太清楚
    4/10-16 3天 100 for语句 for循环进行中不清楚循环的细节
    5/10-24 3 天 155 学习到了自定义函数 自定义函数的具体定义过程,实参形参有些迷惑
    6/11-1 3天 250 学习使用if-else与for语句的嵌套,初步了解了字符型变量 对于字符型变量不是很懂,不明白其作用
    7/11-7 2天 200 这周学习了新的分支结构switch结构,这也适用于选择的情况,其作用类似于if-else。 switch后面的变量表达式和case后的常量表达式弄不清。
    8/11-15 3天 150 学习了新的循环结构while语句和do-while语句,和for语句有不一样的地方,但其作用是一样的,他们循环的条件不一样。 不能熟练运用while语句去解决实际问题
    9/11-22 3天 151 这周学习了循环的嵌套,可以多次循环。可以解决行与列这种类型的题、以及需要多次循环一个数一个数来的题型等等 感觉知识掌握的还行,但是运用的时候弄不清循环的次数和条件
    10/11-27 2天 203 这周没有学习新知识,在练习上周学的。更加熟练的运用循环嵌套了 知识上的疑惑没有了,但是在刷题还是会遇到困难
    11/12-6 3天 100 这周学习了一些基础知识,只要是全局变量和局部变量的使用范围和生存时间 静态变量,动态变量的一些特殊作用还没记住,有疑惑

    3.2 累计代码行和博客字数

    3.3 学习内容总结

    3.4 学习体会

    1.这周详细学习了两大内容:①函数②变量。函数只要分为库函数和自定义函数。库函数由C语言系统提供定义的,可直接调用。自定义函数之前学习过,只要就是函数的声明、定义、调用,这些都是学习过的。而变量这次主要学习了全局变量和局部变量的生存周期和作用范围。其中还具体学习了自动变量、静态变量他们的存储区及作用。
    2.目前自己对于这部分内容还有些疑惑,有些分不清静态变量和自动变量的具体作用,特别在静态局部变量和全局变量上很是迷惑。需要自己私下里多研究一下课本上的内容,掌握基础知识。
    3.截至到这周,这一学期的C语言学习就结束了,虽然仍有知识存在疑惑,但是的确学到了很多专业知识,尽管只是初级的,但还是充满收获感。下周就考试了,虽然是选择题但仍然不能放松,还是要坚持学习。加油吧!

  • 相关阅读:
    dataframe字段过长被截断
    sublime text 3安装Anaconda插件之后写python出现白框
    在tkinter中使用matplotlib
    RemoteDisconnected: Remote end closed connection without response
    object of type 'Response' has no len()
    matploylib之热力图
    pycharm格式化python代码快捷键Ctrl+Alt+L失效
    Windows下Redis集群配置
    七牛云--对象存储
    Spring发送邮件
  • 原文地址:https://www.cnblogs.com/wangxiana/p/11990726.html
Copyright © 2020-2023  润新知