C语言博客作业--函数

一、PTA实验作业

题目一:6-3 使用函数判断完全平方数

  1. 本题PTA提交列表

  2. 设计思路

3.本题调试过程碰到问题及解决办法

这题提交后题目告诉我n=0时候答案错误,然后才发现0也是完全平方数,所以就把i的初值改成了0

题目二:6-9 使用函数验证哥德巴赫猜想

  1. 本题PTA提交列表

  2. 设计思路

  • 1.定义a,b,j=2
  • 2.若j为素数,a=j,b=n-j,若b为素数,输出并结束循环
  • 3.i自增
  • 4.重复2步骤,直到j>n

3.本题调试过程碰到问题及解决办法
这题刚开始忘记考虑p=1了;后来调试时发现怎么都不会进入循环,仔细看了一下代码,才发现出了问题,所以单独把1拿出来进行判断

题目三:7-1 求组合数

  1. 本题PTA提交列表

  2. 设计思路

  • 1.声明一个浮点型函数fact(int n)
  • 2.定义整型变量m,n,浮点型变量result
  • 3.输入m,n
  • 4.result=fact(n)/(fact(m)*fact(n-m))
  • 5.输出result
  • 6.定义函数,定义整型变量i=2,浮点型变量x=1.0
  • 7.若n<=1,返回1
  • 8.x=x*i,i++
  • 9.重复步骤8,直到i<=n,返回x

3.本题调试过程碰到问题及解决办法
我先是将n直接拿来进行运算,,并且用i--,但题目一直提示m=n/2时是错的,后来又引入一个浮点型x,用递增的方法来做,才正确,但我现在都不知道哪里错了
附上错误的代码

double fact(int n)
{
	int i=0;
	if(n==0)return 1;
	for(i=n-1;i>0;i--) 
	{  
     	n=n*i;
	 }
	 return n;
}

二、同学代码结对互评

1.同学互评照片。

2.我的代码、互评同学代码截图
我的代码

#include<math.h>
int narcissistic( int number )
{
	int result=0,N=0,x,sum=0,j,y;
	y=number;
	do
	{
		j=y/10;
		y=y/10;
		N++;
	}while(j!=0);
	y=number;
	for(int i=1;i<=N;i++)
	{
		x=y%10;
		sum=sum+pow(x,N);
		y=y/10;
	}
	if(sum==number)return 1;
	return result;
}
#include<math.h>
void PrintN( int m, int n )
{
	int i,j,k,N,sum,x,y,z;
	for(i=m+1;i<=n-1;i++)
	{
			y=i;
			N=0;
			sum=0;
	do
	{
		j=y/10;
		y=y/10;
		N++;
	}while(j!=0);
		y=i;
	for(k=1;k<=N;k++)
	{
		x=y%10;
		sum=sum+pow(x,N);
		y=y/10;
	}
	if(sum==i)printf("%d\n",i);
	}
}

钟文杰的代码

int narcissistic( int number )//定义函数 
{
	int n,a,d,cnt=0,sum=0;//定义四个整形变量,cnt用来计算有几位数,sum用来存放每个数的cnt次方的和。 
	for(n=number;n>0;n/=10){//计算cnt的值 
		cnt++;
	}
	for(a=number;a>0;a/=10){//计算sum的值 
		d=a%10;
		sum=sum+pow(d,cnt);
	}
	if(number==sum){//判断是否为水仙花数 
		return 1;
	}
	else{
		return 0;
	}
 } 
 void PrintN( int m, int n )//定义第二个函数 
 {
 	int i;//定义一个变量i 
 	for(i=m+1;i<n;i++){//做循环让它输出这个范围内的水仙花数 
 		if( narcissistic(i) ){//调用上一个函数 
 			printf("%d",i);
 			printf("\n");
 		}
	 }
 }

3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。
首先钟文杰的代码比我精简,并且他注释了,我当时做的时候忘了注释现在自己都看不懂了,而且他巧妙地调用了上一个函数,非常奇特,这样代码量就小了很多,所以我更喜欢他的代码。

三、截图本周题目集的PTA最后排名。

四、本周学习总结

1.你学会了什么?

1.1 C语言哪些数据类型?
短整型short 整型int 长整型long 单精度型float 双精度型double 字符型char 无符号整型unsigned 无符号短整型unsigned short 无符号长整型unsigned long

1.2 字符型数据需要注意地方?
'a'和'A'是不同的字符型常量,'0'和0是不同类型的常量,前者是字符型常量后者是整型常量

1.3 自增自减运算符?
n++和++n都相当于n=n+1,但n++是先表达n,再执行n=n+1,而++n是先执行n=n+1,再表达n
同理n--和--n也是一样

1.4 运算符优先级?
从低到高:(,) (= += -= = /= %=) (?😃 (||) (&&) (== !=) (< <= > >=) (+ -) ( / %) (++ -- + - *) (!)

1.5 C语言哪些表达式?课堂派哪里做错,做错的请在这里分析原因?

  • 算术表达式:例如:x+5*y,算术运算的表达式
  • 关系表达式:x>=5,x<6,x==8,大小关系判断的表达式
  • 逻辑表达式:ans’y’ || ans’Y’,与、或、非三种逻辑运算的表达式
  • 赋值表达式:x=6+y,进行变量赋值的表达式
  • 条件表达式:x>y?1:0,如果x>y则取1,否则取0
  • 逗号表达式:x+3,y*5,z-3,有逗号运算符组成的表达式
    8>6>3那时候没预习到,现在知道了8>6为真,表达式值为1然后1>3为假,所以表达式值为0

2.本周的内容,你还不会什么?
对于位运算的概念还是很模糊,不知道该怎么用
比如5&6位多少5|6为多少5^6为多少

3.循环结构考试总结(全部同学都要写)
7-4 小于m的最大的10个素数
错误代码

	int m,i,j,x,flag=1;
	scanf("%d",&m);
	for(i=m-1;i>50;i--)
	{
		for(j=2;j<m/2;j++)
		{
			x=i%j;
			if(x==0)goto out;
		}
		printf("%6d",i);
		if(flag==10)break;
		flag++;
		out:continue;
	}
	if(flag==1)
	printf("No primce!");
	return 0;

修正代码

int m,i,j,flag=0,count;
	scanf("%d",&m);
	for(i=m-1;i>1;i--)
	{
		count=0;
		for(j=i-1;j>=2;j--)
		{
			if(i%j==0)
			{
				count=1;
				break;
			}
		}
		if(count==0)
		{
		printf("%6d",i);
		flag++;
		}
		
		if(flag==10)break;
	
	}
	return 0;

还不是很满意,感觉题目要想很久,思路不在点上,而且还有一题现在还弄不清楚

posted @ 2017-11-18 21:31  夜雨生虹  阅读(363)  评论(10编辑  收藏  举报