zoukankan      html  css  js  c++  java
  • 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语言学习就结束了,虽然仍有知识存在疑惑,但是的确学到了很多专业知识,尽管只是初级的,但还是充满收获感。下周就考试了,虽然是选择题但仍然不能放松,还是要坚持学习。加油吧!

  • 相关阅读:
    在 Windows 上测试 Redis Cluster的集群填坑笔记
    vmware安装黑苹果教程
    微信支付v3发布到iis时的证书问题
    Linux下安装SQL Server 2016(连接篇SQL Server on linux)
    Linux下安装SQL Server 2016(连接篇SQL Server on linux)
    Linux下安装SQL Server 2016(安装篇SQL Server on linux)
    Linux下安装SQL Server 2016(准备篇SQL Server on linux)
    客服端与服务端APP支付宝支付接口联调的那些坑
    ASP.NET MVC]WebAPI应用支持HTTPS的经验总结
    .net平台下C#socket通信(中)
  • 原文地址:https://www.cnblogs.com/wangxiana/p/11990726.html
Copyright © 2011-2022 走看看