C语言I博客作业11
这个作业属于那个课程 | C语言程序设计II |
---|---|
这个作业要求在哪里 | C语言I博客作业11 |
我在这个课程的目标是 | 熟练掌握C语言 |
这个作业在哪个具体方面帮助我实现目标 | 熟练掌握了各种循环结构,并且学会了自定义函数 |
参考文献 | Markdown基本语法 集美大学林丽老师 |
一.PTA实验作业
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)数据处理
数据表达:
用了整形变量x,m;
用m来找完全平方数的范围内的整数
使用了数组
数据处理:伪代码
开始
int IsTheNumber ( const int N );//N是用户传入的参数。如果N满足条件,则该函数必须返回1,否则返回0
int main()
{
int n1, n2, i, cnt;//定义整形变量n1,n2, i, cnt
scanf("%d %d", &n1, &n2);
cnt = 0;//cnt初始化为0
for ( i=n1; i<=n2; i++ ) {//循环n1到n2次
if ( IsTheNumber(i) )//自定义函数IsTheNumber(i)
cnt++;//cnt累加
}
printf("cnt = %d\n", cnt);//输出cnt
return 0;//返回值为0
}
#include <stdio.h>
int IsTheNumber ( const int N )
{
int x,m;//定义x,m
x=(int)sqrt(N);//x定义为整形的根号N
m = x*x;
if (m == N)//如果m=N
{
int num[10]={0};//定义了一个int型的大小为10的数组nums,同时该数组所有的元素均被初始化为0
int i;
while(m>0)//当m>0时
{
for(i = 0;i<=9;i++)//循环9次
{
if (m%10 == i)//如果m除以10的余数=i
{
num[i]=num[i]+1;//
if (num[i]==2)//如果数组i=2
{
return 1;//返回值为1
}
}
}
m=m/10;//m等价于m/10
}
}
return 0;//返回值为0
}
(2)实验代码截图
(3)造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
144 225 | cnt = 2 | 有两个完全平方数 |
105 500 | cnt = 6 | 有六个完全平方数 |
100 200 | cnt = 3 | 有三个完全平方数 |
(4)PTA提交列表及说明
提交列表说明
编译错误:第9行中0那里没有加{}
答案正确:在第9行中加上了{}
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)数据处理
数据表达:用了整型变量t, s = 0
运用了自定义函数,for循环结构和if结构
用sum表示和,count表示符合的个数
数据表达:伪代码
开始
int is( int number );//is自定义函数
void count_sum( int a, int b );//定义整形变量a,b来接收主函数传入的值
int main()
{
int a, b;//整形变量a,b
scanf("%d %d", &a, &b);
if (is(a)) printf("%d is counted.\n", a);//如果自定义函数is(a)返回来的值不为0
if (is(b)) printf("%d is counted.\n", b);//输出b
count_sum(a, b);
return 0;//返回值为0
}
int is(int number)//is自定义函数
{
int t, s = 0;//整形变量t,s
while (number != 0)//当数值不等于0时
{
t = number % 10;//t的值为数值除以10取余
number = number / 10;//数值等于原数值除以10的商
s = s + t;//s的值为s和t的和
}
if (s == 5)//如果s等于5
{
return 1;//返回值为1
}
return 0;//返回值为0
}
void count_sum(int a, int b)//自定义函数void count_sum(定义整形变量a,b来接收主函数传入的值)
{
int n,count = 0, sum = 0;//定义整形变量n,count=0,sum=0
scanf("%d%d", &a, &b);
for (n = a; n <= b; n++)//循环a到b次
{
if (is(n))//自定义函数is(定义整形变量n来接收主函数传入的值)
{
count++;//累加
sum = sum + n;//sum的值为sum和n的和
}
}
printf("count = %d, sum = %d\n", count, sum);//输出count,sum
}
(2)实验代码截图
(3)造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
104 203 | 104 is counted.203 is counted. count = 6, sum = 813 | 符合条件的整数有6个,整数和为813 |
104 104 | 104 is counted. count = 1, sum = 104 | 符合条件的整数有1个,整数和为104 |
104 999 | 104 is counted. count = 15, sum = 3720 | 符合条件的整数有15个,整数和为3720 |
(4)PTA提交列表及说明
提交列表说明
1.编译错误:第10行中写成了=
2.编译错误:第12行中也写成了return 0
3.答案正确:第10行写成==,第12行写成return 1
二.代码互评
同学代码:
同学代码:
自己代码:
比较
(1)第一份代码用了自定义函数定义了5个变量,代码行数38行,用数N的每一位数按1~9数字的个数一个个进行统计,
(2)第二份代码先定义一个整型数组,使其初始化,用if语句中一数为另一数的平方数判断是否为完全平方数,在利用数组的原理判断是否有两个相同的数
(3)第三份代码定义了4个变量,同时也定义了整型数组,先使用了if语句后使用for语句
周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
第四周 | 7小时 | 100行 | 在屏幕上显示Hello World! | 无 |
第五周 | 8小时 | 100行 | 求华氏温度对应的摄氏温度 | 无 |
第六周 | 21小时 | 400行 | 如何用 MinGW-w64 来编译C程序 | 无 |
第七周 | 24小时 | 478行 | 运用if语句完成各种数学程序 | 对于&&的用法不了解,现在操作不熟练 |
第八周 | 20小时 | 349行 | 掌握使用for循环语句实现指定次数的循环程序设计 | 无 |
第九周 | 23小时 | 264行 | 学会使用自定义函数 | 目前不太熟练 |
第十周 | 22小时 | 167行 | 熟悉多分支结构、字符型数据类型和逻辑运算符 | 还没有完全熟悉 |
第十一周 | 18小时 | 150行 | 熟悉多分支结构switch语句的使用 | 无 |
第十二周 | 16小时 | 130行 | 熟悉使用while和do-while结构解决问题 | 目前还不太熟练 |
第十三周 | 15小时 | 120行 | 熟悉使用for结构,了解并掌握了break语句和continue语句 | 目前还不太熟练continue语句 |
第十四周 | 15小时 | 180行 | 熟悉使用循环结构 | 目前还不太熟练 |
第十五周 | 14小时 | 260行 | 熟悉函数,学会使用自定义函数 | 对数组不太了解,对函数不太熟练 |
2. 累积代码行和博客字数
时间 | 博客字数 | 代码行数 |
---|---|---|
第四周 | 525 | 50 |
第五周 | 645 | 100 |
第六周 | 645 | 400 |
第七周 | 2659 | 478 |
第八周 | 3586 | 597 |
第九周 | 4769 | 698 |
第十周 | 5897 | 787 |
第十一周 | 6289 | 897 |
第十二周 | 7594 | 1056 |
第十三周 | 8679 | 1170 |
第十四周 | 9879 | 1278 |
第十五周 | 13547 | 1456 |
3 .学习内容总结和感悟
(1)学习内容总结
(2) 学习体会
学习c语言有一段时间了,越是学到后面越难,上周总结了循环结构,并且知道了这两个语句的区别,增加了一项编码技巧,这周学习了自定义函数,又学到了新的C语言知识,现在编代码时没有以前那么吃力了,但是仍然不太熟练,而且题目也越来越难了,我还欠缺很多的锻炼,也欠缺很多知识,我以后还需要更努力的去练习,花更多的时间在这里,朝着我的目标前进