C语言2023精选面试编程题

1.m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平均分的人数作为函数值返回,将低于平均分的分数放在below所指的数组中。

例如,当score数组中的数据为10、20、30、40、50、60、70、80、90时,函数返回的人数应该是4,below中的数据应为10、20、30、40。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <string.h>

#include <conio.h>

#include <stdio.h>

/*第一个for()循环用来计算score数组中分数的总和,然后用aver/=m求出平均值,第二个循环用来找出小于平均分的元素,并放到数组below中,这里要注意j的递增方式。*/

int fun(int score[],int m, int below[])

{ int i,j=0,aver=0;

for(i=0;i<m;i++)

aver+=score[i];

aver/=m;

for(i=0;i<m;i++)

if(score[i]<aver)

below[j++]=score[i];

return j;

}

main()

{ int i,n,below[9];

int score[9]={10,20,30,40,50,60,70,80,90};

clrscr();

n=fun(score,9,below);

printf("\nBelow the average score are :");

for(i=0;i<n;i++) printf("%4d",below[i]);

}

2.请编写函数fun,它的功能是:求出1到1000之内能被7或11整除、但不能同时被7和11整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <conio.h>

#include <stdio.h>

/*该题关键就是如何表示能被7或11整除,但不能同时被7和11整除。用(i%7==0)//(i%11==0)来表示能被7或11整除,用 !((i%7==0)&&(i%11==0))来表示不能同时被7和11整除。

void fun(int *a,int *n)

{ int i,m=0;

for(i=1;i<1000;i++)

if(((i%7==0)//(i%11==0))&&!((i%7==0)&&(i%11==0)))

{a[m]=i;m+=1;}

*n=m;

}

main()

{ int aa[1000],n,k;

clrscr();

fun(aa,&n);

for(k=0;k<n;k++)

if((k+1)%10==0) printf("\n");

else printf("%d,",aa[k]);

}

3.请编写函数void  fun(int x,int pp[ ],int  *n),它的功能是:求出能整除x且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。例如,若x中的值为30,则有4个数符合要求,它们是1,3,5,15。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <conio.h>

#include <stdio.h>

/*由于要求的数不能是偶数故编程时从1开始循环而步长为2这样正好保正i永远的奇数。这里也要注意存放结果的数组pp的下标变化方式。*/

void fun(int x, int pp[], int *n)

{ int i,j=0;

for( i=1;i<=x; i=i+2)

if( x%i==0)

pp[j++]=i;

*n=j;

}

main()

{ int x, aa[1000], n, i;

printf("\n please enter an integer number:\n"); scanf("%d

",&x);

fun(x,aa,&n);

for(i=0;i<n;i++)

printf("%d ", aa[i]);

printf("\n");

}

4.请编写一个函数void  fun(char *tt,int pp[]),统计在字符串中‘a’到‘z’26个字母各自出现的次数,并依次放在pp所指数组中。

例如,当输入字符串abcdefgabcdeabc后,程序的输出结果应该是:3 3 3 2 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include<conio.h>

#include<stdio.h>

/* 34题:本题采用的是字母的ASCII码值与数组pp下标的对应转换关系分别求出对应字母的个数。第一个for()是给pp赋初值0,第二个for()用于控制在字符串内从头到尾移动。由于字母'a'的ASCII码值为97而它的个数要放在pp[0]中,而'a'-97的值正好为0,其它的依此类推。*/

void fun(char *tt,int pp[])

{ int i;

for(i=0;i<26;i++)

pp[i]=0;

for(;*tt;tt++)

if(*tt<='z'&&*tt>='a')

pp[*tt-97]++;

}

main()

{ char aa[1000];

int bb[26],k;

clrscr();

printf("\nPlease enter a char string:");scanf("%s",aa)

;

fun(aa,bb);

for(k=0;k<26;k++) printf("%d",bb[k]);

printf("\n");

}

5.请编写一个函数void fun(int m,int k,int xx[]),该函数的功能是:将大于整数m且紧靠m 的k个素数存入xx所指的数组中。

例如,若输入:17,5,则应输出:19,23,29,31,37。    

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <conio.h>

#include <stdio.h>

/*本题中的for()循环用来判断一个数是否为素数,由于个数只能是k个所以用do-while循环来控制。*/

void fun(int m, int k, int xx[])

{ int i,j=0,p=m+1;

do

{for( i=2; i<p; i++)

if(p%i==0) break;

if(i>=p) xx[j++]=p;

p++;

} while(j<k);

}

main()

{ int m,n,zz[1000];

printf("\n please enter two integers: ");

scanf("%d%d",&m,&n);

fun( m,n,zz);

for(m=0; m<n; m++)

printf("%d ", zz[m]);

printf("\n");

}

6.请编写一个函数void fun(char a[],char b[],int n),其功能是:删除一个字符串中指定下标的字符。其中,a指向原字符串,删除后的字符串存放在b所指的数组中,n中存放指定的下标。

例如,输入一个字符串World,然后输入3,则调用该函数后的结果为Word。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

#include <conio.h>

#define LEN 20

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';      

}

main( )

{

  FILE *wf;

  char strl[LEN], str2[LEN];

  int n ;

  printf ("Enter the string : \n") ;

  gets (strl) ;

  printf ("Enter the position of the string deleted: ") ;

  scanf ("%d", &n) ;

  fun (strl, str2, n) ;

  printf ("The new string is : %s \n", str2) ;

  wf=fopen("out.dat","w");

  fun("world",str2,3);

  fprintf(wf,"%s",str2);

  fclose(wf);

}

7.请编写一个函数int fun(int *s,int t,int *k),用来求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。

例如,输入如下整数:876 675 896 101 301 401 980 431 451 777则输出结果为:6,980。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include<conio.h>

#include  <stdio.h>

int fun(int *s,int t,int *k)

{ int i , max ;

  max=s[0];

  for ( i=0; i<t; i++)

if(s[i]>max)

 { max=s[i];

   *k=i; }

}

main()

{int a[10]={876,675,896,101,301,401,980,431,451,777},k;

clrscr()  ;

fun(a,10,&k);

printf("%d,%d\n",k,a[k]);

}

8.编写函数fun,函数的功能是:根据以下公式计算s,计算结果作为函数值返回;n通过形参传入。

s=1+1/(1+2)+1/(1+2+3)+.......+1/(1+2+3+4+......+n) 例如:若n的值为11时,函数的值为1.833333。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

float fun(int n)

{ int i,s;

  s=0;

  for(i=0,i<=n,i++){

    s=s+1/chsdc(i);

  }  

  return(s);

}

long chsdc(int n)

{ int i,s;

  s=0;

  for(i=0,i<n,i++){

    s=s+i;

  }

  return(s);

} 

main()

{  int n; float s;

   printf("\nPlease enter N:"); scanf("%d", &n);

   s = fun(n);

   printf("the result is: %f\n", s);

   NONO();

}

NONO (  )

{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */

  FILE *fp, *wf ;

  int i, n ;

  float s;

  fp = fopen("K:\\k1\\24000322\\in.dat","r") ;

  wf = fopen("K:\\k1\\24000322\\out.dat","w") ;

  for(i = 0 ; i < 10 ; i++) {

    fscanf(fp, "%d", &n) ;

    s = fun(n) ;

    fprintf(wf, "%f\n", s) ;

  }

  fclose(fp) ;

  fclose(wf) ;

}

9.编写函数fun,它的功能是:根据以下公式求P的值,结果由函数值带回。m与n为两个正整数且要求m>n。p=m!/n!(m-n)!。例如:m=12,n=8时,运行结果为495.000000。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <conio.h>

#include <stdio.h>

float fun( int m, int n)

{  int i,j,k;

   long int  t=1,s=1,p=1;

   float q;

   for(i=1; i<=m; i++)  t*=i;

   for(j=1; j<=n; j++)  s*=j;

   for(k=1; k<=m-n; k++) p*=k;

   q=(float)t/s/p;

   return q;

}

main()

{ printf("\np=%lf\n", fun(12,8));

}

10.编写函数fun,它的功能是:利用以下所示的简单迭代方法求方程cos(x)-x=0的一个实根。

Xn+1=cos(Xn)

迭代步骤如下:

取x1初值为0.0;

x0=x1,把x1的值赋给x0;

x1=cos(x0),求出一个新的x1;    

若x0-x1的绝对值小于0.000001,则执行步骤(5),否则执行步骤(2);

所求x1就是方程cos(x)-x=O的一个实根,作为函数值返回。  

程序将输出结果Root=0.739085。    

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <conio.h>

#include <math.h>

#include <stdio.h>

float fun()

{ float x0,x1=0;

  do { x0=x1;

       x1=cos(x0);

     }while( fabs(x0-x1)>1e-006);

  return x1;

}

main()

{ printf("root=%f\n",fun());

}

11.下列程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(int a[][N]),该函数的功能是:使数组左下半三角元素中的值全部置成0。例如:a数组中的值为

 ,则返回主程序后a数组中的值应为 

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#define N 5

/* 29题:该题的关键是如何表示出左下半角的元素,当从上往下到第i行时只有左边的

i个元素要置为0(每行总是如此)。用外层for()来控制行而内嵌的for()来控制每行的

左边元素,故而在内嵌for()中j最大只能循环到i(即表示出第i行左边的i个元素)。*

/

int fun(int a[][N])

{int i,j;

for(i=0;i<N;i++)

for(j=0;j<=i;j++)

a[i][j]=0;

}

main()

{int a[N][N],i,j;

clrscr();

printf("*** The array ****\n");

for(i=0;i<N;i++)

{for(j=0;j<N;j++)

{a[i][j]=rand()%10;printf("%4d",a[i][j]);}

printf("\n");

}

fun(a);

printf("The result\n");

for(i=0;i<N;i++)

{for(j=0;j<N;j++)

printf("%4d",a[i][j]);

printf("\n");

}

}

12.下列程序定义了N×N的二维数组,并在主函数中赋值。请编写函数fun,函数的功能是:求出数组周边元素的平均值并作为函数值返回给主函数中的s。例如:若a数组中的值为

  则返回主程序后s的值应为3.375。   

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#define N 5

/* 注意不能重复计算,第一个for()循环求出第一列与最后一列的和,第二个for()循环求出第一行与最后一行(已除去两头元素),要注意第二个for()中起始为1,最后为N-2。*/

double fun (int w[][N])

{ int i,t=0;

double s=0;

for(i=0;i<N;i++)

{s+=w[i][0]+w[i][N-1]; t+=2;}

for(i=1;i<N-1;i++)

{s+=w[0][i]+w[N-1][i]; t+=2;}

s=s/t;

return s;

}

main()

{ int a[N][N]={0,1,2,7,9,1,9,7,4,5,2,3,8,3,1,4,5,6,8,2,5,9,1,4,1};

int i,j;

double s;

clrscr();

printf("***** The array *****\n");

for(i=0;i<N;i++)

{for(j=0;j<N;j++)

printf("%4d",a[i][j]);

printf("\n");

}

s=fun(a);

printf("***** The result *****\n");

printf("The sum is %lf\n",s);

}

13.请编一个函数void fun(int tt[M][N],int pp[N]),tt指向一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中。二维数组中的数已在主函数中赋予。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include "conio.h"

#include "stdio.h"

#define M 3

#define N 4

/*注:该题用for(i=0;i<N;i++)来控制一列一列地找,而内嵌循环for(j=0;j<M;

j++)用于控制同列内元素的比较。多重循环的嵌套总是最里层循环变化最快,即外层循

环改变一个值,内层循环就要循环完一次,对于多重循环一定要好好去体会和理解,在

多数题目中都要用到多重循环(一般为二重)。*/

void fun(int tt[M][N],int pp[N])

{ int i, j;

for(i=0;i<N;i++)

{ pp=tt[0][i];

for(j=0;j<M;j++)

if(tt[j][i]<pp[i]) pp[i]=tt[j][i];

}

}

main()

{ int t[M][N]={ {22,45,56,30},

{19,33,45,38},

{20,22,66,40}};

int p[N],i,j,k;

clrscr();

printf("the original data is:\n");

for(i=0;i<M;i++)

{for(j=0;j<N;j++)

printf("%6d",t[i][j]);

printf("\n");

}

fun(t,p);

printf("\nthe result is:\n");

for(k=0;k<N;k++)

printf("%4d",p[k]);

printf("\n");

}

14.请编写函数fun,函数的功能是求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。    

例如:若二维数组中的值为 1  3  5  7  9 则函数值为61。

         2  9  9  9  4

         6  9  9  9  8

         1  3  5  7  0

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <conio.h>

#include <stdio.h>

#define M 4

#define N 5

/*注:该题的第一个for()循环是计算矩阵的最上一行和最下一行的总和,第二个for()是计算除两头元素以外的最左一列和最右一列的元素的和,最后sun就是周边元素的和。*/

int fun(int a[M][N])

{int sum=0,i;

for(i=0;i<N;i++)

sum+=a[0][i]+a[M-1][i];

for(i=1;i<M-1;i++);

sum+=a[i][0]+a[i][N-1];

return sum ;

}

main()

{ int aa[M][N]={{1,3,5,7,9},

{2,9,9,9,4},

{6,9,9,9,8},

{1,3,5,7,0}};

int i,j,y;

clrscr();

printf("The original data is :\n");

for(i=0;i<M;i++)

{for(j=0;j<N;j++) printf("%6d",aa[i][j]);

printf("\n");

}

y=fun(aa);

printf("\nThe sum: %d\n",y);

printf("\n");

}

15.请编写一个函数 unsigned fun(unsigned w),w是一个大于10的无符号整数,若w是n(n≥2)位的整数,则函数求出w的后n-1位的数作为函数值返回。

例如:w值为5923,则函数返回923;若w值为923,则函数返回23。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <conio.h>

#include <stdio.h>

/* 注:由于unsigned型整数在0-65535这间,只要它大于10000则对10000求余即得出后面4位,否则如果大于1000则对1000求余得出后3位数,这样一层一层往小的判断。由于return的作用除了返回值以外,还有当执行到return时就跳出该程序,所以可以连续的用if()语句。 */

unsigned fun( unsigned w )

{ if(w>=10000) return w%10000;

if(w>=1000) return w%1000;

if(w>=100) return w%100;

return w%10;

}

main()

{ unsigned x;

printf( "enter a unsigned integer number :" );

scanf( "%u",&x);

if(x<10) printf("data error!");

else printf ("the result :%u\n", fun(x));

}

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

例如:若h值为8.32433,则函数返回8.32;若h值为8.32533,则函数返回8.33。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

#include <conio.h>

/*注:h乘以1000后正好是原小数点后第三位做了新数的个位数,然后再进行加5运算时。如原小数点后第三位为4及以下则加5后还是不能进一位(即四舍),如是5及以上则加5后该位就要向前进一位数(即五入)。进行加5运算后除10再赋给一个整型变量此时就只有原小数点第二位及以前各位保留在整型变量中,最后再对整型变量除100,这样又出现了两位小数。该题中,进行四舍五入后一定要赋给一个整型变量才能将不用部分彻底变成0 。*/

float fun(float h)

{ long t;

h=h*1000;

t=(h+5)/10;

return (float)t/100;

}

main()

{

float a;

clrscr();

printf("Enter a:"); scanf("%f",&a);

printf("The original data is:");

printf("%f\n\n",a);

printf("The result :%6.2f\n",fun(a));

}

17.请编一个函数fun(char *s),该函数的功能是把字符串中的内容逆置。

例如:字符串中原有的字符串为abcdefg,则调用该函数后,串中的内容为gfedcba。fun(char *s)

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <string.h>

#include <conio.h>

#include <stdio.h>

#define N 81

/*注:该题的算法是先分别找出字符串的两头,然后同时逐一往中间移动,每移动一次都进行两字符的位置对换,直到中间字符(用s+i<s+n-1-i来控制)。由于s+i中一个地址,因此要注意把它的内容取出再进行换位。即先进行取内容运算*) */

fun(char *s)

{ int i=0,t,n=strlen(s);

for(;s+i<s+n-1-i;i++)

{t=*(s+i);*(s+i)=*(s+n-1-i);*(s+n-1-i)=t;}

}

main()

{ char a[N];

clrscr();

printf("Enter a string:"); gets(a);

printf("The original string is:");puts(a);

fun(a);

printf("\n");

printf("The string after modified:");

puts(a);

}

18.编写程序,实现矩阵(3行3列)的转置(即行列互换)。

例如,若输入下面的矩阵: 100 200 300 则程序输出100 400 700

      400 500 600            200 500 800

      700 800 900            300 600 900

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

#include <conio.h>

/*这题的关键在于进行行列下标转换的算法,由矩阵的对称性我们不难看出在进行行列互换时a[j]在好是与a[j][i]互换,因而只要我位让程序走完矩阵的左上角即可(用for(i=0;i<2;i++)再套for(j=i+1;j<3;j++)来完成左上角的走动。*/

int fun(int array[3][3])

{ int i,j,t;

for(i=0;i<2;i++)

for(j=i+1;j<3;j++)

{t=array[i][j];array[i][j]=array[j][i];array[j][i]=t;}

}

main()

{ int i,j;

int array[3][3]={{100,200,300},{400,500,600},{700,800,900}};

clrscr();

for(i=0;i<3;i++)

{for(j=0;j<3;j++)

printf("%7d",array[i][j]);

printf("\n");

}

fun(array);

printf("Converted array:\n");

for(i=0;i<3;i++)

{for(j=0;j<3;j++)

printf("%7d",array[i][j]);

printf("\n");

}

}

19.编写函数fun,该函数的功能是:从字符串中删除指定的字符。同一字母的大、小写按不同字符处理。

例如:若程序执行时输入字符串为:turbo c and borland c++

      从键盘上输入字符n,则输出后变为:turbo c ad borlad c++

      如果输入的字符在字符串中不存在,则字符串照原样输出。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

#include <conio.h>

/*注:该题的算法是让i控制一个一个字符往后走,在移动过程中如果s[i]不是要删的字符,则将其按顺序放到新串中(新串亦是用s来做,只是用k来控制新串的下标,由于要删除一些元素,因此新串的下标总是比原下标i要慢。因而可用此法即同一字符串变量的方法。*/

int fun(char s[],int c)

{int i,k=0;

for(i=0;s[i];i++)

if(s[i]!=c) s[k++]=s[i];

s[k]='\0';

}

main()

{ static char str[]="turbo c and borland c++";

char ch;

clrscr();

printf(" :%s\n",str);

printf(" :");

scanf("%c",&ch);

fun(str,ch);

printf("str[]=%s\n",str);

}

20.编写函数int fun(int lim,int aa[MAX]),该函数的功能是求出小于或等于lim的所有素数并放在aa数组中,该函数返回所求出的素数的个数。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

#include <conio.h>

#define MAX 100

/*注:循环for(i=2;i<k;i++)用于判断k是否为素数,原理是当用2到k-1这间的数去对k求余,如余数为0(即被整除)则表示k不是一个素数。语句if(i>=k)用于判断在上一个for()循环中i能否走到k,如果能则表示在2到k-1的数都不能整除k,即k为素数。*/

int fun( int lim, int aa[MAX])

{ int i,j=0,k;

for( k=2; k<lim; k++)

{ for( i=2; i<k; i++)

if( !(k%i)) break;

if( i>=k) aa[j++]=k;

}

return j;

}

main()

{ int limit,i,sum;

int aa[MAX];

printf("\n input a integer number:");

scanf(" %d",&limit);

sum=fun(limit,aa);

for(i=0; i<sum; i++)

{ if(i%10==0&&i!=0)

printf("\n");

printf("%5d", aa[i]);

}

}

21.编写函数fun,对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按ASCII码降序排列。

例如,若原来的字符串为CEAedca,则排序后输出为CedcEAa。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <string.h>

#include <conio.h>

#include <stdio.h>

/*该题采用的排序法是选择法进行降序排序,算法是用外for()循环从字符串的前端往后端走动,每走动一个字符都用内嵌的for()循环在该字符后找出最小的字符与该字符进行换位。直到外for()循环走到最后一个字符。此外,此题还要注意把首尾字符除开,即在最外层for()循环中从1开始,只到num-2即可。*/

int fun(char *s,int num)

{ int i,j,t;

for(i=1;i<num-2;i++)

for(j=i+1;j<num-1;j++)

if(s[i]<s[j])

{ t=s[i];

s[i]=s[j];

s[j]=t;

}

}

main()

{ char s[10];

clrscr();

printf("输入7个字符的字符串:");

gets(s);

fun(s,7);

printf("\n%s",s);

}

22.N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun,它的功能是:找出学生的最高分,由函数值返回。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

#include <stdlib.h>

#define   N   8

struct  slist

{  double   s;

   struct slist  *next;

};

typedef  struct slist  STREC;

double  fun( STREC *h  )

{ double max ;  

  int i ;

  max=h->s;

for(i=0 ; i<N ;i++)

 if((h+i)->s>max)

  max=(h+i)->s;

return  max;

}

STREC * creat( double *s)

{ STREC  *h,*p,*q;   int  i=0;

  h=p=(STREC*)malloc(sizeof(STREC));p->s=0;

  while(i<N)

  { q=(STREC*)malloc(sizeof(STREC));

    q->s=s[i]; i++; p->next=q; p=q;

  }

  p->next=0;

  return  h;

}

outlist( STREC *h)

{ STREC  *p;

  p=h->next;   printf("head");

  do

  { printf("->%2.0f",p->s);p=p->next;}

  while(p!=0);

  printf("\n\n");

}

main()

{  double  s[N]={85,76,69,85,91,72,64,87}, max;

   STREC  *h;

   h=creat( s );   outlist(h);

   max=fun( h );

   printf("max=%6.1f\n",max);

   NONO();

}

NONO()

{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */

  FILE *in, *out ;

  int i,j ; double  s[N],max;

  STREC *h ;

  in = fopen("K:\\k01\\24001514\\in.dat","r") ;

  out = fopen("K:\\k01\\24001514\\out.dat","w") ;

  for(i = 0 ; i < 10 ; i++) {

    for(j=0 ; j < N; j++) fscanf(in, "%lf,", &s[j]) ;

    h=creat( s );

    max=fun( h );

    fprintf(out, "%6.1lf\n", max) ;

  }

  fclose(in) ;

  fclose(out) ;

}

23.请编写函数fun,该函数的功能是:判断字符串是否为回文?若是则函数返回1,主函数中输出YES,否则返回0,主函数中输出N0。回文是指顺读和倒读都一样的字符串。

例如,字符串LEVEL是回文,而字符串123312就不是回文。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

#define  N  80

int fun(char *str)

{int i,n=0,fg=1;

   char *p=str;

   while (*p)

   {n++;

      p++;}

   for (i=0;i<n/2;i++)

      if (str[i]==str[n-1-i]);

      else

      {fg=0;

         break;}

    return fg;}

main()

{ char  s[N] ;

  printf("Enter a string: ") ; gets(s) ;

  printf("\n\n") ; puts(s) ;

  if(fun(s)) printf("  YES\n") ;

  else       printf("  NO\n") ;

  NONO() ;

}

NONO()

{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */

  FILE *rf, *wf ;

  int i ; char s[N] ;

  rf = fopen("K:\\k1\\24000214\\in.dat","r") ;

  wf = fopen("K:\\k1\\24000214\\out.dat","w") ;

  for(i = 0 ; i < 10 ; i++) {

    fscanf(rf, "%s", s) ;

    if(fun(s)) fprintf(wf, "%s  YES\n", s) ;

    else       fprintf(wf, "%s  NO\n", s) ;

  }

  fclose(rf) ; fclose(wf) ;

}

24.请编写一个函数fun,它的功能是:将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。

例如,若输入字符串“-1234”,则函数把它转换为整数值-1234。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

#include <string.h>

long  fun ( char *p)

{ long s=0,t;

    int i=0,j,n=strlen(p),k,s1;

    if(p[0]=='-')

       i++;

    for(j=i;j<=n-1;j++)

    {t=p[j]-'0';

       s1=10;

       for (k=j;k<n-1;k++)

         t*=s1;

       s+=t; }

    if(p[0]=='-')

       return -s;

    else

       return s;

}

main()   /* 主函数 */

{ char s[6];

  long    n;

  printf("Enter a string:\n") ;

  gets(s);

  n = fun(s);

  printf("%ld\n",n);

  }

25.请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字符串。例如,输入:beijing shanghai<CR>(<CR>为回车键),函数将返回shanghai。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

char *fun ( char *s, char *t)

{

char *ss=s, *tt=t;

while((*ss)&&(*tt))

{ ss++; tt++; }

if(*tt) return(t);

else return(s);

}

main( )

{ char a[20],b[10],*p,*q;

int i;

printf("Input 1th string:") ;

gets( a);

printf("Input 2th string:") ;

gets( b);

printf("%s\n",fun (a, b ));

NONO ();

}

NONO ( )

{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */

FILE *fp, *wf ;

int i ;

char a[20], b[20] ;

fp = fopen("bc03.in","r") ;

if(fp == NULL) {

printf("数据文件bc03.in不存在!") ;

return ;

}

wf = fopen("bc03.out","w") ;

for(i = 0 ; i < 10 ; i++) {

fscanf(fp, "%s %s", a, b) ;

fprintf(wf, "%s\n", fun(a, b)) ;

}

fclose(fp) ;

fclose(wf) ;

}

26.请编写一个函数fun,它的功能是:根据以下公式求π的值(要求满足精度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…。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

#include <math.h>

double  fun ( double  eps)

{ double s;

     float n,t,pi;

     t=1;pi=0;n=1.0;s=1.0;

     while((fabs(s))>=eps)

     {pi+=s;

        t=n/(2*n+1);

        s*=t;

        n++;}

     pi=pi*2;

     return pi;

}

main( )

{ double  x;

  printf("Input eps:") ;

  scanf("%lf",&x); printf("\neps = %lf, PI=%lf\n", x, fun(x));

 }

27.请编写一个函数fun,它的功能是:求出1到m之内(含m)能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。

例如,若传送给m的值为50,则程序输出:7 11 14 21 22 28 33 35 42 44 49    

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <conio.h>

#include <stdio.h>

#define M 100

void  fun ( int  m, int *a , int *n )

{   int i,k;

   *n=0;

   for(i=1,k=0; i<=m; i++)

     if((i%7==0)||(i%11==0))

     { a[k++]=i; (*n)++; }

}

main( )

{  int aa[M], n, k;

   clrscr();

   fun ( 50, aa, &n );

   for ( k = 0; k < n; k++ )

     if((k+1)%20==0) printf("\n");

     else printf( "%4d", aa[k] );

   printf("\n") ;

   NONO( );

}

NONO ( )

{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */

  FILE *fp, *wf ;

  int i, n, j, k, aa[M], sum ;

  fp = fopen("bc05.in","r") ;

  if(fp == NULL) {

    printf("数据文件bc05.in不存在!") ;

    ret urn ;

  }

  wf = fopen("bc05.out","w") ;

  for(i = 0 ; i < 10 ; i++) {

    fscanf(fp, "%d,", &j) ;

    fun(j, aa, &n) ;

    sum = 0 ;

    for(k = 0 ; k < n ; k++) sum+=aa[k] ;

    fprintf(wf, "%d\n", sum) ;

  }

  fclose(fp) ;

  fclose(wf) ;

}

28.请编写一个函数fun,它的功能是:找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回。数组元素中的值已在主函数中赋予。主函数中x是数组名,n是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdlib.h>

#include <stdio.h>

void fun(int  a[],  int  n , int  *max, int  *d )

{ int i;

    *max=a[0];

    *d=0;

    for(i=0;i<n;i++)

        if(a[i]>*max)

        {*max=a[i];

            *d=i;}

}

main()

{int i,  x[20],  max , index, n = 10;

  randomize() ;

  for (i=0;i < n;i++) {x[i] = rand()%50; printf("%4d", x[i]) ; }

  printf("\n");

  fun( x, n , &max, &index);

  printf("Max =%5d ,  Index =%4d\n",max, index );

  }

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

例如,若输入abc4Efg,则应输出aBc4EFg。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include<conio.h>

#include<stdio.h>

#include<string.h>

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;

}

main()

{

   FILE  *wf;

  char tt[81],s[10]="abc4Efg";  

  printf("\nPlease enter an string within 80 characters:\n");

  gets(tt);

  printf("\n\nAfter changing, the string\n%s",tt);

  fun(tt);

  printf("\nbecomes\n%s\n",tt);

  wf=fopen("out.dat","w");

  fun(s);

  fprintf(wf,"%s",s);

  fclose(wf);

}

30.请编写一个函数fun,它的功能是:求出—个2×M整型二维数组中最大元素的值,并将此值返回调用函数。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#define M 4

#include <stdio.h>

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;

}

main()

{

  FILE *wf;

  int arr[2][M]={5,8,3,45,76,-4,12,82};

  printf("max=%d\n",fun(arr));

  wf=fopen("out.dat","w");

  fprintf (wf,"%d",fun(arr));

  fclose(wf);

}

31.请编写函数fun,其功能是:将s所指字符串中除了下标为偶数、同时ASCII值也为偶数的字符外,其余的全都删除;串中剩余字符所形成的一个新串放在t所指的数组中。

例如,若s所指字符串中的内容为ABCDEFGl23456,其中字符A的ASCII码值为奇数,因此应当删除;其中字符B的ASCII码值为偶数,但在数组中的下标为奇数,因此也应当删除;而字符2的ASCII码值为偶数,所在数组中的下标也为偶数,因此不应当删除,其他依此类推。最后t所指的数组中的内容应是246。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <conio.h>

#include <stdio.h>

#include<string.h>

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';

}

main()

{

  FILE *wf;

  char s[100] ,t[100];

  printf("\nPlease enter string S: ");

  scanf("%s",s);

  fun(s,t);

  printf("\nThe result is: %s\n",t);

  wf=fopen("out.dat","w");

  fun("ABCDEFG123456",t);

  fprintf(wf,"%s",t);

  fclose(wf);

}

32.请编写函数fun,其功能是:将s所指字符串中除了下标为奇数、同时ASCII值也为奇数的字符之外,其余的所有字符都删除,串中剩余字符所形成的一个新串放在t所指的数组中。

例如,若s所指字符串中的内容为ABCDEFG12345,其中字符A的ASCII码值虽为奇数,但所在元素的下标为偶数,因此必需删除;而字符1的ASCII码值为奇数,所在数组中的下标也为奇数,因此不应当删除,其他依此类推。最后t所指的数组中的内容应是135。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <conio.h>

#include <stdio.h>

#include <string.h>

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' ;

  }

main()

{ char s[100], t[100];

  printf("\nplease enter string S:");

  scanf("%s",s);

  fun(s,t);

  printf("\nthe result is :%s\n", t);

}

33.假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:使字符串中尾部的*号不得多于n个;若多于n个,则删除多余的*号;若少于或等于n个,则什么也不做,字符串中间和前面的*号不删除。        

例如,字符串中的内容为****A*BC*DEF*C*******,若n的值为4,删除后,字符串中的内容则应当是****A*BC*DEF*G****,若n的值7,则字符串中的内容仍为****A*BC*DEF*C*******。n的值在主函数中输入。在编写函数时,不得使用C语言提供的字符串函数。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

#include <conio.h>

 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-- ;}

  t++;

  if (k>n)

{ while(*p&&p<t+n)

  { a[i] = *p;

    i++;

    p++; }

a[i] = '\0';}

}

main()

{

  FILE *wf;

  char s[81],*t="****A*BC*DEF*G*******";

  printf("Enter a string :\n");

  gets(s);

  fun(s);

  printf("The string after deleted:\n");

  puts(s);

  wf=fopen("out.dat","w");

  fun(t);

  fprintf(wf,"%s",t);

  fclose(wf);

}

34.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把分数最高的学生数据放在h所指的数组中,注意:分数最高的学生可能不只一个,函数返回分数最高的学生的人数。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

#define    N    16

typedef    struct

{ char num[10];

  int  s ;

}STRUC;

int  fun (STRUC *a, STRUC *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;

}

main ()

{

  STRUC  s[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},

   {"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87},

   {"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},

   {"GA011",66},{"GA017",64},{"GA018",64},{"GA016",72}};

  STRUC h[N];

  int i, n;

  FILE *out;

  n=fun(s,h);

  printf("The %d highest score :\n",n);

  for (i=0; i<n; i++)

    printf("%s %4d\n ",h[i].num,h[i].s);

  printf("\n");

  out=fopen("out45.dat", "w");

  fprintf(out, "%d\n",n);

  for(i=0; i<n; i++)

     fprintf(out, "%4d\n ",h[i].s);

  fclose(out);

}

35.请编写一个函数,用来删除字符串中的所有空格。

例如,输入asd af aa z67,则输出为asdafaaz67。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

#include <ctype.h>

#include <conio.h>

int fun(char *str)

{char *p=str;

for(; *str; str++)

if(*str!=' ') *p++=*str;

*p='\0';

}

main()

{

char str[81];

int n;

clrscr()

printf("Input a string:")

gets(str);

puts(str);

fun(str);

printf("*** str: %s\n",str);

NONO();

}

NONO()

{

/* 请在此函数内打开文件,输入调试数据,调用 fun 函数,输出数据,关闭文件。 */

char str[81];

int n = 0;

FILE *rf, *wf

rf = fopen("b0803.in", "r")

wf = fopen("b0803.out", "w")

while(n < 10) {

fgets(str, 80, rf);

fun(str);

fprintf(wf, "%s", str)

n++

}

fclose(rf)

fclose(wf)

}

36.假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串中的前导*号全部移到字符串的尾部。

例如,若字符串中的内容为*******A*BC*DEF*G****,移动后,字符串中的内容应当是A*BC*DEF*G**********。在编写函数时,不得使用C语言提供的字符串函数。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

#include <conio.h>

void  fun ( char *a)

{  int  i=0,n=0 ;  char *p ;

   p=a;

   while (*p=='*')

     {n++ ; p++; }

   while (*p)

{ a[i]= *p ;

  i++;

  p++ ; }

         while(n!=0)

          { a[i]= '*' ;

            i++ ;

            n-- ; }

        a[i]= '\0' ;

}

main()

{

  FILE *wf;

  char s[81],*t="****A*BC*DEF*G*******";

  printf("Enter a string :\n");

  gets(s);

  fun(s);

  printf("The string after deleted:\n");

  puts(s);

  wf=fopen("out.dat","w");

  fun(t);

  fprintf(wf,"%s",t);

  fclose(wf);

}

37.某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程的成绩已在主函数中给出。请编写函数fun,它的功能是:求出该学生的平均分放在记录的ave成员中。请自己定义正确的形参。

例如,若学生的成绩是85.5,76,69.5,85,91,72,64.5,87.5,则他的平均分应当是78.875。    

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

#define N 8

typedef struct

{ char num[10];

  double s[N];

  double ave;

} STRUC;

void fun( )

{

  int i;

  p->ave=0.0 ;

  for(i=0;i<N;i++)

     p->ave=p->ave+p->s[i];

  p->ave= p->ave/N ;

}

main()

{

  FILE *wf;

  STRUC s={ "GA005 ",85.5,76,69.5,85,91,72,64.5,87.5};

  int i;

  fun(&s);

  printf("The %s's student data:\n", s.num);

  for(i=0;i<N;i++)

    printf("%4.1f\n",s.s[i]);

  printf("\nave=%7.3f\n", s.ave);

  wf=fopen("out.dat","w");

  fprintf(wf,"ave=%7.3f", s.ave);

  fclose(wf);

}

38.请编写函数fun,它的功能是:求出ss所指字符串中指定字符的个数,并返回此值。  

例如,若输入字符串123412132,输入字符1,则输出3。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include<conio.h>

#include<stdio.h>

#define M 81

/* 注:本题用while()循环来控制字符的移动,每移动一个字符都要进行判断(if(*ss==c))是否为指定的字母,若是则个数加1。这里要注意如何让ss指针向下走动(ss++)。*/

int fun(char *ss,char c)

{int num=0;

while(*ss!='\0')

{if(*ss==c) num++;

ss++;

}

return(num);

}

main()

{char a[M],ch;

clrscr();

printf("\nPlease enter a strint:");gets(a);

printf("\nPlease enter a char:");ch=getchar();

printf("\nThe number of the char is:%d\n",fun(a,ch));

}

39.请编写函数fun,该函数的功能是:移动一维数组中的内容;若数组中有n个整数,要求把下标从0到p(p小于等于n-1)的数组元素平移到数组的最后。

例如,一维数组中的原始内容为:1,2,3,4,5,6,7,8,9,10;p的值为3。移动后,一维数组中的内容应为:5,6,7,8,9,10,1,2,3,4。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

#define N 80

void fun(int *w, int p, int n)

{

int i,k=0,b[N];

for(i=p+1; i < n; i++) b[k++]=w[i];

for(i=0; i <= p; i++) b[k++]=w[i];

for(i=0; i < n; i++) w[i]=b[i];

}

main()

{ int a[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

int i,p,n=15;

printf("The original data:\n");

for(i=0; i

printf("\n\nEnter p: ");scanf("%d",&p);

fun(a,p,n);

printf("\nThe data after moving:\n");

for(i=0; i

printf("\n\n");

NONO();

}

NONO()

{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */

FILE *rf,*wf  int a[N], i, j, p, n

rf = fopen("bc.in", "r")

wf = fopen("bc.out", "w")

for(i = 0  i < 5  i++) {

fscanf(rf, "%d %d", &n, &p)

for(j = 0  j < n  j++) fscanf(rf, "%d", &a[j])

fun(a, p, n)

for(j = 0  j < n  j++) fprintf(wf, "%3d", a[j])  fprintf(wf, "\n")

}

fclose(rf)  fclose(wf)

}

40.请编写函数fun,该函数的功能是:移动字符串中的内容,移动的规则如下:把第1到第m个字符,平移到字符串的最后,把第m+1到最后的字符移到字符串的前部。

例如,字符串中原有的内容为ABCDEFGHIJK,m的值为3,移动后,字符串中的内容应该是DEFGHIJKABC。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

#include<string.h>

#define   N    80

void fun (char  *w,int  m)

{

  int i,j;

  char t;

  for(i=1;i<=m;i++)

    {t=w[0];

     for(j=1;w[j]!='\0';j++)

         w[j-1]= w[j] ;

      w[j-1] =t;

    }

}

main()

{

   FILE  *wf;

  char  a[N]= "ABCDEFGHIJK";

  int  m;

  printf("The origina string :\n");

  puts(a);

  printf("\n\nEnter  m: ");

  scanf("%d",&m);

  fun(a,m);

  printf("\nThe string after moving :\n");

  puts(a);

  printf("\n\n");

  wf=fopen("out.dat","w");

  fun(b,3);

  fprintf(wf,"%s",b);

  fclose(wf);

}

41.请编写函数fun,该函数的功能是:将M行N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。

例如,若二维数组中的数据为:W  W  W  W  则字符串中的内容应是WSHWSHWSH。

         S  S  S  S

         H  H  H  H

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include<stdio.h>

#define  M  3

#define  N  4

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';

}

main()

{

  FILE *wf;

  char a[100],w[M][N]={{ 'W', 'W', 'W', 'W'},{'S', 'S', 'S', 'S'},{'H', 'H', 'H', 'H'}};

  int i,j;

  printf("The matrix:\n");

  for(i=0;i<M;i++)

     { for(j=0;j<N;j++)

          printf("%3c",w[i][j]);

       printf("\n");

     }

  fun(w,a);

  printf("The A string:\n");

  puts(a);

  printf("\n\n");

  wf=fopen("out.dat","w");

  fprintf(wf,"%s",a);

  fclose(wf);

}

42.下列程序定义了NXN的二维数组,并在主函数中自动赋值。请编写函数fun(int a[][N],int n),该函数的功能是:使数组右上半三角元素中的值乘以m。

例如:若m的值为2,a数组中的值为 ,则返回主程序后a数组中的值应为 

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#define N 5

/*该题的关键也是在如何表示右上半角,本题采用的是在一行内从最后一列的元素开始往前乘,只有j>=i时才改变。*/

int fun( int a[][N], int m)

{ int i,j;

for(i=0; i<N; i++)

for(j=N-1; j>=i; j--)

a[i][j]*=m;

}

main()

{ int a[N][N],m,i,j;

printf("**** the array ****\n");

for( i=0; i<N;i++)

{ for( j=0; j<N; j++)

{a[i][j]=rand()%20; printf("%4d", a[i][j]); }

printf("\n");

}

do m=rand()%10; while( m>=3);

printf("m=%4d\n", m);

fun( a,m);

printf(" the result \n");

for(i=0; i<N; i++)

{for(j=0; j<N; j++) printf("%4d", a[i][j]);

printf("\n");

}

}

43.编写一个函数,从传入的num个字符串中找出最长的一个字符串,并通过形参指针max传回该串地址(用****作为结束输入的标志)。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include "stdio.h"

#include "string.h"

#include "conio.h"

/* 函数strlen()用于求出字符串的长度,这个题中主要是*max=p;不能换成max=&p;如果用maz=&p;则只改变了max的指向,它不能传回给实参。因此我们要改变max指向地址中的内容,这才能使得实参ps有正确的值。*/

fun(char (*a)[81], int num,char **max)

{ char *p=a[0];int i;

for(i=1;i<num;i++)

if(strlen(a[i])>strlen(p))

p=a[i];

*max=p;

}

main()

{ char ss[10][81],*ps;

int n,i=0;

clrscr();

printf("enter string:\n");

gets(ss[i]);

puts(ss[i]);

while(!strcmp(ss[i],"****")==0)

{

i++;

gets(ss[i]);

puts(ss[i]);

}

n=i;

fun(ss,n,&ps);

printf("\nmax=%s\n",ps);

}

44.编写一个函数,该函数可以统计一个长度为2的字符串在另一个字符串中出现的次数。例如,假定输入的字符串为:asd asasdfg asd as zx67 asdmklo,子字符串为as,则应输出6。    

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include "stdio.h"

#include "string.h"

#include "conio.h"

/*注:由于小串中只有2个字符所以可用str[i]==sbustr[0]&&str[i+1]==substr[1]来判断小串是否与长串当前位置(str[i])相同(即出现一次)。因而只要让长串当前位置逐一向后移即可(用for()循环来完成)。*/

int fun(char *str,char *substr)

{ int i,n=0,s=strlen(str);

for(i=0;i<s;i++)

if((str[i]==substr[0])&&(str[i+1]==substr[1]))

n++;

return n;

}

main()

{

char str[81],substr[3];

int n; clrscr();

printf("enter 1:");

gets(str);

printf("enter 2:");

gets(substr);

puts (str);

puts(substr);

n=fun(str,substr);

printf("n=%d\n",n);

}

45.假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:只删除字符串前导和尾部的*号,串中字母之间的*号都不删除。形参n给出了字符串的长度,形参h给出了字符串中前导*号的个数,形参e给出了字符串中最后*号的个数。在编写函数时,不得使用C语言提供的字符串函数。

例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是A*BC*DEF*G。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

#include <conio.h>

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 ;

}

main()

{

  FILE *wf;

  char s[81],*t,*f;

  char *p="****A*BC*DEF*G*******";

  int m=0,tn=0, fn=0;

  printf("Enter a string :\n");

  gets(s);

  t=f=s;

  while(*t)

     {t++;m++;}

    t-- ;

  while(*t=='*')

     {t--;tn++;}

  while(*f=='*')

     {f++;fn++;}

  fun( s, m, fn, tn);

  printf("The string after deleted:\n");

  puts(s);

  wf=fopen("out.dat","w");

  fun(p,21,4,7);

  fprintf(wf,"%s",p);

  fclose(wf);

}

46.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:按分数的高低排列学生的记录,高分在前。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

#define  N  16

typedef  struct

{ char num[10];

  int  s ;

}STRUC;

void  fun (STRUC  a[])

{

  int i,j;

  STRUC 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;}

}

main ()

{

  FILE *wf;

  STRUC  s[N]={{ "GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},

  {"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87},

  {"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},

  {"GA011",66},{"GA017",64},{"GA018",64},{"GA016",72}};

  int i;

  FILE *out;

  fun(s);

  printf("The data after sorted :\n");

  for (i=0; i<N; i++)

      {if((i)%4==0)

         printf("\n");

       printf("%s %4d",s[i].num,s[i].s);  

      }

  printf("\n");

  out=fopen("out65.dat", "w");

  for(i=0; i<N; i++)

     {if((i)%4==0&&i)  

         fprintf(out, "\n");

      fprintf(out, "%4d",s[i].s);

     }

  fprintf(out, "\n");

  fclose(out);

  wf=fopen("out.dat","w");

  for (i=0; i<N; i++)

      {if((i)%4==0&&i)              

         fprintf(wf,"\n");

       fprintf(wf,"%s %4d",s[i].num,s[i].s);  

      }

  fclose(wf);

}

47.请编写—个函数void  fun(char *ss),其功能是:将字符串ss中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。

例如,若输入abc4EFg,则应输出aBc4EFg。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include<conio.h>

#include<stdio.h>

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;

     }

}

main()

{

  FILE *wf;

  char tt[51],*s="abc4Efg";

  printf("Please enter an character string within 50 characters:\n");

  gets(tt);

  printf("\n\nAfter changing,the string\n %s",tt);

  fun(tt);

  printf("\nbecomes\n %s",tt);

  wf=fopen("out.dat","w");

  fun(s);

  fprintf(wf,"%s",s);

  fclose(wf);

}

48.请编写函数fun,其功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的千位和十位上,b数的十位和个位数依次放在c数的百位和个位上。

例如,当a=45,b=12,调用该函数后c=4152。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <conio.h>

#include <stdio.h>

/*本题的关键在于如何表示出个、十、百、千位数。对于一个两位的整数,用10对它求余得到个位数上的数,将它除10得到十位数上的数。*/

void fun ( int  a, int b , long *c)

      { *c=(a/10)*1000+(b/10)*100+(a%10)*10+b%10 ; }

main()

{ int a,b; long c;

printf(" input a, b: ");

scanf("%d%d", &a,&b);

fun(a,b,&c);

printf(" the result is :%ld\n", c);

}

49.请编写函数fun,其功能是:将s所指字符串中下标为偶数同时ASCII值为奇数的字符删除,s中剩余的字符形成的新串放在t所指的数组中。

例如,若s所指字符串中的内容为ABCDEFGl2345,其中字符C的ASCII码值为奇数,在数组中的下标为偶数,因此必须删除;而字符1的ASCII码值为奇数,在数组中的下标也为奇数,因此不应当删除,其他依此类推。最后t所指的数组中的内容应是BDFl2345。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <conio.h>

#include <stdio.h>

#include <string.h>

void  fun ( char *s, char t[ ])

{ int i, j=0,  n=strlen(s);

 for(i=0; i<n; i++)

 if (i%2==0&&s[i]%2!=0)

  ;

 else

  { t[j]=s[i] ;

    j++ ; }

  t[j]= '\0' ;

        }

main()

{ char s[100], t[100];

  printf("\nplease enter string S:");

  scanf("%s",s);

  fun(s,t);

  printf("\nthe result is :%s\n", t);

}

50.已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。请编写函数fun,该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数(规定只有一个最高分)。已给出函数的首部,请完成该函数。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

#include <string.h>

#include <conio.h>

#define N 10

typedef struct ss

{ char num[10]; int s;} STU;

/*只是采用的赋值方式不同。采用的是结构体元素对结构体元素赋值。*/

fun( STU a[], STU *s)

{ int i;

*s=a[0];

for( i=1;i<N; i++)

if (a[i].s>(*s).s)

*s=a[i];

}

main()

{ STU a[N]={ {"A01",81},{"A02",89},{"A03",66}

,{"A04",87},{"A05",77},

{"A06",90},{"A07",79},{"A08",61},{"

;A09",80},{"A10",71} }, m;

int i;

printf("**** the original data ****\n");

for(i=0;i<N; i++) printf("N0=%s Mark=%d\n", a[i].num,a[i].s

);

fun( a,&m);

printf("**** the result****\n");

printf(" the top : %s ,%d\n", m.num,m.s);

}

51.请编写函数fun,其功能是:将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k传回。

例如,若输入17,则应输出:9和4 6 8 9 10 12 14 15 16。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <conio.h>

#include <stdio.h>

/* 注:内嵌的for()循环用于判断是否是素数,在j<i的情况下,只要j对i求余,余数为0则表示i不是素数,则将i存入xx数组中。break;语句只是让它提前结束循环。不用亦可。*/

void fun( int m, int *k, int xx[] )

{ int i,j;

*k=0;

for( i=2; i<m; i++)

for( j=2; j<i; j++)

if( i%j==0)

{ xx[(*k)++]=i; break;}

}

main()

{ int m, n,zz[100];

printf("\n please enter an integer number between 10 and 100: ");

scanf( "%d",&n);

fun(n,&m,zz);

printf("\n\n there are %d non-prime numbers less than %d: ", m,n);

for(n=0; n<m; n++)

printf("\n %4d",zz[n]);

}

52.编写一个函数fun,它的功能是:实现两个字符串的连接(不使用库函数strcat),即把p2所指的字符串连接到p1所指的字符串后。    

例如,分别输入下面两个字符串:FirstString--

SecondString    

则程序输出:FirstString—SecondString

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include<stdio.h>

#include<conio.h>

/* 注:第一个for()循环用于让i成为第一个字符串的结束符的下标,要注意在这个for()后要有一个分号否则出错。第二个for()的作用是将第二个字符串一个一个字符依次放到第一个字符串的未尾。此外,还要注意最后一定要有p1[i]='\0';来给字符串加上结束符。*/

void fun(char p1[],char p2[])

{int i,j;

for(i=0;p1[i];i++);

for(j=0;p2[j];j++)

p1[i++]=p2[j];

p1[i]='\0';

}

main()

{ char s1[80],s2[80];

clrscr();

printf("Enter s1 and s2:\n");

scanf("%s%s",s1,s2);

printf("s1=%s\n",s1);

printf("s2=%s\n",s2);

printf("Invoke fun(s1,s2):\n");

fun(s1,s2);

printf("After invoking:\n");

printf("%s\n",s1);

}

53.请编写函数fun,该函数的功能是:实现B=A+A’,即把矩阵A加上矩阵A的转置,存放在矩阵B中。计算结果在main函数中输出。

    例如,输入下面的矩阵:    其转置矩阵为:     则程序输出:

  1    2    3          l    4    7        2 6 10

  4    5    6     +     2    5    8    =   6 10 14

  7    8    9          3    6    9        10 14 18

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include<conio.h>

#include<stdio.h>

/*本题没有先求出A的转置,而是直接利用转置的性质(即第一行作为转置后的第一列,第二行作为转置后的第二列,的行列互换的性质)。而且最后要求出两矩阵的相加后得出的新矩阵,由转置性质可知原a[j][i]转置后位置为a[i][j],在表达式:b[i][j]=a[i][j]+a[j][i]第一个a为A的元素,第二个a为A'的元素。*/

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];

}

main()

{int a[3][3]={{1,2,3},{4,5,6},{7,8,9}},t[3][3];

int i,j;

clrscr();

fun(a,t);

for(i=0;i<3;i++)

{for(j=0;j<3;j++)

printf("%7d",t[i][j]);

printf("\n");

}

}

54.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把低于平均分的学生数据放在b所指的数组中,低于平均分的学生人数通过形参n传回,平均分通过函数值返回。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include<stdio.h>

#define N 8

typedef struct

{ char num[10];

  double s;

} STRUC;

double fun(STRUC *a, STRUC *b, int *n)

{

  int i,j=0;

  double av=0.0;

  for(i=0;i<N;i++)

    av=av+ a[i] ;

  av= av/N ;

  for(i=0;i<N;i++)

    if(a[i].s<av) b[ j++ ]=a[i];

  *n=j;

  return av;

}

main()

{

  FILE *wf;

  STRUC s[N]={{ "GA05 ",85},{ "GA03 ",76},{ "GA02 ",69},{ "GA04 ",85},

  { "GA01 ",91},{ "GA07 ",72},{ "GA08 ",64},{ "GA06 ",87}};

  STRUC h[N],t;

  FILE *out;

  int i,j,n;

  double ave;

  ave=fun(s,h,&n);

  printf("The %d student data which is lower than %7.3f:\n ", n,ave);

  for(i=0;i<n;i++)

    printf("%s %4.1f\n ",h[i].num,h[i].s);

  printf("\n ");

  out=fopen("out71.dat ", "w ");

  fprintf(out, "%d\n%7.3f\n ",n,ave);

  for(i=0;i<n-1;i++)

    for(j=i+1;j<n;j++)

       if(h[i].s>h[j].s)

         {t=h[i]; h[i]=h[j]; h[j]=t;}

  for(i=0;i<n;i++)

    fprintf(out, "%4.1f\n ",h[i].s);

  fclose(out);

  wf=fopen("out.dat","w");

  fprintf(wf, "%d %7.3f\n",n,ave);

  for(i=0;i<n;i++)

    fprintf(wf, "%s %4.1f  ",h[i].num,h[i].s);

  fclose(wf);

}

55.请编写函数fun,该函数的功能是:将M行N列的二维数组中的数据,按行的顺序依次放到一维数组中,一维数组中数据的个数存放在形参n所指的存储单元中。

例如,若二维数组中的数据为:33    33    33    33

                  44    44    44    44

                  55    55    55    55

则一维数组中的内容应是:33  33  33  33  44  44  44  44  55  55  55  55

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

void fun (int (*s)[10], int *b, int *n, int mm, int nn)

{

  int i,j,k=0;

  for(i=0;i<mm;i++)

     for(j=0;j<nn;j++)

        b[k++]= s[i][j] ;

   *n =k;

}

main()

{

  FILE *wf;

  int w[10][10]={{33,33,33,33},{44,44,44,44},{55,55,55,55}}, i, j;

  int a[100]={0},n=0 ;

  printf("The matrix:\n");

  for (i=0; i<3; i++)

    {for (j=0;j<4;j++)  

        printf("%3d",w[i][j]);

     printf("\n");

    }

  fun(w,a, &n,3,4);

  printf("The A array:\n");

  for(i=0; i<n; i++)  

     printf("%3d",a[i]);

  printf("\n\n");

  wf=fopen("out.dat","w");

  for(i=0; i<n; i++)  

     fprintf(wf,"%3d",a[i]);

  fclose(wf);

}

56.假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了尾部的*号之外,将字符串中其他*号全部删除。形参p已指向字符串中最后的一个字母。在编写函数时,不得使用C语言提供的字符串函数。

例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的则内容应当是ABCDEFG*******。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include<conio.h>

#include<stdio.h>

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';

}

main()

{

  FILE *wf;

  char h[81],*t,p[81]="****A*BC*DEF*G******";

  printf("Enter a string:\n ");

  gets(h);

  t=h;

  while(*t)

    t++;

   t--;

  while(*t=='*')

    t--;

  fun(h,t);

  printf("The string after deleted:\n");

  puts(h);

  wf=fopen("out.dat","w");

  t=p;

  while(*t)

    t++;

  t--;              

  while(*t=='*')

    t--;   

  fun(p,t);

  fprintf(wf,"%s",p);

  fclose(wf);

}

57.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把指定分数范围内的学生数据放在b所指的数组中,分数范围内的学生人数由函数值返回。

例如,输入的分数是60和69,则应当把分数在60到69的学生数据进行输出,包含60分和69分的学生数据。主函数中将把60放在low中,把69放在high中。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

#define  N  16

typedef  struct

{ char num[10];

  int  s ;

}STRUC;

int  fun (STRUC *a, STRUC *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;

}

main ()

{

  FILE *wf;

  STRUC  s[N]={{ "GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},

  {"GA001",96},{"GA007",72},{"GA008",64},{"GA006",87},

  {"GA015",85},{"GA013",94},{"GA012",64},{"GA014",91},

  {"GA011",90},{"GA017",64},{"GA018",64},{"GA016",72}};

  STRUC h[N],tt;

  FILE *out;

  int i, j, n, low, heigh, t;

  printf("Enter 2 integer number low & heigh: ");

  scanf("%d%d",&low,&heigh);

  if(heigh<low )

    {t=heigh;heigh=low; low=t;}

  n=fun(s,h,low, heigh);

  printf("The student 's data between %d--%d:\n ",low, heigh);

  for(i=0;i<n;i++)

     printf("%s %4d\n ",h[i].num, h[i].s);

  printf("\n ");

  out=fopen("out74.dat ", "w");

  fprintf(out, "%d\n ",n);

  n=fun(s,h,80,98);

  for(i=0;i<n-1;i++)

     for(j=i+1;j<n;j++)

        if(h[i].s>h[j].s)

          {tt=h[i];h[i]=h[j];h[j]=tt;}

  for(i=0;i<n;i++)

     fprintf(out, "%4d\n ",h[i].s);

  fprintf(out, "\n ");

  fclose(out);

  wf=fopen("out.dat","w");

  for(i=0;i<n;i++)

     fprintf(wf, "%s %4d ",h[i].num, h[i].s);

  fclose(wf);

}

58.编写函数fun,它的功能是:求n以内(不包括n)同时能被3与7整除的所有自然数之和的平方根s,并作为函数值返回。

例如,若n为1000时,函数值应为s=153.909064。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <conio.h>

#include <math.h>

#include <stdio.h>

double fun(int n)

{ int sum,i;sum=0;

for(i=0;i<n;i++)

{if(i%3==0&&i%7==0)

sum=sum+i;}

return (sqrt(sum));

}

main()

{clrscr();

printf("s=%f\n",fun(1000));

}

59.请编写函数fun,该函数的功能是:将放在字符串数组中的M个字符串(每串的长度不超过N),按顺序合并组成一个新的字符串。

例如,若字符串数组中的M个字符串为:AAAA

                                  BBBBBBB

CC

则合并后的字符串的内容应是AAAABBBBBBBCC。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

#include <conio.h>

#define M 3

#define N 20

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';

}

main()

{

  FILE *wf;

  char w[M][N]={"AAAA", "BBBBBBB", "CC"},i;

  char a[100]={ " ##############################"};

  printf("The string:\n ");

  for(i=0;i<M;i++)

     puts(w[i]);

  printf("\n ");

  fun(w,a);

  printf("The A string:\n ");

  printf("%s ",a);

  printf("\n\n ");

  wf=fopen("out.dat","w");

  fprintf(wf,"%s",a);

  fclose(wf);

}

60.请编写函数fun,该函数的功能是:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。

     例如,若一维数组中的数据是: 2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10。

删除后,数组中的内容应该是: 2 3 4 5 6 7 8 9 10。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

#define N 80

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;

}

main()

{

  FILE *wf;

  int a[N]={ 2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10}, i, n=20;

  printf("The original data :\n");

  for(i=0; i<n; i++)  

     printf("%3d",a[i]);

  n=fun(a,n);

  printf("\n\nThe data after deleted :\n");

  for(i=0; i<n; i++)  

     printf("%3d",a[i]);  

  printf("\n\n");

  wf=fopen("out.dat","w");

  for(i=0; i<n; i++)  

     fprintf(wf,"%3d",a[i]);

  fclose(wf);

}

61.请编写函数fun,该函数的功能是:统计各年龄段的人数。N个年龄通过调用随机函数获得,并放在主函数的age数组中;要求函数把0至9岁年龄段的人数放在d[0]中,把10至19岁年龄段的人数放在d[1]中,把20至29岁年龄段的人数放在d[2]中,其余依此类推,把100岁(含100)以上年龄的人数都放在d[10]中。结果在主函数中输出。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

# define N  50

# define M  11

void fun(int *a,  int *b)

{

  int i,j;

  for(j=0;j<M;j++)

     b[j]=0;

  for(i=0;i<N;i++)

     if(a[i]>=100)

        b[10]++;

     else

        b[a[i]/10]++;

}

double  rnd()

{

  static t=29,c=217,m=1024,r=0;

  r=(r*t+c)%m;  

  return((double)r/m);

}

main()

{

  FILE *wf;

  int age[N], i,d[M];

  int b[N]={32,45,15,12,86,49,97,3,44,52,17,95,63};

  for(i=0; i<N; i++)  

     age[i]=(int)(115*rnd());

  printf("The original data :\n");

  for(i=0; i<N; i++)  

     printf((i+1)%10==0? "%4d\n":"%4d",age[i]);

  printf("\n\n");

  fun(age,d);

  for(i=0; i<10; i++)  

     printf("%4d---%4d  :%4d\n", i*10, i*10+9,d[i]);

  printf("Over 100  :  %4d\n",d[10]);

  wf=fopen("out.dat","w");

  fun(b,d);

  for(i=0; i<10; i++)  

     fprintf(wf,"%4d---%4d  :%4d\n", i*10, i*10+9,d[i]);

  fprintf(wf,"Over 100  :  %4d",d[10]);

  fclose(wf);

}

62.请编写函数fun,该函数的功能是:统计一行字符串中单词的个数,作为函数值返回。一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格隔开,一行的开始没有空格。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include<string.h>

#include<stdio.h>

#define N 80

int fun(char *s)

{

  int i,j=0;

  for(i=0;s[i]!='\0';i++)

     if(s[i]!=' '&&(s[i+1]==' '||s[i+1]=='\0'))

        j++;

  return j;

}

main()

{

  FILE *wf;

  char line[N];

  int num=0;

  printf("Enter a string:\n ");

  gets(line);

  num=fun(line);

  printf("The number of word is:%d\n\n ",num);

  wf=fopen("out.dat","w");

  fprintf(wf,"%d",fun("a big car"));

  fclose(wf);

}

63.请编写一个函数fun,它的功能是:计算并输出给定整数n的所有因子(不包括1与自身)之和。规定n的值不大于1000。

例如,若主函数从键盘给n输入的值为856,则输出为sum=763。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

int fun(int  n)

{

int s=0,i;

for(i=2;i<=n-1;i++)

   if(n%i==0)  s+=i;

return s;

}

main()

{ int  n,sum;

  printf("Input n:  ");  scanf("%d",&n);

  sum=fun(n);

  printf("sum=%d\n",sum);

  NONO();

}

NONO()

{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */

  FILE *rf, *wf ; int i, n, sum ;

  rf = fopen("K:\\k1\\24000318\\in.dat","r") ;

  wf = fopen("K:\\k1\\24000318\\out.dat","w") ;

  for(i = 0 ; i < 10 ; i++) {

    fscanf(rf, "%d", &n) ;

    sum = fun(n) ;

    fprintf(wf, "%d=%d\n", n, sum) ;

  }

  fclose(rf) ; fclose(wf) ;

}

64.请编写函数fun,其功能是:将s所指字符串中ASCII值为奇数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。

例如,若s所指字符串中的内容为ABCDEFGl2345,其中字符A的ASCII码值为奇数、…字符1的ASCII码值也为奇数、…都应当删除,其他依次类推。最后t所指的数组中的内容应是BDF24。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

#include<string.h>

#include<conio.h>

  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' ;

        }

main()

{

  FILE *wf;

  char s[100],t[100];

  printf("\nPlease enter string S: ");  

  scanf("%s",s);

  fun(s,t);

  printf("\nThe result is :%s\n",t);

  wf=fopen("out.dat","w");

  fun("ABCDEFG12345",t);

  fprintf(wf,"%s",t);

  fclose(wf);

}

65.请编写函数fun,其功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的百位和个位上,b数的十位和个位数依次放在c数的十位和千位上。

例如,当a=45,b=12,调用该函数后c=2415。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <conio.h>

#include <stdio.h>

/*本题的关键在于如何表示出个、十、百、千位数。对于一个两位的整数,用10对它求余得到个位数上的数,将它除10得到十位数上的数。*/

void fun ( int  a, int b , long *c)

      { *c=(b%10)*1000+(a/10)*100+(b/10)*10+a%10 ; }

main()

{ int a,b; long c;

printf(" input a, b: ");

scanf("%d%d", &a,&b);

fun(a,b,&c);

printf(" the result is :%ld\n", c);

}

66.假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:删除字符串中所有的*号。在编写函数时,不得使用C语言提供的字符串函数。

例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是ABCDEFG。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include<conio.h>

#include<stdio.h>

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';  

}

main()

{

  FILE *wf;

  char s[81],*p="****A*BC*DEF*G*******";

  printf("Enter a string:\n");

  gets(s);

  fun(s);

  printf("The string after deleted:\n");

  puts(s);

  wf=fopen("out.dat","w");

  fun(p);

  fprintf(wf,"%s",p);

  fclose(wf);

}

67.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:函数返回指定学号的学生数据,指定的学号在主函数中输入。若没找到指定学号,在结构体变量中给学号置空串,给成绩置-1,作为函数值返回(用于字符串比较的函数是strcmp)。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#define  N  16

typedef struct

{ char num[10];

  int s;

}STRUC;

STRUC  fun(STRUC *a, char *b)

{

  int i;

  STRUC str={"\0",-1};  

  for(i=0;i<N;i++)

     if(strcmp(a[i].num,b)==0)

        str=a[i];

  return str;

}

main()

{

  FILE *wf;

  STRUC s[N]={{ "GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},

  {"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87},

  {"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},

  {"GA011",77},{"GA017",64},{"GA018",64},{"GA016",72}};

  STRUC h;

  char m[10];

  int i;

  FILE *out;

  printf("The original data:\n");

  for(i=0;i<N;i++)

     { if(i%4==0)

          printf("\n");

       printf("%s %3d",s[i].num,s[i].s);

     }

  printf("\n\nEnter the number: ");

  gets(m);

  h=fun(s,m);

  printf("The data: ");

  printf("\n%s %4d\n",h.num,h.s);

  printf("\n");

  out=fopen("out80.dat", "w");

  h=fun(s, "GA013");

  fprintf(out, "%s %4d\n",h.num,h.s);

  fclose(out);

  wf=fopen("out.dat","w");

  fprintf(wf,"%s %4d",h.num,h.s);

  fclose(wf);

}

68.请编写函数fun,其功能是:计算并输出下列多项式值:

  Sn=1+1/1!+1/2!+1/3!+1/4!+…+1/n!

  例如,若主函数从键盘给n输入15,则输出为s=2.718282。注意:n的值要求大于1但不大于100。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

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;

}

return sn;

}

main()

{  int  n;     double  s;

   printf("Input n:  ");  scanf("%d",&n);

   s=fun(n);

   printf("s=%f\n",s);

   NONO();

}

NONO()

{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */

  FILE *rf, *wf ; int n, i ; double s ;

  rf = fopen("K:\\k01\\24001619\\in.dat","r") ;

  wf = fopen("K:\\k01\\24001619\\out.dat","w") ;

  for(i = 0 ; i < 10 ; i++) {

    fscanf(rf, "%d", &n) ;

    s = fun(n) ;

    fprintf(wf, "%lf\n", s) ;

  }

  fclose(rf) ; fclose(wf) ;

}

69.请编写函数fun,它的功能是:求Fibonacci数列中大于t的最小的一个数,结果由函数返回。其中Fibonacci数列F(n)定义为:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)

    例如:当t=1000时,函数值为1597。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include "math.h"

#include "stdio.h"

int fun (int t)

{int i,s=0;

for(i=0;s<=t;i++)

s=f(i);return s;

}

f (int n)

{     int s=0;

if(n==0) return 0;

else if(n==1) return 1;

else s=f(n-1)+f(n-2);

return s;

}

main()

{int n;

clrscr();

n=1000;

printf("n=%d,f=%d\n",n,fun(n));

}

70.编写函数fun,它的功能是:计算并输出下列级数和:S=1/1*2+1/2*3+...+1/n(n+1)

  例如,当n=10时,函数值为0.909091。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include<conio.h>

#include<stdio.h>

double fun(int n)

{

  int i;

  double s=0.0;

  for(i=1;i<=n;i++)

     s= s+1.0/(i*(i+1));

  return s;

}

main()

{

  FILE *wf;

  printf("%f\n",fun(10));

  wf=fopen("out.dat","w");

  fprintf(wf,"%f",fun(10));

  fclose(wf);

}

71.请编写函数fun,其功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的十位和千位上,b数的十位和个位数依次放在c数的百位和个位上。

例如,当a=45,b=12,调用该函数后c=5142。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <conio.h>

#include <stdio.h>

/*本题的关键在于如何表示出个、十、百、千位数。对于一个两位的整数,用10对它求余得到个位数上的数,将它除10得到十位数上的数。*/

void fun ( int  a, int b , long *c)

{ *c=(a%10)*1000+(b/10)*100+(a/10)*10+b%10 ; }

main()

{ int a,b; long c;

printf(" input a, b: ");

scanf("%d%d", &a,&b);

fun(a,b,&c);

printf(" the result is :%ld\n", c);

}

72.请编写函数fun,其功能是:将s所指字符串中下标为偶数的字符删除,串中剩余字符形成的新串放在t所指数组中。

例如,当s所指字符串中的内容为ABCDEFGHIJK,则在t所指数组中的内容应是BDFHJ。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include<conio.h>

#include<stdio.h>

#include<string.h>

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';

}

main()

{

  FILE *wf;

  char s[100],t[100];

  printf("\nPlease enter string S: ");

  scanf("%s",s);

  fun(s,t);

  printf("\nThe result is:%s\n ",t);

  wf=fopen("out.dat","w");

  fun("ABCDEFGHIJK",t);

  fprintf(wf,"%s",t);

  fclose(wf);

}

73.假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了字符串前导和尾部的*号之外,将串中其他*号全部删除。形参h已指向字符串中第一个字母,形参p已指向字符串中最后一个字母。在编写函数时,不得使用C语言提供的字符串函数。

例如,若字符串中的内容为****A*BC*DEF*G********,删除后,字符串中的内容则应当是****ABCDEFC********。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

#include <conio.h>

  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';

      }

main()

{

  FILE *wf;

  char s[81],*t="****A*BC*DEF*G*******";

  printf("Enter a string :\n");

  gets(s);

  fun(s);

  printf("The string after deleted:\n");

  puts(s);

  wf=fopen("out.dat","w");

  fun(t);

  fprintf(wf,"%s",t);

  fclose(wf);

}

74.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把分数最低的学生数据放在h所指的数组中,注意:分数最低的学生可能不止一个,函数返回分数最低的学生的人数。    

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

#include <string.h>

#include <conio.h>

#define N 10

typedef struct ss

{ char num[10]; int s;} STREC;

int fun (STREC *a, STREC *b)

      { int i,j=0, n=0, min ;

        min=a[0].s ;

        for (i=0 ; i<N ; i++)

        if( a[i].s<min)

         min=a[i].s ;

       for (i=0 ; i<N ;i++)

         if( a[i].s==min)

         { *(b+j)=a[i] ;

           j++;

           n++;

          }

        return  n ;

        }

main()

{ STREC  a[N]={ {"A01",81},{"A02",89},{"A03",66}

,{"A04",87},{"A05",77},

{"A06",90},{"A07",79},{"A08",61},{"

;A09",80},{"A10",71} }, m;

int i;

printf("**** the original data ****\n");

for(i=0;i<N; i++) printf("N0=%s Mark=%d\n", a[i].num,a[i].s

);

fun( a,&m);

printf("**** the result****\n");

printf(" the top : %s ,%d\n", m.num,m.s);

}

75.请编写函数fun,该函数的功能是:将M行N列的二维数组中的数据,按列的顺序依次放到一维数组中。

    例如,若二维数组中的数据为: 33   33   33   33

                   44   44   44   44

                   55   55   55   55

则一维数组中的内容应是:33  44  55  33  44  55  33  44  55  33  44  55。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

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; }

}

main()

{

  FILE *wf;

  int w[10][10]={{33,33,33,33},{44,44,44,44},{55,55,55,55}}, i, j;

  int a[100]={0},n=0 ;

  printf("The matrix:\n");

  for (i=0; i<3; i++)

    {for (j=0;j<4;j++)  

        printf("%3d",w[i][j]);

     printf("\n");

    }

  fun(w,a, &n,3,4);

  printf("The A array:\n");

  for(i=0; i<n; i++)  

     printf("%3d",a[i]);

  printf("\n\n");

  wf=fopen("out.dat","w");

  for(i=0; i<n; i++)  

     fprintf(wf,"%3d",a[i]);

  fclose(wf);

}

76.请编写函数fun,其功能是:计算并输出当x<0.97时下列多项式的值,直到|Sn-S(n-1)|<0.000001为止。

Sn=1+0.5x+0.5(0.5-1)/2!x(2)+...+0.5(0.5-1)(0.5-2).....(0.5-n+1)/n!x(n)

例如,若主函数从键盘给x输入0.21后,则输出为s=1.100000。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

#include <math.h>

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;

}

main()

{  double  x,s;

   printf("Input x:  ");  scanf("%lf",&x);

   s=fun(x);

   printf("s=%f\n",s);

   NONO();

}

NONO()

{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */

  FILE *rf, *wf ; int i ; double s, x ;

  rf = fopen("K:\\k1\\24000317\\in.dat","r") ;

  wf = fopen("K:\\k1\\24000317\\out.dat","w") ;

  for(i = 0 ; i < 10 ; i++) {

    fscanf(rf, "%lf", &x) ;

    s = fun(x) ;

    fprintf(wf, "%lf\n", s) ;

  }

  fclose(rf) ; fclose(wf) ;

}

77.请编写函数fun,其功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的个位和百位上,b数的十位和个位数依次放在c数的十位和千位上。

例如,当a=45,b=12,调用该函数后c=2514。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <conio.h>

#include <stdio.h>

/*本题的关键在于如何表示出个、十、百、千位数。对于一个两位的整数,用10对它求余得到个位数上的数,将它除10得到十位数上的数。*/

void fun ( int  a, int b , long *c)

      { *c=(b%10)*1000+(a%10)*100+(b/10)*10+a/10 ; }

main()

{ int a,b; long c;

printf(" input a, b: ");

scanf("%d%d", &a,&b);

fun(a,b,&c);

printf(" the result is :%ld\n", c);

}

78.请编写函数fun,其功能是:将s所指字符串中ASCII值为偶数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。    

例如,若s所指字符串中的内容为ABCDEFGl2345,其中字符B的ASCII码值为偶数、…、字符2的ASCII码值为偶数、…都应当删除,其他依此类推。最后t所指的数组中的内容应是ACEGl35。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

#include<string.h>

#include<conio.h>

void fun(char  *s, char t[])

{

  int i=0 ;

  for(;*s!='\0';s++)

     if(*s%2==1)     

       t[i++]=*s;

   t[i]='\0';

}

main()

{

  FILE *wf;

  char s[100],t[100];

  printf("\nPlease enter string S: ");  

  scanf("%s",s);

  fun(s,t);

  printf("\nThe result is :%s\n",t);

  wf=fopen("out.dat","w");

  fun("ABCDEFG12345",t);

  fprintf(wf,"%s",t);

  fclose(wf);

}

79.已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。请编写函数fun,该函数的功能是:找出成绩最低的学生记录,通过形参返回主函数(规定只有一个最低分)。已给出函数的首部,请完成该函数。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

#include <string.h>

#include <conio.h>

#define N 10

typedef struct ss

{ char num[10]; int s;} STU;

/*这个题目中有一结构组数,要找的是数组元素中整型成员的值最小的元素。要注意本题中的赋值方式(分两部分,对于字符型成员只能用strcpy()函数,而不能用等号“=”进行赋(即不能用(*s).num=a[k].num),这与字符串的赋值相同(切记)。*/

fun( STU a[], STU *s)

{ int k,i;

(*s).s=a[0].s;

for( i=0;i<N; i++)

if (a[i].s<(*s).s)

{(*s).s=a[i].s; k=i; }

strcpy ( (*s).num, a[k].num);

}

main()

{ STU a[N]={ {"A01",81},{"A02",89},{"A03",66}

,{"A04",87},{"A05",77},

{"A06",90},{"A07",79},{"A08",61},{"

;A09",80},{"A10",71} }, m;

int i;

printf("**** the original data ****\n");

for(i=0;i<N; i++) printf("N0=%s Mark=%d\n", a[i].num,a[i].s

);

fun( a,&m);

printf("**** the result****\n");

printf(" the lowest: %s ,%d\n", m.num,m.s);

}

80.程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(inta[][N],int n),该函数的功能是:使数组左下半三角元素中的值乘以n。例如:若n的值为3,a数组中的值为

 ,则返回主程序后a数组中的值应为 

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#define N 5

/*只要能表示出左下半角的元素即可。*/

int fun( int a[][N], int n)

{ int i,j;

for(i=0; i<N; i++)

for(j=0; j<=i; j++)

a[i][j]*=n;

}

main()

{ int a[N][N],n,i,j;

printf("**** the array ****\n");

for( i=0; i<N; i++)

{for( j=0; j<N; j++)

{a[i][j]=rand()%10; printf("%4d", a[i][j]); }

printf("\n");

}

do n=rand()%10 ; while(n>=3);

printf("n=%4d \n", n);

fun( a,n);

printf( "**** the result ****\n");

for(i=0;i<N; i++)

{for(j=0; j<N; j++) printf("%4d", a[i][j]);

printf("\n");

}

}

81.请编写函数fun,其功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的百位和个位上,b数的十位和个位数依次放在c数的千位和十位上。

例如,当a=45,b=12,调用该函数后c=1425。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <conio.h>

#include <stdio.h>

/*本题的关键在于如何表示出个、十、百、千位数。对于一个两位的整数,用10对它求余得到个位数上的数,将它除10得到十位数上的数。*/

void fun ( int  a, int b , long *c)

      { *c=(b/10)*1000+(a/10)*100+(b%10)*10+a%10 ; }

main()

{ int a,b; long c;

printf(" input a, b: ");

scanf("%d%d", &a,&b);

fun(a,b,&c);

printf(" the result is :%ld\n", c);

}

82.请编写一个函数fun,它的功能是:计算n门课程的平均分,计算结果作为函数值返回。

   例如:若有5门课程的成绩是:90.5,72,80,61.5,55,则函数的值为71.80。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

float  fun (float  *a, int n)

{

  float av=0.0;

   int i;

  for(i=0;i<n;i++)

      av=av+a[i];

  return (av/n);

}

main()

{

  FILE *wf;

  float score[30]={90.5,72,80,61.5,55},aver;

  aver=fun(score,5);

  printf("\nAverage score  is:  %5.2f\n",aver);

  wf=fopen("out.dat","w");

  fprintf(wf,"%5.2f",aver);

  fclose(wf);

}

83.假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串尾部的*号全部删除,前面和中间的*号不删除。

例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是****A*BC*DEF*G。在编写函数时,不得使用C语言提供的字符串函数。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

#include <conio.h>

void  fun  (char *a )

{

  while(*a!='\0')  a++;

  a--;

  while(*a=='*')  a--;

  *(a+1)='\0';

}

main()

{

  FILE *wf;

  char s[81],*t="****A*BC*DEF*G*******";

  printf("Enter a string :\n");

  gets(s);

  fun(s);

  printf("The string after deleted:\n");

  puts(s);

  wf=fopen("out.dat","w");

  fun(t);

  fprintf(wf,"%s",t);

  fclose(wf);

}

84.请编写函数fun,其功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的个位和百位上,b数的十位和个位数依次放在c数的千位和十位上。

例如,当a=45,b=12,调用该函数后c=1524。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <conio.h>

#include <stdio.h>

/*本题的关键在于如何表示出个、十、百、千位数。对于一个两位的整数,用10对它求余得到个位数上的数,将它除10得到十位数上的数。*/

void fun ( int  a, int b , long *c)

      { *c=(b/10)*1000+(a%10)*100+(b%10)*10+a/10 ; }

main()

{ int a,b; long c;

printf(" input a, b: ");

scanf("%d%d", &a,&b);

fun(a,b,&c);

printf(" the result is :%ld\n", c);

}

85.N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun,它的功能是:求出平均分,由函数值返回。

   例如,若学生的成绩是85,76,69,85,91,72,64,87;则平均分应当是78.625。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include<stdlib.h>

#include<stdio.h>

#define N 8

struct slist

{ double s;

  struct slist *next;

};

typedef struct slist STRUC;

double fun(STRUC *h)

{

  double av=0.0;

  STRUC *p= h->next;

  while(p!=NULL)

    {av=av+ p->s ;

     p=p->next;

    }

   return av/N;

}

STRUC *creat(double *s)

{

  STRUC *h,*p,*q;

  int i=0;

  h=p=( STRUC*)malloc(sizeof(STRUC));

  p->s=0;

  while(i<N)

    {q=( STRUC*)malloc(sizeof(STRUC));

     q->s=s[i];i++;p->next=q;p=q;

    }

  p->next=0;

  return h;

}

outlist(STRUC *h)

{

  STRUC *p;

  p=h->next;

  printf("head ");

  do

    {printf("->%4.1f ",p->s);

     p=p->next;

    }

  while(p!=0);

}

main()

{

  FILE *wf;

  double s[N]={85,76,69,85,91,72,64,87},ave;

  STRUC *h;

  h=creat(s);

  outlist(h);

  ave=fun(h);

  printf("ave=%6.3f\n ",ave);

  wf=fopen("out.dat","w");

  fprintf(wf,"%6.3f",ave);

  fclose(wf);

}

86.请编写函数fun,其功能是:计算并输出给定10个数的方差:

 

  

例如,给定的10个数为95.0,89.0,76.0,65.0,88.0,72.0,85.0,81.0,90.0,56.0,则输出为S=11.730729。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include<math.h>

#include<stdio.h>

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) ;

}

main()

{

  FILE *wf;

  double s,x[10]={95.0,89.0,76.0,65.0,88.0,72.0,85.0,81.0,90.0,56.0};

  int i;

  printf("\nThe original data is:\n");

  for(i=0;i<10;i++)

     printf("%6.1f ",x[i]);

  printf("\n\n ");

  s=fun(x);

  printf("s=%f\n\n ",s);

  wf=fopen("out.dat","w");

  fprintf(wf,"%f",s);

  fclose(wf);

}

87.请编写函数fun,其功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的千位和十位上,b数的十位和个位数依次放在c数的个位和百位上。

例如,当a=45,b=12,调用该函数后c=4251。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <conio.h>

#include <stdio.h>

/*本题的关键在于如何表示出个、十、百、千位数。对于一个两位的整数,用1

0对它求余得到个位数上的数,将它除10得到十位数上的数。*/

void fun(int a, int b, long *c)

{ int i,j,k,n;

i=a%10; j=a/10; k=b%10; n=b/10;

*c=j*1000+k*100+i*10+n;

}

main()

{ int a,b; long c;

printf(" input a, b: ");

scanf("%d%d", &a,&b);

fun(a,b,&c);

printf(" the result is :%ld\n", c);

}

88.假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了字符串前导的*号之外,将串中其他*号全部删除。在编写函数时,不得使用C语言提供的字符串函数。

例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是****ABCDEFG。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

#include <conio.h>

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';

         }

main()

{

  FILE *wf;

  char s[81],*t="****A*BC*DEF*G*******";

  printf("Enter a string :\n");

  gets(s);

  fun(s);

  printf("The string after deleted:\n");

  puts(s);

  wf=fopen("out.dat","w");

  fun(t);

  fprintf(wf,"%s",t);

  fclose(wf);

}

89.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把高于等于平均分的学生数据放在b所指的数组中,高于等于平均分的学生人数通过形参n传回,平均分通过函数值返回。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

# define  N 12

typedef  struct

{ char num[10];

  double s;

} STRUC;

double fun (STRUC *a,STRUC *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 ;

}

main()

{

  FILE *wf;

  STRUC s[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},

  {"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87},

  {"GA09",60},{"GA11",79},{"GA12",73},{"GA10",90}};

  STRUC  h[N],t;

  FILE *out;

  int i ,j,n;  

  double ave;

  ave=fun(s,h,&n);

  printf("The %d student data which is higher than %7.3f:\n",n,ave);

  for(i=0; i<n; i++)

     printf("%s  %4.1f\n",h[i].num,h[i].s);

  printf("\n");

  out=fopen("out90.dat", "w");

  fprintf(out, "%d\n %7.3f\n",n,ave);

  for(i=0; i<n-1; i++)

     for(j=i+1;j<n;j++)

        if(h[i].s<h[j].s)  

           {t=h[i];h[i]=h[j];h[j]=t;}

  for(i=0; i<n; i++)

     fprintf(out, "%4.1f\n",h[i].s);

  fclose(out);

  wf=fopen("out.dat","w");

  fprintf(wf, "%d  %7.3f\n",n,ave);

  for(i=0; i<n; i++)

     fprintf(wf, "%s %4.1f ",h[i].num,h[i].s);

  fclose(wf);

}

90.请编写函数fun,其功能是:计算并输出下列多项式值:  

Sn=(1-1/2)+(1/3-1/4)+...+(1/(2n-1)1/2n)

   例如,若主函数从键盘给n输入8后,则输出为S=0.662872。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include

double fun(int n)

{

int i;

double sum=0.0;

if (n>1&&n<=100)

{for(i=1;i<=n;i++)

sum+=1.0/(2*i-1)-1.0/(2*i);

}

return sum;

}

main()

{ int n; double s;

printf("\\nInput n: "); scanf("%d",&n);

s=fun(n);

printf("\\ns=%f\\n",s);

NONO();

}

NONO()

{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */

FILE *rf, *wf ; int n, i ; double s ;

rf = fopen("bc.in", "r") ;

wf = fopen("bc.out", "w") ;

for(i = 0 ; i < 10 ; i++) {

fscanf(rf, "%d", &n) ;

s = fun(n) ;

fprintf(wf, "%lf\\n", s) ;

}

fclose(rf) ; fclose(wf) ;

}

91.请编写函数fun,其功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的十位和千位上,b数的十位和个位数依次放在c数的个位和百位上。    

例如,当a=45,b=12,调用该函数后c=5241。    

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <conio.h>

#include <stdio.h>

void fun(int a, int b, long *c)

{

*c= a/10*10+a%10*1000+b/10+b%10*100;

}

main()

{ int a,b; long c;

clrscr();

printf("Input a, b:");

scanf("%d%d", &a, &b);

fun(a, b, &c);

printf("The result is: %ld\n", c);

NONO();

}

NONO ( )

{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */

FILE *rf, *wf

int i, a,b  long c

rf = fopen("in1.dat", "r")

wf = fopen("bc08.dat","w")

for(i = 0  i < 10  i++) {

fscanf(rf, "%d,%d", &a, &b)

fun(a, b, &c)

fprintf(wf, "a=%d,b=%d,c=%ld\n", a, b, c)

}

fclose(rf)

fclose(wf)

}

92.请编写函数fun,它的功能是计算:s=(ln(1)+ln(2)+1n(3)+…+ln(m))0.5 s作为函数值返回。

   在C语言中可调用log(n)函数求ln(n)。log函数的引用说明是:double log(double x)。

   例如,若m的值为20,则fun函数值为6.506583。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <conio.h>

#include <math.h>

#include <stdio.h>

double fun(int m)

{double i;double r,s; double log(double i);

for(i=1;i<=m;i++)

{r=r+log(i);}

return  (sqrt(r));

}

main()

{clrscr();

printf("%f\n",fun(20));

}

93.请编写函数fun,它的功能是计算下列级数和,和值由函数值返回。

   例如,当n=10,x=0.3时,函数值为1.349859。

S = 1+x+ + +……+ 

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <conio.h>

#include <stdio.h>

#include <math.h>

double fun( double x, int n)

{ int i;

  float p=1;

  long q=1;

  double t,s=1.0;

  for( i=1; i<=n; i++)

  { p*=x; q*=i;

    t=p/q;

    s+=t;

  }

  return s;

}

main()

{ printf("%f\n", fun(0.3,10));

}

94.规定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串中的前导*号全部删除,中间和尾部的*号不删除。    

例如,若字符串中的内容为*******A*BC*DEF*G****,删除后,字符串中的内容则应当是A*BC*DEF*G****。在编写函数时,不得使用C语言提供的字符串函数。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

#include <conio.h>

void fun  (char *a)

{

  char *p=a;

  while(*p=='*') p++ ;

  for(;*p!='\0';p++,a++)

     *a=*p ;

  *a='\0';

}

main()

{

  FILE *wf;

  char s[81],*t="****A*BC*DEF*G*******";

  printf("Enter a string :\n");

  gets(s);

  fun(s);

  printf("The string after deleted:\n");puts(s);

  wf=fopen("out.dat","w");

  fun(t);

  fprintf(wf,"%s",t);

  fclose(wf);

}

95.假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:使字符串的前导*号不得多于n个;若多于n个,则删除多余的*号;若少于或等于n个,则什么也不做,字符串中间和尾部的*号不删除。

例如,若字符串中的内容为*******A*BC*DEF*G****,假设n的值为4,删除后,字符串中的内容则应当是****A*BC*DEF*G****;若n的值为8,则字符串中的内容仍为*******A*BC*DEF*G****。n的值在主函数中输入。在编写函数时,不得使用C语言提供的字符串函数。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include  <stdio.h>

#include  <conio.h>

void  fun(char *a,int n )

{

  int i=0, 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';

     }

}

main()

{  

   FILE *wf;

   char s[81],*t="****A*BC*DEF*G*******";

   int   n;

   printf("Enter a string : \n");

   gets(s);

   printf("Enter  n : ");

   scanf("%d", &n);

   fun(s, n);

   printf("The string after deleted: \n");

   puts(s);

   wf=fopen("out.dat","w");

   fun(t,2);

   fprintf(wf,"%s",t);

   fclose(wf);

}

96.请编写函数fun,其功能是:计算并输出给定数组(长度为9)中每相邻两个元素之平均值的平方根之和。

例如,若给定数组中的9个元素依次为12.0,34.0,4.0,23.0,34.0,45.0,18.0,3.0、11.0,则输出应为s=35.951014。    

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

double fun(double x[9])

{

int i ;

double avg=0.0,sum=0.0;

for (i=0;i<8;i++)

{avg=(x[i]+x[i+1])/2;

sum+=sqrt(avg);

}

return sum;

}

main()

{ double s,a[9]={12.0,34.0,4.0,23.0,34.0,45.0,18.0,3.0,11.0};

int i;

printf("\\nThe original data is :\\n");

for(i=0;i<9;i++)printf("%6.1f",a[i]); printf("\\n\\n");

s=fun(a);

printf("s=%f\\n\\n",s);

NONO();

}

NONO()

{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */

FILE *rf, *wf ; int i, j ; double s, a[9] ;

rf = fopen("bc.in", "r") ;

wf = fopen("bc.out", "w") ;

for(i = 0 ; i < 5 ; i++) {

for(j = 0 ; j < 9 ; j++) fscanf(rf, "%lf", &a[j]) ;

s = fun(a) ;

fprintf(wf, "%lf\\n", s) ;

}

fclose(rf) ; fclose(wf) ;

}

97.请编写函数fun,其功能是:计算并输出下列多项式值:

例如,若主函数从键盘给n输入50后,则输出为S=1.960784。

s=1+1/(1+2)+1/(1+2+3)+..1/(1+2+3...+50)

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

double fun(int n)

{

  int i;

  double s=0.0,s1=0.0;

  for(i=1;i<=n;i++)

    { s1=s1+i ;  

     s=s+1.0/s1;  

    }

  return s;

}

main()

{

  FILE *wf;

  int n;

  double s;

  printf("\nInput n: ");

  scanf("%d",&n);

  s=fun(n);

  printf("\n\ns=%f\n\n",s);

  wf=fopen("out.dat","w");

  fprintf(wf,"%f",fun(50));

  fclose(wf);

}

98.请编写函数fun,它的功能是:计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。

例如,若主函数从键盘给n输入20后,则输出为s=0.583333。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

double fun(int n)

{

int i;

double sum=0.0;

if(n>0&&n<=100)

{for (i=1;i<=n;i++)

if(i%5==0||i%9==0)

sum+=1.0/i;

}

return sum;

}

main()

{ int n; double s;

printf("\\nInput n: "); scanf("%d",&n);

s=fun(n);

printf("\\n\\ns=%f\\n",s);

NONO();

}

NONO()

{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */

FILE *rf, *wf ; int n, i ; double s ;

rf = fopen("bc.in", "r") ;

wf = fopen("bc.out", "w") ;

for(i = 0 ; i < 10 ; i++) {

fscanf(rf, "%d", &n) ;

s = fun(n) ;

fprintf(wf, "%lf\\n", s) ;

}

fclose(rf) ; fclose(wf) ;

}

99.请编写函数fun,其功能是:计算并输出3到n之间所有素数的平方根之和。

例如,若主函数从键盘给n输入100后,则输出为sum=148.874270。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <stdio.h>

double fun(int n)

{

int i,j=0;

double s=0;

for (i=3;i<=n;i++)

{ for (j=2;jif (i%j==0) break;

if (j==i) s=s+sqrt(i);

}

return s;

}

main()

{ int n; double sum;

printf("\\n\\nInput n: "); scanf("%d",&n);

sum=fun(n);

printf("\\n\\nsum=%f\\n\\n",sum);

NONO();

}

NONO()

{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */

FILE *rf, *wf ; int n, i ; double s ;

rf = fopen("bc.in", "r") ;

wf = fopen("bc.out", "w") ;

for(i = 0 ; i < 10 ; i++) {

fscanf(rf, "%d", &n) ;

s = fun(n) ;

fprintf(wf, "%lf\\n", s) ;

}

fclose(rf) ; fclose(wf) ;

}

100.请编写函数fun,其功能是:计算并输出

S=1+(1+2^0.5)+(1+2^0.5+3^0.5)+……+(1+2^0.5+3^0.5+……+n^0.5)

例如,若主函数从键盘给n输入20后,则输出为s=534.188884。

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

#include <math.h>

 #include <stdio.h>

double fun(int n)

{

  int i;

  double s=0.0,s1=0.0;

  for(i=1;i<=n; i++ )

    {s1=s1+pow(i,0.5);  

     s=s+s1;  

    }

  return s;

}

main()

{

  FILE *wf;

  int n;

  double s;

  printf("\n\nInput n: ");

  scanf(" %d ",&n);

  s=fun(n);

  printf("\n\ns=%f\n\n",s);

  wf=fopen("out.dat","w");

  fprintf(wf,"%f",fun(20));

  fclose(wf);

}

附录

1.关键字:

auto

break

case

char

continue

default

do

double

else

enum

extern

float

for

goto

if

int

long

register

return

short

signed

sizeof

static

struct

switch

typedef

union

unsigned

void

while

2.运算符的优先级和结合性

优先级

运算符

运算符功能

运算类型

最高

15

( )

[ ]

->

.

圆括号、函数参数表

数组元素下标

指向结构体成员

结构体成员

14

~

++、--

+

-

*

&

(类型名)

sizeof

逻辑非

按位取反

自加1、自减1

求正

求负

间接运算符

求地址运算符

强制类型转换

求所占字节数

单目运算

13

*、/、%

乘、除、整数求余

双目算术运算

12

+、-

加、减

双目算术运算

11

<<、>>

左移、右移

移位运算

10

<、<=、>、>=

小于、小于等于、大于、大于等于

关系运算

9

==、!=

等于、不等

关系运算

8

&

按位与

位运算

7

^

按位异或

位运算

6

|

按位或

位运算

5

&&

逻辑与

逻辑运算

4

||

逻辑或

逻辑运算

3

?:

条件运算

三目运算

2

=、+=、-=、*=、

/=、%=、&=、^=、

|=、<<=、>>=

赋值、运算且赋值

双目运算

最低1

,

顺序求值

顺序运算

其中,2、3、14的结合性为从右至左,其余为从左至右。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心兰相随引导者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值