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.面对题目的无措让我不敢面对考试,考试的时候该怎么办,就挺担心的。
浙公网安备 33010602011771号