国家二级C语言机试(操作题)模拟试卷276
程序填空题
1.下列给定程序中,函数fun的功能是:求ss所指字符串数组中长度最短的字符串所在的行下标,作为函数值返回,并把其串长放在形参n所指的变量中。ss所指字符串数组中共有M个字符串,且串长小于N。
请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。
注意:部分源程序给出如下。
不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdio.h>
#include<string.h>
#define M 5
#define N 20
int fun(char(*ss)[N],int*n)
{ int i,k=0,len=N;
/*********found*********/
for(i=0;i<【1】;i++)
{ fen=strlen(ss[i]);
if(i==0) *n=len;
/*********found*********/
if(len【2】*n)
{*n=len;
k=i;
}
}
/*********found*********/
return(【3】);
}
main()
{ char ss.[M][N]={\\
(1)M
(2)<
(3)k
解析:本题考查:for循环语句的循环条件;if语句条件表达式;return语句完成函数值的返回。
填空1:题目指出ss所指字符串数组中共有M个字符串,所以for循环语句的循环条件是i<M。
填空2:要求求长度最短的字符串,*n中存放的是已知字符串中长度最短的字符串的长度,将当前字符串长度与*n比较,若小于*n,则将该长度值赋给*n,因此if语句的条件表达式为len<*n。
填空3:将最短字符串的行下标作为函数值返回,变量k存储行下标的值。
程序修改题
2.下列给定程序中,函数fun的功能是:将s所指字符串中最后一次出现的与t1所指字符串相同的子串替换成t2所指字符串,所形成的新串放在w所指的数组中。要求t1和t2所指字符串的长度相同。
例如,当S所指字符串中的内容为“abcdabfabc”,t1所指串中的内容为“ab”,t2所指子串中的内容为“99”时,结果在w所指的数组中的内容应为“abcdabt99c”。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include<conio.h>
#include<stdio.h>
#include<string.h>
void fun(char *s,char t1,char t2,char w)
{
char*P,*r,*a;
strcpy(w,S);
/*********found*********/
while(w)
{
p=W;
r=t1;
while(*r)
/*********found*********/
IF(*r==*P)
{
r++;
p++;
}
else
{
break;
}
if(*r==’\0’)
a=w;
w++;
}
r=t2;
while(*r)
{
*a=*r;
a++;
r++;
}
}
main()
{
char s[100],t1[100],t2[100],W[100];
printf(\\
(1)while(*w)
(2)if(*r==*p)
解析:(1)此处要判断的是值的真假,而不是地址,所以改为while(*w)。
(2)c语言中关键字区分大小写,只需运行程序,就可以根据错误提示找到。
程序设计题
3.m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平均分的人数作为函数值返回,将低于平均分的分数放在below所指的数组中。
例如,当score数组中的数据为10、20、30、40、50、60、70、80、90时,函数返回的人数应该是4,below中的数据应为10、20、30、40。
注意:部分源程序在文件PROG1.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int fun(int score[],int m,int below[])
{
}
void main()
{
FILE*wf;
int i,n,below[9];
int score[9]={10,20,30,40,50,60,70,80,90};
system(\\
int fun(int score[],int m,int below[])
{
int i,j=0 ;
float av=0.0;
for(i=0;i<m;i++)
av=av+score[i]/m;/*求平均值*/
for(i=0 ;i<m;i++)
if(score[i]<av)/*如果分数低于平均分,则将此分数放入below数组中*/
below[j++]=score[i];
return j;/*返回低于平均分的人数*/
}
解析:要计算低于平均分的人数,首先应该求出平均分,然后通过for循环语句和if条件语句找出低于平均分的分数。该题第1个循环的作用是求出平均分aV,第2个循环的作用是找出低于平均分的成绩记录并存入below数组中。
本文档预览:3600字符,共3369字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载