- 简答题
下面内容只能利用函数知识完成
1、下列程序定义了n×n的二维数组,并在主函数中自动赋值。请编写函数fun(int a[][n]),该函数的功能是:使数组左下半三角元素中的值全部置成0。
函数接口如下:int fun(int a[][N],int n)
//
//功能描述 :使数组左下半三角元素中的值全部置成0
//返回值 :void
//编写日期 :2018年12月01日
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
void fun(int (*a)[100],int n)
{
int i,j;
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
{
if (i>=j)
{
*(*(a+i)+j)=0;
}
}
}
}
void main()
{
int a[100][100],n,i,j;
printf("请输入需要几阶的方阵\n");
scanf("%d",&n);
srand(time(NULL));
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
{
*(*(a+i)+j)=rand();
}
}
fun(a,n);
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
{
printf("%-8d",*(*(a+i)+j));
}
printf("\n");
}
}
2、下列程序定义了n×n的二维数组,并在主函数中赋值。请编写函数fun,函数的功能是求出数组周边元素的平均值并作为函数值返回给主函数中的s。
函数接口如下:double fun(int w[][N],int n)
//
//功能描述 :数组周边元素的平均值
//返回值 :void
//编写日期 :2018年12月01日
#include "stdio.h"
double fun(int (*w)[100],int n)
{
int sum=0,i,j;
for(i=0;i<n;i++)
{
for (j=0;j<n;j++)
{
if (j==0||i==0||j==n||i==n)
sum+= *(*(w+i)+j);
}
}
return sum/(4.0*n-1);
}
void main()
{
double s;
int i,j,w[100][100],n;
printf("请输入需要输入几阶方阵\n");
scanf("%d",&n);
printf("请输入你的方阵\n");
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
{
scanf("%d",*(w+i)+j);
}
}
s=fun(w,n);
printf("数组周边元素的平均值为%lf\n",s);
}
3、请编写一个函数void fun(int tt[m][n],int pp[n]),tt指向一个m行n列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指定一维数组中。二维数组中的数已在主函数中赋予。
函数接口如下:void fun(int tt[M][N], int pp[N])
//
//功能描述 :每列最小值
//返回值 :void
//编写日期 :2018年12月01日
#include "stdio.h"
void fun(int (*tt)[100],int *pp,int m,int n)
{
int i,j,min;
for (i=0;i<n;i++)
{
min=0;
for (j=0;j<m;j++)
{
if ( *(*(tt+j)+i) < *(*(tt+min)+i))
{
min=j;
}
}
*(pp+i) = *(*(tt+min)+i);
}
}
void main()
{
int tt[100][100],pp[100],i,j,m,n;
printf("请输入你需要输入几行几列\n");
scanf("%d%d",&m,&n);
printf("请输入你的二维数组\n");
for (i=0;i<m;i++)
{
for (j=0;j<n;j++)
{
scanf("%d",*(tt+i)+j);
}
}
fun (tt,pp,m,n);
printf("每列最小值为\n");
for (i=0;i<n;i++)
{
printf("%d列最小值为%d\n",i+1,*(pp+i));
}
}
4、请编写一个函数 ,w是一个大于10的无符号整数,若w是n(n≥2)位的整数,则函数求出w后n-1位的 数作为函数值返回。
函数接口如下:unsigned int fun(unsigned int w)
//
//功能描述 :前n-1位
//返回值 :void
//编写日期 :2018年12月08日
#include "stdio.h"
unsigned fun(unsigned w)
{
int c = 0, t = w, i;
while (t)
{
c++;
t /= 10;
}
if (c > 1)
{
t = 1;
for (i = 0; i < c-1; ++i)
t *= 10;
return (w % t);
}
return 0;
}
void main()
{
int w;
printf("请输入一个数\n");
scanf("%d",&w);
printf("%d\n", fun(w));
}
5、请编写一个函数float fun(double h),函数的功能是对变量h中的值保留2位小数,并对第三位进行四舍五入(规定h中的值为正数)。
函数接口如下:float fun(float h)
//
//功能描述 :小数四舍五入
//返回值 :void
//编写日期 :2018年12月03日
#include "stdio.h"
float fun(float n)
{
char s[100];
sprintf(s, "%.2f", n);
sscanf(s, "%f", &n);
return n;
}
void main()
{
float a;
scanf("%f", &a);
printf("%.2f\n", fun(a));
}
6、请编写一个函数void fun(char *s),该函数的功能使把字符串中的内容逆置。
函数接口如下:void fun(char *s)
//
//功能描述 :字符串逆置
//返回值 :void
//编写日期 :2018年12月03日
#include "stdio.h"
void fun(char *s)
{
int i=0,j,l;
char t;
while(*(s+i))
{
i++;
}
l=(i-1)/2;
for (j=0;j<l;j++)
{
t= *(s+j);
*(s+j)=*(s+i-1-j);
*(s+i-1-j)=t;
}
}
void main()
{
char s[200];
printf("请输入一个字符串\n");
gets(s);
fun(s);
puts(s);
}
7、编写程序,实现矩阵(3行3列)的转置(即行列互换)。
函数接口如下:void fun(int array[3][3])
//
//功能描述 :矩阵转置
//返回值 :void
//编写日期 :2018年12月03日
#include "stdio.h"
void fun(int (*array)[3])
{
int i,j,t;
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{
if (j>i)
{
t= *(*(array+i)+j);
*(*(array+i)+j)= *(*(array+j)+i);
*(*(array+j)+i)=t;
}
}
}
}
void main()
{
int array[3][3],i,j;
printf("请输入一个三乘三的矩阵\n");
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{
scanf("%d",*(array+i)+j);
}
}
fun(array);
printf("转置后为\n");
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{
printf("%-3d",*(*(array+i)+j));
}
printf("\n");
}
}
8、编写函数fun,该函数的功能是:从字符中删除指定的字符,同一字母的大、小写按不同字符处理。
函数接口如下:void fun(char s[],int c)
//
//功能描述 :修改字符串
//返回值 :void
//编写日期 :2018年12月03日
#include "stdio.h"
void fun(char *s,char c)
{
int i,j;
for (i=0;*(s+i);i++)
{
if (*(s+i)==c)
{
for (j=i;*(s+j);j++)
{
*(s+j)= *(s+j+1);
}
}
}
}
void main()
{
char s[1000],c;
printf("请输入你的子字符串\n");
gets(s);
printf("请输入你需要删除的字符\n");
scanf("%c",&c);
fun(s,c);
printf("修改后为\n");
puts(s);
}
9、编写函数int fun(int lim,int aa[max]),该函数的功能是求出小于或等于lim的所有素数并放在aa数组中,该函数返回所求的素数的个数。
函数接口如下:int fun(int lim, int aa[MAX])
//
//功能描述 :小于或等于lim的所有素数
//返回值 :void
//编写日期 :2018年12月03日
#include "stdio.h"
int sushu(int i)
{
int a;
for (a=2;a<i;a++)
{
if(i%a==0)
break;
}
if (a==i)
return 1;
else
return 0;
}
int fun(int lim,int *aa)
{
int i,j=0;
for (i=2;i<=lim;i++)
{
if (sushu(i))
{
*(aa+j)=i;
j++;
}
}
return j;
}
void main()
{
int aa[1000],i,j,lim;
printf("请输入lim\n");
scanf("%d",&lim);
j=fun(lim,aa);
printf("一共有%d个符合条件的数,分别为\n",j+1);
for (i=0;i<j;i++)
{
printf("%-5d",*(aa+i));
}
printf("\n");
}
10、请编写函数fun,对长度为7个字符的字符串,除首尾字符外,将其余5个字符按ascii码降序排列。
函数接口如下:void fun(char *s,int num)
//
//功能描述 :字符串的修改
//返回值 :void
//编写日期 :2018年12月03日
#include "stdio.h"
void fun(char *s)
{
int i,j,max;
char t;
for (i=1;i<5;i++)
{
max=i;
for (j=i+1;j<6;j++)
{
if (*(s+max)< *(s+j))
max=j;
}
t=*(s+max);
*(s+max)= *(s+i);
*(s+i)=t;
}
}
void main()
{
char s[8];
printf("请输入你的七个字符\n");
gets(s);
fun(s);
printf("排列后为\n");
puts(s);
}
11、请编写函数fun,该函数的功能是:判断字符串是否为回文?若是则函数返回1,主函数中输出yes,否则返回0,主函数中输出no。回文是指顺读和倒读都是一样的字符串。
函数接口如下:int fun(char *str)
//
//功能描述 :判断是否是回文
//返回值 :void
//编写日期 :2018年12月03日
#include "stdio.h"
int fun(char *str)
{
int i=0,n,j;
while(*(str+i))
{
i++;
}
n=(i-1)/2;
for (j=0;j<n;j++)
{
if (*(str+j)!= *(str+i-1-j))
break;
}
if (j==n)
return 1;
else
return 0;
}
void main()
{
char str[1000];
printf("请输入你的字符串\n");
gets(str);
if (fun(str))
printf("YES\n");
else
printf("NO\n");
}
12、请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得调用c语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字符串。
函数接口如下:char *fun(char *s,char *t)
//
//功能描述 :比较字符串长度
//返回值 :void
//编写日期 :2018年12月03日
#include "stdio.h"
char *fun(char *s,char *t)
{
int i=0,j=0;
while(*(s+i))
i++;
while(*(t+j))
j++;
if (i>j)
return s;
else if(j>i)
return t;
else if (j==i)
return s;
}
void main()
{
char s[1000],t[1000];
printf("请输入字符串一\n");
gets(s);
printf("请输入字符串二\n");
gets(t);
printf("比较后结果为\n");
puts(fun(s,t));
}
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)
//
//功能描述 :求精确
//返回值 :void
//编写日期 :2018年12月03日
#include "stdio.h"
double fun(double eps)
{
double i,j,t=1.0,s=1.0;
for (i=1.0,j=3.0;(t*(i/j))>=eps;i++,j=j+2)
{
t*=(i/j);
s+=t;
}
return s;
}
void main()
{
double s,eps;
printf("请输入最小精度\n");
scanf("%lf",&eps);
s=fun(eps);
printf("结果为%lf\n",2*s);
}
14、请编写一个函数fun,它的功能是:找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回。数组元素中的值已在主函数中赋予。主函数中x是数组名,n是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。
函数接口如下:void fun (int a[],int n, int *max, int *d)
//
//功能描述 :求数组中的最大值和他的下标
//返回值 :void
//编写日期 :2018年12月03日
#in
#include "stdio.h"
void fun (int *a,int n, int *max, int *d)
{
int i;
*d=0;
for (i=0;i<n;i++)
{
if ( *(a+i)> *(a+*d) )
{
*d=i;
}
}
*max= *(a+*d);
}
void main()
{
int a[1000],max,n,i,d;
printf("请输入你需要输入多少个数\n");
scanf("%d",&n);
printf("请输入%d个数\n",n);
for (i=0;i<n;i++)
{
scanf("%d",a+i);
}
fun(a,n,&max,&d);
printf("最大的数为%d他的下标为%d\n",max,d);
}
15、请编写一个函数fun,它的功能是:将ss所指字符串中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。
函数接口如下:void fun(char *ss)
//
//功能描述 :修改字符
//返回值 :void
//编写日期 :2018年12月03日
#include "stdio.h"
void fun(char *ss)
{
int i;
for (i=0;*(ss+i);i++)
{
if (i%2)
{
if (*(ss+i)>='a'&&*(ss+i)<='z')
{
*(ss+i)=*(ss+i)-32;
}
}
}
}
void main()
{
char ss[1000];
printf("请输入你的字符串\n");
gets(ss);
fun(ss);
printf("修改完之后为\n");
puts(ss);
}
16、请编写函数fun,其功能是:将s所指字符串中除了下标为偶数、同时ascii值也为偶数的字符外,其余的全都删除;串中剩余字符所形成的一个新串放在t所指的一个数组中。
函数接口如下:void fun(char *s,char t[])
//
//功能描述 :修改字符
//返回值 :void
//编写日期 :2018年12月03日
#include "stdio.h"
void fun(char *s,char *t)
{
int i,j=0;
for (i=0;*(s+i);i++)
{
if (i%2==0)
{
if ((*(s+i))%2==0)
{
*(t+j)= *(s+i);
j++;
}
}
}
*(t+j)='\0';
}
void main()
{
char s[1000],t[1000];
printf("请输入你的字符串\n");
gets(s);
fun(s,t);
printf("修改之后为\n");
puts(t);
}
17、假定输入的字符串中只包含字母和号。请编写函数fun,它的功能是:使字符串尾部的号不得多于n个;若多于n个,则删除多于的号;若少于或等于n个,则什么也不做,字符串中间和前面的号不删除。
函数接口如下:void fun(char *a,int n)
//
//功能描述 :修改字符
//返回值 :void
//编写日期 :2018年12月03日
#include "stdio.h"
void fun(char *a,int n)
{
int i,j=0,k;
for (i=0;*(a+i);i++)
{
if (*(a+i)=='*')
{
j++;
}
if (j>n)
{
for (k=i;*(a+k);k++)
{
*(a+k)= *(a+k+1);
}
i--;
}
}
}
void main()
{
char a[1000];
int n;
printf("请输入你的字符串\n");
gets(a);
printf("请输入最多有多少个*\n");
scanf("%d",&n);
fun(a,n);
printf("修改后为\n");
puts(a);
}
18、请编写一个函数,用来删除字符串中的所有空格。
函数接口如下:void fun(char *str)
//
//功能描述 :修改字符
//返回值 :void
//编写日期 :2018年12月03日
#include "stdio.h"
void fun(char *str)
{
int i,j=0;
while(*(str+j))
{
if (*(str+j)==' ')
{
for (i=j;*(str+i);i++)
{
*(str+i)= *(str+i+1);
}
j=j-1;
}
j++;
}
}
void main()
{
char str[1000];
printf("请输入你的字符串\n");
gets(str);
fun(str);
printf("修改之后为\n");
puts(str);
}
19、编写函数fun,功能是:根据以下公式计算S,计算结果作为函数值返回;n通过形参传入。 S=1+1/(1+2)+1/(1+2+3)+…….+1/(1+2+3+4+……+n)
函数接口如下:float fun (int n)
//
//功能描述 :计算
//返回值 :void
//编写日期 :2018年12月08日
///
#include "stdio.h"
float fun (int n)
{
float s=0,i,t=0;
for (i=1.0;i<=n;i++)
{
t+=i;
s+=1/t;
}
return s;
}
void main()
{
int n;
printf("请输入n\n");
scanf("%d",&n);
printf("计算后为%lf\n",fun(n));
}
20、编写一个函数fun,它的功能是:根据以下公式求p的值,结果由函数值带回。m与n为两个正整数,且要求m>n。p=m!/n!(m-n)!
函数接口如下:float fun(int m, int n)
//
//功能描述 :计算
//返回值 :void
//编写日期 :2018年12月08日
///
#include "stdio.h"
long double jiecheng(long double n)
{
if (n==1||n==0)
return 1;
else
return n*jiecheng(n-1);
}
long double fun(int m, int n)
{
int t;
if (n>m)
t=n,n=m,m=t;
return jiecheng(m)/(jiecheng(n)*jiecheng(m-n));
}
void main()
{
int m,n;
printf("请输入m和n\n");
scanf("%d%d",&m,&n);
printf("结果为%lf",fun(m,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()
//
//功能描述 :估计
//返回值 :void
//编写日期 :2018年12月08日
///
#include "stdio.h"
#include "math.h"
float fun()
{
float x1=0.0,x0=1;
while(fabs(x0-x1)>0.000001)
{
x0=x1;
x1=cos(x0);
}
return x1;
}
void main()
{
printf("root=%f",fun());
}
22、用递归法实现求阶乘,在主函数输入一个整数,并输出该整数的阶乘。
//
//功能描述 :递归阶乘
//返回值 :void
//编写日期 :2018年12月08日
///
#include "stdio.h"
long double jiecheng(int n)
{
if (n==1||n==0)
return 1;
else
return n*jiecheng(n-1);
}
void main()
{
int n;
printf("请输入你需要求阶乘的数\n");
scanf("%d",&n);
while (n<0)
{
printf("wrong input please input again");
scanf("%d",&n);
}
printf("阶乘为%.0lf\n",jiecheng(n));
}
23、写一函数,用“冒泡法”对输入的10个字符按由小到大顺序排序。然后在主函数中调用
///
//功能描述 :冒泡排序
//返回值 :void
//编写日期 :2018年12月08日
#include "stdio.h"
void paixu(char *a)
{
int i,j;
char t;
for (i=0;i<=8;i++)
{
for (j=0;j<=9-i-1;j++)
{
if (*(a+j)> *(a+j+1))
{
t=*(a+j),*(a+j)=*(a+j+1),*(a+j+1)=t;
}
}
}
}
void main()
{
char a[10],i;
printf("请输入需要排序的十个数\n");
for (i=0;i<=9;i++)
{
scanf("%c",a+i);
}
paixu(a);
printf("排好顺序后为\n");
for (i=0;i<=9;i++)
{
printf("%-3c",*(a+i));
}
}