国家计算机二级c语言历年上机真题及基础知识5

时间:2011-09-20 13:40:48

微信搜索关注"91考试网"公众号,领30元,获取事业编教师公务员等考试资料40G

第五套

 

1.填空题

 

从键盘输入一组无符号整数并保存在数组xx[N]中,以整数0结束输入,要求这些数的最大位数不超过4位,其元素的个数通过变量num传入函数fun()。请补充函数fun(),该函数的功能是:从数组xx中找出个位和十位的数字之和大于5的所有无符号整数,结果保存在数组yy中,其个数由函数fun()返回

 

例如:当xx[8]={123,11,25,222,42,333,14,5451}时,

 

bb[4]={25,42,333,5451}

 

注意:部分源程序给出如下。

 

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。

 

试题程序:

 

#include <stdio.h>

 

#define  N  1000

 

int fun(int xx[],int bb[],int num)

 

{

 

 int i, n=0;

 

 int g, s;

 

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

 

 {

 

          g=1;

 

          s=xx[i]/10%10;

 

          if((g+s)>5)

 

                    2;

 

 }

 

 return3;

 

}

 

main()

 

{

 

 int xx[N];

 

 int yy[N];

 

 int num=0,n=0,i=0;

 

 printf("Input number :n");

 

 do

 

 {

 

          scanf("%u",&xx[num]);

 

 }

 

 while(xx[num++]!=0);

 

 n=fun(xx,yy,num);

 

 printf("nyy=");

 

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

 

          printf("%u ",yy[i]);

 

}

 

答案及评析:

 

1xx[i]%10                    2bb[n++]=xx[i]                    3n

 

【解析】填空1:将一个整数对10取余,则得到这个整数的个位数,将一个整数除以10再对10取余,则得到这个整数的十位数。由程序可以看出,变量s保存了整数的十位数,所以应该将整数的个位数保存于变量g中。填空2:当整数的个位与十位的数字之和大于5时,则将这个整数存于数组bb中,同时,变量n记录了满足条件的无符号整数的个数。填空3:题目要求满足条件的无符号整数的个数由fun函数返回,所以函数返回n

 

2. 改错题

 

下列给定程序中,函数fun()的功能是:在字符串str中找出ASCⅡ码值最小的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。例如,调用fun()函数之前给字符串输入fagAgBDh,调用后字符串中的内容为AfaggBDh

 

请改正程序中的错误,使它能得到正确结果。

 

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

 

试题程序:

 

#include<stdio.h>

 

/**********************found***********************/

 

 

void fun(char p)

 

{

 

  char min, *q;

 

  int i=0;

 

  min=p[i];

 

  while (p[i]!=0)

 

       {

 

        if (min>p[i])

 

          {

 

/**********************found***********************/

 

 

           p=q+i;

 

          min=p[i];

 

          }

 

        i++;

 

       }

 

  while(q>p)

 

      {*q=*(q-1);

 

        q--;

 

       }

 

  p[0]=min;

 

}

 

main()

 

{

 

  char str[80];

 

  printf("Enter a string: ");

 

  gets(str);

 

  printf("nThe original string: ");

 

  puts(str);

 

  fun(str);

 

  printf("nThe string after moving: ");

 

  puts(str);

 

  printf("nn");

 

}

 

答案及评析:

 

1错误void fun(char p)

 

正确void fun(char *p)

 

2)错误:p=q+i;

 

正确:q=p+i;

 

【解析】错误:由于本题中函数的功能是对字符串进行处理,而不是对单个字符进行处理,因此,函数的参数应为字符串指针。

 

错误2:使指针q指向ASCII码最小的字符

 

本题解答需要3个步骤:

 

1)找到字符串中ASCII码值最小的字符,并保存。

 

2)将该字符复制,并将该字符前面的字符串顺次后移。

 

3)将ASCII码值最小的字符赋给字符串的第1个字符。找到ASCII码值最小的字符可以通过定义一个字符min,该字符初始时等于字符串的第1个字符,若字符串的下一个字符小于min,则将下一个字符赋给min,如此循环到字符尾,即可得到ASCII码值最小的字符,同时令指针q指向最小字符。之后对最小字符前面的子串顺次后移,可采用while语句实现。

 

此题需要熟练掌握和灵活应用C语言的字符与整型变量的关系以及字符串操作。

 

 

3. 编程题

 

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

 

注意:部分源程序给出如下。

 

请勿改动主函数main和其他函数中的任何内容,仅在函数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)

 

{

 

 

 

}

 

STREC * creat (double *s)

 

{ 

 

  STREC *h,*p,*q; 

 

  int  i=0;

 

  h=p=(STREC*)malloc(sizeof(STREC));

 

  p->s=0;

 

  while(i<N)                            /*产生8个节点的链表,各分数存入链表中*/

 

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

 

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

 

    }

 

  p->next=NULL;

 

  return  h;          /*返回链表的首地址*/

 

}

 

outlist(STREC *h)

 

{

 

  STREC *p;

 

  p=h;

 

  printf("head");

 

  do

 

    {printf("->%2.0f ",p->s);p=p->next;}   /*输出各分数*/

 

  while(p!=NULL);

 

  printf("nn ");

 

}

 

main()

 

{

 

  double s[N]={56,89,76,95,91,68,75,85}, min;

 

  STREC *h;

 

  h=creat(s);

 

  outlist(h);

 

  min=fun(h);

 

  printf("min=%6.1fn ",min);

 

}

 

答案及评析:

 

double fun(STREC *h)

 

{

 

  double min=h->s;

 

  while(h!=NULL)         /*通过循环找到最低分数*/

 

     {if(min>h->s)

 

         min=h->s;

 

      h=h->next;

 

     }

 

  return min;

 

}

 

【解析】在本题中h为一个指向结构体的指针变量若要引用它所指向的结构体中的某一成员时要用指向运算符"->"。由于是链表,所以要使h逐一往后移动,使用的是h=h->next

 


微信搜索关注"91考试网"公众号,领30元,获取公务员事业编教师考试资料40G
【省市县地区导航】【考试题库导航】

电脑版  |  手机版  |  返回顶部