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

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

3. 编程题
请编写一个函数fun(),它的功能是:求出一个4×M整型二维数组中最小元素的值,并将此值返回调用函数。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#define M 4
#include <stdio.h>
fun (int a[][M])
{


}

main()
{
  int arr[4][M]={11,3,9,35,42,-4,24,32,6,48,-32,7,23,34,12,-7};
  printf("min=%d\n",fun(arr));
}

答案及评析:
fun (int a[][M])
{
  int i,j,min=a[0][0];
  for(i=0;i<4;i++)
     for(j=0;j<M;j++)
        if(min>a[i][j])
           min=a[i][j];    /*求出二维数组的最小值*/
  return min;
}
【解析】此类求最大值或最小值的C语言问题,我们可以采用逐个比较的方式。要求数组中的所有元素走动一遍,并从中找出最大、最小值,要注意一开始应使min存放数组中的第一个元素的值。可按逐行查找也可按逐列查找的方式,本题采用的是逐行查找的方式。即行下标在外层循环,列下标在内层循环,因为在循环的嵌套中越在内层循环,循环变化就越快。

模拟试题(四)
1.填空题
请补充函数fun(),该函数的功能是:分类统计一个字符串中元音字母和其他字符的个数(不区分大小写)。
例如,输入aeiouAOUpqrt,结果为A:2  E:1  I:1  O:2  U:2  other:4。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。
试题程序:
#include<stdio.h>
#include<conio.h>
#define N 100
void fun(char *str,int bb[])
{
  char *p=str;
  int i=0;
  for(i=0;i<6;i++)
  【1】;
  while(*p)
  {
  switch(*p)
  {
   case 'A':
   case 'a':bb[0]++;break;
   case 'E':
   case 'e':bb[1]++;break;
   case 'I':
   case 'i':bb[2]++;break;
   case 'O':
   case 'o':bb[3]++;break;
   case 'U':
   case 'u':bb[4]++;break;
   default:【2】;
  }
  【3】
  }
}

main()
{
  char str[N],ss[6]="AEIOU";
  int i;
  int bb[6];
  clrscr();
  printf("Input a string: \n");
  gets(str);
  printf("the string is: \n");
  puts(str);
  fun(str,bb);
  for(i=0;i<5;i++)
  printf("\n%c:%d",ss[i],bb[i]);
  printf("\nother:%d",bb[i]);
}

答案及评析:
【1】bb[i]=0 【2】bb[5]++ 【3】p++;
【解析】填空1:数组bb[6] 用来存放5个元音字母和其他字符的个数,在使用之前需要清零。
填空2:数组元素bb[5] 用来存放其他字符的个数,当指针p所指的字符不是元音字母时,则认为是其他字符,bb[5]加1。填空3:指针p指向字符串str,通过p自加1来移动指针,访问字符串中的所有字符。

2. 改错题
下列给定的程序中,函数fun()的功能是:计算并输出k以内最大的6个能被7或11整除的自然数之和。K的值由主函数传入,若k的值为500,则函数的值为2925。
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<stdio.h>
#include <conio.h>
int fun(int k)
{
  int m=0,mc=0, j;
/**********************found***********************/
  while(k>=2)&&(mc<6)
     {
/**********************found***********************/
      if((k%7=0)||(k%11=0))
        {
/**********************found***********************/  
          m=k;
          mc++;
        }
      k--;
     }
  return m;
}
main()
{
  clrscr();
  printf("%d\n ",fun(500));
}

答案及评析:
(1)错误:while(k>=2)&&(mc<6)
正确:while((k>=2)&&(mc<6))
(2)错误:if((k%7=0)||(k%11=0))
正确:if((k%7==0)||(k%11= =0))
(3)错误:m=k;
正确:m=m+k;
【解析】错误1:C语言规定while语句后的表达式两侧必须要有圆括号。
错误2:if语句的判断条件应用关系运算符,而不是赋值运算符。
错误3:根据题意,将满足条件的数求累加和。

3. 编程题
请编写一个函数fun(),它的功能是:将ss所指字符串中所有下标为偶数位置的字母转换为小写(若该位置上不是字母,则不转换)。
例如,若输入ABC4efG,则应输出aBc4efg。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
#include<string.h>
void fun(char *ss)
{


}
main()
{
  char tt[81];
  clrscr();
  printf("\nPlease enter an string within 80 characters:\n");
  gets(tt);
  printf("\n\nAfter changing, the string\n  \%s",tt);
  fun(tt);
  printf("\nbecomes\n \%s\n",tt);
}
答案及评析:
void fun(char *ss)
{
  int i;
  for(i=0;ss[i]!='\0';i++)       /*将ss所指字符串中所有下标为偶数位置的字母转换为小写*/
     if(i%2==0&&ss[i]>='A'&&ss[i]<='Z')  
        ss[i]=ss[i]+32;
}
【解析】从C语言的学习中我们知道,只要将小写字母减去32则转成大写字母,将大写字母加上32则转成小写字母。该程序是用if语句实现该功能转化的。

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

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

考试全流程