C语言计算机二级考题【填空题】

—填空题

【文件】将格式化结果输出到文件

void fun(char  *filename, STU  n)
{ FILE  *fp;
/**********found**********fp
  fp = fopen(__1__, "rb+");                      //*filename
/**********found**********/
  fseek(__2__, -(long)sizeof(STU), SEEK_END);    //fp
/**********found**********/
  fwrite(&n, sizeof(STU), 1, __3__);             //fp
  fclose(fp);
}

【算数】将数组中大于平均数的数放在y数组中输出

在这里插入图片描述

double fun(double  x[],double  *y)
{ int  i,j;    double  av;
/**********found**********/
  av=__1__;                           //0.0
/**********found**********/
  for(i=0; i<N; i++)  
	  av=av+__2__;                    //x[i]/N
  for(i=j=0; i<N; i++)
/**********found**********/
    if(x[i]>av)  y[__3__]= x[i];      //j++
  y[j]=-1;
  return  av;
}

【算数】求数组中最接近平均数的数

在这里插入图片描述

double fun(double  x[],double  *av)
{ int  i,j;    double  d,s;
  s=0;
  for(i=0; i<N; i++)  s = s +x[i];
/**********found**********/
  __1__=s/N;                                        //*av
  d=32767;
  for(i=0; i<N; i++)
    if(x[i]<*av && *av - x[i]<=d){
/**********found**********/
      d=*av-x[i]; 
	  j=__2__;                                      //i
	 }
/**********found**********/
  return  __3__;                                    //x[j]
}

【算数】求出一组数的平均数 然后将小于数组平均数的数移至数组前部,大于的移至数组后部

在这里插入图片描述

double fun(double  *x)
{ int  i, j;    double  av, y[N];
  av=0;
  for(i=0; i<N; i++) 
/**********found**********/ 
	av+=__1__;                                    //x[i]/N
  for(i=j=0; i<N; i++)
    if( x[i]<av ){
      y[j]=x[i]; x[i]=-1; 
/**********found**********/
	  __2__;                                      //j++
	}
  i=0;
  while(i<N)
  {  if( x[i]!= -1 ) y[j++]=x[i];
/**********found**********/
     __3__;                                       //i++
  }
  for(i=0; i<N; i++)x[i] = y[i];
  return  av;
}

【算数】求出一组数的平均数 然后将小于数组平均数的数移至数组前部,大于的移至数组后部

在这里插入图片描述

double fun(double  *x)
{ int  i, j;    double  av, y[N];
  av=0;
  for(i=0; i<N; i++) 
/**********found**********/ 
	av+=__1__;                                    //x[i]/N
  for(i=j=0; i<N; i++)
    if( x[i]<av ){
      y[j]=x[i]; x[i]=-1; 
/**********found**********/
	  __2__;                                      //j++
	}
  i=0;
  while(i<N)
  {  if( x[i]!= -1 ) y[j++]=x[i];
/**********found**********/
     __3__;                                       //i++
  }
  for(i=0; i<N; i++)x[i] = y[i];
  return  av;
}

【字符】将两组字符型数组转换为数值型相加

在这里插入图片描述

long  ctod( char  *s )
{ long  d=0;
  while(*s)
    if(isdigit( *s))  {
/**********found**********/
      d=d*10+*s-__1__;                 //'0'
/**********found**********/
      __2__;                           //s++
	 }
  return  d;
}
long  fun( char  *a, char  *b )
{
/**********found**********/
  return  __3__;                       //ctod(a)+ctod(b)
}

【算数】生成不重复随机数

void  fun( int  *a)
{ int  i, x, n=0;
  x=rand()%20;
/**********found**********/
  while (n<N)
  {  for(i=0; i<n; i++ )
/**********found**********/
         if( x==a[i] ) 
		    break;
/**********found**********/
     if( i==n)
		{ a[n]=x; n++; }
     x=rand()%20;
  }
}

【数组】求数组中每列的最大值

在这里插入图片描述

#include  <stdio.h>
#define  N  4
void fun(int  (*a)[N], int  *b)
{ int  i,j;
  for(i=0; i<N; i++) {
/**********found**********/
    b[i]=__1__;                       //a[0][i]
    for(j=1; j<N; j++)
/**********found**********/
        if(b[i]<__2__)                //a[j][i]
		   b[i]=a[j][i];
  }
}
void main()
{ int  x[N][N]={ {12,5,8,7},{6,1,9,3},{1,2,3,4},{2,8,4,3} },y[N],i,j;
  printf("\nThe matrix :\n");
  for(i=0;i<N; i++)
  {  for(j=0;j<N; j++) printf("%4d",x[i][j]);
     printf("\n");
  }
/**********found**********/
  fun(__3__);                          //x,y
  printf("\nThe result is:");
  for(i=0; i<N; i++)  printf("%3d",y[i]);
  printf("\n");
}

【数组】打印自然数字层矩阵

在这里插入图片描述

void fun(int (*a)__1__)                //[N]
{ int  i,j,k,m;
  if(N%2==0) m=N/2 ;
  else       m=N/2+1;
  for(i=0; i<m; i++) {
/**********found**********/
     for(j=__2__; j<N-i; j++)          //i
        a[i][j]=a[N-i-1][j]=i+1;
     for(k=i+1; k<N-i; k++)
/**********found**********/
        a[k][i]=a[k][N-i-1]=__3__;    //i+1
  }
}

【算数】判断一个二维数组是否是幻方(行列对角线和相等)

#define   N   3
int fun(int  (*a)[N])
{ int  i,j,m1,m2,row,colum;
  m1=m2=0;
  for(i=0; i<N; i++)
  { j=N-i-1;  m1+=a[i][i];  m2+=a[i][j];  }
  if(m1!=m2) return  0;
  for(i=0; i<N; i++) {
/**********found**********/
     row=colum=__1__;                          //0
     for(j=0; j<N; j++)
     {  row+=a[i][j];  colum+=a[j][i];  }
/**********found**********/
     if( (row!=colum)__2__(row!=m1) ) return 0;//||
  }
/**********found**********/
  return  __3__;                               //1
}

【函数】使用函数指针指向函数后调用

在这里插入图片描述

double f1(double  x)
{  return  x*x;  }
double f2(double x, double y)
{  return  x*y;  }
double fun(double  a, double  b)
{
/**********found**********/
  double (*f)();
  double  r1, r2;
/**********found**********/
  f = f1 ; 
  r1 = f(a);
/**********found**********/
  f = f2 ; 
  r2 = (*f)(a, b);
  return  r1 + r2;
}

【算数】对链表中的数据进行由小到大排序

在这里插入图片描述

void fun(NODE  *h)
{ NODE  *p, *q;    int  t;
/**********found**********/
  p = h->next ;
  while (p) {
/**********found**********/
     q = p->next ;
     while (q) {
/**********found**********/
        if (p->data > q->data)
        {  t = p->data;  p->data = q->data;  q->data = t;  }
        q = q->next;
    }
    p = p->next;
  }
}

【字符】将字符串中的数字字符和字母字符分开

在这里插入图片描述

char *fun(char  *s)
{ int  i, j, k, n;    char  *p, *t;
  n=strlen(s)+1;
  t=(char*)malloc(n*sizeof(char));
  p=(char*)malloc(n*sizeof(char));
  j=0; k=0;
  for(i=0; i<n; i++)
  {  if(isdigit(s[i])) {
/**********found**********/
       p[j]=s[i]; j++;}
     else
     {  t[k]=s[i]; k++; }
   }
/**********found**********/
   for(i=0; i<k; i++) p[j+i]= t[i];
   p[j+k]=0;
/**********found**********/
   return p;
}

【数组】矩阵交换指定行的值

在这里插入图片描述

/**********found**********/
void fun(int (*a)[N], int __1__)    //k
{ int i,temp ;
/**********found**********/
  for(i = 0 ; i < __2__ ; i++)      //N
  { temp=a[0][i] ;
/**********found**********/
    a[0][i] =__3__;                 //a[k][i]
    a[k][i] = temp;
  }
}

【数组】将数组第k列以后的列往前移动

在这里插入图片描述

void fun(int  (*a)[N],int  k)
{ int  i,j,p,temp;
/**********found**********/
  for(p=1; p<= k; p++)
     for(i=0; i<M; i++)
     {  temp=a[i][0];
/**********found**********/
        for(j=0; j< N-1 ; j++) a[i][j]=a[i][j+1];
/**********found**********/
        a[i][N-1]= temp;
     }
}

【数组】找出数组中行上最大,列上最小的元素

在这里插入图片描述

void fun(int  (*a)[N])
{ int  i=0,j,find=0,rmax,c,k;
  while( (i<M) && (!find))
  {  rmax=a[i][0];  c=0;
     for(j=1; j<N; j++)
       if(rmax<a[i][j]) {
/**********found**********/
         rmax=a[i][j]; c=__1__; }                  //j
     find=1; k=0;
     while(k<M && find) {
/**********found**********/
       if (k!=i && a[k][c]<=rmax)  find=__2__;     //0
       k++;
     }
     if(find) printf("find: a[%d][%d]=%d\n",i,c,a[i][c]);
/**********found**********/
      __3__;                                       //i++
  }
  if(!find) printf("not found!\n");
}

【字符】复制字符串的后面n个字符到新的数组

在这里插入图片描述

void fun(char  *s, int  n, char  *t)
{ int len,i,j=0;
  len=strlen(s);
/**********found**********/
  if(n>=len) strcpy(__1__);                    //t,s
  else {
/**********found**********/
     for(i=len-n; i<=len-1; i++)  t[j++]=__2__;//s[i]
/**********found**********/
     t[j]= __3__;                              //'\0'
  }
}

【算数】对一个字符串进行回文数判断

int fun(char  *s)
{ char  *lp,*rp;
/**********found**********/
  lp=__1__;                                           //s
  rp=s+strlen(s)-1;
  while((toupper(*lp)==toupper(*rp)) && (lp<rp) ) {
/**********found**********/
     lp++; rp __2__ ; }                               //--
/**********found**********/
  if(lp<rp) __3__;                                    //return 0
  else   return 1;
}

【字符】统计输入文本中的单词个数

在这里插入图片描述

int fun(char  *s)
{ int  n=0, flag=0;
  while(*s!='\0')
  { if(*s!=' ' && flag==0) {
/**********found**********/
     __1__;  flag=1;}     	                //n++
/**********found**********/
    if (*s==' ')  flag=__2__;               //0
/**********found**********/
    __3__;                                  //s++
  }
  return  n;
}

【算数】将数组中ASCII码小于97的字符统计个数并存入另一个数组

int fun(char  *s, char  *t)
{ int  n=0;
  while(*s)
  { if(*s < 97) {
/**********found**********/
     *(t+n)=__3__;  n++;  }             //*s
/**********found**********/
     __3__;                             //s++
  }
  *(t+n)=0;
/**********found**********/
  return __3__;                         //n
}

【算数】将字符串里面的数字累加

int fun(char  *s)
{ int  sum=0;
  while(*s) {
/**********found**********/
    if( isdigit(*s) )  sum+= *s-__1__;//'0'
/**********found**********/
    __2__;                            //s++
  }
/**********found**********/
  return  __3__;                      //sum
}

【字符】统计字符串中单词频率最高的字符

在这里插入图片描述

void fun(char  *s)
{ int  k[26]={0},n,i,max=0;    char  ch;
  while(*s)
  { if( isalpha(*s) ) {
/**********found**********/
      ch=tolower(__1__);                //*s
      n=ch-'a';
/**********found**********/
      k[n]+=__2__;                      //1
    }
    s++;
/**********found**********/
    if(max<k[n]) max=__3__;             //k[n]
  }
  printf("\nAfter count :\n");
  for(i=0; i<26;i++)
     if (k[i]==max) printf("\nletter  \'%c\' :  %d times\n",i+'a',k[i]);
}

【算数】按长度给二维数组的字符串排序

在这里插入图片描述

void fun(char  (*ss)[M])
{ char  *ps[N],*tp;    int  i,j,k;
  for(i=0; i<N; i++) ps[i]=ss[i];
  for(i=0; i<N-1; i++) {
/**********found**********/
    k=__1__;                                     //i
    for(j=i+1; j<N; j++)
/**********found**********/
       if(strlen(ps[k]) < strlen(__2__) ) k=j;   //ps[j]
/**********found**********/
    tp=ps[i];  ps[i]=ps[k]; ps[k]=__3__;         //tp
  }
  printf("\nThe string after sorting by length:\n\n");
  for(i=0; i<N; i++)  puts(ps[i]);
}

【算数】多个函数的调用

在这里插入图片描述

double f1(double  x)
{  return x*x;  }
double f2(double  x, double  y)
{  return  x*y;  }
/**********found**********/
__1__ fun(int  i, double  x, double  y) //double
{ if (i==1)
/**********found**********/
    return __2__(x);                    //f1
  else
/**********found**********/
    return  __3__(x, y);                //f2
}
void main()
{ double  x1=5, x2=3, r;
  r = fun(1, x1, x2);
  r += fun(2, x1, x2);
  printf("\nx1=%f, x2=%f, x1*x1+x1*x2=%f\n\n",x1, x2, r);
}

【算数】将结构体中的数据按学号由小到大排序后再写入文件

在这里插入图片描述

typedef struct student {
  long  sno;
  char  name[10];
  float  score[3];
} STU;
void fun(char  *filename)
{ FILE  *fp;      int  i, j;
  STU  s[N], t;
/**********found**********/
  fp = fopen(filename, "rb");
  fread(s, sizeof(STU), N, fp);
  fclose(fp);
  for (i=0; i<N-1; i++)
    for (j=i+1; j<N; j++)
/**********found**********/
      if (s[i].sno > s[j].sno)
      {  t = s[i];  s[i] = s[j];  s[j] = t;  }
  fp = fopen(filename, "wb");
/**********found**********/
  fwrite(s, sizeof(STU), N, fp); 
  fclose(fp);
}

【数组】按升序排序取中间值,将小于中间值的数覆盖为中间值

在这里插入图片描述

int fun(int  x[])
{  int  i,j,k,t,mid,b[N];
   for(i=0;i<N;i++) b[i]=x[i];
   for(i=0;i<=N/2;i++)
   {  k=i;
      for(j=i+1;j<N;j++) if(b[k]>b[j])  k=j;
      if(k != i )
      {  
/**********found**********/
        t=b[i]; b[i]=b[k]; b[k]=t;
      }
   }
/**********found**********/
   mid=b[4];
   for(i=0; i<N; i++)
/**********found**********/
     if(x[i] < mid) x[i]=mid;
   return  mid;
}

【数组】取出数组中前n个数,每行输出5个数

在这里插入图片描述

void fun( int *a,  int n )
{  int  i;
   for(i=0; i<n; i++)
   {
/**********found**********/
     if( __1__==0 )                          //i%5
/**********found**********/
           printf("__2__");                  //\n
/**********found**********/
      printf("%d  ",__3__);                  //a[i]
   }
}

【算法】将三个结构体数据用指针连接形成一个单向链表

在这里插入图片描述

typedef  struct  list
{  char  data;
   struct list  *next;
} Q;
void fun( Q *pa, Q *pb, Q *pc)
{  Q  *p;
/**********found**********/
   pa->next=__1__;                      //pb
   pb->next=pc;
   p=pa;
   while( p )
   {
/**********found**********/
      printf("  %c",__2__);             //p->data
/**********found**********/
      p=__3__;                          //p->next
   }
   printf("\n");
}

【算数】自然数累加

在这里插入图片描述

void  fun( int *a , int  n )
{  int  i, t;
   for( i=0; i<n; i++ )
/**********found**********/
      a[i]=__1__;                         //0
   i=0;  
/**********found**********/
   __2__=1;                               //t
   while( i<n )
   {  a[i]= 1;
      t++;
/**********found**********/
      i=__3__;                            //i+t
   }
}

【算法】 统计一串数字中各数字出现的次数

在这里插入图片描述

void fun( int  m, int  a[10])
{  int  i;
  for (i=0; i<10; i++)
/**********found**********/
    a[i] =__1__;                                     //0
  while (m > 0)
  {
/**********found**********/
     i = __2__;                                      //m%10
     a[i]++;
/**********found**********/
     m = __3__;                                      //m/10
  }
}

【算数】多项式计算

在这里插入图片描述

double fun(int  n)
{ int  i, k;    double  s, t;
  s=0;
/**********found**********/
  k=__1__;                                         //1
  for(i=1; i<=n; i++) {
/**********found**********/
    t=__2__;                                       //i*2
    s=s+k*(2*i-1)*(2*i+1)/(t*t);
/**********found**********/
    k=__3__;                                       //k*(-1)
  }
  return  s;
}

【算数】多项式计算

在这里插入图片描述

double fun(double  e)
{ int  i;    double  s, x;
/**********found**********/
  s=0;  i=__1__;                                //0
  x=1.0;
  while(x>e){
/**********found**********/
    __2__;                                      //i+=1
/**********found**********/
    x=(2.0*i-1)/((__3__)*(2.0*i));              //2.0*i
    s=s+x;
  }
  return  s;
}

【字符】将字符串中数字字符后面添加"*"

void fun(char  *s)
{  int  i, j, n;
   for(i=0; s[i]!='\0'; i++)
/**********found**********/
     if(s[i]>='0'__1__s[i]<='9')               //&&
     {  n=0;
/**********found**********/
        while(s[i+1+n]!= __2__)  n++;          //'\0'
        for(j=i+n+1; j>i; j--)
/**********found**********/
           s[j+1]=__3__;                       //s[j]
        s[j+1]='*';
        i=i+1;
     }
}

【算法】实现单链表逆置

在这里插入图片描述

typedef struct node {
  int  data;
  struct node  *next;
} NODE;
/**********found**********/
__1__ * fun(NODE *h)                         //NODE
{ NODE  *p, *q, *r;
  p = h;
  if (p == NULL)
    return NULL;
  q = p->next;
  p->next = NULL;
  while (q)
  {
/**********found**********/
    r =__2__;                                //q->next
    q->next = p;
    p = q;
/**********found**********/
    q =__3__;                                //r
  }
  return  p;
}

【结构体】函数传参修改结构体类型成员变量的值

在这里插入图片描述

struct student {
  long  sno;
  char  name[10];
  float  score[3];
};
/**********found**********/
__1__ fun(struct  student  a)                  //struct  student
{ int  i;
  a.sno = 10002;
/**********found**********/
  strcpy(__2__, "LiSi");                       //a.name
/**********found**********/
  for (i=0; i<3; i++) __3__+=1;                //a.score[i]
  return  a;
}

【算法】实现单链表逆置

在这里插入图片描述

typedef struct node {
  int  data;
  struct node  *next;
} NODE;
void fun(NODE  *h)
{ NODE  *p, *q, *r;
/**********found**********/
  p = h->__1__;                        //next
/**********found**********/
  if (p==__2__)  return;               //NULL
  q = p->next;
  p->next = NULL;
  while (q)
  {  r = q->next;    q->next = p;
/**********found**********/
     p = q;          
	 q = __3__;                        //r
  }
  h->next = p;
}

【字符】取出数组中ASCII码为奇数的字符并将字符按ASCII码递增排序存入数组

在这里插入图片描述

void fun(char  *s, char  *p)
{  int  i, j, n, x, t;
   n=0;
   for(i=0; s[i]!='\0'; i++)  n++;
   for(i=1; i<n-2; i=i+2) {
/**********found**********/
      __1__;                               //t=i
/**********found**********/
      for(j=__2__+2 ; j<n; j=j+2)          //i
        if(s[t]>s[j]) t=j;
      if(t!=i)
      {  x=s[i]; s[i]=s[t]; s[t]=x; }
   }
   for(i=1,j=0; i<n; i=i+2, j++)  p[j]=s[i];
/**********found**********/
   p[j]=__3__;                             //'\0'
}

【文件】将数据写入文本文件再读取显示

在这里插入图片描述

void fun(char  *s, int  a, double  f)
{
/**********found**********/
  __1__ fp;                                    //FILE*
  char  ch;
  fp = fopen("file1.txt", "w");
  fprintf(fp, "%s %d %f\n", s, a, f);
  fclose(fp);
  fp = fopen("file1.txt", "r");
  printf("\nThe result :\n\n");
  ch = fgetc(fp);
/**********found**********/
  while (!feof(__2__))                         //fp 
{
/**********found**********/
    putchar(__3__);                            //ch 
	ch = fgetc(fp);  
}
    putchar('\n');
    fclose(fp);
}

【字符】将字符串里面的指定的字符变为两个

在这里插入图片描述

void fun(char  *s, char  c)
{  int  i, j, n;
/**********found**********/
  for(i=0; s[i]!=__1__ ; i++)                       //'\0'
     if(s[i]==c)
     {
/**********found**********/
        n=__2__;                                    //0
        while(s[i+1+n]!='\0')  n++;
        for(j=i+n+1; j>i; j--)  s[j+1]=s[j];
/**********found**********/
        s[j+1]=__3__;                               //c
        i=i+1;
     }
}

【字符】将字符串中的字母字符和数字字符提取出来

在这里插入图片描述

char *fun(char  *s)
{ int  i, j, k, n;    char  *p, *t;
  n=strlen(s)+1;
  t=(char*)malloc(n*sizeof(char));
  p=(char*)malloc(n*sizeof(char));
  j=0; k=0;
  for(i=0; i<n; i++)
  {  if(((s[i]>='a')&&(s[i]<='z'))||((s[i]>='A')&&(s[i]<='Z'))) {
/**********found**********/
       t[j]=__1__; j++;}                     //s[i]
     else
     {  p[k]=s[i]; k++; }
  }
/**********found**********/
  for(i=0; i<__2__; i++)  t[j+i]=p[i];       //k
/**********found**********/
  t[j+k]= __3__;                             //'\0'
  return  t;
}
  • 6
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值