C语言程序设计

勿喷,学习留作纪念,也供新手参考,新手入门

浙大版《C语言程序设计(第3版)》题目集

  • C语言程序设计
            • 勿喷,学习留作纪念,也供新手参考,新手入门
  • 函数题
      • 练习5-1 求m到n之和
      • 练习5-2 找两个数中最大者
      • 练习5-3 数字金字塔
      • 习题5-1 符号函数
      • 习题5-2 使用函数求奇数和
      • 习题5-3 使用函数计算两点间的距离
      • 习题5-4 使用函数求素数和
      • 习题5-5 使用函数统计指定数字的个数
      • 习题5-6 使用函数输出水仙花数int
      • 习题5-7 用函数求余弦函数的近似值
      • 习题6-1 分类统计字符个数
      • 习题6-2 使用函数求特殊a串数列和
      • 习题6-3 使用函数输出指定范围内的完数
      • 习题6-4 使用函数输出指定范围内的Fibonacci数
      • 习题6-5 使用函数验证哥德巴赫猜想
      • 代码链接

函数题

练习5-1 求m到n之和

是负数的时候 把负数变成正数  
是正数的时候,不变
不管是m是负数还是正数,其结果都是前n位和-前m位和

int sum(int m, int n)
{
	int sum1=0,sum2=0; 
	if(m<0){
		m = -m;
	}
	sum1 = (m+1)*m/2;
	sum2 = (n+1)*n/2;
		return sum2-sum1;
	
}

练习5-2 找两个数中最大者

int max( int a, int b ){
	if(a>b)
		return a;
	else
		return b;
}

练习5-3 数字金字塔

void pyramid( int n ){
	int i,j,k;
	for(i=1;i<=n;i++)    //
	{
		for(j=n-i;j>0;j--)   //每一层前的空格 第一行 n-1个 第二行 n-2个...
		{
			printf(" ");	
		}
		for(k=i;k>0;k--)	//输出每行的字符,第一行1个第二行2个...
			printf("%d ",i);
		printf("\n");
	}
}

习题5-1 符号函数

int sign( int x ){
	if(x>0)
		return 1;
	else if(x==0)
		return 0;
	else
		return -1;
	
}

习题5-2 使用函数求奇数和

int even( int n ){
	if(n<0)		//传入数为负数时,切换成正数
		n=-n;
	if(n%2 == 1)
		return 0;
	else
		return 1;
}


int OddSum( int List[], int N ){
	int i;
	int sum=0;
	for(i=0;i<N;i++)
	{
		if(even(List[i]) == 0)   //为奇数时,累加
			sum+= List[i];
	}
	return sum;
}

习题5-3 使用函数计算两点间的距离


区分 abs()和fabs()
函数原型: int abs(int x);
函数功能: 求整数x的绝对值

函数原型:double fabs(double x);
函数功能:求浮点数x的绝对值.

函数名称: pow
函数原型: double pow(double x,double y);
函数功能: 计算以x为底数的y次幂,即计算x^y的值.

函数原型: double sqrt(double x);
函数功能: 计算x的开平方.
函数返回: 计算结果
参数说明: x>=0

double dist( double x1, double y1, double x2, double y2 ){
	//勾股定理
	double x = fabs(x2 - x1);   //去绝对值
	double y = fabs(y2 - y1);
	return sqrt(pow(x,2)+pow(y,2));
}

习题5-4 使用函数求素数和

素数是在自然数里相对而言的,自然数概念指用以计量事物的件数或表示事物件数的数 
即用数码01234、到正无穷所表示的数 
素数不可以为负数

int prime( int p ){   
	if(p <= 1)   // 1,负数都不是素数,所以首先排除
		return 0;
	for(int i=2;i<p;i++)  
		if(p%i == 0)	//能被比p小的数整除,不是素数直接返回0
			return 0;
	return 1;
}

int PrimeSum( int m, int n ){
	int sum = 0; //素数之和
	while(n>=m){
		if(prime(m))
		sum += m;
		m++;
	}
	return sum;
}

习题5-5 使用函数统计指定数字的个数

int CountDigit( int number, int digit ){
	int num=0; //dight 出现次数
	if(number < 0 )  // number 切 正数
		number = -number;
	
	if(number == 0 && digit == 0)
		return 1;

	while(number > 0){
		if(number%10 == digit)
			num++;
		number = number / 10;
	}
	return num;
}
该题该题有漏洞 0 2情况
如果将if(number == 0 && digit == 0)改为if(number == 0) 还是能过,自行分析
所以说,写题,要理解题意,不单单是能跑过

习题5-6 使用函数输出水仙花数int

narcissistic( int number ){
	int i,j;  //临时变量
	int set,bit=0; //set 个位 bit 几位数 
	int c_num=number;
	
	while(c_num>0){   //查出number 位数
		bit++;
		c_num = c_num / 10;
	}

	c_num=number;
	//判断水仙花
	while(c_num>0){   
		set=1;
		j=c_num % 10;
		for(i=1;i<=bit;i++)  //计算各个位的n次方
			set *=j;
		number -= set;		// 将number 依次减去 各个位的n次方 如果最后等于0说明是---
		c_num = c_num / 10;
	}

	if(number == 0)		//说明是水仙花
		return 1;
	return 0;
}

void PrintN( int m, int n ){   // (m,n)
	m++;
	while(m < n){
		if(narcissistic(m) == 1)
			printf("%d\n",m);
		m++;
	}
}

习题5-7 用函数求余弦函数的近似值

	注意审题要求,最后一项小于e,说明还是加进去最后一项小于e的值
	所以可以用do while语句
	此题可以分步骤,首先计算出分母,分子值,然后flag标志加减位,最后计算

double funcos( double e, double x ){
	int i,temp=0,flag=0;   //flag 标志位,temp 指数位
	double sum1,sum=1;		 //分母sum1   sum最终值


	do{ 	//最后一项的绝对值小于e
		temp=temp+2;
		sum1=1;
		for(i=1;i<=temp;i++)   //分母sum1
			sum1*=i;
		

		if(flag == 0){
			sum -= pow(x,temp)/sum1;
			flag=1;
		}
			
		else{
			sum += pow(x,temp)/sum1;
			flag=0;
		}
		
		}while(fabs(pow(x,temp)/sum1) >= e );
	return sum;
}

习题6-1 分类统计字符个数

void StringCount( char s[] ){
	int letter = 0, blank = 0, digit = 0, other = 0;
	int i = 0;
	for(i=0; s[i]!='\0'; i++){
		if(s[i]>=48 && s[i]<=57)   //ASCII码表示 0-9
			digit++;
		else if((s[i]>=65 && s[i]<=90)||(s[i]>=97 && s[i]<=122)) // a-z ,A-Z
			letter++;
		else if(s[i] == ' '||s[i] == '\n')
			blank++;
		else 
			other++;
	}
	printf("letter = %d, blank = %d, digit = %d, other = %d",letter, blank, digit, other);
}

https://blog.csdn/qq_44520665/article/details/113779176(ASCII)

习题6-2 使用函数求特殊a串数列和

int fn( int a, int n ){	
	int i,sum=0;
	for(i=1;i<=n;i++)	//累乘
		sum = sum*10+a;
	return sum;
}
	
	
int SumA( int a, int n ){
	int temp,sum=0;
	for(temp=1;temp<=n;temp++){
		sum += fn(a,temp);	
	}
	return sum;
}

习题6-3 使用函数输出指定范围内的完数

1 不是完数,直接排除
int factorsum( int number ){		//返回计算数 --因子的所有和   ---
	int half = number/2;
	int i,sum=1;
	if(number == 1)
		return 0;
	for(i=2; i<=half; i++){
		if(number%i == 0)
			sum += i;
	}
		return sum;
}


void PrintPN( int m, int n ){  
	int flag = 1;		//标志位 检测区间内是否有完数
	for(int i=m; i<=n; i++){
		if(factorsum(i) == i){ 	//是完数,输出
			flag = 0;
			printf("%d = 1",i);
			for(int j=2; j<=i/2; j++){
				if(i%j == 0)
					printf(" + %d",j);
			}
			printf("\n");
		}
		
	}
	if(flag)
		printf("No perfect number");
}

习题6-4 使用函数输出指定范围内的Fibonacci数

int fib( int n ){
	int a =0, b =1, temp;

	for(int j=1; j<n; j++){   //求第n个完数 0 1 1 2 3 5 .... 
		temp = b;
		b = a+b;
		a = temp;
	}
	return b;
}

void PrintFN( int m, int n ){
	int flag = 0;   //首个完数前面没有空格,同时当循环结束flag = 0时,说明没有完数
	
	for(int i=1; fib(i)<=n; i++){   
		if(fib(i) >= m){
			if(flag == 0)
				printf("%d",fib(i));
			else
				printf(" %d",fib(i));
			flag ++;
		}	
	}

	if(flag == 0){ 
		//TODO
		printf("No Fibonacci number");
	}
}

习题6-5 使用函数验证哥德巴赫猜想

int prime( int p ){
	if(p<=1){  //小于等于1,非素数 返回0
		return 0;
	}
	for(int i=2; i<p; i++)
		if(p%i == 0) //能被整除,返回0
			return 0;
	return 1;
}


void Goldbach( int n ){
	for(int i=2;i<n;i++){
		if(prime(i)){  // i 为素数时
			if(prime(n-i)){	// i,n-i 同时为素数时
				printf("%d=%d+%d",n,i,n-i);
				break;
			}
		}
	}
}

代码链接

https://pan.baidu/s/1Bu5HIeQMeIzsimnyWnaFBA提取码:rndk

更多推荐

C语言程序设计题(函数题前15道)