函数2 2018年11月29日

函数2 2018年11月29日
以下内容仅供娱乐,欢迎随时探讨,请多指教
1、下列程序定义了n×n的二维数组,并在主函数中自动赋值。请编写函数 fun(int a[][n]),该函数的功能是:使数组左下半三角元素中的值全部置成0。

#include <stdio.h>
void fun(int a[][5])
{
	int i,k;
	for(i=0; i<5; i++)
		for(k=0; k<5; k++)
			if(i>=k)a[i][k]=0;
}
int main()
{
	int a[5][5];
	int i,k;
	for(i=0; i<5; i++)
		for(k=0; k<5; k++)
			a[i][k]=5*i+k+1; 
	fun(a);
	for(i=0; i<5; i++)
	{
		for(k=0; k<5; k++)
			printf("%d\t",a[i][k]);
		printf("\n\n");
	}
	return 0;
}

函数接口如下:int fun(int a[][N],int n)
2、下列程序定义了n×n的二维数组,并在主函数中赋值。请编写函数fun,函数的功能是求出数组周边元素的平均值并作为函数值返回给主函数中的s。
函数接口如下:double fun(int w[][N],int n)

#include <stdio.h>
double fun(int w[][5],int n)
{
	int i;
	double s;
	for(i=0; i<5; i++)
		s+=w[0][i]+w[4][i];
	for(i=1; i<5-1; i++)
		s+=w[i][0]+w[i][4];
	return s/(4*5-4);
}
int main()
{
	int a[5][5];
	int i,k;
	double s;
	for(i=0; i<5; i++)
		for(k=0; k<5; k++)
			a[i][k]=5*i+k+1;
	s=fun(a,5);
	for(i=0; i<5; i++)
	{
		for(k=0; k<5; k++)
			printf("%d\t",a[i][k]);
		printf("\n\n");
	}
	printf("s=%lf\n",s);
	return 0;
}

3、请编写一个函数void fun(int tt[m][n],int pp[n]),tt指向一个m行n列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指定一维数组中。二维数组中的数已在主函数中赋予。
函数接口如下:void fun(int tt[M][N], int pp[N])

#include <stdio.h>
#define M 3
#define N 3
void fun(int tt[M][N], int pp[N])
{
	int i,k,n;
	for(i=0; i<3; i++) //列
	{
		n=0;
		for(k=0; k<3; k++) //行
		{
			if( tt[k][i] < tt[n][i] )n=k;//记录
		}
		pp[i]=tt[n][i];
	}
}
int main()
{
	int tt[M][N]= {{5,2,13},{4,11,6},{7,8,9}},pp[N];
	int i,k;
	fun(tt,pp);
	printf("before is\n");
	for(i=0; i<M; i++)
	{
		for(k=0; k<N; k++)
			printf("%d\t",tt[i][k]);
		printf("\n\n");
	}
	for(i=0; i<3; i++)
		printf("%d ",pp[i]);
	return 0;
}

4、请编写一个函数unsigned fun(unsigned w),w是一个大于10的无符号整数,若w是n(n≥2)位的整数,则函数求出w后n-1位的数作为函数值返回。
函数接口如下:unsigned int fun(unsigned int w)

#include <stdio.h>
//注意范围
unsigned int fun(unsigned int w)
{
	if(w>=10000) return w%10000;
	if(w>=1000) return w%1000;
	if(w>=100) return w%100;
	return w%10;
}
int main()
{
	unsigned int w;
	printf("input a integer\n");
	scanf("%u",&w);
	w=fun(w);
	printf("%u\n",w);
	return 0;
}

5、请编写一个函数float fun(double h),函数的功能是对变量h中的值保留2位小数,并对第三位进行四舍五入(规定h中的值为正数)。
函数接口如下:float fun(float h)

#include <stdio.h>
float fun(float h)
{
	long long t;
	h=h*1000;
	t=(h+5)/10;
	return (float)t/100;
}
int main()
{
	float h;
	printf("input a float\n");
	scanf("%f",&h);
	h=fun(h);
	printf("answer is %.2f\n",h);
	return 0;
}

6、请编写一个函数void fun(char *s),该函数的功能使把字符串中的内容逆置。
函数接口如下:void fun(char *s)

#include <stdio.h>
#include <string.h>
void fun(char *s)
{
	int i,n;
	char temp;
	n=strlen(s);
	for(i=0; i<n/2; i++)
	{
		temp=s[i];
		s[i]=s[n-i-1];
		s[n-i-1]=temp;
	}
}
int main()
{
	char a[100];
	int i;
	printf("input your strings\n");
	gets(a);
	printf("before is:\n");
	puts(a);
	fun(a);
	printf("then is:\n");
	puts(a);
	for(i=0; a[i]!='\0'; i++)
		printf("%c",a[i]);
	return 0;
}

7、编写程序,实现矩阵(3行3列)的转置(即行列互换)。
函数接口如下:void fun(int array[3][3])

#include <stdio.h>
void fun(int array[3][3])
{
	int b[3][3];
	int i,k;
	for(i=0; i<3; i++)
		for(k=0; k<3; k++)
			b[i][k]=array[k][i];
	for(i=0; i<3; i++)
		for(k=0; k<3; k++)
			array[i][k]=b[i][k];
}
int main()
{
	int a[3][3];
	printf("input 3*3 numbers\n");
	int i,k;
	for(i=0; i<3; i++)
		for(k=0; k<3; k++)
			scanf("%d",&a[i][k]);
	fun(a);
	for(i=0; i<3; i++)
	{
		for(k=0; k<3; k++)
			printf("%d\t",a[i][k]);
		printf("\n\n");
	}
	return 0;
}

8、编写函数fun,该函数的功能是:从字符中删除指定的字符,同一字母的大、小写按不同字符处理。
函数接口如下:void fun(char s[],int c)

#include<stdio.h>
#include<string.h>
void fun(char s[],int c)
{
	int i,k,pos,count=0;
	for(i=0; i<strlen(s); i++)
	{
		if(*s+i == c)
		{
			pos=i;
			for(k=pos; k<strlen(s)+1; k++)
				s[k]=s[k+1];
		}
	}
}
int main()
{
	int c;
	char s[100]="aaabcdefghijklmnopqrst";
	printf("before is\n");
	puts(s);
	do
	{
		printf("input your string\n");
		scanf("%c",&c);
		printf("then is\n");
		fun(s,c);
		puts(s);
		getchar();
	}
	while(1);
	return 0;
}

9、编写函数int fun(int lim,int aa[max]),该函数的功能是求出小于或等于lim的所有素数并放在aa数组中,该函数返回所求的素数的个数。
函数接口如下:int fun(int lim, int aa[MAX])

#include<stdio.h>
#define MAX 100
int fun (int lim,int aa[MAX])
{
	int a,i,t=0;
	for(a=2; a<=lim; a++)
	{
		for(i=2; i<a; i++)
		{
			if(a%i==0)
				break;
		}
		if(i==a)//如果大于2小于a之间的所有数都不能被a整除,则a就是素数
			aa[t++]=a;
	}
	return t;
}
int main()
{
	int lim,i,sum;
	int aa[MAX];
	printf("请输入一个整数:>");
	scanf("%d",&lim);
	sum=fun(lim,aa);
	for(i=0; i<sum; i++)
	{
		if(i%10==0&&i!=0)//i是10的倍数就换行
			printf("\n");
		printf("%5d",aa[i]);//打印间隔为5个字节
		printf("\n");
	}
	printf("sum=%d\n",sum);
	return 0;
}

10、请编写函数fun,对长度为7个字符的字符串,除首尾字符外,将其余5个字符按ascii码降序排列。
函数接口如下:void fun(char *s,int num)

#include "stdio.h"
#include "string.h"
void fun(char *s,int num)
{
	int i,k;
	for(i=1; i<strlen(s); i++)
		for(k=1; k<strlen(s)-i; k++)
			if(s[k]>s[k+1])
			{
				char t= s[k];
				s[k]=s[k+1],s[k+1]=t;
			}
}
int main()
{
	char s[7];
	int n;
	do
	{
		printf("input ypur strings(6)\n");
		gets(s);
		n=strlen(s);
	}
	while(n != 6);
	fun(s,5);
	printf("then is\n");
	puts(s);
	return 0;
}

11、请编写函数fun,该函数的功能是:判断字符串是否为回文?若是则函数返回1,主函数中输出yes,否则返回0,主函数中输出no。回文是指顺读和倒读都是一样的字符串。
函数接口如下:int fun(char *str)

#include "stdio.h"
#include "string.h"
int fun(char *str)
{
	int i,j,t=0;
	for(i=0,j=strlen(str)-1; i<=j; i++,j--)
		t+=str[i]-str[j];
	if(t == 0)return 1;
	return 0;
}
int main()
{
	char str[1000];
	printf("input your strings\n");
	gets(str);
	if(fun(str) == 1)printf("yes\n");
	if(fun(str) == 0)printf("no\n");
	return 0;
}

12、请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得调用c语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字符串。
函数接口如下:char *fun(char *s,char *t)

#include<stdio.h>
char *fun(char *s, char *t)
{
	//注意返回的是地址,不要对地址修改(++`--)
	int s1 = 0, t1 = 0;
	char *ss=s, *tt=t;
	while (*ss)
	{
		s1++;
		ss++;
	}
	while (*tt)
	{
		t1++;
		tt++;
	}
	if (t1 >= s1)
		return t;
	return s;
}
int main()
{
	char a[80], b[80];
	printf("input a string:\n ");
	gets(a);
	printf("input a string again:\n");
	gets(b);
	printf("The longer is:\n");
	puts(fun(a, b));
	return 0;
}

13、请编写一个函数fun,它的功能是:根据以下公式求x的值(要求满足精度0.0005,即某项小于0.0005时停止迭代):
x/2=1+1/3+1×2/3×5+1×2×3/3×5×7+1×2×3×4/3×5×7×9+…+1×2×3×…×n/3×5×7×(2n+1)
程序运行后,如果输入精度0.0005,则程序输出为3.14…。
函数接口如下:double fun(double eps)

#include <stdio.h>//pi
#include <math.h>
int n_(int n)
{
	if(1 == n)return 1;
	else return n*n_(n-1);
}
double fun(double eps)
{
	double x=1,t,sum=0;
	int n;
	for(n=1; ; n++)
	{
		double t;
		t = 1.0*n_(n)/n_(2*n+1)*2;
		sum+= t;
		if(t <= eps)break;
	}
	return 2*(x+sum);
}
int main()
{
	double eps;
	do
	{
		printf("input a 精度\n");
		scanf("%lf",&eps);
	}
	while(fabs(eps) >= 1);
	printf("x/2=%lf\n",fun(eps));
	return 0;
}

14、请编写一个函数fun,它的功能是:找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回。数组元素中的值已在主函数中赋予。主函数中x是数组名,n 是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。
函数接口如下:void fun (int a[],int n, int *max, int *d)

#include <stdio.h>
#include <math.h>
void fun (int a[],int n, int *max, int *d)
{
	int i,pos=0;
	for(i=1; i<n; i++) {
		if(a[i]>a[pos])pos=i;
	}
	*max=a[pos],*d=pos+1;
}
int main()
{
	int a[15]= {1,433,54,6,65,7,86,9,80,7,6,4,54,95,45};
	int max,d;
	fun(a,15,&max,&d);
	printf("max=%d\nindex=%d\n",max,d);
	return 0;
}

15、请编写一个函数fun,它的功能是:将ss所指字符串中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。
函数接口如下:void fun(char *ss)

#include <stdio.h>
#include <string.h>
void fun(char *ss)
{
	int i;
	for(i=0; i<strlen(ss); i+=2) {
		if(ss[i]>='a' && ss[i]<='z')ss[i]-=32;
	}
}
int main()
{
	char ss[166];
	printf("input a string\n");
	gets(ss);
	fun(ss);
	printf("then is\n");
	puts(ss);
	return 0;
}

16、请编写函数fun,其功能是:将s所指字符串中除了下标为偶数、同时ascii值也为偶数的字符外,其余的全都删除;串中剩余字符所形成的一个新串放在t所指的一个数组中。
函数接口如下:void fun(char *s,char t[])


17、假定输入的字符串中只包含字母和号。请编写函数fun,它的功能是:使字符串尾部的号不得多于n个;若多于n个,则删除多于的号;若少于或等于n个,则什么也不做,字符串中间和前面的号不删除。
函数接口如下:void fun(char *a,int n)


18、请编写一个函数,用来删除字符串中的所有空格。
函数接口如下:void fun(char *str)

#include <stdio.h>
#include <string.h>
void fun(char *str)
{
	int i;
	for(i=0; i<=strlen(str); i++) {
		if(str[i]=' ') {
			int pos=i;
			for(; str[pos]!='\0'; pos++)
				str[pos]=str[pos+1];
		}
	}
}
int main()
{
	char str[166];
	printf("input a string\n");
	gets(str);
	fun(str);
	printf("then is\n");
	puts(str);
	return 0;
}

19、编写函数fun,功能是:根据以下公式计算S,计算结果作为函数值返回;n通过形参传入。 S=1+1/(1+2)+1/(1+2+3)+…….+1/(1+2+3+4+……+n)
函数接口如下:float fun (int n)

#include <stdio.h>
int n_(int n)
{
	if(n==1)return 1;
	return n+n_(n-1);
}
float fun (int n)
{
	float s=0;
	int i;
	for(i=1; i<=n; i++)
		s+=1.0/(n_(i));
	return s;
}
int main()
{
	int n;
	printf("input n\n");
	scanf("%d",&n);
	printf("%f\n",fun(n));
	return 0;
}

20、编写一个函数fun,它的功能是:根据以下公式求p的值,结果由函数值带回。m与n为两个正整数,且要求m>n。 p=m!/n!(m-n)!
函数接口如下:float fun(int m, int n)


21、编写函数fun,它的功能是:利用以下的简单迭代方法求方程cos(x)-x=0的一个实根。
迭代步骤如下:
(1)取x1初值为0.0;
(2)x0=x1,把x1的值赋给x0;
(3)x1=cos(x0),求出一个新的x1;
(4)若x0-x1的绝对值小于0.000001,则执行步骤(5),否则执行步骤(2);
(5)所求x1就是方程cos(x)-x=0的一个实根,作为函数值返回。
程序将输出root=0.739085。
函数接口如下::float fun()


22、用递归法实现求阶乘,在主函数输入一个整数,并输出该整数的阶乘。

#include "stdio.h"

int fun(int x)
{
	if(1 == x) return 1;
	return x*fun(x-1);
}
int main()
{
	int x;
	printf("input x\n");
	scanf("%d",&x);
	printf("numbers=%d\n",fun(x));
	return 0;
}

23、写一函数,用“冒泡法”对输入的10个字符按由小到大顺序排序。然后在主函数中调用

#include"stdio.h"
void input(int a[],int n)
{
	int i;
	for(i=1; i<=n; i++) {
		printf("请输入第%d个数字\n",i);
		scanf("%d",&a[i]);
	}
}
void swap(int a[],int n)
{
	int i,j,temp;
	for(i=1; i<=n-1; i++)
		for(j=1; j<=n-i; j++) {
			if(a[j]<a[j+1])temp=a[j],a[j]=a[j+1],a[j+1]=temp;
		}
}
int main()
{
	int i,a[1001],n;
	printf("请输入数字的数量N(1--1000)\n");
	scanf("%d",&n);
	printf("请输入%d个数字\n",n);
	input(a,n);
	swap(a,n);
	for(i=1; i<=n; i++) {
		printf("%d ",a[i]);
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43310774/article/details/84583211