资源描述
1、 找出2xM整型二维数组中最大元素的值,并将此值返回调用函数。
int fun (int a[][M])
{
int i,j,max=a[0][0];
for(i=0;i<2;i++)
for(j=0;j<M;j++)
if(max<a[i][j])
max=a[i][j];
return max;}
2、 根据以下公式求π值。
double fun ( double eps)
{ double s=0.0,s1=1.0;
int n=0;
while(s1>=eps)
{ s=s+s1;
s1=s1*n/(2*n+1);
n++;
}
return 2*s;
}
3、求出1~1000之间能被7或11整除但不能同时被7和11整除的所有整数,并将其放在a所指的数组中,通过n返回这些数的个数。
void fun (int *a, int *n)
{ int i,j=0;
for(i=1;i<=1000;i++)
if((i%7==0||i%11==0)&&i%77!=0)
a[j++]=i;
*n=j;
}
4、删除字符串中所有*号。
void fun( char *a )
{ int i,j=0;
for(i=0;a[i]!='\0';i++)
if(a[i]!='*')
a[j++]=a[i];
a[j]='\0';
}
5、实现两个字符串的连接(不要同时使用库函数),即把p2所指的字符串连接到p1所指的字符串的后面。
void fun(char p1[], char p2[])
{
int i,j;
for(i=0;p1[i]!='\0';i++) ;
for(j=0;p2[j]!='\0';j++)
p1[i++]=p2[j];
p1[i]='\0';}
6、某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程的成绩已在主函数中给出,请编写函数fun,其功能:求出平均分,并放入记录的ave成员中。
void fun(STREC *a)
{ int i;
a->ave=0.0;
for(i=0;i<N;i++)
a->ave=a->ave+a->s[i];
a->ave/=N; }
7、n名学生的成绩已在主函数中放入一个带头结点的链表结构中,h指向链表的头结点。求出平均分,并由函数值返回
double fun( STREC *h )
{ double ave=0.0;
STREC *p=h->next;
while(p!=NULL)
{ ave=ave+p->s;
p=p->next;
}
return ave/N;}
8、将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过K返回。
void fun( int m, int *k, int xx[] )
{ int i,j,n=0;
for(i=4;i<m;i++)
{ for(j=2;j<i;j++)
if(i%j==0) break;
if(j<i) xx[n++]=i;
}
*k=n;
}
9、求ss所指字符串中指定字符的个数,并返回此值。
int fun(char *ss, char c)
{ int i=0;
for(;*ss!='\0';ss++)
if(*ss==c)
i++;
return i;
}
10、计算n门课程的平均分,结果作为函数值返回。
float fun ( float *a , int n )
{ int i;
float av=0.0;
for(i=0; i<n;i++)
av=av+a[i];
return(av/n);
}
11、 学生的记录由学号和成绩组成,N名学生的数据已放入主函数中的结构体数组s中,求最高的学生数据放在b所指的数组中。注意:分数最高的学生也许不止一个,函数返回分数最高的学生的人数。
int fun( STREC *a, STREC *b )
{ int i,j=0,max=a[0].s;
for(i=0;i<N;i++)
if(max<a[i].s) max=a[i].s;
for(i=0;i<N;i++)
if(max==a[i].s)
b[j++]=a[i];
return j; }
12、 除了字符串前导的*号之外,将串中其他*号所有删除。
void fun( char *a )
{ int i=0;
char *p=a;
while(*p&&*p=='*')
{ a[i]=*p;
i++;
p++;
}
while(*p)
{ if(*p!='*')
{a[i]=*p;i++;}
p++;
}
a[i]='\0';
}
13、 记录在tt所指的字符串中’a’到’z’26个小写字母给出现的次数,并依次放在pp所指数组中。
void fun(char *tt, int pp[])
{ int i;
for(i=0;i<26;i++)
pp[i]=0;
for(;*tt!='\0';tt++)
if(*tt>='a'&&*tt<='z')
pp[*tt-'a']++;
}
14、 将字符串尾部的*号所有删除,前面和中间的*号不动。
void fun( char *a )
{ while(*a!='\0')
a++;
a--;
while(*a=='*')
a--;
*(a+1)='\0'; }
15、 比较字符串的长度,函数返回较长的字符串,假如相同,则返回第一个字符串。
char *fun ( char *s, char *t)
{ int i,j;
for(i=0;s[i]!= '\0';i++);
for(j=0;t[j]!= '\0';j++);
if(i<=j)
return t;
else
return s;}
16、 学生的记录由学号成绩组成,N名学生的数据已放入主函数中的结构体数组s中,函数返回该学生的学生数据,指定的学号在主函数中输入。若没找到指定学号,在结构体变量中给学号置空串,给成绩置-1,作为函数数值返回。
STREC fun( STREC *a, char *b )
{int i;
STREC str={"\0",-1};
for(i=0;i<N;i++)
if(strcmp(a[i].num,b)==0)
str=a[i];
return str;
}
17、将s所指字符串中除下标为偶数同时ASCII码值也为偶数的字符外,其余的所有删除字符串中剩余的字符所形成的新串放在t数组中。 void fun(char *s, char t[])
{
int i,j=0;
for(i=0;s[i]!='\0';i++)
if(i%2==0 && s[i]%2==0)
t[j++]=s[i];
t[j]='\0';
}
18、 运用下面的简朴迭代方法求方程cos(x)-x=0的一个实根s。
double fun()
{ double x0,x1;
x1=0.0;
do
{
x0=x1;
x1=cos(x0);
}while(fabs(x0-x1)>=1e-6);
return x1;
}
19、 将字符串中的前导*号所有移到字符串尾部。
void fun( char *a )
{ int i=0,n=0;
char *p;
p=a;
while (*p=='*') /*判断*p是否是*号,并记录*号的个数*/
{
n++;p++;
}
while(*p) /*将前导*号后的字符传递给a*/
{
a[i]=*p;i++;p++;
}
while(n!=0)
{
a[i]='*';i++;n--;
}
a[i]='\0';}
20、 N名学生的数据已放入主函数中的结构体数组中,把分数最低的学生数据放入b所指的数组中。
int fun( STREC *a, STREC *b )
{int i,j=0,min=a[0].s;
for(i=0;i<N;i++)
if(min>a[i].s)
min=a[i].s; /*找出最小值*/
for(i=0;i<N;i++)
if(min==a[i].s)
b[j++]=a[i]; /*找出成绩与min相等的学生的记录,存入结构体b中*/
return j;
}
21、 计算
double fun( int m )
{ int i;
double s=0.0;
for(i=1;i<=m;i++)
s=s+log(i);
return sqrt(s);
}
22、 只删除字符前导和尾部的*号,串中字母间的*号都不删除。
void fun( char *a, int n,int h,int e )
{ int i,j=0;
for(i=h;i<n-e;i++)
a[j++]=a[i];
a[j]='\0'; }
23、 将s所指字符串中下标为偶数的字符删除,剩余字符形成的新串放在t所指数组中
void fun(char *s, char t[])
{ int i,j=0,k=strlen(s);
for(i=1;i<k;i=i+2)
t[j++]=s[i];
t[j]='\0';}
24、 将a,b中的两位正整数合并成一个新的整数放在c中。合并方式是:将a中的十位和个位依次放在变量c的百位和个位上,B中的十位和个位数依次放在变量c的十位和千位上。
void fun(int a, int b, long *c)
{
*c=a%10+(b/10)*10+(a/10)*100+(b%10)*1000;
}
25、 除了尾部的*号之外,将字符中的其他的*号所有删除。形参p已指向字符串最后的一个字母。
void fun( char *a, char *p )
{ char *t=a;
for(;t<=p;t++)
if(*t!='*')
*(a++)=*t;
for(;*t!='\0';t++)
*(a++)=*t;
*a='\0';
}
26、 N名学生的数据已放入主函数中的结构体数组中,按分数降序排列学生的记录,高分在前,低分在后。
void fun( STREC a[] )
{ int i,j;
STREC t;
for(i=1;i<N;i++)
for(j=0;j<N-1;j++)
if(a[j].s<a[j+1].s)
{t=a[j];a[j]=a[j+1];a[j+1]=t;}
}
27、 N名学生的数据已放入主函数中的结构体数组中,把高于等于平均分的学生数据放在b所指的数组中,高于等于平均分的学生人数通过形参n传回,平均分通过函数值返回。
double fun( STREC *a, STREC *b, int *n )
{
int i;
double av=0.0;
*n=0;
for(i=0;i<N;i++)
av=av+a[i].s;
av=av/N;
for(i=0;i<N;i++)
if(av<=a[i].s)
{ b[*n]=a[i];*n=*n+1;}
return av; }
28、 将1~m之间(含m)能被7或11整除的所有整数放在数组a中,并通过n返回这些数的个数。
void fun ( int m, int *a , int *n )
{ int i,j=0;
for(i=1;i<=m;i++)
if(i%7==0||i%11==0)
a[j++]=i;
*n=j; }
29、 将字符串中的前导*号所有删除,中间和尾部的*号不删除。
void fun( char *a )
{ char *p=a;
while(*p=='*') p++;
for(;*p!='\0';p++,a++)
*a=*p;
*a='\0'; }
30、N名学生的成绩已在主函数中放入一个带有头结点的链表结构中,h指向链表的头结点。找出学生的最高分。
double fun( STREC *h )
{ double max=h->s;
while(h!=NULL)
{if(max<h->s) max=h->s;
h=h->next;
}
return max;
}
30、 找出一维整型数组元素最大的值及其所在的下标,并通过形参传回。主函数中x是数组名,n是x数据个数,max存放最大值,index存放最大值所在元素的下标。
void fun(int a[],int n, int *max, int *d)
{ int i;
*max=a[0];
*d=0;
for(i=0;i<n;i++)
if(*max<a[i])
{*max=a[i];*d=i;}
}
31、 将s所指字符串中除了下标为奇数同时ASCII值也为奇数的字符之外,其余的所有字符所有删除,串在剩余字符所形成的一个新串放在t所指的数组中。
void fun(char *s, char t[])
{ int i,j=0,n;
n=strlen(s);
for(i=0;i<n;i++)
if(i%2!=0&&s[i]%2!=0)
{t[j]=s[i];
j++;
}
t[j]='\0'; }
32、 实现B=A+’A’,即将矩阵A加上A的转置,存放在矩阵B中。
void fun ( int a[3][3], int b[3][3])
{ int i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
b[i][j]=a[i][j]+a[j][i]; }
33、 将M行N列的二维数组中的数据,按列的顺序依次放到一维数组中。
void fun(int (*s)[10],int *b,int *n,int mm,int nn)
{ int i,j;
for(j=0;j<nn;j++)
for(i=0;i<mm;i++)
{
b[*n]=*(*(s+i)+j);
*n=*n+1;
}
}
34、 将两个两位数的正整数a,b合并成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的个位和百位上,b数的十位和个位数依次放在c数的千位和十位上。
void fun(int a, int b, long *c)
{
*c=a/10+(b%10)*10+(a%10)*100+(b/10)*1000;
}
35、 将放在字符串数组中的M个字符串(每串的长度不超过N),按顺序合并成一个新的字符串。
void fun(char a[M][N],char *b)
{ int i,j,k=0;
for(i=0;i<M;i++)
for(j=0;a[i][j]!='\0';j++)
b[k++]=a[i][j];
b[k]='\0';
}
36、 删除一个字符串中指定下标的字符。a指向原字符后的字符串存放在b所指的数组中,n中存指定的下标。
void fun (char a[], char b[], int n)
{ int i,k=0;
for(i=0;a[i]!='\0';i++)
if(i!=n)
b[k++]=a[i];
b[k]='\0';
}
37、 移动一维数组中的内容,若数组中有n个整数,规定把下标从0~p(含p,p小于等于n-1)的数组元素平移到数组的最后。
void fun(int *w, int p, int n)
{ int x,j,ch;
for(x=0;x<=p;x++)
{ ch=w[0];
for(j=1;j<n;j++)
{
w[j-1]=w[j];
}
w[n-1]=ch;
}
}
38、 将M行N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。
void fun(char (*s)[N],char *b)
{ int i,j,k=0;
for(i=0;i<N;i++)
for(j=0;j<M;j++)
b[k++]=s[j][i];
b[k]='\0';
}
39、 计算
float fun(int n)
{ int i,s1=0;
float s=0.0;
for(i=1;i<=n;i++)
{s1=s1+i;
s=s+1.0/s1;
}
return s;
}
40、 将s所指字符串中ASCCII值为奇数的字符删除,剩余字符形成的新串放在t所指数组中
void fun(char *s, char t[])
{ int i,j=0,n;
n=strlen(s);
for(i=0;i<n;i++)
if(s[i]%2==0)
{ t[j]=s[i];
j++;
}
t[j]='\0';
}
42、删除一维数组中所有相同的数使之只剩一个。数组中的数已按由小到大的顺序排列函数返回删除后数组的数据。
int fun(int a[], int n)
{ int i,j=1;
for(i=1;i<n;i++)
if(a[j-1]!=a[i])
a[j++]=a[i];
return j;
}
43、 除了字符串前导和尾部的*号外,将串中其他的*号所有删除。
void fun( char *a, char *h,char *p )
{ int i=0;
char *q=a;
while(q<h)
{ a[i]=*q; q++;i++;}
while(q<p)
{ if(*q!='*')
{ a[i]=*q;
i++;
}
q++;
}
while(*q)
{ a[i]=*q; i++; q++;}
a[i]='\0';
}
44、 将a,b的两个两位正整数合并成一个新的整数放在c中,合并方式是:将a中的十位和个位数依次放在变量c的百位和个位上,b中的十位和个位数依次放在变量c的千位和十位上。
void fun(int a, int b, long *c)
{
*c=a%10+(b%10)*10+(a/10)*100+(b/10)*1000;
}
45、 使字符串的前导*号不得多于n个,若多于n个,则删除多余的*号,若少于或等于n个,则不做解决,字符串中间和尾部的*号不删除。
void fun( char *a, int n )
{ int i=0;
int k=0;
char *p,*t;
p=t=a;
while(*t=='*')
{k++;t++;}
if(k>n)
{ while(*p)
{ a[i]=*(p+k-n);
i++;
p++;
}
a[i]='\0';
}
}
46、将两个两位数的正整数a,b合并成一个整数放在c中,合并方式是:将a数的十位和个位数依次在c数的个位和百位上,b数的十位和个位数依次放在c数的十位和千位上。
void fun(int a, int b, long *c)
{
*c=a/10+(b/10)*10+(a%10)*100+(b%10)*1000;
}
47、将一个数字字符串转换为一个整数。
答案:ong fun ( char *p)
{ long n=0;
int flag=1;
if(*p=='-')
{p++;flag= -1;}
else if(*p=='+')
p++;
while(*p!='\0')
{n=n*10+*p-'0';
p++;
}
return n*flag;
}
48、求Fibonacc数列中大于t的最小的数,结果由函数返回。Fibonacc数列F(n)定义为
int fun( int t)
{ int f0 = 0, f1 = 1, f ;
do {
f = f0 + f1 ;
f0 = f1 ;
f1 = f ;
} while(f < t) ;
return f ;
}
49、 把低于平均分的学生数据放入b所指的数组中低于平均分的学生人数通过形参n返回,平均分通过函数值返回
double fun( STREC *a, STREC *b, int *n )
{ int i,j=0;
double av=0.0;
for(i=0;i<N;i++)
av=av+a[i].s;
av=av/N;
for(i=0;i<N;i++)
if(a[i].s<av) b[j++]=a[i];
*n=j;
return av;
}
50、 将ss所指字符串所有下标为奇数位上的字母转换为大写。
void fun ( char *ss )
{ int i;
for(i=0;ss[i]!='\0';i++)
if(i%2==1&&ss[i]>='a'&&ss[i]<='z')
ss[i]=ss[i]-32;
}
51、 将a,b两个正整数合并成一个新的整数放在c中。合并方式:将a中的十位和个位数依次放在变量c的千位和十位上,b中的十位和个位数依次放在变量c的个位和百位上。
void fun(int a, int b, long *c)
{ *c=b/10+(a%10)*10+(b%10)*100+(a/10)*1000;
}
52、使字符串中尾部的*号不多于n个,若多于n个,则删除多余的*号,若少于或等于n个,则不做任何操作,字符中间的*不删除。
void fun( char *a,int n )
{ int i=0,k=0;
char *p, *t;
p=t=a;
while(*t)
t++;
t--;
while(*t=='*')
{k++;t--;}
if(k>n)
{while(*p&&p<t+n+1)
{ a[i]=*p;
i++;p++;
}
a[i]='\0';
}
}
53、 将a,b两个正整数合并成一个新的整数放在c中。合并方式:将a中的十位和个位数依次放在变量c的十位和千位上,b中的十位和个位数依次放在变量c的百位和个位上。
void fun(int a, int b, long *c)
{ *c=b%10+(a/10)*10+(b/10)*100+(a%10)*1000;
}
54、 将a,b两个正整数合并成一个新的整数放在c中。合并方式:将a中的十位和个位数依次放在变量c的千位和十位上,b中的十位和个位数依次放在变量c的十位和个位上。
void fun(int a, int b, long *c)
{
*c=b%10+(a%10)*10+(b/10)*100+(a/10)*1000;
}
55、 把指定分数范围内的学生数据放在b所指的数组中,分数范围内的学生人数由函数值返回。
int fun( STREC *a,STREC *b,int l, int h )
{ int i,j=0;
for(i=0;i<N;i++)
if(a[i].s>=l&&a[i].s<=h)
b[j++]=a[i];
return j;
}
56、 将s所指字符串中ASCII码值为偶数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。
void fun(char *s, char t[])
{ int i=0;
for(;*s!='\0';s++)
if(*s%2==1)
t[i++]=*s;
t[i]='\0';
}
57、 找出成绩最高的学生记录,通过形参返回主函数(规定只有一个最高分)
fun(STU a[], STU *s)
{ int i;
*s=a[0];
for(i=0;i<N;i++)
if(s->s<a[i].s)
*s=a[i];
}
58、 定义了N x N的二维数组,使数组左下办三角元素中的值乘以n。
void fun(int a[ ][N], int n)
{ int i,j;
for(i=0;i<N;i++)
for(j=0;j<=i;j++)
a[i][j]=a[i][j]*n;
}
59、 定义了N x N的二维数组,使数组左下办三角元素中的值所有置成0.
void fun (int a[][N])
{ int i,j;
for(i=0;i<N;i++)
for(j=0;j<=i;j++)
a[i][j]=0;
}
60、 请编一个函数void fun(int tt[M][N]),tt指向一个M行N列的二维数组,求出二维数组每列中最大元素,并依次放入pp所指的一维数组中。
void fun(int tt[M][N],int pp[N])
{ int i,j,max;
for(j=0;j<N;j++)
{
max=tt[0][j];
for(i=0;i<M;i++)
if(tt[i][j]>max)
max=tt[i][j];
pp[j]=max;
}
}
61、 w是一个大于10的无符号整数,若w是n(n》2)位的整数,则函数求出w的后n-1位的数作为函数值返回
unsigned fun(unsigned w)
{ int n=1,j,s=1;
unsigned t;
t=w;
while(t>=10)
{
t=t/10;
n++;
}
for(j=1;j<n;j++)
s=s*10;
return w%s;
}
62、 请编一个函数fun(char*s),该函数的功能是:把字符串中的内容逆置。
void fun(char*s)
{ char ch;
int i,m,n;
i=0;
m=n=strlen(s)-1;
while(i<(n+1)/2)
{ ch=s[i];
s[i]=s[m];
s[m]=ch;
i++; m--;
}
}
63、 从字符串中删除指定的字符。同字母的大、小写按不同字符解决
void fun( char s[],int c)
{ int i=0;
char *p;
p=s;
while(*p)
{
if(*p!=c)
{
s[i]=*p;
i++;
}
p++;
}
s[i]='\0';
}
64、对长度为7个字符的字符串,除首、尾字符外,将其余5个字符安ASCII码降序排列。
void fun(char *s,int num)
{ char ch ;
int i, j ;
for(i = 1 ; i < 6 ; i++)
for(j = i + 1 ; j < 6 ; j++)
{
if(*(s + i) < *(s + j))
{
ch = *(s + j) ;
*(s + j) = *(s +i) ;
*(s + i) = ch ;
}
}}
65、 记录一个长度为2的字符串在另一个字符串中出现的次数。
int fun(char *str, char *substr)
{ int i,j=0;
for(i=0;str[i]!='\0';i++)
if(str[i]==substr[0]&&str[i+1]==substr[1])
j++;
return j; }
66、 计算并输出给定整数n的所有因子(不涉及1与自身)之和。规定n的值不大于1000.
int fun(int n)
{ int s=0,i;
for(i=2;i<=n-1;i++)
if(n%i==0)
s+=i;
return s;
}
67、 计算
double fun(int n)
{ double t,sn=1.0;
int i,j;
for(i=1;i<=n;i++)
{
t=1.0;
for(j=1;j<=i;j++)
t*=j;
sn+=1.0/t;
}
return sn; }
68、 计算并输出x<0.97时,如下多项式的值,直到为止。
double fun(double x)
{ double s1=1.0,p=1.0,sum=0.0,s0,t=1.0;
int n=1;
do
{ s0=s1;
sum+=s0;
t*=n;
p*=(0.5-n+1)*x;
s1=p/t;
n++;
}while(fabs(s1-s0)>=1e-6);
return sum;
}
69、 计算并输出给定10个数的方差,其中
double fun(double x[10])
{ double x1=0.0,s=0.0;
int i;
for(i=0;i<10;i++)
x1=x1+x[i];
x1=x1/10;
for(i=0;i<10;i++)
s=s+(x[i]-x1)*(x[i]-x1);
return sqrt(s/10);
}
70、 计算并输出给定数组(长度为9)中相邻两个元素的平均值的平方根之和。
double fun(double x[9])
{double sum=0.0;
int i,j=1;
for(i=0;i<9;i++)
if(j<=8)
{
sum+=sqrt((x[i]+x[i+1])/2.0);j++;
}
return sum;
}
71、 计算并输出下列多项式值
double fun(int n)
{ int i;
double s=0.0;
for(i=1;i<=n;i++)
s=s+(1.0/(2*i-1)-1.0/(2*i));
return s; }
72、计算并输出多项式值
double fun(int n)
{ double sum=0,tmp=1;
int i;
for(i=1;i<=n;i++)
{
tmp=tmp*i;
sum+=1.0/tmp;
}
return sum;}
73、 计算并输出n(涉及n)以内所有可以被5或9整除的自然数的倒数之和。
double fun(int n)
{ int i;
double sum=0.0;
for(i=1;i<=n;i++)
展开阅读全文