C语言I博客作业11
这个作业属于哪个课程 | C语言程序设计II |
---|---|
这个作业要求在哪里 | C语言I作业11 |
我在这个课程的目标是 | 学会编程,运用编程制作有趣的东西 |
这个作业在那个具体方面帮助我实现目标 | 在函数方面得到扩展与联系 |
参考文献 | C语言程序设计I,百度 |
1.PTA作业
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\n", cnt);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
105 500
输出样例:
cnt = 6
1.1.1数据处理
**数据表达:定义整形变量i,k,x,temp数组a,数组b,i为循环终止条件**
**数据处理:伪代码**
定义整型变量 N
定义i,k<-1,x<-1,temp,a[100], b[10]
temp<-N;
while temp/10>0
k累加
temp<-temp/10
if 它是完全平方数
for 循环
a[i]<-N/x%10
x*=10
if b[a[i]]=1
返回值为1
else
b[a[i]]=1
返回值为 0
else
返回值为 0
1.1.2实验代码截图
1.1.3造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
110 414 | cnt = 4 | 随机数据 |
113 552 | cnt = 6 | 随机数据 |
211 556 | cnt = 4 | 随机数据 |
886 556 | cnt = 0 | 随机数据 |
1.1.4PTA提交列表及说明
###提交列表说明:
1.把“;”给漏掉了。
2.在做的过程中出现了很多次答案错误,经过在网上找到方法,最终改正确了。
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;
}
/* 你的代码将被嵌在这里 */
输入样例:
104 999
输出样例:
104 is counted.
count = 15, sum = 3720
1.2.1数据处理
**数据表达:定义整形变量x,y,number ,i,sum,number为N,i为循环条件**
**数据处理:伪代码**
定义 x,y=0;
do
x<-number%10
number<-number/10;
y<-x+y
while number不等于0
if y=5
返回值 1
else
返回值0
定义变量
for a<-a,i<=b,i累加
i is(i)
count累加
sum<-sum+i
输出count,sum
1.2.2实验代码截图
1.2.3造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
4 5 | 5 is counted.count = 1, sum = 5 | a,b相差较小 |
10 100 | count = 5, sum = 160 | 随机数据 |
10 999 | count = 20, sum = 3880 | 随机数据 |
100 200 | count = 5, sum = 610 | 随机数据 |
1.2.4PTA提交列表及说明
提交列表说明:
1.编译错误:将printf的‘f’漏掉了。
2.格式错误:第1行int前面没有输入空格。
3.格式错误:第16行第一个intint前面没有输入空格。
4.格式错误:第16行第二个intint前面没有输入空格。
5.格式错误:第28行中count和sum后面没有输入空格。
6.格式错误:第28行sum前面的没有输入空格。
7.部分正确:因为看的比较粗略,就凭自己印象写了代码,没有else return 0这种情况。
8.部分正确:我在count-sum自定义函数改了,结果错误。
9.部分正确:因为自己添加了一些东西,部分错误,后来还是改为网上的形式了。
2.代码互评
同学的代码
同学的代码
自己的代码
1.1.第一个同学定义x,m,x是对N开平方后的数,m是x的平方,如果N=m就又定义num数组,i用于循环条件,用while语句当m>0时,做9次循环,用两个if语句判断是否有 两个数字相同。
1.2.第二个同学定义n=N,a,数组b,m等于n的平方根,如果m的平方等于n,做while循环a等于n除以10取余,b等于数组
累加,n除以10,进入for循环,i<=9,当b数组>1 输出return 1。
1.3.我的是定义i,k,x,temp,a,b两个数组,令N=temp,while语句进行循环temp除以10大于0时进行循环,如果N有平方根,进入for循环语句,a=N除以x除以10取余x累乘10,if语句两个数一样输出1否则输出0.
1.4.就这样看来,我的代码比他们的都要复杂,他们的更加简洁;都用了数组;第二份最简洁,值得学习。
3.学习总结
3.1学习进度条
周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
第四周 | 8h | 20 | 简单输出 | 无 |
第五周 | 10h | 40 | 学习输入 | 无 |
第六周 | 20h | 60 | 用WinGW-w64来编译C程序 | 文档真的打不开,可能是电脑原因 |
第七周 | 10h | 90 | 关系运算,if-else语句,格式化输入语句scanf() | 有的数学逻辑问题不太懂 |
第八周 | 8.5h | 80 | for的循环语句,指定次数的循环程序设计 | 不太会文字与数学的转换 |
第九周 | 8h | 100 | 函数的调用和定义的初步认识 | 自定义函数不熟悉 |
第十周 | 10h | 170 | 多分支结构、字符型数据类型和逻辑运算符 | 多个数据输出不熟练 |
第十一周 | 11h | 110 | 熟悉多分支结构switch语句的使用 | 逻辑思维能力差 |
第十二周 | 9h | 200 | 熟悉whlie和do-whlie结构 | 字符那方面不熟 |
第十三周 | 8h | 180 | 熟悉嵌套循环,break和continue的用法 | 当运用到真题方面还是会不太会 |
第十四周 | 8h | 110 | 选择合适的算法、合理的循环结构,熟练的编写程序 | 最大的问题是不懂题意 |
第十五周 | 10h | 300 | 函数的定义,声明,调用,全局变量局部变量 | 感觉好难,不怎么理解 |
3.2累积代码行和博客字数
时间 | 博客字数 | 代码行数 |
---|---|---|
第四周 | 441 | 20 |
第五周 | 441 | 20 |
第六周 | 1112 | 150 |
第七周 | 1800 | 190 |
第八周 | 2300 | 220 |
第九周 | 3100 | 220 |
第十周 | 4000 | 400 |
第十二周 | 4900 | 620 |
第十三周 | 6700 | 910 |
第十四周 | 7600 | 1020 |
第十五周 | 8600 | 1420 |
3.3学习内容总结和感悟
3.3.1学习内容总结
3.3.2学习体会
1.C语言果然特别强大,越学越难,掉发越来越严重,虽然老师说过不要熬夜,但是是真的没有时间,才去熬夜的。
2.我觉得我的理解能力太弱了,在学习这方面,接受能力太差了。
3.感觉需要用比别人多好多的时间去做。
4.另一方面,感觉别人太优秀,自己赶不上,特别无奈。
5.熬夜改博客园的下场———感冒了
ps: 字符数组
1、定义:char a[10];字符数组a长度为10。每个元素只能存放一个字符。例如: a[0]='h';a[1]='a';a[2]='p';„„
2、初始化:char a[]={'h','a','p','p','y'};char a[]="happy";char a[]={"happy"}; 注意,因为字符串结尾自动加'\0',所以char a[]="happy";长度为
6,不是5。3、C语言中没有字符串变量,字符串的输入、存储、处理和输出等必须通过字符数组实现。
4、字符串的输入。scanf();可以用%C逐个字符输入比如char a[6];for(i=0;i<6;i++) scanf("%c",&a[i]);可以用%S以字符串的形式输入,比如char
a[6];scanf("%s",a);注意,a前不用加&,因为a是数组名, 已经代表了数组首地址。注意:以%S输入时,以第一个非空白字符开始,终止于第一个空白字符。比如:
输入How are you 时。只输出How.gets();作用为输入一个字符串。与scanf();功能一致,但空格和回车都存放在数组中,最后自动加入‘\0’. 不会出现上面输出不
全的情况。调用方式为:gets(数组名);需要包含头文件“stdio.h”.
5、字符串的输出。printf();可以使用%C逐个字符输出,比如:char a[6];for(i=0;i<6;i++) printf("%c",a[i]);可以用%S以字符串的形式输出,比如char
a[6];printf("%s",a);puts();输出一个字符串,结尾自动换行。
调用形式:puts(字符数组名或字符串常量);需包含头文件“stdio.h”常用字符串处理函数(以下函数需要头文件“string.h”)
1、strlen()作用是测试字符串长度。这里不包括‘\0’.使用形式strlen(数组名或字符串常量)
2、strcat()作用是连接两个字符串。调用方式strcat(字符数组1名,字符数组2名);合并后的字符串存放在字符数组1中。
3、strcmp()比较两个字符串是否相等。调用方式strcmp(字符串1,字符串2);相等时值为0。1>2时为正数。1<2时为负数。
4、strcpy()复制字符串。调用方式strcpy(字符数组1,字符串2);2的内容复制到1中。1只能是字符数组名