c语言真题1.docx
- 文档编号:8192925
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:10
- 大小:21.36KB
c语言真题1.docx
《c语言真题1.docx》由会员分享,可在线阅读,更多相关《c语言真题1.docx(10页珍藏版)》请在冰豆网上搜索。
c语言真题1
真题1】函数fun的功能是进行数字字符转换。
若形参ch中是数字字符'0'~
'9',则'0'转换成'9','1'转换成'8','2'转换成'7',……,'9'转换成'0';若是其它字符
则保持不变;并将转换后的结果作为函数值返回。
请在程序的下划线处填入正确的
内容并把下划线删除,使程序得出正确的结果。
注意:
源程序存在考生文件夹下的
BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
#include
/**********found**********/
___【1】___fun(charch)
{
/**********found**********/
if(ch>='0'&&___【2】___)
/**********found**********/
return'9'-(ch-___【3】___);
returnch;
}
main()
{charc1,c2;
printf("\nTheresult:
\n");
c1='2';c2=fun(c1);
printf("c1=%cc2=%c\n",c1,c2);
c1='8';c2=fun(c1);
printf("c1=%cc2=%c\n",c1,c2);
c1='a';c2=fun(c1);
printf("c1=%cc2=%c\n",c1,c2);
}
解析:
由主函数中的语句"c2=fun(c1);"可知:
函数fun的返回类型为字符,
故第一个空应填char;在题面中要求对数字字符进行转换,故第二空的目的是
判断字符ch是否为一数字字符,即ch是否在'0'~'9'之间所以第二个空应填
ch<='9'或其等效形式;第三空处语句的目的是返回转换后的结果,即返回一字
符,其所对应的数字与转换前字符所对应的数字的和为9,故第三空应填'0'或
其等效形式。
答案:
【1】char【2】ch<='9'【3】'0'
【真题2】给定程序modi.c中函数fun的功能是:
首先将大写字母转换为对应小
写字母;若小写字母为a~u,则将其转换为其后的第5个字母;若小写字母为v~
z,使其值减21。
转换后的小写字母作为函数值返回。
例如,若形参是字母A,则转
换为小写字母f;若形参是字母W,则转换为小写字母b。
请改正函数fun中指定
部位的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或
删行,也不得更改程序的结构!
#include
#include
charfun(charc)
{if(c>='A'&&c<='Z')
/**************found**************/
c=c-32;
if(c>='a'&&c<='u')
/**************found**************/
c=c-5;
elseif(c>='v'&&c<='z')
c=c-21;
returnc;
}
main()
{charc1,c2;
printf("\nEnteraletter(A-Z):
");c1=getchar();
if(isupper(c1))
{c2=fun(c1);
printf("\n\nTheletter'%c'changeto'%c'\n",c1,c2);
}
elseprintf("\nEnter(A-Z)!
\n");
}
(2011年2月)
解析:
本题着重考察考生对C语言中一些简单算法的掌握情况。
提示思路:
先判断输入的字母是否是大写字母,若是大写字母,将其转化为
相应的小写字母,方法是该大写字母对应的ASCII码值加上32就是其小写字
母的ASCII码值,再判断该小写字母是否是a~u,若是转化其后的第5个字
母,即c=c+5;。
若该小写字母是v~z,则将其ACSII码值减去21,转换后
的小写字母作为函数值返回。
本题中的第一个错误:
C语言中,大写字母的ASCII码值比相应的小写字母
的ASCII码值小32,所以程序中语句"c=c-32;"应改为"c=c+32;"或相同作
用的语句。
本题中的第二个错误:
C语言中,字母从a~z或A~Z的ASCII码值是依次递
增的,所以将其转换为其后的第5个字母应该是"c=c+5;"或相同作用的语句。
【真题3】请编写一个函数fun(char*s),函数的功能是把字符串中所有的字母改
写在该字母的下一个字母,最后一个字母z改写成字母a。
大写字母仍为大写字母,
小写字母仍为小写字母,其他的字符不变。
例如,原有的字符串为:
Mn.123xyZ,
则调用该函数后,串中的内容为:
No.123yzA。
注意:
部分源程序存在文件prog.c
中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填
入你编写的若干语句。
#include
#include
#include
#include
#defineN81
fun(char*s)
{……}
main()
{chara[N];
clrscr();
printf("Enterastring:
");gets(a);
printf("Theoriginalstringis:
");puts(a);
fun(a);
printf("Thestringaftermodified:
");
puts(a);
}
(2011年2月)
解析:
本题的考核点是c语言中的循环语句和条件判断语句的使用。
提示
思路:
从本题的要求来看,我们应该采用外循环内条件判断的算法。
本参考函
数使用for循环从头到尾扫描字符串,并在扫描时进行条件判断,对'z','Z'和
其它字符进行不同的处理。
fun(char*s)
{inti,length;
length=strlen(s);/*求得字符串s的长度*/
for(i=0;i {if(! ((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&& s[i]<='Z'))) /*判断字符s[i]是否为大小写的英文字母*/ continue; switch(s[i]){ case'z': /*假如s[i]为小写字母z,则改写成小写字母a*/ s[i]='a';break; case'Z': /*假如s[i]为大写字母Z,则改写成大写字母A*/ s[i]='A';break; default: /*假如s[i]为除大小写字母Z和z以外字母,则直接改写成该 字母的下一个字母*/ s[i]=s[i]+1;break; } } } 真题1】给定程序的功能是将大写字母转换为对应小写字母之后的第五个字母; 若小写字母为v~z,使小写字母的值减21。 转换后的小写字母作为函数值返回。 例 如,若形参是字母A,则转换为小写字母f;若形参是字母W,则转换为小写字母 b。 #include #include charfun(charc) {if(c>='A'&&c<='Z') c=c+32; if(c>='a'&&c<='u') /**************found**************/ c=c+__【1】__; elseif(c>='v'&&c<='z') c=c-21; /**************found**************/ return__【2】__; } main() {charc1,c2; printf("\nEnteraletter(A-Z): ");c1=getchar(); if(isupper(c1)){ /**************found**************/ c2=fun(__【3】__); printf("\n\nTheletter'%c'changeto'%c'\n", c1,c2); } elseprintf("\nEnter(A-Z)! \n"); } 解析: 本题着重考察考生对C语言中一些简单算法的掌握情况。 先判断输入的字母是否是大写字母,若是大写字母,将其转化为相应的小写 字母,方法是该大写字母对应的ASCII码值加上32就是其小写字母的ASCII 码值,再判断该小写字母是否是a~u,若是转化为其后的第5个字母。 若该小 写字母是v~z,则将其ACSII码值减去21,转换后的小写字母作为函数值返 回。 题中第一个空填"5": C语言中,字母从a~z或A~Z的ASCII码值是依次 递增的,所以将其转换为其后的第5个字母应该是"c=c+5;"或相同作用的语 句。 题中第二个空填"c": 通过return语句将被调用函数中c的值带回主调函数 中去。 题中第三个空填"c1": 此句是调用fun()函数,括弧中是其实际参数。 答案: 【1】5【2】c【3】c1疑难解答 【真题2】给定程序modi.c中,函数fun的功能是: 求k! (k<13),所求阶乘的值 作为函数值返回。 例如: 若k=10,则应输出: 3628800。 请改正程序中的错误, 使它能得出正确的结果。 注意: 不要改动main函数, #include #include longfun(intk) { /************found************/ ifk>0 return(k*fun(k-1)); /************found************/ elseif(k=0) return1L; } main() {intk=10; clrscr(); printf("%d! =%ld\n",k,fun(k)); } 解析: 本题的考核点是C语言的一些基本常识和if语句的使用。 C语言提供了三种形式的if语句: 1.if(表达式)语句 2.if(表达式)语句1 else语句2 3.if(表达式1)语句1 elseif(表达式2)语句2 elseif(表达式3)语句3 : elseif(表达式m)语句m else语句n 所以,综上所述"ifk>0"应改为"if(k>0)"或相同作用的语句。 C语言中"="表示赋值,而"=="才表示"等于",由题意看出,"elseif(k=0) "应为"elseif(k==0)"或相同作用的语句。 【真题3】请编写函数fun,函数的功能是: 在字符串中的所有数字字符前加一个$ 字符。 例如,输入A1B23CD45,则输出为: A$1B$2$3CD$4$5。 注意: 部分源 程序存在文件prog.c中。 请勿改动主函数main和其他函数中的任何内容,仅在函 数fun的花括号中填入你编写的若干语句。 #include voidfun(char*s) {……} main() {chars[80]; printf("Enterastring: ");scanf("%s",s); fun(s); printf("Theresult: %s\n",s); } (2011年2月) 解析: 本题的考核点是在字符串中的数字之前加一$字符的算法。 提示思路: 通过一中间数组和一循环来实现。 方法是: 从字符串的首字符开始,判断字符 是否为数字,若是,将字符$和数字字符赋给中间数组,反之,将字符直接赋给 中间数组,直至字符串尾,最后将中间数组赋给原字符串。 voidfun(char*s) {charp[80]; inti=0,j=0; while(s[i]! ='\0')/*假如s[i]不为字符串结束符,则继续循环*/ {if((s[i]>='0')&&(s[i]<='9')) {p[j]='$';p[j+1]=s[i];j=j+2;} /*假如s[i]为数字字符,则将$置于p[j]中,数字字符置于p[j+1] 中*/ else{p[j]=s[i];j=j+1;}/*否则将s[i]置于p[j]中*/ i++; } p[j]='\0'; strcpy(s,p);/*将p数组中的字符复制到s数组中*/ } 【真题1】下列给定程序中,函数fun()的功能是: 用递归算法计算斐波拉契级数列 中第n项的值。 从第一项起,斐波拉契级数序列为1,1,2,3,5,8,13, 21,……,例如,若给n输入7,该项的斐波拉契级数值为13。 #include longfun(intg) {switch(g){ case0: return0; case1: __【1】__: return1; } return(__【2】__); } main() {longfib;intn; printf("Inputn: ");scanf("%d",__【3】__); printf("n=%d\n",n); fib=fun(n); printf("fib=%d\n\n",fib); } (2011年2月) 解析: 填空1: 根据题目的意思,这里应该是对于值为1和2的时候的处理, 注意case语句常量后应用的是冒号,而且不同的case对应同一个值可以连续 写(像题目中那样)。 填空2: 根据题目的意思,此处是求值的递归部分,由递推公式可以很容易的得 到答案的形式,对于这种简单的递归考生一定要掌握。 填空3: 由算法可以看出,此处是输入数列的项数n,使用了scanf函数,其参 数应该是变量的地址,即使用符号"&"。 答案: 【1】case2【2】fun(g-1)+fun(g-2)【3】&n 【真题2】给定程序modi.c中,函数fun的功能是: 按以下递归公式求函数值 fun(n)=10(n=1),fun(n)=fun(n-1)+2(n>1)例如,当给n输入5时,函数 值为18;当给n输入3时,函数值为14。 请改正程序中的错误,使它能得出正确 结果。 注意: 不要改动main函数。 #include fun(n) {intc; /************found************/ if(n=1) c=10; else c=fun(n-1)+2; return(c); } main() {intn; printf("Entern: ");scanf("%d",&n); printf("Theresult: %d\n\n",fun(n)); } 解析: 本题着重考察考生对递归算法的掌握情况。 在C语言中,"="是指赋值号,要判断表达式相等,需用"==",所以程序中的 语句"if(n=1)"应改为"if(n==1)"或相同作用的语句。 【真题3】规定输入的字符串中只包含字母和*号。 请编写函数fun,它的功能是: 使字符串最前面连续的*号不得多于n个;若多于n个,则删除多余的*号;若少于 或等于n个,则什么也不做,字符串中间和尾部的*号不删除。 例如,字符串中的内 容为: *******A*BC*DEF*G****,若n的值为4,删除后,字符串中的内容应 当是: ****A*BC*DEF*G****;若n的值为8,则字符串中的内容仍为: *******A*BC*DEF*G****。 n的值在主函数中输入。 在编写函数时,不得使用 C语言提供的字符串函数。 注意: 部分源程序存在文件prog.c中。 请勿改动主函 数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语 句。 #include #include voidfun(char*a,intn) {……} main() {chars[81];intn; printf("Enterastring: \n");gets(s); printf("Entern: ");scanf("%d",&n); fun(s,n); printf("Thestringafterdeleted: \n");puts(s); } (2011年2月) 解析: 本题的考核点是删除字符串中字符的算法。 解题思路: 先统计字符串前 连续的*号个数,与指定的个数进行判断,若小于等于指定的数,什么也不做, 若大于指定的数,则删除多余的*,删除的方法是: 用一个循环先生成指定个数 个*放入到一字符串中,再将从原串中非*字符开始至字符串尾的字符追加其 后,最后用新串覆盖原串。 本评析仅供参考。 voidfun(char*a,intn) {charb[81]; inti=0,j=0,s=0,k; while(a[i]=='*'){s++;i++;}/*统计字符串前连续的*号个数 */ if(s>n)/*判断字符串前连续的*号个数是否大于n*/ {for(k=0;k {b[j]='*';j++;} while(a[i])/*这里的i在前面*时已经移不是*字符的位置*/ {b[j]=a[i];j++;i++;} b[j]='\0';i=0;j=0; while(b[j])/*将字符串b中的所有字符复制到a字符串中覆盖 原串*/ {a[i]=b[j];i++;j++;} a[i]='\0'; } } 【真题1】下列给定程序中,函数fun()的功能是: 应用递归算法求某数a的平方 根。 求平方根的迭代公式如下: x1=(x0+a/x0)/2)。 例如,2的平方根为 1.414214。 #include #include __【1】__fun(doublea,doublex0) {doublex1,y; __【2】__; if(fabs(x1-x0)>=0.00001) __【3】__; elsey=x1; returny; } main() {doublex; printf("Enterx: ");scanf("%lf",&x); printf("Thesquarerootof%lfis%1f\n",x, fun(x,1.0)); } (2011年2月) 解析: 填空1: 这里要问的是函数的类型,由主函数main()对函数的调用可以 得到函数的类型是double型的,当然也可以由函数的返回值语句得到。 填空2: 我们看到在下一条语句中已经开始对变量x1的值进行比较了,所以这 里要对x1进行赋值,由题意可知x1=(x0+a/x0)/2.0。 填空3: 用C语言求平方根的方法一般有两种经典的算法,它们分别是迭代法 和递归法,本题要求用递归法。 该程序采用了if语句,程序的含义是当迭代结 果差小于误差时进行循环。 答案: 【1】double【2】x1=(x0+a/x0)/2.0【3】y=fun(a,x1) 【真题2】给定程序modi.c中,函数fun的功能是: 判断字符ch是否与str字符 串中的某个字符相同;若相同,什么也不做,若不同,则将其插在串的最后。 请改 正程序中的错误,使它能得出正确结果。 注意: 不要改动main函数, #include #include #include /************found************/ voidfun(charstr,charch) {while(*str&&*str! =ch)str++; /************found************/ if(*str==ch) {str[0]=ch; /************found************/ str[1]='0'; } } main() {chars[81],c; clrscr(); printf("\nPleaseenterastring: \n");gets(s); printf("\nPleaseenterthecharactertosearch: "); c=getchar(); fun(s,c); printf("\nTheresultis%s\n",s); } (2011年2月) 解析: 本题着重考察考生对C语言中函数形式参数的用法以及一些简单算法的 掌握情况。 从主函数中可以看出,str是一个字符串,因此在fun函数的参数表中应将str 改为字符指针或字符数组,即把"voidfun(charstr,charch)"语句改为 "voidfun(char*str,charch)"或相同作用的语句。 从题义得知,若字符ch与字符串str中的某个字符相同,什么也不做;若不 同,则插在str的最后。 因此fun函数中先设置了一个循环从字符串str中寻找 字符ch,如果找到则中断循环并保留字符ch的地址,否则一直循环到串尾。 因此通过判断*str的内容即可判断是否已找到字符ch,而原程序中的"if(*str ==ch)"语句与题义相反,应改为"if(*str! =ch)"或相同作用的语句。 如果没有找到字符ch,则在while循环后str指针指向字符串结束符0x00, 此时应将字符ch写入这里并在下一地址写入一个字符串结束符0x00,所以原 程序中的"str[1]='0';"语句是没有意义的,应改为"str[1]='\0';"或具有相 同作用的语句。 【真题3】规定输入的字符串中只包含字母和*号。 请编写函数fun,它的功能是: 将字符串前面连续的*号全部删除,中间和尾部的*号不删除。 例如,字符串中的内 容为: *******A*BC*DEF*G****,删除后,字符串中的内容应当是: A*BC*DEF*G****。 在编写函数时,不得使用C语言提供的字符串函数。 注意: 部分源程序存在文件prog.c中。 请勿改动主函数main和其他函数中的任何内容, 仅在函数fun的花括号中填入你编写的若干语句。 #include #include voidfun(char*a) {……} main() {chars[81]; printf("Enterastring: \n");
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言