C语言I博客作业09

这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/CST2020-2
这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2020-2/homework/11635
这个作业的目标 学习函数定义与调用
学号 20208997

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

1.1 题目名1

解一元二次方程

题目描述:

输入格式
a,b,c

输出格式
x 或 x1,x2

​​ 注:所有实数均以格式限定符 %g 输出。

输入样例1
0 4.5 -3.6
输出样例1
x = 0.8
输入样例2
0 2.8 0
输出样例2
x = 0
输入样例3
0 0 3.6
输出样例3
无解
输入样例4
0 0 0
输出样例4
无穷多解
输入样例5
-2 0.8 -0.06
输出样例5
x1 = 0.1, x2 = 0.3
输入样例6
-1 0.2 0
输出样例6
x1 = 0, x2 = 0.2
输入样例7
1 -0.4 0.04
输出样例7
x1 = x2 = 0.2
输入样例8
0.3 0 0
输出样例8
x1 = x2 = 0
输入样例9
-0.2 0.04 -0.01
输出样例9
x1 = 0.1-0.2i, x2 = 0.1+0.2i
输入样例10
3 0 0.27
输出样例10
x1 = 0+0.3i, x2 = 0-0.3i
提示:注意实数的负零问题和误差问题。

1.1.1数据处理

数据表达:本题变量为a,b,c,x1,x2,x,y;a,b,c三者通过输入得到,变量都为双精度浮点型。
数据处理:运用了if语句和if-else语句的循环嵌套,以及数学函数,如:sqrt(计算x的平方根),fabs(求x的绝对值),表达式为:
if(a==0){
        if(b!=0){
            x=-c/b;
            if(x==-0)
if(b==0&&c!=0){
if(b==0&&c==0){
else{
        y=b*b-4*a*c;
       if(y>0){
           x1=(-b+sqrt(y))/2*a;
           x2=(-b-sqrt(y))/2*a;
           if(x1==-0)
               x1=0;
           if(x2==-0)
               x2=0;
           if(fabs(x1-x2)<0.0001){
if(y==0){
            x=(-b)/2*a;
            if(x==-0)
if(y<0){
            y=-y;
            x=-b/(2*a);
            x1=sqrt(y)/(2*a);
            x2=-sqrt(y)/(2*a);
            if(x==-0)
if(x1<0&&x2>0){

1.1.2实验代码截图


1.1.3 造测试数据

输入数据 输出数据 说明
0 6 9 -1.5 a=0,b=6,c=9,为一元一次方程
0 0 6 无解 a=0,b=0,c=6,为一元一次方程
9 8 7 x1 = -0.444444+0.761739i, x2 = -0.444444-0.761739i a=9,b=8,c=7,为一元二次方程
2 3 1 x1 = -2, x2 = -4 a=2,b=3,c=1,为一元二次方程

1.1.4 PTA提交列表及说明

提交列表说明:

部分正确:本题中代码过多,花括号较多,导致括号位置错误,从而导致部分答案错误。
解决方式:认真分析括号应在位置,后改正。
部分错误:未考虑题目给出的注意实数的负零问题和误差问题。
解决方式:将这两个问题考虑进去,改正代码。

1.2 题目2

统计各位数字之和是5的数

题目描述:

本题要求实现两个函数:一个函数判断给定正整数的各位数字之和是否等于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.2.1 数据处理

数据表达:本题中变量为sum,x,i,count,都通过定义而来,都为整型。
数据处理:运用了while语句和if-else语句以及for语句;表达式为:
while(x>0){
sum=sum+x%10;
        x=x/10;
if(sum==5){
            return 1;
        }
        else{
            return 0;
    for(i=a;i<=b;i++){
        if(is(i)){
            count++;
            sum=sum+i;

1.2.2 实验代码截图

1.2.3 造测试数据

输入数据 输出数据 说明
0 999 count = 21, sum = 3885 a=0,b=999,不满足a>0的条件
65 56 count = 0, sum = 0 a=65,b=56,不满足a<=b的条件
123 456 count = 11, sum = 2881 a=123,b=456,满足条件
500 900 500 is counted. count = 1, sum = 500 a=500,b=900,满足条件

1.2.4 PTA提交列表及说明

提交列表说明:

答案错误:刚开始时对已有变量number又重新定义了一遍,导致错误。
解决方式:后根据提示改正,重新定义中间变量,连接number。
格式错误:在上个问题改正过程中将while对应的花括号位置弄错。
解决方式:观察错误,改回括号。

2.代码互评(5分)

同学代码截图1



自己代码截图1



不同之处:
1.该同学定义了多个变量,将各公式通过变量定义,在运用到后面的代码中,而我的则是在需要这个公式时再定义。
2.该同学在a不等于零时分了几个可能,如:n>=0且m>=0,和n<0且m<0,以及其他情况;我的则只是分了x1<0且x2>0,以及其他情况。

同学代码截图2

自己代码截图2

不同之处:
1.while语句中的条件不一样,她的为number!=0,我的则为x>0。
2.在最后面的for语句中我定义了一个i变量(i=a,i<=b,i++),她则是直接为a=a,a<=b,a++。

3.学习总结(15分)

3.1 学习进度条(5分)

周/时间 这周所花的时间 代码行 学到的知识点简介 目前比较迷惑的问题
第一周 5h 68 简单编程
第二周 15h 251 算数运算和赋值运算
第三周 25h 368 for循环语句的应用,浮点型的学习
第四周 26h 379 自定义函数和调用函数 对调用函数的应用还不够清楚
第五周 28h 356 分支结构中的if-else语句 对于使用分支结构的逻辑还不够清晰
第六周 30h 398 switch语句的学习和应用 对于题目中的逻辑先后问题还不太能理解
第七周 28h 360 while语句及do-while语句的学习及运用 这两种的具体循环点及循环特点
第八周 26h 343 break语句的深层次学习及continue语句的学习 break语句与continue语句的用法区别及两种语句的使用位置
第九周 25h 354 函数的定义与调用 具体应该使用何种函数以及如何定义函数和调用函数还十分模糊

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

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

3.3.1 学习内容总结

3.3.2 学习体会

1.在本周学习了函数的定义和调用,对于函数的了解多了一些。但实际上还是不太懂,不知道如何运用函数去完成编程。
2.对于难度较大的题目,我也不知道该如何下笔,没什么思路,就挺焦虑的。书本上能提供给我的知识也比较局限。
3.面对题目的无措让我不敢面对考试,考试的时候该怎么办,就挺担心的。

posted on 2020-12-21 15:49  Nieya  阅读(218)  评论(10)    收藏  举报