这个作业属于那个课程 | C语言程序设计I |
---|---|
这个作业要求在哪里 | C语言I作业11 |
我在这个课程的目标是 | 能熟练地进行编程 |
这个作业在那个具体方面帮助我实现目标 | 完成PTA作业 |
参考文献 | 百度 |
1.PTA实验作业
1.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
", cnt);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
105 500
输出样例:
cnt = 6
1.1.1数据处理
数据表达:该函数定义了整形变量n1,n2,i,cnt;n1,n2位输入的取值范围,i则用于控制循环,cnt用于放范围内满足条件的数
定义了整形变量m,n,a,b,i;m为接收n传过来的平方根,n为用户输入的整数,整形数组a[10]用来记录n的位数,b用于判断N的位数,i用于循环.
数据处理:伪代码
#include <stdio.h>
#include <math.h>
int IsTheNumber(const int N);
int main()//主函数
{
int n1, n2, i, cnt;//定义整形变量n1, n2, i, cnt; n1, n2位输入的取值范围, i则用于控制循环, cnt用于放范围内满足条件的数
scanf("%d %d", &n1, &n2);//输入整形变量n1,n2
cnt = 0; //cnt初始化赋值为0
for (i = n1; i <= n2; i++) {
if (IsTheNumber(i))//自定义函数反回来的值不为零
cnt++;//cnt累加
}
printf("cnt = %d
", cnt);//输出cnt并换行
return 0;
}
int IsTheNumber(const int N)//自定义函数
{
int n = N;// 定义了整形变量m, n, a, b, i; m为接收n传过来的平方根,n为用户输入的整数,整形数组a[10]用来记录n的位数, b用于判断N的位数, i用于循环.
int b;
int a[10] = { 0,0,0,0,0,0,0,0,0,0 };//定义数组a[10]并初始化为0
int m = sqrt(n); //定义整形变量m,并将根号n赋值给m
if (m * m == n)
{
while (n)
{
b = n % 10;//n除以10的余数
a[b]++;//a[b]自增
n /= 10;//n自除10
}
for (int i = 0; i <= 9; i++)
{
if (a[i] >= 2)
return 1;//返回1
}
}
return 0;//返回0
}
1.1.2实验代码截图
1.1.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
25 625 | cnt = 7 | 有七个类完全平方数 |
36 196 | cnt = 3 | 有三个类完全平方数 |
45 555 | cnt = 7 | 有七个类完全平方数 |
1.1.4 PTA提交列表及说明
提交列表说明
答案错误:for循环中的次数搞错了
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.
", a);
if (is(b)) printf("%d is counted.
", b);
count_sum(a, b);
return 0;
}
输入样例:
104 999
输出样例:
104 is counted.
count = 15, sum = 3720
1.2.1 数据处理
数据表达:定义了整形变量a,b为输入的范围,定义了整形变量x,sum1,sum2,i,count;x来存放number的每一个数字,sum1和sum2为number的每一位数累加的和,其中count为记录满足要求的个数,i为控制循环的变量
数据处理:伪代码
#include <stdio.h>
int is(int number);
void count_sum(int a, int b);
int main()//主函数
{
int a, b;//定义整形变量a,b,为输入的范围
scanf("%d %d", &a, &b)//输入a,b
if (is(a)) printf("%d is counted.
", a);//自定义函数is返回来的值不为0 输出a is counted
if (is(b)) printf("%d is counted.
", b);//自定义函数is返回来的值不为0 输出b is counted
count_sum(a, b);//自定义函数
return 0;
}
int is(int number)//自定义函数is
{
int x;//定义整形变量x
int sum1 = 0; //定义整形变量sum1
while (number != 0)//number不等于0
{
x = number % 10;//number求余并赋值给x
sum1 = sum1 + x;//sum自加x
number = number / 10;//number自除10
}
if (sum1 == 5)
{
return 1;//返回1
}
else
{
return 0;//返回0
}
}
void count_sum(int a, int b) {
int i;//定义整形变量i,用来控制循环
int sum2 = 0; //定义整形变量sum2并赋值为0
int count = 0;//定义整形变量count用于记录满足条件数的个数
for (i = a; i <= b; i++)
{
if (is(i))
{
count++;//count自加
sum2 = sum2 + i;//sum自加i
}
}
printf("count = %d, sum = %d", count, sum2);//输出count,sum
}
1.2.2 实验代码截图
1.2.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
122 456 | 122 is counted.count = 12, sum = 3003 | 122~456内有15个各位数字之和是5的数,且他们的和为3003 |
100 500 | 500 is counted.count = 15, sum = 3720 | 100~500内有6个各位数字之和是5的数,且他们的和为3720 |
78 437 | count = 14, sum = 3220 | 78~437内有15个各位数字之和是5的数,且他们的和为3220 |
1.2.4 PTA提交列表及说明
编译错误:我将“}”给漏掉了一个,并且将“d”写成了"D"
2.代码互评
同学代码
我的代码
1.他是用数组把各位数都存下来,然后再判断是否有有相同的数,而我则是定义一个变量i,如果出现了2次则跳出循环
2.其他的都差不太多,都是用根号开出一个数再平方,用来判断看是否是平方数
同学代码
我的代码
1.他用的是do-while语句先求各位数再判断,而我则是用的while语句先判断再求各位数。
2.其他的都差不太多,都是通过求各位数来判断给定正整数的各位数字之和是否等于5。
三、学习总结
3.1学习进度条
周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
第四周 | 10 | 140 | 如何用 MinGW-w64 来编译C程序 | 无 |
第五周 | 20 | 160 | 学会了输入 | 无 |
第六周 | 8 | 220 | 学会了if-else | 无 |
第七周 | 16 | 378 | 运用if,else语句 | 无 |
第八周 | 20 | 341 | 运用for循环语句 | 对for的用法还不怎么会 |
第九周 | 21 | 345 | 学习了如何使用自定义函数 | 自定义函数还不太会 |
第十周 | 23 | 425 | 熟悉并掌握多分支结构、字符型数据类型和逻辑运算符结构 | 无 |
第十一周 | 20 | 456 | 熟悉并掌握分支结构switch语句 | 无 |
第十二周 | 25 | 430 | 学会使用while和do-while结构解决问题 | 各个运算符的意思还不太理解 |
第十三周 | 27 | 340 | 嵌套循环,一.二维数组 | 多层嵌套还不太熟练 |
第十四周 | 34 | 530 | 学习了指针和一维字符数组 | 有了一个初步的了解,但指针还不太会使用 |
第十五周 | 36 | 620 | 动态变量.静态变量.全局变量和局部变量 | 对于全局变量和静态变量还是不太懂 |
3.2 累积代码行和博客字数
时间 | 博客字数 | 代码行数 |
---|---|---|
第四周 | 545 | 140 |
第五周 | 756 | 160 |
第六周 | 1257 | 220 |
第七周 | 1564 | 378 |
第八周 | 1678 | 341 |
第九周 | 2143 | 345 |
第十周 | 2645 | 425 |
第十一周 | 2738 | 456 |
第十二周 | 3756 | 430 |
第十三周 | 4837 | 340 |
第十四周 | 5432 | 530 |
第十五周 | 7680 | 620 |
3.3 学习内容总结和感悟
3.3.1 学习内容总结
3.3.2 学习体会
这周的作业让我觉得非常的难,也需要一定的数学知识,我的数学真是有点差了,不过让我意外的是前段时间学的数组终于能应用了,我发线数组是非常的实用,凡是大一点的数据都能用数组变得简单起来,刚开始学数组的时候我还以为数组很厉害,后来不断地看到其他的,才发现数组只是C语言的冰山一角而已,指针真的是特别强大,引起我的极大兴趣,继续加油!