问题 | 答案 |
---|---|
这个作业属于哪个课程 | 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
include
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(a==m*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)/(2a)补上。
2.代码互评
同学代码截图
不同点
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中已经表现了出来,感觉每一个题目都非常难,而且老师说在期末考试中一定会重点考察这部分内容,我感到非常的紧张,因为这我在课堂上都没有搞得明白,但幸好不是我一个人感觉难,不然感觉都要混不下去了。这一次让我感到了自己有多么的不行。但这样也好,可以促使我努力的去学,从而提升自己的能力,以后会更加努力的。