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.其他总结。

对于这段时间来,我可能迷失了自己,导致自己发现自己已经快跟不上节奏了,特别是看到吴军霖同学在上机课时的表现,让我感觉很挫败,但同时也给了我很大的动力,我也想装逼,也想很快就做完,我需要在接下来的时间里去学习,不浪费时间。

posted on 2017-11-18 20:54  ifcan  阅读(399)  评论(4编辑  收藏  举报

导航