C语言I博客作业11
问题 | 回答 |
---|---|
这个作业属于那个课程 | C语言程序设计II |
这个作业要求在哪里 | 作业要求 |
我在这个课程的目标是 | 完成作业,学会编程 |
这个作业在那个具体方面帮助我实现目标 | 在PTA练习中学会运用 |
参考文献 | 百度百科 |
1.PTA实验作业(20分/题)
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;
}
/* 你的代码将被嵌在这里 */
输入样例:
1.1.1数据处理
数据表达:定义了n接受N的平方根乘n的平方根,N是输入的整数,定义一个10位的数组num用了收集n的值;n1,n2为输入的取值范围,i用于控制循环,cnt用于记数
数据处理:
int IsTheNumber ( const int N )
定义整形变量i循环终止条件,n是N的平方根乘n的平方根
定义数组num[10]并将数组初始化为0
n=(int)sqrt(N)*(int)sqrt(N) /*利用函数sqrt()进行判断是否为完全平方数*/
if(n==N) /*在完全平方数的基础上进行判断第二步*/
while(n!=0) /*检验数字是否相同*/
for(i=0;i<10;i++)
if(n%10==i)
num[i]累加
if(num[i]==2) /*判断是否有相同的数字*/
返回值为1
end if
end if
end for
n←n/10
end whlie
返回值为0
end if
else
返回值为0 结束
1.1.2实验代码截图
1.1.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
105 500 | cnt = 6 | 在题中的数据 |
0 100 | cnt = 1 | 在题中数据的左侧 |
500 1000 | cnt = 2 | 在题中数据的右侧 |
1.1.4 PTA提交列表及说明
提交列表说明:
编译错误:开始忘了把数组初始化。
编译错误:中英文符号忘记换了
1.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;
}
/* 你的代码将被嵌在这里 */
1.2.1 数据处理
数据表达:定义了整形变量a,b为输入的范围,自定义函数is并定义了整形变量i,sum,其中sum为number的每一位相加的和,i为返回值;
自定义函数count_sum并定义了整形变量count,sum,i,其中count为记录满足要求的个数,sum为每一个满足条件的数的和,i用来控制循环。
数据处理:
int is(int number)
定义整型变量c,d
定义整数变量sum并赋值为0
while(number!=0)/*number是否等于0*/
c←number%10
sum←sum+c
number←number/10
end while
if(sum==5) /*判断各位数之和是否等于0*/
返回值为1
else
返回值为0
end if-else
end
void count_sum( int a, int b )
定义整型变量i为控制循环
定义整型count用于记录满足条件数的个数,sum1为满足条件的每一个数累加的和
for(i=a; i<=b; i++) /*在区间a-b中循环寻找各位数字之和是5的数*/
if(is(i))
count累加
sum1←sum1+i
end if
end for
输出count = , sum =
end
1.2.2 实验代码截图
1.2.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
104 999 | 104 is counted. count = 15, sum = 3720 |
题中数据 |
0 103 | count = 6, sum = 165 | 在题中数据的左侧 |
1000 9999 | count = 35, sum = 73885 | 在题中数据的右侧 |
1.2.4 PTA提交列表及说明
提交列表说明:
Dvc++上调试编译错误
编译错误:错把number=number/10;打成number=number%10;
2.代码互评(5分)
同学代码截图
自己代码截图
算法大体相同,我的n是两个根号下N相乘,他用m等于根号下n,m乘m来代替我的n,我这样少一个变量。
同学代码截图
自己代码截图
该同学使用了自定义函数来判断素数,而我用的常规方法,在for循环中判断素数
在判断N是否满足条件上,他的判断语句是(b[a[i]]1),而我的判断语句是满足s[i]2,返回1,满足n/=10,返回0。
3.学习总结(15分)
3.1 学习进度条(5分)
周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
第四周 | 7 | 120 | 学会了基本结构 | 无 |
第五周 | 8 | 140 | 学会了scanf和printf | 无 |
第六周 | 10 | 170 | 如何用 MinGW-w64 来编译C程序 | 无 |
第七周 | 17 | 240 | 运用if,else语句完成数学问题 | 不太熟练if-else语句 |
第八周 | 20 | 344 | 运用for循环语句 | 对char的用法还不怎么会 |
第九周 | 23 | 350 | 学习了如何使用自定义函数 | 自定义函数还不太会 |
第十周 | 24 | 410 | 熟悉并掌握多分支结构、字符型数据类型和逻辑运算符结构 | 各个运算符的意思还不太理解 |
第十一周 | 22 | 430 | 熟悉并掌握分支结构switch语句 | 对于&&和||的用法不熟练 |
第十二周 | 29 | 410 | 学会使用while和do-while结构解决问题 | 嵌套语句用不熟练 |
第十三周 | 24 | 455 | 嵌套循环 continue语句和break语句 | 新学的语句用不熟练 |
第十四周 | 26 | 480 | 了解了数组 | 数组不熟练 |
3.2 累积代码行和博客字数(5分)
3.3 学习内容总结和感悟(5分)
3.3.1 学习内容总结
3.3.2 学习体会
作业难度依次再增加,自己的时间也木得安排好。学习了函数的用法,类型,变量的用法及类型,自学能力很重要,身边优秀的同学很多,多向他们学习。