二级C语言-92_真题(含答案与解析)-交互
二级C语言-92
(总分100, 做题时间90分钟) 一、程序填空题 1.
给定程序中,函数fun的功能是将形参s所指字符串中的所有字母字符顺序前移,其他字符顺序后移,处理后新字符串的首地址作为函数值返回。
例如,s所指字符串为asd123fgh543df,处理后新字符串为asdfghdf123543。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序如下。 *include<stdio.h> #include<stdlib.h> #include<string.h> char*fun(char*s)
{ int i,j,k,n;char*p,*t; n=strlen(s)+1;
t=(char*)malloc(n*sizeof(char)); p=(char*)malloc(n*sized(char)); j=0;k=0;
for(i=0;i<n;i++)
{ if(((s[i]>=\"a\")&&(s[i]<=\"z\"))||((s[i]>=\"A\")&&(s[i]<=\"Z\"))){ /***********found*********/ t[j]=______;j++;} else
{ p[k]=s[i];k++;} }
/**********found*********/
for(i=0;i<______;i++)t[j+i]=p[i]; /*******found***********/ t[j+k]=______; return t; }
main()
{ char s[80];
printf(\"Please input:\");scanf(\"%s\printf(\"\\nThe result is:%s\\n\} SSS_FILL 分值: 30
s[i] k \"\\0\"或0 [解析] 填空1:将字符串s中所有字母元素赋给数组t。 填空2:字符串中所有非字母元素放到字母元素后面,所以取值范围是0~k。 填空3:最后给字符串加入结束标识\"\\0\"。 二、程序改错题 1.
给定程序MODI1.C中函数fun的功能是将s所指字符串中最后一次出现的与t1所指字符串相同的子串替换成t2所指字符串,所形成的新串放在w所指的数组中。此处要求t1和t2所指字符串的长度相同。
例如,当s所指字符串中的内容为“abcdabfabc”,t1所指子串中的内容为“ab”,t2所指子串中的内容为:“99”时,结果,在w所指的数组中的内容应为:“abcdabf99c”。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 给定源程序如下。 #include<stdio.h> #include<string.h>
void fun(char*s,char*t1,char*t2,char *w) {
char*p,*r,*a=s; 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(\"\\nPlease enter string S:\"); scanf(\"%s\
printf(\"\\nPlease enter substring t1:\"); scanf(\"%s\
printf(\"\\nPlease enter substring t2:\"); scanf(\"%s\
if(stden(t1)==strlen(t2))
{ fun(s,t1,t2,w);
printf(\"\\nThe result is:%s\\n\}
else printf(\"\\nError:strlen(t1)!=strlen(t2)\\n\"); } SSS_FILL 分值: 30 while(*w)
if(*r==*p) [解析] 这里要判断的是值的真假,而不是地址,所以改为while(*w)。
C语言中关键字区分大小写,只需运行程序,就可以根据错误提示找到。 三、程序设计题 1.
函数fun的功能是将s所指字符串中ASCII值为奇数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。
例如,若s所指字符串中的内容为“ABCDEFG12345”,其中字符A的ASCII码值为奇数、…、字符1的ASCII码值也为奇数、…都应当删除,其他依此类推。最后t所指的数组中的内容应是“BDF24”。 注意:部分源程序存在文件PROG1.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入编写的若干语句。 给定源程序如下。 #include<stdio.h> #include<string.h>
void fun(char*s,char t[]) { }
main() {
char s[100],t[100];
printf(\"\\nPlease enter string S:\"); scanf(\"%s\fun(s,t);
printf(\"\\nThe result is:%s\\n\} SSS_TEXT_QUSTI 分值: 40 void fun(char*s,char t[]) {
int i,j=0,n; n=strlen(s);
for(i=0;i<n;i++) if(s[i]%2==0) { t[j]=s[i];
j++; }
t[j]=\"\\0\";
} [解析] 要删除ASCII码值为奇数的字符,也就是要保留ASCII码值为偶数的字符,由于最终是要求出剩余字符形成的新串,所以本题的算法是对原字符串从头到尾扫描,并找出ASCII码值为偶数的字符依次存入数组中。
1
因篇幅问题不能全部显示,请点此查看更多更全内容