C语言博客作业--函数
一、PTA实验作业
题目1:使用函数判断完全平方数
1. 本题PTA提交列表
2. 设计思路
- 第一步:题目给定一个数n
- 第二步:定义整型变量result,i=0
- 第三步:result=i*i
- 第四步:判断result是否等于题目所给的数n,若是则返回1
- 第五步:当i<=n时,i++,返回第三布,要是i>n时则返回0
3.本题调试过程碰到问题及PTA提交列表情况说明
一开始没有把0考虑进去,即直接i=1进入,后面提交提示我0的情况没有考虑,后面改成i=0的情况
题目2:使用函数输出水仙花数
1.本题PTA提交列表
2. 设计思路
- 第一步:定义整型变量g,s,b,q,ge,shi,bai,qian,num为,count(num和count用来计算数的位数),shu为题目给定区间的数
- 第二步:将shu=m,num=shu;
- 第三步:通过while(num!=0){num=num/10,count++}求出shu的位数count位
- 第四步:当count=3时g=shu%10;s=shu/10%10;b=shu/100;
g=ggg,b=bbb,s=sss, 当g+s+b=shu时为水仙花数 - 第五步:当count=4时,g=number%10;s=number/10%10;b=number/100%10;q=number/1000;
g=gggg;s=ssss;b=bbbb;q=qqqq; 当g+s+b+q=shu时为水仙花数 - 第六步:当shu<=n时,shu++,返回第三步
3.本题调试过程碰到问题及PTA提交列表情况说明
在这一题中,一开始我忘了四位数的情况,后面补了,可是一直没有满分
这种情况,叫同学帮忙查看也是感觉是对的,我希望助教能帮我看看情况,为何出现这种情况我将代码黏在下面
#include <stdio.h>
int narcissistic( int number );
void PrintN( int m, int n );
int main()
{
int m, n;
scanf("%d %d", &m, &n);
if ( narcissistic(m) ) printf("%d is a narcissistic number\n", m);
PrintN(m, n);
if ( narcissistic(n) ) printf("%d is a narcissistic number\n", n);
return 0;
}
void PrintN( int m, int n )
{
int g,s,b,q,num,count,i,shu;
if(m<n){
for(shu=(m+1);shu<=n;shu++){
count=0;num=shu;
while(num!=0){
num=num/10;
count++;
}
if(count==3){
g=shu%10;s=shu/10%10;b=shu/100;
g=g*g*g;s=s*s*s;b=b*b*b;
if(g+b+s==shu) printf("%d\n",shu);
}
else if(count==4){
g=shu%10;s=shu/10%10;b=shu/100%10;q=shu/1000;
g=g*g*g*g;s=s*s*s*s;b=b*b*b*b;q=q*q*q*q*q;
if(g+s+b+q==shu) printf("%d\n",shu);
}
}
} else{
shu=0;
switch(shu){
case 0:break;
}
}
}
int narcissistic(int number)
{
int g,s,b,q,num,count;
num=number;
count=0;
while(num!=0){
num=num/10;
count++;
}
if(count==3){
g=number%10;s=number/10%10;b=number/100;
g=g*g*g;s=s*s*s;b=b*b*b;
if(g+s+b==number) return 1;
else return 0;
}
else if(count==4){
g=number%10;s=number/10%10;b=number/100%10;q=number/1000;
g=g*g*g*g;s=s*s*s*s;b=b*b*b*b;q=q*q*q*q;
if(g+s+b+q==number) return 1;
else return 0;
}
}
题目3:求组合数
1. 本题PTA提交列表
2. 设计思路
- 第一步:先定义整型变量m,n,浮点型变量result
- 第二步:输入m,n
- 第三步:result=fact(n)/(fact(m)*fact(n-m))
- 第四步:设计fact(n)函数
- 第五步:定义整形变量i=1,浮点型变量sum=1
- 第六步:当i<n时,sum=sum*i,i++
- 第七步:返回第六步
3.本题调试过程碰到问题及PTA提交列表情况说明
本题一开始我忘记留整数,后面就改了,本题没有什么比较困难的地方
二、同学代码结对互评(陈张鑫同学)
int factorsum( int number ){//函数声明
int k,number1=0,bit;//定义变量并使number1=0,
for(k=1;k<=number;k++){//用循环计算number的各个因子的和
bit=number%k;
if(bit==0)
number1+=k;
if(number1==number&&k>number/2)//判断是否为完数
return number1;
}return number1;
}
void PrintPN( int m, int n ){//一次输出范围内的完数
int j,count=0,i,k=0,l;
if(m==1){ //取出m=1的情况
printf("%d = %d\n",m , m);
m+=1; count++;
}
for(i=m;i<=n;i++){
if(factorsum(i)==i){
printf("%d = ",i);
for(j=1;j<i;j++){
if(i%j==0){
printf("%d",j);
if(j<i/2)printf(" + ") ;//用j<i/2来限制输出+号的条件
}
count++;
}putchar('\n');}
}if(count==0)printf("No perfect number");//判断有没有输出完数
}
int factorsum(int number)//函数声明
{
int j,k;
k=0;
if(number==1) return number;//1是特殊情况,直接返回1
else {
for(j=1;j<number;j++){//通过找出因子并累加从而判断是否为完数
if(number%j==0){
k=k+j;
}
}
if(k==number) return number;
else return 0;
}
}
void PrintPN( int m, int n )
{
int o,a,b,t,c,count,e,q;
count=0;//设计count从而判断这一区间内是否有完数
if(m==1) count++;//1为特殊情况
for(e=m;e<=n;e++){//判断完数
t=0;
for(q=1;q<e;q++){
if(e%q==0) t=q+t;
}
if(t==e) count++;
}
for(o=m;o<=n;o++){
b=0;
if(count==0){//当没有完数时,count=0,输出下面这个情况
printf("No prefect number");break;
}
else{//即有完数
if(o==1) {
printf("%d = %d",m,m);
printf("\n");}
else {
for(a=1;a<o;a++){
if(o%a==0)
b=b+a;
}
if(b==o){//找出因子并累加出来
printf("%d = 1",o);
for(c=2;c<o;c++){
if(o%c==0) printf(" + %d",c);
}
printf("\n");
}
}
}
}
}
我的循环太多而且复杂,看了陈张鑫同学的代码,我就知道我不懂得条用函数,他调用函数使得整个思路结构清晰,让我收获很大,可能是我的代码能力极差,暂时看不出他的不足之处,而我的不足之处太多了,提交的时候不能满分就是因为我让这个代码太复杂,一直超时。看了他的代码之后,让我感触颇深,我需要多多打代码,多多看书,才会懂得更多,否则像现在差距就已经出来了。
三、截图本周题目集的PTA最后排名
四、本周学习总结
1.你学会了什么?
1.1 C语言哪些数据类型?
有符号整型,长整,短整,无符号整型,长整,短整
字符型,单精度浮点型,双精度浮点型
1.2 字符型数据需要注意地方?
每个字符都具有数值特征,不能随便等价,例如‘0’与0则是不同的值
1.3 自增自减运算符?
++n,n++,--n,n--,举n为例,m=++n即m=n+1,m=n++即m=n
1.4 运算符优先级?
逻辑运算符!>算术运算符>关系运算符>逻辑运算符&& ||>条件运算符?:>赋值运算符>逗号运算符
1.5 C语言哪些表达式?
算术表达式,赋值表达式,关系表达式,逻辑表达式,条件表达式,逗号表达式
2.本周的内容,你还不会什么?
本周的内容相对比较容易理解,但是我上周以及上上周的内容会比较不懂,特别对于函数这一区域并不会调用,导致我的这次pta做的很难受,我需要多花时间去回顾函数,我的函数Pta还没有全部做好,我会在这段时间内去做好
3.循环结构考试总结
1.哪题做错了,怎么改?
前两题题目比较简单,做的相对比较快,但是在素数这一道题卡壳了,做了一个多小时还是没有做出来,在当晚的上机课又花了一个多小时去想和同学讨论,同学也是看不出来我到底哪里错了,感觉都对,虽然最后是想出来了,但是还是借助同学的代码改进,但是说实话,看同学的代码的时候是感觉没错,但是对于为什么自己的代码会错是不能有什么很大的帮助,自己的代码还是需要自己来找出错误,不然下一次依然会这样
2.考试结果满意么,怎么改进?
对于这次上机考试,个人感觉特别不满意,感觉平时花在学习上的时间不多,导致基础特别不牢固,但是现在也才开课一个多月,自己多花时间巩固以前的只是,多打一些代码,也可以重新做一做PTA的题目。
3.其他总结。
对于这段时间来,我可能迷失了自己,导致自己发现自己已经快跟不上节奏了,特别是看到吴军霖同学在上机课时的表现,让我感觉很挫败,但同时也给了我很大的动力,我也想装逼,也想很快就做完,我需要在接下来的时间里去学习,不浪费时间。