这个作业属于那个课程 | C语言程序设计II |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/CST2019-4/homework/10098 |
我在这个课程的目标是 | 掌握各种类型函数的定义、调用和申明,熟悉变量的作用域、生存周期和存储类型 |
这个作业在那个具体方面帮助我实现目标 | 理解函数的定义 |
参考文献 | C语言程序设计,中国大学慕课 |
1.PTA实验作业
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数据处理
数据表达:用int整形定义了i, a[100],b, count,j五个变量,其中a[100]是数组。这里开始判断是否是完全平方数,中间有判断是否有两个数字是一样的,就是用数组储存每次计算的结果,然后进行比较是否相等
int IsTheNumber(const int N)
{
int i, a[100],b, count = 0,j;//定义整型变量
i= N;
b = sqrt(i); //对这个数开平方
if (b*b==i)
{
while (i >0)
{
a[count] = i % 10; //如果这个数是平方数,则继续执行,然后使用了while语句
i =i/10; //当i>0时,在用数组进行计算,储存每次结果,看是否相等
for (j = 0;j < count; j++)
{
if(a[count] == a[j])
return 1;
}
count++;
}
}
return 0; //最后输出结果
}
1.1.2实验代码截图
1.1.3造测试数据
输入数据 | 输出数据 | 说明 |
105 500 | cnt=6 | 例题上的 |
140 463 | cnt = 4 | 随机输入的数据测试 |
1.1.4 PTA提交列表及说明
1.由于少打了一个大括号,导致编译错误。
2.条件使用错误,while语句判断哪里是大于等于0,应该是大于0,所以答案错误了。
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.
", 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数据处理
数据表达:运用整型int定义x,n=0;本题使用了while语句,if-else条件语句,for循环语句。
int is( int number )
{
int x,n=0;
while(number!=0) //*判断这个数不能为0;然后在执行下面*//
{
x=number%10; //*除以10取余*//
n=n+x;
number=number/10; //*取整*//
}
if(n==5) //*这个数各位数字之和是否等于5*//
{
return 1;//*是5,则返回1*//
}
else
{
return 0;//*不是5,返回0*//
}
}
void count_sum( int a, int b )
{
int i,sum=0,count=0;
for(i=a;i<=b;i++)
{
if(is(i))
{
count++;//*满足条件的整数个数逐加*//
sum=sum+i;//*这些整数的和*//
}
}
printf("count = %d, sum = %d",count,sum);//*输出满足条件的个数,这些数的和*//
}
1.2.2实验代码截图
1.2.3造测试数据
输入数据 | 输出数据 | 说明 |
104 999 | 104 is counted count = 15, sum = 3720 | 这个数有十五个,和为3720 |
5 60 | 5 is counted. count = 6, sum = 165 | 随机输入的数据进行测试 |
1.2.4 PTA提交列表及说明
1.没有按照题目要求写,比如要定义int is( int number ),而我定义了例外一个字母。
2.用了取余取整的方法。
3.格式错误:在答案输出的那里等号两边要空格。
二.代码互评
我的代码 | 同学代码 |
1.同学代码与我思路一样,但他使用的是do-while语句,我使用了while语句。
2.同学2的代码与我们两个使用方法都不同,他采用的是数组,我们还没学的,说明他往提前学了,值得我们学习。
3.其余的判断和求累积和是差不多的,算法也差不多。
3.1 学习进度条
日期 | 这周所花的时间 | 代码行 | 学到的知识简介 | 目前比较迷惑的问题 |
第一周 | 6小时左右 | 40 | 学会一些符号的使用 | 开始感觉写代码太难,不知写它是干什么的所以很困惑 |
第二周 | 11小时左右 | 70 | 会使用Markdown格式和一些基础的C语言知识 | 对代码错误找不出原因 |
第三周 | 14小时左右 | 90 | 学会了基本语句和编写程序的列子、如if语句还有变量名称 | 有些格式不会及符号不会打 |
第四周 | 25小时左右 | 120 | for循环语句的使用以及数据处理的运算符 | 对格式问题不太明白、表达式有点不会和一些细节问题总是忽略 |
第五周 | 40小时左右 | 150 | 函数的定义以及函数调用 | 不完全理解函数的使用,一些步骤有点迷糊 |
第六周 | 30小时左右 | 130 | 分支结构、逻辑运算符、字符型数据以及if-else的嵌套结构 | 逻辑关系搞错,常误解题目意思 |
第七周 | 40小时左右 | 150 | switch语句的使用 | switch与if-else的嵌套会有点混淆,格式还不太明白 |
第八周 | 50小时左右 | 170 | while语句和do-while的使用,以及它们和for语句的区别 | 对while语句的使用不是很熟悉 |
第九周 | 40小时左右 | 140 | continue语句和break语句的区别及用法 | 有点模糊,它们各自在哪里可用 |
第十周 | 30小时左右 | 150 | 了解了一点函数 | 不清楚怎么使用 |
第十一周 | 20小时左右 | 100 | 函数的定义和声明 | 函数的一些基本概念没理解透彻,还有很多变量很混淆 |