21、请编写函数fun,该函数的功能是:将M行N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。
例如,若二维数组中的数据为
W W W W
S S S S
H H H H
则字符串中的内容应是:WSHWSHWSHWSH。
注意:请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

#include<stdio.h>
#define  M  3
#define  N  4
void fun(char (*s)[N],char *b)
{
}
int main()
{
  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 ");
  return 0;
}
计算机等级考试二级C语言程序设计专项训练题——程序设计题(三)计算机等级考试二级C语言程序设计专项训练题——程序设计题(三)

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

参考程序

22、已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。请编写函数fun,该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数(规定只有一个最高分)。已给出函数的首部,请完成该函数。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

#include<stdio.h>
#define N 10
typedef struct ss    /*定义结构体*/
{ char num[10];
  int s;
} STU;
fun(STU a[], STU *s)
{
}
int 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*****");
    for(i=0;i<N;i++)
       printf("No=%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);
    return 0;
}
计算机等级考试二级C语言程序设计专项训练题——程序设计题(三)计算机等级考试二级C语言程序设计专项训练题——程序设计题(三)

fun(STU a[], STU *s)
{
    STU m;
    m=a[0];
    int i;
    for (i=1;i<N;i++)
        if (m.s<a[i].s) m=a[i];
    *s=m;
}

参考程序

23、请编写函数fun,其功能是:计算并输出3~n之间所有素数的平方根之和。

例如,若主函数从键盘给n输入100后,则输出为sum=148.874270。


注意:n的值要大于2但不大于100。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

#include <stdio.h>
#include <math.h>
double fun(int n)
{
}
int main()
{
    int n;
    double sum;
    printf("Input  n=");
    scanf("%d",&n);
    sum=fun(n);
    printf("\nsum=%f\n",sum);
    return 0;
}
计算机等级考试二级C语言程序设计专项训练题——程序设计题(三)计算机等级考试二级C语言程序设计专项训练题——程序设计题(三)

double fun(int n)
{
    int i,j;
    double s=0;
    for (i=3;i<=n;i+=2)
    {
        for (j=3;j<=sqrt(i);j+=2)
            if (i%j==0) break;
        if (j>sqrt(i)) s+=sqrt(i);
    }
    return s;
}

参考程序

24、请编写函数fun,该函数的功能是:判断字符串是否为回文,若是,则函数返回1,主函数中输出"YES",否则返回0,主函数中输出"NO"。
回文是指顺读和倒读都一样的字符串。 例如,字符串LEVEL是回文,而字符串123312就不是回文。 注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h>
#define N 80
int fun(char *str)
{
}
int main()
{
    char s[N];
    int i;
    printf("Enter a string : ");
    gets(s);
    printf("\n");
    puts(s);
    if(fun(s))
        printf("YES\n");
    else
        printf("NO\n");
    return 0;
}
计算机等级考试二级C语言程序设计专项训练题——程序设计题(三)计算机等级考试二级C语言程序设计专项训练题——程序设计题(三)

int fun(char *str)
{
    int i,j;
    for (i=0;str[i]!='\0';i++) ;
    j=i-1;
    i=0;
    while (i<j)
    {
        if (str[i]!=str[j]) break;
        i++;  j--;
    }
    if (i<j) return 0;
    else return 1;
}

参考程序

25、请编写函数fun,对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按ASCII码降序排列。例如,原来的字符串为"CEAedca",排序后输出为"CedcEAa"。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h>
#include <string.h>
void fun(char *s,int num)
{
}
int main()
{
  char s[10];
  printf("输入7个字符的字符串:");
  gets(s);
  fun(s,7);
  printf("\n%s",s);
  return 0;
}
计算机等级考试二级C语言程序设计专项训练题——程序设计题(三)计算机等级考试二级C语言程序设计专项训练题——程序设计题(三)

void fun(char *s,int num)
{
    int i,j;
    for (i=1;i<num-2;i++)
        for (j=1;j<num-1-i;j++)
           if (s[j]<s[j+1])
           {
              char t;
              t=s[j]; s[j]=s[j+1]; s[j+1]=t;
           }
}

参考程序

26、请编写函数fun,其功能是:将一组得分中,去掉一个最高分和一个最低分,然后求平均值,并通过函数返回。函数形参a指向存放得分的数组,形参n中存放得分个数(n>2)。

例如,若输入9.9 8.5 7.6 8.5 9.3 9.5 8.9 7.8 8.6 8.4十个得分,则输出结果为:8.687500
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

#include <stdio.h>
double fun(double a[ ],int n)
{
}
int main()
{   double  b[10], r;
    int i;
    printf("输入10个数放入b数组中 :  ");
    for (i=0; i<10; i++)
        scanf("%lf",&b[i]);
    printf("输入的10个数是 :  ");
    for (i=0; i<10; i++)
        printf("%4.1f ",b[i]);
    printf("\n");
    r=fun(b,10);
    printf("去掉最高分和最低分后的平均分 :  %f\n", r );
    return 0;
}
计算机等级考试二级C语言程序设计专项训练题——程序设计题(三)计算机等级考试二级C语言程序设计专项训练题——程序设计题(三)

double fun(double a[ ],int n)
{
    double sum,max,min;
    int i;
    sum=max=min=a[0];
    for (i=1;i<n;i++)
    {
        sum+=a[i];
        if (max<a[i]) max=a[i];
        if (min>a[i]) min=a[i];
    }
    return (sum-max-min)/(n-2);
}

参考程序

27、请编写一个函数void fun(int m,int k,int xx[]),该函数的功能是:将大于整数m且紧靠mk个素数存入数组xx传回。

例如:若输入17 5 则应输出:1923293137

注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

#include <stdio.h>
void fun(int m,int k,int xx[])
{
}
int main()
{
   int m,n,xx[1000];
   printf("\nPlease enter two integers:");
   scanf("%d%d",&m,&n);
   fun(m,n,xx);
   for(m=0;m<n;m++)
     printf("%d ",xx[m]);
   printf("\n");
   return 0;
}
计算机等级考试二级C语言程序设计专项训练题——程序设计题(三)计算机等级考试二级C语言程序设计专项训练题——程序设计题(三)

void fun(int m,int k,int xx[])
{
    int i,j,s=0;
    for(i=m+1;k>0;i++)
    {
        for(j=2;j<i;j++)
          if (i%j==0) break;
        if(i==j) { xx[s++]=i; k--;}
    }
}

参考程序

28、请编写函数void fun(char *s),它的功能是:把 s 字符串中的所有字母改写成该字母的下一个字母,字母z改写成字母a。要求大写字母仍为大写字母,小写字母仍为小写字母,其它字符不做改变。

例如:s 字符串中原有的内容为:Mn.123Zxy,则调用该函数后,结果为:No.123Ayz。

注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

#include <stdio.h>
#define  N 81
void fun(char *s)
{
}
int main( )
{
   char a[N];
   printf("Enter a string : ");
   gets(a);
   printf("The original string is : ");
   puts(a);
   fun(a);
   printf("The string after modified : ");
   puts (a);
   return 0;
}
计算机等级考试二级C语言程序设计专项训练题——程序设计题(三)计算机等级考试二级C语言程序设计专项训练题——程序设计题(三)

void fun(char *s)
{
    while(*s)
    if (*s=='z'||*s=='Z') {*s-=25; s++;}
     else if (*s>='a'&&*s<='y') {*s+=1;s++;}
      else if (*s>='A'&&*s<='Y') {*s+=1;s++;}
       else s++;
}

参考程序

29、编写函数int fun(int t),它的功能是:求Fibonacci数列中大于t的最小的一个数,结果由函数返回。其中Fibonacci数列F(n)的定义为:

F(0)=0,F(1)=1

F(n)=F(n-1)+F(n-2)

例如:当t=1000时,函数值为:1597

注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

#include <stdio.h>
int fun(int t)
{
}
int main()
{
   int n;
   n=1000;
   printf("n=%d,f=%d\n",n,fun(n));
   return 0;
}
计算机等级考试二级C语言程序设计专项训练题——程序设计题(三)计算机等级考试二级C语言程序设计专项训练题——程序设计题(三)

int fun(int t)
{
    int f0=0,f1=1,fn;
    fn=f0+f1;
    while (fn<=t)
   {
       f0=f1;
       f1=fn;
       fn=f0+f1;
   }
   return fn;
}

参考程序

30、已知结构数组sell中存有10个产品销售记录,每个产品销售记录由产品代码dm(字符型4),产品名称mc(字符型10),单价dj(整型),数量sl(整型),金额je(长整型)五部分组成。其中:金额=单价*数量计算得出。请编制函数fun(),其功能是:按产品名称从小到大进行排列,若产品名称相等,则按金额从小到大进行排列,最终排列结果仍存入结构数组sell中。

#include <stdio.h>
#include <string.h>
typedef struct{
  char dm[5];   /*产品代码*/
  char mc[11];  /*产品名称*/
  int dj;       /*单价*/
  int sl;       /*数量*/
  long je;      /*金额*/
}PRO;
void fun(PRO sell[])
{ 
}
int main()
{
   PRO sell[10]={{"1001","电视机",1000,8},{"1001","电视机",1000,5},
          {"1002","洗衣机",850,4},{"1002","洗衣机",850,3},
          {"1003","电冰箱",1000,8},{"1003","电冰箱",1000,5},
          {"1001","电视机",1250,4},{"1004","空调",2180,5},
          {"1002","洗衣机",816,3},{"1001","电视机",1440,5}};
   int i;
   for (i=0;i<10;i++)
       sell[i].je=sell[i].dj*sell[i].sl;
   fun(sell);
   for(i=0;i<10;i++)
       printf("%5s %11s %4d %5d %5ld\n",sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je);
   return 0;
}
计算机等级考试二级C语言程序设计专项训练题——程序设计题(三)计算机等级考试二级C语言程序设计专项训练题——程序设计题(三)

void fun(PRO sell[])
{
    int i,j;
    PRO xy;
    for(i=0;i<9;i++)
       for(j=i+1;j<10;j++)
          if(strcmp(sell[i].mc,sell[j].mc)>0||strcmp(sell[i].mc,sell[j].mc)==0&&sell[i].je>sell[j].je)
          {  xy=sell[i]; sell[i]=sell[j]; sell[j]=xy; }
}

参考程序

发表回复