第一范文网 - 专业文章范例文档资料分享平台

c语言机试上级答案解析(41-60)

来源:用户分享 时间:2025/7/14 10:55:13 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

第四十一套

一、请补充函数fun,该函数的功能是:返回字符数组中指定字符的个数,指定字符从键盘输入。

注意:部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。 试题程序:

#include #include #define N 80

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 fun(char *a) { }

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 #include #include #define N 100 void main() { int num[N]; int I=-1; int max=0; system(\ printf(\ do { I++; printf(\ scanf(\【1】); max=【2】num[I]:max; }while (【3】) ; printf(\

}

答案:【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 #include #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所指的数

搜索更多关于: c语言机试上级答案解析(41-60) 的文档
c语言机试上级答案解析(41-60).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c15hpv9hamn4mu7525efs_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top