一、表格

问题 答案
这个作业属于那个课程 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.\n", a);
    if (is(b)) printf("%d is counted.\n", 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\b都满足条件
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(a\b\c分别为一元二次方程的三个系数)
输入变量
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语言学习就结束了,虽然仍有知识存在疑惑,但是的确学到了很多专业知识,尽管只是初级的,但还是充满收获感。下周就考试了,虽然是选择题但仍然不能放松,还是要坚持学习。加油吧!