计算机等级考试模拟试题汇总

出处:ExamLink.com收集整理 作者:罗志 日期:2007年03月19日 11时28分

模拟试题(七)
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】;
  }
  return【3】;
}
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]);
}
答案及评析:
【1】xx[i]%10 【2】bb[n++]=xx[i] 【3】n
【解析】填空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("\n\n");
}


答案及评析:
(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("\n\n ");
}
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.1f\n ",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。
模拟试题(八)
1.填空题
请补充函数fun(),该函数的功能是判断一个数的个位数字和百位数字之和是否等于其十位上的数字,是则返回“yes!”,否则返回“no!”。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。
试题程序:
#include <stdio.h>
#include <conio.h>
char *fun(int n)
{
  int g,s,b;
  g=n%10;
  s=n/10%10;
  b=【1】;
  if((g+b)==s)
  return【2】;
  else
  return【3】;
}
main()
{
  int num=0;
  clrscr();
  printf("******Input data *******\n");
  scanf("%d",&num);
  printf("\n\n\n");
  printf("****** The result *******\n");
  printf("\n\n\n%s",fun(num));
}

答案及评析:
【1】n/100%10 【2】″yes!″ 【3】″no!″
【解析】填空1:由程序可以知道,变量g保存了整数的个位数,变量s保存了整数的十位数,所以变量b应该保存整数的百位数。将整数除以100再对10取余,则得到这个整数的百位数。填空2:当个位数字和百位数字之和等于十位数字时,则返回″yes!″。填空3:当个位数字和百位数字之和不等于十位数字时,则返回″no!″。
2. 改错题
下列给定的程序中,函数fun()的功能是:用选择法对数组中的n个元素按从大到小的顺序进行排序。
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<stdio.h>
#define N 20
void fun(int a[],int n)
{
 int i,j,t,p;
/**********************found***********************/

 for(j=0;j<n-1;j++) ;
   {
    p=j;
    for(i=j;i<n;i++)
       if(a[i]>a[p]) 
          p=i;
    t=a[p];
    a[p]=a[j];
/**********************found***********************/

    a[p]=t; 
   }
}
main()
{
 int a[N]={11,32,-5,2,14},i,m=5;
 printf("排序前的数据:");
 for(i=0;i<m;i++) 
    printf("%d ",a[i]);
 printf("\n");
 fun(a,m);
 printf("排序后的顺序:");     
 for(i=0;i<m;i++)
    printf("%d ",a[i]);
 printf("\n");
}
答案及评析:
(1)错误:for(j=0;j<n-1;j++) ;
   正确:for(j=0;j<n-1;j++)
(2)错误:a[p]=t;
     正确:a[j]=t;
【解析】错误1:根据C语言语法,for循环中循环条件后不加分号,除非做空操作。
错误2:将两数进行交换的常用语句,借助第三个变量。

最后更新时间:2008-07-01 16:28:01
文章评论
共有 0 位网友发表了评论
用户名: 新注册) 密码: 匿名评论 [查看所有评论]

评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
您可以用以下几种方式找到此文章

考试全流程