vlambda博客
学习文章列表

C语言程序设计(五)

17

设计功能:编写函数fun(str,i,n),从字符串str中删除第i

      字符开始的连续n个字符(注意:str[0]代表字符串

      的第一个字符)。

 

------------------------------------------------*/

 

#include "stdio.h"

#include "string.h"

main()

{

  char  str[81];

  int   i,n;

  void fun(char str[],int i,intn);

  void TestFunc();

  printf("请输入字符串str的值:\n");

  scanf("%s",str);

  printf("你输入的字符串str:%s\n",str);

  printf("请输入删除位置i和待删字符个数n的值:\n");

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

  while (i+n-1>strlen(str))

  {

    printf("删除位置i和待删字符个数n的值错!请重新输入in的值\n");

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

  }

  fun(str,i,n);

  printf("删除后的字符串str:%s\n",str);

  TestFunc();

}

 

void fun(char str[],int i,int n)

{

  /*********Begin**********/

 

 

 

 

 

 

  /**********  End **********/

}

 

void TestFunc()

{

  FILE *IN,*OUT;

  char i[200];

  /*char o[200];*/

 IN=fopen("in.dat","r");

  if(IN==NULL)

  {

    printf("Read FileError");

  }

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

  if(OUT==NULL)

  {

    printf("Write FileError");

  }

  fscanf(IN,"%s",i);

  fun(i,2,8);

 fprintf(OUT,"%s\n",i);

 

  fclose(IN);

  fclose(OUT);

}

【参考代码】

 

while(str[i+n-1])

   {

    str[i-1]=str[i+n-1];

    i++;

   }

  str[i-1]='\0';

 

18

请编一个函数void fun(inttt[M][N],int pp[N])

      tt指向一个MN列的二维数组,求出二维数组每列

      中最大元素,并依次放入pp所指一维数组中。二维

      数组中的数已在主函数中赋予。

#include "conio.h"

#include "stdio.h"

#define M 3

#define N 4

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

{

  /*********Begin**********/

 

 

 

 

  /**********  End **********/

}

main()

{

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

  {19,33,45,38},

  {20,22,66,40}};

  void NONO() ;

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

  printf("The original datais:\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 resultis:\n");

  for(k=0;k<N;k++)printf("%4d",p[k]);

  printf("\n");

  NONO();

}

void NONO()    

{    

  int i,j, array[3][4],p[4];

  FILE *rf, *wf ;    

  rf = fopen("in.dat","r") ;

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

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

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

      fscanf(rf, "%d",&array[i][j]);    

    fun(array,p);

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

    {

      fprintf(wf,"%7d", p[j]);

      fprintf(wf,"\n");    

    }    

    fclose(rf) ;    

    fclose(wf) ;    

}

【参考代码】

int i,j;

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

    {

     pp[j]=tt[0][j];

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

     if(tt[i][j]>pp[j])

       pp[j]=tt[i][j];

     }

19

【程序设计】

--------------------------------------------------

 

功能:统计出若干个学生的平均成绩,最高分以及得最高

      分的人数。

例如:输入10名学生的成绩分别为 92 87 68 56 92

      84 67 75 92 66 则输出平均成绩为77.9

      最高分为92,得最高分的人数为3人。

 

------------------------------------------------*/

 

#include "stdio.h"

 

float max=0;

int j=0;

 

float fun(float array[],int n)

{

 

  /*********Begin**********/

  【参考代码】

 

int i;float sum=0,ave;

 max=array[0];

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

{  if(max<array [i]) max=array[i];

        sum=sum+array [i];  }

      ave=sum/n;

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

 if(array [i]==max) j++;

return(ave);

  /**********  End **********/

 

}

 

TestFunc()

{

  FILE *IN,*OUT;

  float iIN[10],iOUT;

  int iCOUNT;

 IN=fopen("in.dat","r");

  if(IN==NULL)

  {

    printf("Please VerifyThe Currernt Dir..It May Be Changed");

  }

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

  if(OUT==NULL)

  {

    printf("Please VerifyThe Current Dir.. It May Be Changed");

  }

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

   fscanf(IN,"%f",&iIN[iCOUNT]);

  iOUT=fun(iIN,10);

  fprintf(OUT,"%f%f\n",iOUT,max);

  fclose(IN);

  fclose(OUT);

}

main(  )

{

  float  a[10],ave;

  int i=0;

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

   scanf("%f",&a[i]);

  ave=fun(a,10);

 printf("ave=%f\n",ave);

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

  printf("Total:%d\n",j);

  TestFunc();

20

【程序设计】

--------------------------------------------------

 

功能:用辗转相除法求两个整数的最大公约数。

 

------------------------------------------------*/

 

#include "stdio.h"

 

int gcd(int n,int m)

{

  /*********Begin**********/

 

 

 

 

 

 

  /**********  End **********/

}

 

main()

{

  int n,m,result;

  void TestFunc();

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

  result=gcd(n,m);

  printf("the gcd is%d\n",result);

  TestFunc();

}

 

void TestFunc()

{

  FILE *IN,*OUT;

  int m,n;

  int i[2];

  int o;

 IN=fopen("in.dat","r");

  if(IN==NULL)

  {

    printf("Read FileError");

  }

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

  if(OUT==NULL)

  {

    printf("Write FileError");

  }

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

  {   

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

    {   

     fscanf(IN,"%d",&i[m]);

    }

    o=gcd(i[0],i[1]);

   fprintf(OUT,"%d\n",o);

  }

  fclose(IN);

  fclose(OUT);

}

【参考代码】

 

int r,t;

 if(n<m) { t=n;n=m;m=t;}

 r=n%m;

 while(r!=0)

 { n=m;m=r;r=n%m;}

 return(m);