第四十一套
一、请补充函数fun,该函数的功能是:返回字符数组中指定字符的个数,指定字符从键盘输入。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。 试题程序:
#include
int fun (char s[],char ch) { int I=0,n=0; while(【1】) { if(【2】) n++; I++; } 【3】; }
void main() { int n; char str[N], ch; system(\ printf(\ gets(str); printf(\ scanf(\ n=fun(str, ch); printf(\
}
答案:【1】s[I]或者s[I]!= ′\\0′
【2】s[I]==ch 【3】return n
【解析】填空1:while循环的控制条件是当前参加比较的字符不为'\\0',即还没有到字符串的最后一个字符。填空2:如果当前字符等于指定字符,则统计个数的变量n加1。填空3:函数要求返回字符数组中指定字符的个数,所以函数要返回n。
二、下列给定程序中,函数fun的功能是:求三个数的最小公倍数。例如,给变量x 1、x2、x3分别输入15、11、2,则输出结果应当是330。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序:
#include
int fun(int x,int y,int z) {
int j,t,n,m;
/********found********/ j = 1;
t = m = n = 1;
/********found********/
while (t!=0 && m!=0 && n!=0) {
j = j+1; t = j%x; m = j%y;
n = j%z;
}
return j;
}
main ( ) {
int x1,x2,x3,j;
printf(\:\scanf(\
printf(\j = fun(x1,x2,x3);
printf(\:%d\\n\
}
答案:(1)错误:j=1
(2)错误:while ( t!=0 && m!=0 && n!=0)
正确:j=0;
正确:while ( t!=0 || m!=0 || n!=0)
【解析】(1)j 通过循环加1求出三个数的最小公倍数,当三个数都为1时,则最小公倍数为1。然而如果j初始为1时,那么计算最小公倍数时就从2开始了,所以改为j=0。(2)不需要同时都不为0,只要有一个不为0,就有最小公倍数了。
三、假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:删除字符串中所有的*号。在编写函数时,不得使用C语言中提供的字符串函数。
例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是ABCDEFG。 注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序:
#include
#include
void main() {
char s[81];
printf(\ gets(s); fun(s);
printf(\ puts(s);
}
答案:void fun(char *a)
{
int i,j=0;
for(i=0;a[i]!='\\0';i++) if(a[i]!='*')
a[j++]=a[i]; /*若不是要删除的字
符'*'则留下*/
a[j]='\\0'; /*最后加上字符串
结束符'\\0'*/
}
【解析】同样的问题我们在前面也碰到过,本题中是删除多余字符('*')。所以用循环从字符串的开始往后逐个进行比较,若不是要删除的字符(用if(a[i]!='*')来控制)则保留。注意下标变量j要从0开始,最后还要加上字符串结束符'\\0'。 第四十二套
一、请补充main函数,该函数的功能是:从键盘输入一组整数,使用条件表达式找出最大的整数。当
输入的整数为0时结束。
例如,输入1,2,3,5,4,0时,最大的数为5。 注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在main函数的横线上填入所编写出的若干表达式或语句。
试题程序:
#include
}
答案:【1】&num[I] 【2】max 【解析】填空1:注意掌握标准输入函数scanf()的调用格式,输入参数列表中变量前面要使用求址运算符&。填空2:注意掌握条件表达式的用法,当输入的数比最大值大时,则认为此输入的数为最大值,否则最大值不变。填空3:题目要求输入的整数以0结束,所以,当输入的数不为0时,继续do-while循环,否则终止循环。 二、下列给定程序中,函数fun的功能是:在字符串str中找出ASCⅡ码值最大的字符,将其放在第一个 位置上,并将该字符前的原字符向后顺序移动。例如,调用fun函数之前给字符串输入ABCDeFGH,调用后字符串中的内容为eABCDFGH。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include /*************found**************/ fun(char *p) { char max, *q;int i=0; max=p[i]; while (p[i]!=0) {if (max /*************found**************/ p = q +i;max=p[i]; } i++; } /*************found**************/ while(q {*q=*(q-1); q--; } p[0]=max; } void main() {char str[80]; printf(\ printf(\ puts(str); fun(str); printf(\ puts(str); printf(\ } 答案:(1)错误:fun(char *p) (2)错误:p=q+i; (3)错误:while(q 【解析】本题解答需要3个步骤: (1)找到字符串中ASCII码值最大的字符,并保存; (2)将该字符复制,并将该字符前面的字符串顺次后移; (3)将ASCII码值最大的字符赋给字符串的第1个字符。要找到ASCII码值最大的字符可以通过定义一个字符max,该字符初始时等于字符串的第1个字符,若字符串的下一个字符大于max,则将下一个字符赋给max,如此循环到字符尾,即可得到ASCII码值最大的字符,同时令指针q指向最大字符。之后对最大字符前面的子串顺次后移,可采用while语句实现。 此题需要熟练掌握和灵活应用C语言中字符与整型变量的关系以及字符串的操作。 三、请编写一个函数int fun(int *s,int t,int *k),用来求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。 例如,输入如下整数: 876 675 896 101 301 401 980 431 451 777 则输出结果为6,980。 注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: #include int fun(int *s,int t,int *k) { } void main() { int a[10]={ 876,675,896,101,301,401, 980,431,451,777},k; system(\ fun(a, 10, &k); printf(\ 正确:void fun(char *p) 正确:q=p+i; 正确:while(q>p) } 答案:int fun(int *s,int t,int *k) { int i; *k=0; /*k所指的数
相关推荐: