c语言机试上级答案解析81100.docx
- 文档编号:25107250
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:110
- 大小:54.67KB
c语言机试上级答案解析81100.docx
《c语言机试上级答案解析81100.docx》由会员分享,可在线阅读,更多相关《c语言机试上级答案解析81100.docx(110页珍藏版)》请在冰豆网上搜索。
c语言机试上级答案解析81100
第八十一套:
一、数组str全由大小写字母字符组成。
请补充函数fun,该函数的功能是:
把str中的字母转换成紧接着的下一个字母,如果原来的字母为'z'或'Z',则相应地转换成'a'或'A',结果仍保存在原数组中。
例如,输入"StudentZz",则输出"TuvefouAa"。
注意:
部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#include
#defineN80
voidfun(chars[])
{
intI;
for(I=0;【1】;I++)
{
if(s[I]=='z'||s[I]=='Z')
s[I]-=【2】;
else
s[I]+=【3】;
}
}
voidmain()
{
charstr[N];
system("CLS");
printf("\nInputastring:
\n");
gets(str);
printf("\n***originalstring***\n");
puts(str);
fun(str);
printf("\n***newstring***\n");
puts(str);
}
答案:
【1】s[I]!
=′\0′【2】25【3】1
【解析】填空1:
for循环的执行条件是当前字符不为′\0′,即还没有到字符串的最后一个字符'\0'。
填空2:
如果原来的字母是'z'或'Z',则要转换成'a'或'A'。
也就是把ASCII码减去25。
填空3:
除了字母'z'或'Z',其他字母都转换成下一个字母,所以把ASCII码加上1。
二、下列给定程序中,函数fun实现的功能是:
统计一个无符号整数中各位数字值为零的个数,通过形参传回主函数;并把该整数中各位上最大的数字值作为函数值返回。
例如,若输入无符号整数30800,则数字值为零的个数为3,各位上数字值最大的是8。
请改正函数fun中的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include
intfun(unsignedn,int*zero)
{
intcount=0,max=0,t;
do
{
t=n%10;
/********found********/
if(t=0)
count++;
if(max max=t; n=n/10; }while(n); /********found********/ zero=count; returnmax; } main() { unsignedn; intzero,max; printf("\nInputn(unsigned): "); scanf("%d",&n); max=fun(n,&zero); printf("\nTheresult: max=%dzero=%d\n",max,zero); } 答案: (1)错误: if(t=0)正确: if(t==0) (2)错误: zero=count正确: *zero=count; 【解析】 (1)根据题意,这里需要条件语句,不是付值语句。 (2)这里是指针付值的一个简单错误。 三、假定输入的字符串中只包含字母和*号。 请编写函数fun,它的功能是: 将字符串尾部的*号全部删除,前面和中间的*号不删除。 例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是****A*BC*DEF*G。 注意: 部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: #include #include voidfun(char*a) { } voidmain() { chars[81]; printf("Enterastring: \n"); gets(s); fun(s); printf("Thestringafterdeleted: \n"); puts(s); } 答案: voidfun(char*a) { while(*a! ='\0') a++; a--;/*指针a指向字符串的尾部*/ while(*a=='*') a--;/*指针a指向最后一个字母*/ *(a+1)='\0';/*在字符串最后加上结束标志位*/ } 【解析】前面我们遇到类似将字符串头部的′*′号全部删除的问题,其实解题思路是一样的。 第八十二套: 一、在主函数中,从键盘输入若干个数放入数组x中,用0结束输入但不计入数组。 下列给定程序中,函数fun的功能是: 输出数组元素中小于平均值的元素。 请补充函数fun。 例如: 数组中元素的值依次为1,2,2,12,5,15,则程序的运行结果为1,2,2,5。 注意: 部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。 试题程序: #include #include #include voidfun(【1】,intn) { doublesum=0.0; doubleaverage=0.0; intI=0; for(I=0;I 【2】; average=【3】; for(I=0;I if(x[I] { if(I%5==0) printf("\n"); printf("%d,",x[I]); } } voidmain() { intx[1000]; inti=0; system("CLS"); printf("\nPleaseentersomedata(end with0): "); do { scanf("%d",&x[i]); } while(x[i++]! =0); fun(x,i-1); } 答案: 【1】intx[]【2】sum+=x[I]【3】sum/n 【解析】填空1: 由main函数调用函数fun的格式可知,函数fun的第一个参数为整型数组。 填空2: 为了求出平均值,首先要对数组中的元素求累加和。 填空3: 数组中元素的累加和除以元素个数,即得到所有元素的平均值。 二、下列给定程序中,函数fun的功能是: 逐个比较a、b两个字符串对应位置上的字符,把ASCII值大或相等的字符依次存放存到c数组中,形成一个新的字符串。 例如,若a中的字符串为aBCDeFgH,b中的字符串为: ABcd,则c中的字符串应为: aBcdeFgH。 请改正程序中的错误,使它能得出正确的结果。 注意: 不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #include voidfun(char*p,char*q,char*c) { /********found*******/ intk=1; /********found********/ while(*p! =*q) { if(*p<*q) c[k]=*q; else c[k]=*p; if(*p) p++; if(*q) q++; k++; } } main() { chara[10]="aBCDeFgH",b[10]="ABcd",c[80]={'0'}; fun(a,b,c); printf("Thestringa: "); puts(b); printf("Thestringb: "); puts(b); printf("Theresult: "); puts(c); } 答案: (1)错误: intk=1正确: intk=0; (2)错误: while(*p! =*q)正确: while(*p||*q) 【解析】 (1)从程序中我们可以看出,使用k时是从字符串的首地址开始的,那么首先应把k设为0。 (2)while循环的条件是判断字符串是否到了末尾,while(*p! =*q)是不能起到以上作用的,所以应改为while(*p||*q)。 三、编写函数intfun(intlim,intaa[MAX]),该函数的功能是求出小于或等于lim的所有素数并放在aa数组中,该函数返回所求出的素数的个数。 注意: 部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: #include #include #include #defineMAX100 intfun(intlim,intaa[MAX]) { } voidmain() { intlimit,i,sum; intaa[MAX]; system("CLS"); printf("输入一个整数"); scanf("%d",&limit); sum=fun(limit,aa); for(i=0;i { if(i%10==0&&i! =0)/*每行输出10个数*/ printf("\n"); printf("%5d",aa[i]); } } 答案: intfun(intlim,intaa[MAX]) { inti,j,k=0; for(i=2;i<=lim;i++)/*求出小于或等于lim的全部素数*/ {for(j=2;j if(i%j==0)break; if(j>=i) aa[k++]=i;/*将求出的素数放入数组aa中*/ } returnk;/*返回所求出的素数的个数*/ } 【解析】在做这道题时,我们只需掌握素数的基本算法就可以了,一般表示素数的方法如下: for(j=2;j if(i%j==0)break; if(j>=i) 第八十三套: 一、请补充函数fun,该函数的功能是: 比较字符串str1和str2的大小,并返回比较的结果。 例如: 当str1="cdef",str2="cde"时,函数fun返回">"。 注意: 部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。 试题程序: #include #include #include #defineN80 char*fun(char*str1,char*str2) { char*p1=str1,*p2=str2; while(*p1&&*p2) { if(【1】) return"<"; if(【2】) return">"; p1++; p2++; } if(*p1==*p2) return"=="; if(*p1==【3】) return"<"; else return">"; } voidmain() { charstr1[N],str2[N]; system("CLS"); printf("Inputstr1: \n"); gets(str1); printf("Inputstr2: \n"); gets(str2); printf("\n*****theresult*****\n"); printf("\nstr1%sstr2",fun(str1,str2)); } 答案: 【1】*p1<*p2【2】*p1>*p2【3】′\0′ 【解析】填空1: 比较两个字符串的大小,是从第一个字符开始比较,如果两字符不相等,则由字符的大小决定字符串的大小;如果两字符相等,则继续比较下一个字符;如果所有字符都相等,则两字符串相等。 指针P1指向字符串str1,指针P2指向字符串str2,如果p1所指的字符小于p2所指的字符,则字符串str1小于字符串str2。 填空2: 如果p1所指的字符大于p2所指的字符,则字符串str1大于字符串str2。 填空3: 如果str1是str2的前一部分,则str1的所有字符都等于str2中的对应字符,而字符串结束标记符'\0'小于其他字符,所以,这里如果p1所指的字符等于'\0',则表示字符串str1小于字符串str2。 二、下列给定的程序中,函数fun的功能是: 用选择法对数组中的n个元素按从小到大的顺序进行排序。 请改正程序中的错误,使它能得出正确的结果。 注意: 不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #defineN20 voidfun(inta[],intn) {inti,j,t,p;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 上级 答案 解析 81100