C 2010年笔试题

1 有一个函数, 写一段程序,输入的值,输出的值。

#include <stdio.h>  void main()  {      int x,y;      printf("输入x:");      scanf("%d",&x);      if(x<0||x>100)        /* x<0或x>100*/      {          y=-1;          printf("x=%3d,   y=%dn" ,x,y);      }      else  if(x==0)        /* x=0*/      {          y=0;          printf("x=%d,  y=%dn",x,y);      }      else            /* 0<x<=100 */      {          y=1;          printf("x=%d,  y=%dn",x,y);      }  }

输入3个数a,b,c,按大由到小的顺序输出  

#include <stdio.h>  void main ( )  {      float a,b,c,t;      printf("please enter a,b,c:");      scanf("%f,%f,%f",&a,&b,&c);      if(a<b)      {          t=a;          a=b;          b=t;      }      if(a<c)      {          t=a;          a=c;          c=t;      }      if(b<c)      {          t=b;          b=c;          c=t;      }      printf("%7.2f%7.2f%7.2fn",a,b,c);  }

3  输入4个数,输出4个数中的最大值、最小值。

#include <stdio.h>  void main()  {      float  t,a,b,c,d;      printf("请输入四个数:");      scanf("%f,%f,%f,%f",&a,&b,&c,&d);      if (a<b)      {          t=a;          a=b;          b=t;      }      if (a<c)      {          t=a;          a=c;          c=t;      }      if (a<d)      {          t=a;          a=d;          d=t;      }      if (b<c)      {          t=b;          b=c;          c=t;      }      if (b<d)      {          t=b;          b=d;          d=t;      }      if (c<d)      {          t=c;          c=d;          d=t;      }      printf("最大值和最小值分别为: n");      printf("max=%5.2f   min=%5.2f",a,d);  }

输入成绩,要求输出成绩等级A、B、C、D、E或error。90分以上为‘A’,80~89分为‘B’,70~79分为‘C’,60~69分为‘D’,0~60分为‘E’。若输入成绩低于0分和高于100分则输出error。  

#include <stdio.h>  void main()  {      float score;      char grade;      printf("请输入学生成绩:");      scanf("%f",&score);      if (score>100||score<0)          printf("errorn");      else      {          switch((int)(score/10))          {          case 10:          case 9:              grade='A';              break;          case 8:              grade='B';              break;          case 7:              grade='C';              break;          case 6:              grade='D';              break;          case 5:          case 4:          case 3:          case 2:          case 1:          case 0:              grade='E';          }          printf("成绩是 %5.1f,相应的等级是%c.n ",score,grade);      }  }

有一个函数:写一段程序,输入x的值,输出y的值。

#include <stdio.h>  void main()  {      int x,y;      printf("输入x:");      scanf("%d",&x);      if(x<1)               /* x<1 */      {          y=x;          printf("x=%3d,   y=x=%dn" ,x,y);      }      else  if(x<10||x>10)        /* 1=<x<10 */      {          y=2*x-1;          printf("x=%d,  y=2*x-1=%dn",x,y);      }      else            /* x>=10  */      {          y=3*x-11;          printf("x=%d,  y=3*x-11=%dn",x,y);      }  }

 

6  输出300~400之间的全部素数,并按每行5个数输出。

方法一:

#include "stdio.h"  #include"math.h"  void main()  {      int prime(int);      int i,k,m;      printf("300~400之间的素数为:n");      for(i=300; i<=400; i++)      {          m=prime(i);          if(m==1)          {              k++;              printf("%5d",i);              if(k%5==0)                  printf("n");          }      }  }  /*判断是否是素数    素数又称质数。所谓素数是指除了1和它本身以外,不能被任何整数整除的数,例如17就是素数,因为它不能被2~16的任一整数整除。    思路1):因此判断一个整数m是否是素数,只需把m被 2 ~ m-1 之间的每一个整数去除,如果都不能被整除,那么m就是一个素数。    思路2):另外判断方法还可以简化。m不必被 2 ~ m-1 之间的每一个整数去除,只需被 2 ~ √m  之间的每一个整数去除就可以了。如果m不能被 2 ~ √m 间任一整数整除,m必定是素数。例如判别17是是否为素数,只需使17被2~4之间的每一个整数去除,由于都不能整除,可以判定17是素数。    原因:因为如果m能被 2 ~ m-1 之间任一整数整除,其二个因子必定有一个小于或等于,另一个大于或等于。例如16能被2,4,8整除,16=2*8,2小于4,8大于4,16=4*4,4=√16,因此只需判定在2~4之间有无因子即可。    */  int prime(int i)  {      int j,flag=1;      for(j=2; j<=sqrt(i); j++)          if(i%j==0)              flag=0;      return(flag);  }

方法二:

# include <stdio.h>  # include <math.h>  void main()  {      int m,k,i,n=0;      for(m=300; m<=400; m=m+1)      {          k=sqrt(m);          for (i=2; i<=k; i++)              if (m%i==0) break;          if (i>=k+1)          {              printf("%d ",m);              n=n+1;          }          //每五个一行输出          if(n%5==0) printf("n");      }      printf ("n");  }

7Fibonacci数列的前20个数,并将其分5行输出

扩展:求 F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)

#include <stdio.h>  #include <stdlib.h>    int fun(int x)  {      if(x == 0 || x == 1)          return 1;      if(x > 1)          return fun(x - 1)+fun(x - 2);  }  void main()  {      int n,f;      printf("请输入n:");      scanf("%d",&n);      f = fun(n);      printf("%d",f);  }

#include<stdio.h>    int main()  {      int i;      int f[20] = { 1,1 };      for (i = 2; i < 20; i++)          f[i] = f[i - 2] + f[i - 1];      //打印输出      for (i = 0; i < 20; i++)      {          if(i%5==0)              printf("n");          printf("%dt",f[i]);      }      return 0;  }

8 求(1!+3)+(2!+3)+(3!+3)+……+(n!+3)

#include <stdio.h>    void main()  {      double t=1,sum=0;      int n,i;      printf("输入n:");      scanf("%d",&n);      for (i=1; i<=n; i++)      {          t=t*i; //求n!          sum=t+3+sum;      }      printf("1!+3+...+%d!+3=%fn",n,sum);  }

9  有一分数序列,求其前20项的和

#include <stdio.h>  void main()  {      int i,n=20;      double a=2,b=1,s=0,t;      for (i=1; i<=n; i++)      {          //a是分母,b是分子          s=s+b/a;  //          t=a,          a=a+b,          b=t;      }      printf("sum=%16.10fn",s);  }

 

10  输出小于500的所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如,153是一个水仙花数,因为

#include <stdio.h>  void main()  {      int i,j,k,n;      printf("parcissus numbers are ");      for (n=100; n<500; n++)      {          i=n/100; //百位数          j=n/10-i*10; //十位数          k=n%10; //个位数          if (n==i*i*i + j*j*j + k*k*k)              printf("%d ",n);      }      printf("n");  }

11 给一个不多于6位的正整数,要求:①求出它是几位数;②分别输出每一位数字;③按逆序输出各位数字,例如原数为158,应输出851。

#include "stdio.h"  void main()  {      int n,m;      printf("输入一个不多于六位的数字:");      scanf("%d",&n);      if(n<1000000&&n>99999)          printf("它是六位数n");      if(n<100000&&n>9999)          printf("它是五位数n");      if(n<10000&&n>999)          printf("它是四位数n");      if(n<1000&&n>99)          printf("它是三位数n");      if(n<100&&n>9)          printf("它是二位数n");      if(n<10&&n>=0)          printf("它是一位数n");      printf("各位数字按逆序输出为:n");      while(n!=0)      {          m=n%10;          n=n/10;          printf("%3d",m);      }  }

12 5+55+555+5555+55555的值。

#include <stdio.h>  void main()  {      int  a=5,n=5,i=1,sn=0,tn=0;      for(i=1; i<=n; i++)      {          tn=tn+a;  /*赋值后的tn为i个 a组成数的值*/          sn=sn+tn; /*赋值后的sn为多项式前i项之和*/          a=a*10;      }      printf("a+aa+..+aaaaa=%dn",sn);  }

13 输入10个整型整数,用起泡法对这10个数排序,并该由小到大顺序在屏幕上输出。

方法一:

#include "stdio.h"  void main()  {      int a[10];      int i,j,t;      printf("input 10 number:n");      for(i=0; i<10; i++)          scanf("%d",&a[i]);      //冒泡排序      for(i=0; i<9; i++)  //n-1趟          for(j=0;j<9-i;j++)  //              if(a[j]>a[j+1])              {                  t=a[j];                  a[j]=a[j+1];                  a[j+1]=t;              };      for(i=0; i<10; i++)          printf("%5d ",a[i]);      printf("n");  }

方法二:

#include "stdio.h"  void main()  {      int a[10];      int i,j,t;      printf("input 10 number:n");      for(i=0; i<10; i++)          scanf("%d",&a[i]);      for(i=0; i<10; i++)            for(j=i; j<9; j++)              if(a[i]>a[j+1])              {                  t=a[i];                  a[i]=a[j+1];                  a[j+1]=t;              };      for(i=0; i<10; i++)          printf("%5d ",a[i]);      printf("n");    }  

14  将一个二维数组a的行和列的元素互换(即行列互换),存到另一个二维数组b中。

#include "stdio.h"  void main()  {      int  a[4][5],b[5][4];      int i,j;      for(i=0; i<4; i++)          for(j=0; j<5; j++)              scanf("%d",&a[i][j]);      for(i=0; i<5; i++)          for(j=0; j<4; j++)              b[i][j]=a[j][i];      printf("该数组的新序列为:n");      for(i=0; i<5; i++)      {          for(j=0; j<4; j++)              printf("%5d",b[i][j]);          printf("n");      }  }

 

15  在一个3*4的二维数组a中,要求编程求出其中值最大的那个元素的值,并输出其所在的行号和列号。

#include "stdio.h"    void main()  {      int a[3][4],i,j,max;      //输入数据      for(i=0; i<3; i++)          for(j=0; j<4; j++)              scanf("%d",&a[i][j]);      //求最大值      max=a[0][0];      for(i=0; i<3; i++)          for(j=0; j<4; j++)              if(max<a[i][j])                  max=a[i][j];      printf("max=%dn",max);      //求最大值的行列号      for(i=0; i<3; i++)          for(j=0; j<4; j++)              if(a[i][j]==max)                  printf("行=%2d,列=%2dn",i+1,j+1);  }

16 输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。

#include "stdio.h"  void main()  {      int i,j=0;      char str[80];      gets(str);      for(i=0; str[i]!=''; i++)          if(str[i+1]==' '||str[i+1]=='')              j++;      printf("单词个数为%dn",j);  }

17 3个字符串,要求找出其中最大者。

#include "stdio.h"  #include <string.h>    void main()  {      char str1[80],str2[80],str3[80],longest[80];      gets(str1);      printf("n");        gets(str2);      printf("n");        gets(str3);      /*          strcmp(s1,s2)字符串比较函数,按字典排序的方式进行比较          s1 == s2,返回0          s1 > s2,返回正整数          s1 < s2,返回负整数          strcpy(s1,s2):字符串复制函数      */      strcpy(longest,str1);      if(strcmp(str1,str2)<0)          strcpy(longest,str2);      if(strcmp(str2,str3)<0)          strcpy(longest,str3);      printf("the longest is %s",longest);  }

18 输入两个整数,要求用一个函数求出其中的大者,并在主函数中输出此值。

方法一:

#include "stdio.h"  void main()  {      int f(int a,int b);      int m,n,max;      printf("请输入两个数:");      scanf("%d,%d",&m,&n);      max=f(m,n);      printf("max=%d",max);  }  int f(int a,int b)  {      int c;      c=a>b?a:b;      return(c);  }

方法二:

#include "stdio.h"  void main()  {      int f(int a,int b);      int m,n,max;      printf("请输入两个数:");      scanf("%d,%d",&m,&n);      max=f(m,n);      printf("max=%d",max);  }  int f(int a,int b)  {      int c;      if(a>b)          c=a;      else          c=b;      return(c);  }

19 输入两个整数,要求用一个函数求出其最大公约数和最小公倍数,并在主函数中调用该子函数。链接

#include <stdio.h>  void main()  {      int hcf(int,int);      int lcd(int,int,int);      int u,v,h,l;      scanf("%d,%d",&u,&v);      h=hcf(u,v);      printf("最大公约数=%dn",h);      l=lcd(u,v,h);      printf("最小公倍数=%dn",l);  }  //最大公约数  int hcf(int u,int v)  {      int t,r;      //保证u是最大的      if (v>u)      {          t=u;          u=v;          v=t;      }      //辗转相除法      while ((r=u%v)!=0)      {          u=v;          v=r;      }      return(v);  }  //最小公倍数  int lcd(int u,int v,int h)  {      return(u*v/h);  }

20 输入4个整数,找出其中最大的数。用函数的嵌套调用来处理

#include <stdio.h>  void main()  {      int max_4(int a,int b,int c,int d);      int a,b,c,d,max;      printf("Please enter 4 interger numbers:");      scanf("%d %d %d %d",&a,&b,&c,&d);      max=max_4(a,b,c,d);      printf("max=%d n",max);  }  int max_4(int a,int b,int c,int d)  {      int max_2(int a,int b);      int m;      m=max_2(a,b);      m=max_2(m,c);      m=max_2(m,d);      return(m);  }  int max_2(int a,int b)  {      return(a>b?a:b);  }

21 5!

方法一【递归】:

#include <stdio.h>  void  main()  {      long fac(int n);      long y;      y=fac(5);      printf("5!=%ldn",y);  }    long fac(int n)  {      long f;      if(n<0)          printf("n<0,data error!");      else if(n==0,n==1)          f=1;      else          f=fac(n-1)*n;      return(f);  }

方法二【非递归】:

#include <stdio.h>  void  main()  {      long fac(int n);      long y;      y=fac(5);      printf("5!=%ldn",y);  }    long fac(int n)  {      long f=1;      int i;      if(n<0)          printf("n<0,data error!");      else if(n==0,n==1)          f=1;      else          for(i=1;i<=5;i++)          {              f=i*f;          }      return(f);  }  

22 编写一个函数,用来分别求数组score_1(有5个元素)和数组score_2(有10个元素)各元素的平均值。

#include "stdio.h"  void main()  {      float f(float score[],int n);      float score_1[5],score_2[10],aver_1,aver_2;      int i;      printf("score_1:n");      for(i=0; i<5; i++)          scanf("%f",&score_1[i]);      printf("score_2:n");      for(i=0; i<10; i++)          scanf("%f",&score_2[i]);      aver_1=f(score_1,5);      aver_2=f(score_2,10);      printf("aver_1=%f,aver_2=%fn",aver_1,aver_2);  }  float f(float score[],int n)  {      int i;      float aver,sum=0;      for(i=0; i<n; i++)          sum=sum+score[i];      aver=sum/n;      return(aver);  }

23  将一个数组中的值按逆序重新存放。例如,原来顺序为8,6,5,4,1改后成为1,4,5,6,8。

代码:

#include "stdio.h"  void main()  {      int a[6],b[6],i;      printf("请输入一个数组:");      for(i=0; i<6; i++)          scanf("%d",&a[i]);      printf("逆序排列后的数组是:");      for(i=0; i<6; i++)      {          b[i]=a[5-i];          printf("%4d ",b[i]);      }  }

24  用递归法将一个整数n转换成字符串。例如,输入483,应输出字符串“483”,n的位数不确定,可以是任意位数的整数

#include <stdio.h>    void main()  {      void convert(int n);      int number;      printf("input an integer: ");      scanf("%d",&number);      printf("output: ");      //若是一个负数      if (number<0)      {          putchar('-');          putchar(' ');   /* 先输出一个‘-’号和空格 */          number=-number;      }      convert(number);      printf("n");  }  void convert(int n)  {      int i;      if ((i=n/10)!=0)          convert(i);      putchar(n%10+'0');      putchar(32);// putchar(32) 差不多是 putchar(' '); 的意思,输出一个空格  }

25 用指针实现输入3个整数并按从小到大的顺序输出

#include "stdio.h"  void main()  {      void exchange(int * p1,int * p2,int * p3);      int n1,n2,n3;      int * p1,* p2,* p3;      printf("input three integer n1,n2,n3:");      scanf("%d,%d,%d",&n1,&n2,&n3);      p1=&n1;      p2=&n2;      p3=&n3;      exchange(p1,p2,p3);      printf("Now,the order is:%d,%d,%d",n1,n2,n3);  }  void exchange(int * p1,int * p2,int * p3)  {      void swap(int * p1,int * p2);      if(* p1>* p2)          swap( p1, p2);      if(* p1>* p3)          swap(p1,p3);      if(* p2>* p3)          swap(p2,p3);  }  void swap(int * p1,int * p2)  {      int p;      p=* p1;      * p1=* p2;      * p2=p;  }

26  用指针实现输入3个整数并按从大到小的顺序输出

#include <stdio.h>  void main ( )  {      void paixu(int * p1,int * p2);      int a,b,c,* p1,* p2,* p3;      printf("please enter a,b,c:");      scanf("%d,%d,%d",&a,&b,&c);      p1=&a;      p2=&b;      p3=&c;      if(a<b)          paixu(p1,p2);      if(a<c)          paixu(p1,p3);      if(b<c)          paixu(p2,p3) ;      printf("%5d%5d%5dn",a,b,c);  }  void paixu(int * p1,int * p2)  {      int t;      t=* p1;      * p1=* p2;      * p2=t;  }

27  用指针实现将数组b[10]中的元素按逆序存放

#include <stdio.h>  void main()  {      void sort (int *p,int m);      int i;      int *p,num[10];      printf("please input these numbers:n");      for (i=0; i<10; i++)      {          scanf("%d",&num[i]);      }      p=&num[0];      sort(p,10);      printf("Now,the sequence is:n");      for (i=0; i<10; i++)      {          printf("%d ",num[i]);      }      printf("n");  }  void sort (int *p,int m)  {      int i;      int temp, *p1,*p2;      for (i=0; i<m/2; i++)      {          p1=p+i;          p2=p+(m-1-i);          temp=*p1;          *p1=*p2;          *p2=temp;      }  }

28  冒泡法实现对10个整数按从大到小的顺序排序输出(要求用指针实现)

#include "stdio.h"  void main()  {      void  swap(int * p1,int * p2);      int a[10],* p ,i,j;      printf("input 10 number:n");      for(i=0; i<10; i++)          scanf("%d",&a[i]);      p=a;      for(i=0; i<10; i++)          for(j=i; j<9; j++)              if(a[i]<a[j+1])                  swap(p+i,p+j+1);      for(i=0; i<10; i++)          printf("%5d ",a[i]);      printf("n");    }  void  swap(int * p1,int * p2)  {      int t;      t=* p1;      * p1=* p2;      * p2=t;  }

29 选择法实现对10个整数按从小到大的顺序排序输出(要求用指针实现)。

#include "stdio.h"  void main()  {      void  swap(int * p1,int * p2);      int a[10],* p ,i,j;      printf("input 10 number:n");      for(i=0; i<10; i++)          scanf("%d",&a[i]);      p=a;      for(i=0; i<10; i++)          for(j=0; j<9-i; j++)              if(a[j]>a[j+1])                  swap(p+j,p+j+1);      for(i=0; i<10; i++)          printf("%5d ",a[i]);      printf("n");  }  void  swap(int * p1,int * p2)  {      int t;      t=* p1;      * p1=* p2;      * p2=t;  }

30  定义一个结构体变量(包括年、月、日)。计算当天是本年中的第几天,注意闰年问题。

#include <stdio.h>  struct  {      int year;      int month;      int day;  } date;  void main()  {      int days;      printf("input year,month,day:");      scanf("%d,%d,%d",&date. year,&date.month,&date.day);      switch(date.month)      {      case 1:          days=date.day;          break;      case 2:          days=date.day+31;          break;      case 3:          days=date.day+59;          break;      case 4:          days=date.day+90;          break;      case 5:          days=date.day+120;          break;      case 6:          days=date.day+151;          break;      case 7:          days=date.day+181;          break;      case 8:          days=date.day+212;          break;      case 9:          days=date.day+243;          break;      case 10:          days=date.day+273;          break;      case 11:          days=date.day+304;          break;      case 12:          days=date.day+334;          break;      }      //判断是否是闰年      if ((date.year %4== 0 && date.year % 100 != 0              ||date.year % 400 == 0) && date.month >=3)  days+=1;      printf("%d/%d is the %dth day in %d.n",date.month,date.day,days,date.year);  }

31. 设计候选人得票统计程序,要求有4个侯选人(分别是Zhang 、Wang 、Li、 Zhao),选民每次输入一个被选人的姓名,最后统计出各人的得票结果。

#include <string.h>  #include <stdio.h>  struct person  {      char name[20];      int count;  } leader[4]= {"zhang",0,"wang",0,"li",0,"zhao",0};  void main()  {      int i,j;      char leader_name[20];      for (i=1; i<=10; i++)      {          scanf("%s",leader_name);          for(j=0; j<4; j++)              if(strcmp(leader_name,leader[j].name)==0)//strcmp字符串比较函数                  leader[j].count++;      }      printf("nResoult:n");      for(i=0; i<4; i++)          printf("%5s:%dn",leader[i].name,leader[i].count);  }

32  定义一个包括学号、姓名、年龄的学生结构体,要求实现三个学生信息的输入输出,并输出平均年龄

#include <stdio.h>  #define N 3  struct student  {      char num[6];      char name[20];      int age;  } stu[N];  void main()  {      int i,aver=0;      for(i=0; i<N; i++)      {          printf("input scores of student %d:n",i+1);          printf("NO.:");          scanf("%s",stu[i].num);          printf("name:");          scanf("%s",stu[i].name);          printf("age :");          scanf("%d",&stu[i].age);      }      printf("   NO.      name   agen");      for (i=0; i<N; i++)      {          printf("%5s%10s%9d",stu[i].num,stu[i].name,stu[i].age);          printf("n");      }      //输出平均成绩      for(i=0; i<N; i++)          aver=aver+stu[i].age;      aver=aver/3;      printf("aver=%d",aver);  }

33 定义一个包括教师编号、姓名、工资的教师结构体,要求实现三个教师信息的输入输出,并输出平均工资。

#include <stdio.h>  #define N 3  struct teacher  {      char num[6];      char name[20];      float pay;  } tea[N];  void main()  {      int i;      float aver=0;      for(i=0; i<N; i++)      {          printf("input scores of student %d:n",i+1);          printf("NO.:");          scanf("%s",tea[i].num);          printf("name:");          scanf("%s",tea[i].name);          printf("pay :");          scanf("%f",&tea[i].pay);      }      printf("   NO.      name   payn");      for (i=0; i<N; i++)      {          printf("%5s%10s%9.2f",tea[i].num,tea[i].name,tea[i].pay);          printf("n");      }      for(i=0; i<N; i++)          aver=aver+tea[i].pay;      aver=aver/N;      printf("aver=%f",aver);  }

34  定义一个包括职员号、姓名、工资的职员结构体,要求实现三个职员信息的输入输出,并输出平均工资

#include <stdio.h>  #define N 3  struct worker  {      char num[6];      char name[20];      float pay;  } work[N];  void main()  {      int i;      float aver=0;      for(i=0; i<N; i++)      {          printf("input scores of worker %d:n",i+1);          printf("NO.:");          scanf("%s",work[i].num);          printf("name:");          scanf("%s",work[i].name);          printf("pay :");          scanf("%f",&work[i].pay);      }      printf("   NO.      name   payn");      for (i=0; i<N; i++)      {          printf("%5s%10s%9.2f",work[i].num,work[i].name,work[i].pay);          printf("n");      }      for(i=0; i<N; i++)          aver=aver+work[i].pay;      aver=aver/N;      printf("aver=%f",aver);  }

35 建立动态数组,输入5个学生的成绩,另外用一个函数检查其中有无低于60分的,输出不合格的成绩。

#include <stdio.h>  #include <stdlib.h>  void main()  {      void check(int *); //函数声明      int *p1,i;      p1=(int *)malloc(5*sizeof(int));// 动态数组      for(i=0; i<5; i++)          scanf("%d",p1+i);      check(p1);      free(p1);  }    void check(int *p)  {      int i;      printf("They are fail:");      for(i=0; i<5; i++)          if (p[i]<60)              printf("%d ",p[i]);      printf("n");  }

36 写一函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度(要求用指针实现)。

#include <stdio.h>  void main()  {      int length(char *p);      int len;      char str[20];      printf("input string:  ");      scanf("%s",str);      len=length(str);      printf("The length of string is %d.n",len);  }  int length(char *p)  {      int n;      n=0;      while (*p!='')      {          n++;          p++;      }      return(n);  }

37 有一个一维数组score,内放10个学生成绩,用一个函数求平均成绩,并将10个成绩中不及格(小于60)的成绩和该成绩在数组中的序号输出。

#include "stdio.h"  void main()  {      void fail(float score[],int n);      float score[10];      int i;      for(i=0; i<10; i++)          scanf("%f",&score[i]);      averfail(score,10);  }  void averfail(float score[],int n)  {      int i;      float averscore=0;      for(i=0; i<n; i++)      {          averscore = averscore+score[i];          if(score[i]<60)              printf("成绩为%f,序号为%dn",score[i],i+1);      }      averscore=averscore/n;      printf("平均成绩:%f",averscore);  }

38. 有一个一维数组内放10个数,设计函数,求出10个数中的最大值、最小值、平均值。

#include "stdio.h"  void main()  {      int a[10],i,max,min,sum=0;      float average;      printf("input 10 number:n");      for(i=0; i<10; i++)          scanf("%d",&a[i]);      //求最大值,平均值      max=a[0];      for(i=0; i<10; i++)      {          sum=sum+a[i];          if(a[i]>max)              max=a[i];      }      average=sum/10.0;      //求最小值      min=a[0];      for(i=0; i<10; i++)      {          if(a[i]<min)              min=a[i];      }      printf("max=%d,average=%f,min=%d",max,average,min);  }

39. 【有问题】找出一个2维数组中的鞍点,即该位置上的元素在该行上最大、在该列上最小。

#include "stdio.h"  int main()  {      int a[4][5];      int i,j,k,m;      for(i=0; i<4; i++)      {          for(j=0; j<5; j++)          {              scanf("%d",&a[i][j]);          }      }        for(i=0; i<4; i++)      {          for(j=0; j<5; j++)          {              //列比大小              for(m=0; m<4; m++)              {                  if(a[i][j]<a[m][j])                  {                      //行比大小                      for(k=0; k<5; k++)                      {                          if(a[i][j]>a[i][k])                              continue;                      }                  }              }          }      }      printf("i=%d,j=%d",i,j);      return 0;  }

40. 输入8个学生4门课的成绩,分别用函数实现如下功能:

   1) 计算每个学生平均分;

   2) 计算每门课的平均分;

   3) 找出32个分数中最高分所对应的学生和课程。

#include <stdio.h>  #define N 8  #define M 4  float score[N][M];  float a_stu[N],a_cour[M];  int r,c;  void main()  {      int i,j;      float h;      float highest();      void input_stu(void);      void aver_stu(void);      void aver_cour(void);      //输入成绩      input_stu();      //计算学生的平均成绩      aver_stu();      //计算课程的平均成绩      aver_cour();      //输出学生的平均成绩      printf("n  NO.     cour1   cour2   cour3   cour4  avern");      for(i=0; i<N; i++)      {          printf("n NO %2d ",i+1);          for(j=0; j<M; j++)              printf("%8.2f",score[i][j]);          printf("%8.2fn",a_stu[i]);      }      //输出课程的平均成绩      printf("naverage:");      for (j=0; j<M; j++)          printf("%8.2f",a_cour[j]);      printf("n");      //输出最好成绩的学生和课程      h=highest();      printf("highest:%7.2f   NO. %2d   course %2dn",h,r,c);  }    void input_stu(void)  {      int i,j;      for (i=0; i<N; i++)      {          printf("ninput score of student%2d:n",i+1);          for (j=0; j<M; j++)              scanf("%f",&score[i][j]);      }  }  void aver_stu(void)  {      int i,j;      float s;      for (i=0; i<N; i++)      {          for (j=0,s=0; j<M; j++)              s+=score[i][j];          a_stu[i]=s/5.0;      }  }  void aver_cour(void)  {      int i,j;      float s;      for (j=0; j<M; j++)      {          s=0;          for (i=0; i<N; i++)              s+=score[i][j];          a_cour[j]=s/(float)N;      }  }  float highest()  {      float high;      int i,j;      high=score[0][0];      for (i=0; i<N; i++)          for (j=0; j<M; j++)              if (score[i][j]>high)              {                  high=score[i][j];                  r=i+1;                  c=j+1;              }      return(high);  }  

41  用一个函数实现将一行字符串中的最长的单词输出。此行字符串从主函数传递给该函数

#include <stdio.h>  #include <string.h>  void main()  {      int alphabetic(char);      int longest(char []);      int i;      char line[100];      printf("input one line:n");      gets(line);      printf("The longest word is :");      for (i=longest(line); alphabetic(line[i]); i++)          printf("%c",line[i]);      printf("n");  }  int alphabetic(char c)  {      if ((c>='a' && c<='z')||(c>='A'&&c<='z'))          return(1);      else          return(0);  }  int longest(char string[])  {      int len=0,i,length=0,flag=1,place=0,point;      for (i=0; i<=strlen(string); i++)          if (alphabetic(string[i]))              if (flag)              {                  point=i;                  flag=0;              }              else                  len++;          else          {              flag=1;              if (len>=length)              {                  length=len;                  place=point;                  len=0;              }          }      return(place);  }  

42.输出金字塔图案(要求用循环实现

#include <stdio.h>  void main()  {      /*                i         0~2*i           0~2-i     *      上半部分    0   *1个 0~2*0   空6/2=3  0~2-0    ***                 1    *3个 0~2*1  空4/2=2  0~2-1   *****                2    *5个 0~2*2  空2/2=1  0~2-2  *******               3    *7个 0~2*3  空0      0~2-3   *****    下半部分    0   *5个  0~4-2*0         空2/2=1  0~0    ***                 1    *3个  0~4-2*1        空4/2=2  0~1     *                  2    *1个  0~4-2*2        空6/2=3  0~2                                   0~4-2*i                 0~i      */      int i,j,k;      //上半部分      for (i=0; i<=3; i++)      {          for (j=0; j<=2-i; j++)              printf(" ");          for (k=0; k<=2*i; k++)              printf("*");          printf("n");      }      //下半部分      for (i=0; i<=2; i++)      {          for (j=0; j<=i; j++)              printf(" ");          for (k=0; k<=4-2*i; k++)              printf("*");          printf("n");      }  }  

43 要有一个已排好序的数组,求输入一个数后,按原来排序的规律将她插入数组中

#include "stdio.h"  void main()  {      int a[10];      int b[11];      int i,m,j;      printf("请输入一个数组:n");      for(i=0; i<10; i++)          scanf("%d",&a[i]);      printf("请输入一个任意的整数:");      scanf("%d",&m);      //找到插入位置      for(i=0; i<10; i++)          if(m<a[i])              break;      for(j=0; j<11; j++)      {          //将插入位置前的复制到b中          if(i>j)              b[j]=a[j];          //将插入位置后的复制到b中          else if(i<j)              b[j]=a[j-1];          //将插入位置复制到b中          else b[j]=m;      }      printf("该数组的重新排序为:");      for(j=0; j<11; j++)          printf("%d  ",b[j]);  }

44  写一个判断素数的函数,在主函数输入一个整数,输出是否素数的信息

#include "stdio.h"  #include "math.h"  void main()  {      int prime(int n);      int m;      printf("please input a integer:n");      scanf("%d",&m);      if(prime(m))          printf("%d is a prime",m);      else          printf("%d is not a prime",m);    }  int prime(int i)  {      int flag=1,n;      for(n=2; n<=sqrt(i); n++)      {          if(i%n==0)              flag=0;      }      return(flag);  }

45 有一篇文章,共有4行文章,每行有60个字符。要求分别统计出其中英文大写字符、小写字母、数字、空格以及其他字符的个数

#include <stdio.h>  void main()  {      int i,j,upp,low,dig,spa,oth;      char text[4][60];      upp=low=dig=spa=oth=0;      for (i=0; i<4; i++)      {          printf("please input line %d:n",i+1);          gets(text[i]);          for (j=0; j<60 && text[i][j]!=''; j++)          {              if (text[i][j]>='A'&& text[i][j]<='Z')                  upp++;              else if (text[i][j]>='a' && text[i][j]<='z')                  low++;              else if (text[i][j]>='0' && text[i][j]<='9')                  dig++;              else if (text[i][j]==' ')                  spa++;              else                  oth++;          }      }      printf("nupper case: %dn",upp);      printf("lower case: %dn",low);      printf("digit     : %dn",dig);      printf("space     : %dn",spa);      printf("other     : %dn",oth);  }

46. 有一行电文,已按下面规律译成密码:

A→Z    a→z

B→Y    b→y

C→X    c→x/

即第1个字母变成第26个字母,第i个字母变成第(26 – i + 1)个字母。非字母符号不变。要求编程序将密码译回原文,并输出密码和原文。

#include <stdio.h>  void main()  {      int j,n;      char ch[80],tran[80];      printf("input cipher code:");      gets(ch);      printf("ncipher code  :%s",ch);      j=0;      while (ch[j]!='')      {          if ((ch[j]>='A') && (ch[j]<='Z'))              tran[j]=155-ch[j];  //          else if ((ch[j]>='a') && (ch[j]<='z'))              tran[j]=219-ch[j];  //          else              tran[j]=ch[j];          j++;      }      n=j;      printf("noriginal text:");      for (j=0; j<n; j++)          putchar(tran[j]);      printf("n");  }

47 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下来的是原来第几号的那位(要求用指针知识实现)。【见2015年笔试题

#include <stdio.h>  void main()  {      int i,k,m,n,num[50],*p;      printf("input number of person: n=");      scanf("%d",&n);      p=num;      for (i=0; i<n; i++)          *(p+i)=i+1;      i=0;      k=0;      m=0;      while (m<n-1)      {          if (*(p+i)!=0)  k++;          if (k==3)          {              *(p+i)=0;              k=0;              m++;          }          i++;          if (i==n) i=0;      }      while(*p==0) p++;      printf("The last one is NO.%dn",*p);  }

48 有10个学生,每个学生的数据包括学号、姓名、3门课程的成绩,从键盘输入10个学生数据,要求输出3门课程总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课程成绩、平均分数)(用结构体)。

#include <stdio.h>  #define N 10  struct student  {      char num[6];      char name[8];      float score[3];      float avr;  } stu[N];  void main()  {      int i,j,maxi;      float sum,max,average;      for (i=0; i<N; i++)      {          printf("input scores of student %d:n",i+1);          printf("NO.:");          scanf("%s",stu[i].num);          printf("name:");          scanf("%s",stu[i].name);          for (j=0; j<3; j++)          {              printf("score %d:",j+1);              scanf("%f",&stu[i].score[j]);          }      }      average=0;      max=0;      maxi=0;      for (i=0; i<N; i++)      {          sum=0;          for (j=0; j<3; j++)              sum+=stu[i].score[j];          stu[i].avr=sum/3.0;          average+=stu[i].avr;          if (sum>max)          {              max=sum;              maxi=i;          }      }      average/=N;      printf("   NO.      name   score1   score2   score3     averagen");      for (i=0; i<N; i++)      {          printf("%5s%10s",stu[i].num,stu[i].name);          for (j=0; j<3; j++)              printf("%9.2f",stu[i].score[j]);          printf("    %8.2fn",stu[i].avr);      }      printf("average=%5.2fn",average);      printf("The highest score is : student %s,%sn",stu[maxi].num,stu[maxi].name);      printf("his scores are:%6.2f,%6.2f,%6.2f,average:%5.2f.n",    stu[maxi].score[0],stu[maxi].score[1],stu[maxi].score[2],stu[maxi].avr);  }  

49  写一个函数,将一个字符串中的元音字母复制到另一个字符串,然后输出

#include "stdio.h"  void main()  {      void copy(char s[3],char m[2]);      char str[80],c[80];      printf("input str:n" );      gets(str);      copy(str, c);      printf("the vovel letters are:%sn",c);  }  void copy(char s[3],char m[2])  {      int i,j;      for(i=0,j=0; s[i]!=''; i++)          if(s[i]=='a'||s[i]=='A'||s[i]=='o'||s[i]=='O'||s[i]=='u'||s[i]=='U'||s[i]=='i'||s[i]=='I'||s[i]=='e'||s[i]=='E')          {              m[j]=s[i];              j++;          }      m[j]='';  }

50 编一程序,输入月份号,输出该月的英文月名。例如,输入3,则输出March,要求用指针数组处理。

#include <stdio.h>  void main()  {      char * month_name[13]= {"illegal month","January","February","March","April",                              "May","June","july","August","September","October", "November","December"                             };      int n;      printf("input month:n");      scanf("%d",&n);      if ((n<=12) && (n>=1))          printf("It is %s.n",*(month_name+n));      else          printf("It is wrong.n");  }