C语言1博客作业11


问题 答案
这个作业属于哪个课程 C语言程序设计1
这个作业的要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-2
我在这个课程的目标是 熟练的掌握计算机的一些技能
这个作业在那个具体方面帮助我实现目标 在练习过程中找到感觉,让我对本次的知识点更加熟悉
参考文献 《C语言程序设计1》

1PTA实验作业

1.1

本题要求实现一个函数,判断任一给定整数N是否满足条件:它是完全平方数,又至少有两位数字相同,如144、676等。
函数接口定义:
int IsTheNumber ( const int N );
其中N是用户传入的参数。如果N满足条件,则该函数必须返回1,否则返回0。
裁判测试程序样例:
include <stdio.h>
include <math.h>

int IsTheNumber ( const int N );

int main()
{
int n1, n2, i, cnt;

scanf("%d %d", &n1, &n2);
cnt = 0;
for ( i=n1; i<=n2; i++ ) {
    if ( IsTheNumber(i) )
        cnt++;
}
printf("cnt = %d\n", cnt);

return 0;

}

/* 你的代码将被嵌在这里 */
输入样例:
105 500
输出样例:
cnt = 6

1.1.1数据处理

数据表达:我定义了n,i,a,m这些变量,前面3个属于整型变量,后面一个属于双精度浮点型变量。
数据处理:(伪代码)
int n,i,a; 定义变量
double m; 定义变量
int num[10]; 定义数组
n=(int) sqrt(N);
m=sqrt(N); 表达出是否是平方数
a=N;
if(am*n)
while(a) 使用while循环
for(i=0;i<=9;i++) 嵌套for循环
if(a%10
i) 判断取余是否=i
num[i]+=1;
if (num[i]>=2) 判断是否满足>=2的条件
return 1; 输出值1
a=a/10; 计算a
return 0; 返回

1.1.2实验代码截图

1.1.3造测试数据


输入数据 输出数据 说明
105 500 cnt =6 题目值
215 400 cnt =7 随机值
341 600 cnt =9 随机值

1.1.4提交列表及说明


答案错误:num[i]+=1表达式没有写准确,导致后面的判断不正确。
改正方法:改成正确也就是什么那个表达式。
编译错误:while循环的结束条件写错了。
改正方法:直接写一个a就可以了。

1.2

请编写程序,解一元一次方程 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.1.2数据处理

数据表达:
数据处理:(伪代码)
double a,b,c;        定义变量
double sum;
double x,x1,x2,m,n;
scanf("%lf %lf %lf",&a,&b,&c);        接收变量
if(a==0&&b==0&&c==0)         分情况讨论,满足a,b,c都不等于0
printf("无穷多解");          输出结果
else if(a==0&&b==0)          满足a=0,b=0
printf("无解");              输出结果
else if(a==0)                   只有a=0
printf("x = %.1g",fabs(-c/b));             输出结果  
else           
    if(b*b-4*a*c>EPS)            分情况
        x1=(-b+sqrt(b*b-4*a*c))/(2*a);        表示x的表达式
        x2=(-b-sqrt(b*b-4*a*c))/(2*a);     
        printf("x1 = %g, x2 = %g",fabs(x1),x2);    输出结果
    else if(-EPS<=(b*b-4*a*c)&&(b*b-4*a*c)<=EPS)        分情况
        x1=(-b)/(2*a);            
        x2=x1;         
        printf("x1 = x2 = %g",fabs(x1));               输出结果
        m=(-b)/(2*a);                      表达m
        n=fabs(sqrt(4*a*c-b*b)/(2*a));                表达n
        printf("x1 = %g+%gi, x2 = %g-%gi",fabs(m),n,fabs(m),n);    输出结果
return 0;               返回

1.2.2实验代码截图


1.1.3造测试数据


输入数据 输出数据 说明
0 0 0 无穷多解 题目值
0 0 3.6 无解 题目值
-2 0.8 -0.06 x1 = 0.1, x2 = 0.3 随机值

1.2.4PTA提交列表及说明


部分正确:没有将x1=(-b)/(2a)写出来,导致少了一个结果而出错。
改正方法:将x1=(-b)/(2
a)补上。

2.代码互评

同学代码截图


自己代码截图
A

不同点

1.我和他的主要区别其实就是算number的位数方法有点不同,他是用数组相加,我是用for循环来实现的。
同学代码截图

自己代码截图

不同点

1.首先在刚开始的那个if-else结构,我分别用了3个,而他只用了一个,从水平上来说,他比我要运行时间要少一些。
2.我在代码中将x的解用数学中的数学表达式来表示的,就那个除了bb-4ac还写了(-b+sqrt(bb-4ac))/(2*a)这个表达式,我不知道他为什么可以不写,有点不明白。

3.学习总结

3.1学习进度条


周/日期 这周所花时间 代码行数 学到的知识点简介 目前比较迷惑的问题
第一周作业9/月20号 2小时 45行 学会了输出hello-world 空格键把握不准
第二周作业9/月29号 1个半小时 40行 学会了华氏度转换为摄氏度 没发现
第三周作业/10月10号 4小时 60行 学了if-else语句 scanf的用法不是很会
第四周作业 10月16号 8小时 100行 学到了华氏度转换为摄氏度,后面又学了for循环
第五周作业/10月26号 6小时 75行 学会了如何定义函数 还不能准确的去定义函数,实参和形参的区别
第六周作业/11月2号 7小时 135行 学了if-else的镶嵌结构 for循环和if-else的结合有点不会
第七周作业/11月8号 5小时 100行 学了switch结构 有时不知道什么时候switch结构里面要加printf这种
第八周作业/11月15号 3小时 80行 学了while循环结构和do-while结构 有的题目不知道该如何选用while和for循环
第九周作业/11月22号 6小时 85行 学了for循环的嵌套语句 搞不清楚for循环嵌套的原理
第十周作业/11月29号 4小时 100行 和上周一样 搞不清它的具体原理
第十一周作业/12月7号 6小时 150行 函数知识 不能很好的理解静态变量

3.2累计代码行和博客字数

3.3学习内容总结与学习感悟

3.3.1学习内容总结

请用思维导图的方式把目前所学的知识进行整理

3.3.2学习体会

在这一周的课中,我是感觉比较难的,这一点在pta中已经表现了出来,感觉每一个题目都非常难,而且老师说在期末考试中一定会重点考察这部分内容,我感到非常的紧张,因为这我在课堂上都没有搞得明白,但幸好不是我一个人感觉难,不然感觉都要混不下去了。这一次让我感到了自己有多么的不行。但这样也好,可以促使我努力的去学,从而提升自己的能力,以后会更加努力的。

posted @ 2019-12-06 20:23  横扫僵尸  阅读(207)  评论(0编辑  收藏  举报