国家二级C语言机试(操作题)模拟试卷263
程序填空题
1.下列给定程序中,函数fun的功能是:把形参a所指数组中的偶数按原顺序依次存放到a[0]、a[1]、a[2]…中,把奇数从数组中删除,偶数的个数通过函数值返回。
例如,若a所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7,删除奇数后,a所指数组中的数据为:4、2、6、8,返回值为4。
请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。
注意:部分源程序给出如下。
不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdio.h>
#define N 9
int fun(int a[],int n)
{ int i,j;
j=0;
for(i=0;i<n;i++)
/*********found*********/
if(【1】==0){
/*********found*********/
【2】=a[i];j++;
}
/*********found*********/
return【3】;
}
main()
{ int b[N]={9,1,4,2,3,6,5,8,7),i,n;
printf(\\
(1)a[i]%2
(2)a[j]
(3)j
解析:填空1:if语句条件表达式,判断数组元素是否为偶数,对2求余,结果为0,则为偶数;结果为1则为奇数。
填空2:如果该数组元素是偶数,则将其值保存。
填空3:最后按要求将偶数个数通过return语句返回给main函数。
程序修改题
2.下列给定程序中,fun函数的功能是:分别统计字符串中大写字母和小写字母的个数。
例如,给字符串s输入:AAaaBBbb123CCcccd,则应输出:
upper=6,lower=8。请改正程序中的错误,使它得出正确的结果。
注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
1 #include<stdio.h>
2 /*********found*********/
3 void fun(char*s,int a,int b)
4 {
5 while(*S)
6 { if(*S>=’A’&&*s<=’z’)
7 /*********found*********/
8 * a=a+1;
9 if(*s>=’a’&&*s<=’z’)
10 /*********found*********/
11 *b=b+1;
12 s++;
13 }
14 }
15 main()
16 { char S[100];int upper=0,
17 lower=0;
18 printf(\\
(1)void fun(char*s,int*a,int*b)
(2)*a=*a+1;
(3)*b=*b+1;
解析:(1)由主函数中调用fun函数的语句fun(s,&upper,&lower)可知,函数的后两个变量为指针的形式,所以用*a和*b。
(2)*a的作用是用来记录大写字母的个数,此处的作用是对*a累加1,所以此处应改为*a=*a+1。
(3)*b的作用是用来记录小写字母的个数,此处的作用是对*b累加1,所以此处应改为*b=*b+1。
程序设计题
3.请编写函数fun,其功能是:将放在字符串数组中的M个字符串(每串的长度不超过N),按顺序合并组成一个新的字符串。
例如,若字符串数组中的M个字符串为{\\
void fun(char a[M][N],char*b)
{
int i,j,k=0;
for(i=0;i<M;i++) /*将字符串数组中的M个字符串,按顺序存入一个新的字符串*/
for(j=0;a[i][j]!=’\0’;j++)
b[k++]=a[i][j];
b[k]=’\0’; /*在字符串最后加上字符串结束标记符*/
}
解析:本题考查:字符串连接操作。本程序中第1个for循环的作用是对二维数组行的控制,第2个循环的作用是从同一行中取出字符并存放到一维数组b中,语句是b[k++]=a[i][j];。
本文档预览:3600字符,共2407字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载