计算机二级C语言上机真题(12)【附详解】
【真题1】 str是一个由数字和字母字符组成的字符串,由变量num传入字符串长
度。请补充函数fun(),该函数的功能是:把字符串str 中的数字字符转换成数字并
存放到整型数组bb 中,函数返回数组bb 的长度。 例如:
str=“Bcd123e456hui890”,结果为:123456890。 注意:部分源程序给出如
下。 请勿改动主函数main 和其他函数中的任何内容,仅在函数fun()的横线上填入
所编写的若干表达式或语句。 试题程序:
#include< stdio.h >
#define N 80
int bb[N];
int fun(char s[],int bb[],int num)
{
int i,n=0;
for(i=0;i< num;i++)
{
if(【1】)
{
bb[n]=【2】;
n++;
}
}
return 【3】;
}
main()
{ char str[N];
int num=0,n,i;
printf("Enter a string:\n");
gets(str);
while(str[num])
num++;
n=fun(str,bb,num);
printf("\nbb= ");
for(i=0;i< n;i++)
printf("%d",bb[i]);}
解析: 填空1:如果当前字符的ASCII码大于字符′0′的ASCII码,而小于字
符′9′的ASCII码,则说明当前字符是数字字符。填空2:将数字字符转换为数
字的方法是,用当前数字字符的ASCII码减去字符′0′的ASCII码。填空3:
题目要求函数返回数组bb的长度,而变量n 记录了数字字符的个数,也就是数
组bb的长度,所以函数应该返回n。
答案:【1】s[i] >= ′0′ &&s[i]< = ′9′【2】s[i]- ′0′【3】n
【真题2】 给定程序modi.c 中函数 fun 的功能是:将s 所指字符串的反序和正序
进行连接形成一个新串放在t 所指的数组中。 例如,当s 所指字符串的内容为
"ABCD"时, t 所指数组中的内容为"DCBAABCD"。 请改正程序中的错误,使它能
得出正确的结果。 注意:不要改动main 函数,
#include < conio.h >
#include < stdio.h >
#include < string.h >
void fun (char *s, char *t)
{ int i, d;
d = strlen(s);
/************found************/
for (i = 1; i< d; i++)
t[i] = s[d - 1 - i ];
for (i = 0; i< d; i++)
t[ d + i ] = s[i];
/************found************/
t[2*d] = '/0';
}
main()
{
char s[100], t[100];
clrscr();
printf("\nPlease enter string S:"); scanf("%s", s);
fun(s, t);
printf("\nThe result is: %s\n", t);
}
(2011年2月)
解析: 本题着重考察C 语言字符串的用法及常用算法。
C 语言中,字符串的起始位置是从0 开始,所以源程序中的"for (i = 1; i< d;
i++)"应改为"for(i=0;i< d;i++)"或相同作用的语句。
C 语言中,字符串的结束是以转义字符'\0'为标志的,所以源程序中的"t[2*d]
= '/0';"应改为"t[2*d]='\0';"。
【真题3】 请编写函数fun,函数的功能是:移动字符串中的内容,移动的规则如
下:把第1 到第m 个字符平移到字符串的最后,把第m+1 到最后的字符移到字符
串的前部。 例如,字符串中原有的内容为:ABCDEFGHIJK,m 的值为3,则移动
后字符串中的内容应该是:DEFGHIJKABC。 注意:部分源程序存在文件prog.c
中。 请勿改动主函数main 和其它函数中的任何内容,仅在函数fun 的花括号中填
入你编写的若干语句。
#include < stdio.h >
#include < string.h >
#define N 80
void fun(char *w, int m)
{……}
main()
{ char a[N]= "ABCDEFGHIJK";
int m;
printf("The original string:\n");puts(a);
printf("\n\nEnter m: ");scanf("%d",&m);
fun(a,m);
printf("\nThe string after moving:\n");puts(a);
printf("\n\n");
}
(2011年2月)
解析: 本题的考核点是一维数组的应用。
提示思路:本题要求把字符串中的第1到第m 个字符平移到字符串的最后,把
第m+1 到最后的字符移到字符串的前部,我们可以根据输入的m 的值,通过
for 循环语句,将m+1 到最后的字符之间的字符依次向前平移m 个存储单
元,本题中是通过语句w[j-1]=w[j];实现的,然后再将1 到m个字符逐一赋
给数组w[i-1],即w[i-1]=ch;。
void fun(char *w, int m)
{int i=0,x,j;
char ch;
for(j=0;w[j];j++)i++;
for(x=0;x< m;x++)
{ch=w[0];
for(j=1;j< i;j++) /*通过for 循环语句,将m+1到最后的字符之间的字符
依次向前平移m 个存储单元*/
{ w[j-1]=w[j];
}
w[i-1]=ch; /*将m+1 到最后的字符之间的字符依次向前平移m 个存储单元
*/
}
}
度。请补充函数fun(),该函数的功能是:把字符串str 中的数字字符转换成数字并
存放到整型数组bb 中,函数返回数组bb 的长度。 例如:
str=“Bcd123e456hui890”,结果为:123456890。 注意:部分源程序给出如
下。 请勿改动主函数main 和其他函数中的任何内容,仅在函数fun()的横线上填入
所编写的若干表达式或语句。 试题程序:
#include< stdio.h >
#define N 80
int bb[N];
int fun(char s[],int bb[],int num)
{
int i,n=0;
for(i=0;i< num;i++)
{
if(【1】)
{
bb[n]=【2】;
n++;
}
}
return 【3】;
}
main()
{ char str[N];
int num=0,n,i;
printf("Enter a string:\n");
gets(str);
while(str[num])
num++;
n=fun(str,bb,num);
printf("\nbb= ");
for(i=0;i< n;i++)
printf("%d",bb[i]);}
解析: 填空1:如果当前字符的ASCII码大于字符′0′的ASCII码,而小于字
符′9′的ASCII码,则说明当前字符是数字字符。填空2:将数字字符转换为数
字的方法是,用当前数字字符的ASCII码减去字符′0′的ASCII码。填空3:
题目要求函数返回数组bb的长度,而变量n 记录了数字字符的个数,也就是数
组bb的长度,所以函数应该返回n。
答案:【1】s[i] >= ′0′ &&s[i]< = ′9′【2】s[i]- ′0′【3】n
【真题2】 给定程序modi.c 中函数 fun 的功能是:将s 所指字符串的反序和正序
进行连接形成一个新串放在t 所指的数组中。 例如,当s 所指字符串的内容为
"ABCD"时, t 所指数组中的内容为"DCBAABCD"。 请改正程序中的错误,使它能
得出正确的结果。 注意:不要改动main 函数,
#include < conio.h >
#include < stdio.h >
#include < string.h >
void fun (char *s, char *t)
{ int i, d;
d = strlen(s);
/************found************/
for (i = 1; i< d; i++)
t[i] = s[d - 1 - i ];
for (i = 0; i< d; i++)
t[ d + i ] = s[i];
/************found************/
t[2*d] = '/0';
}
main()
{
char s[100], t[100];
clrscr();
printf("\nPlease enter string S:"); scanf("%s", s);
fun(s, t);
printf("\nThe result is: %s\n", t);
}
(2011年2月)
解析: 本题着重考察C 语言字符串的用法及常用算法。
C 语言中,字符串的起始位置是从0 开始,所以源程序中的"for (i = 1; i< d;
i++)"应改为"for(i=0;i< d;i++)"或相同作用的语句。
C 语言中,字符串的结束是以转义字符'\0'为标志的,所以源程序中的"t[2*d]
= '/0';"应改为"t[2*d]='\0';"。
【真题3】 请编写函数fun,函数的功能是:移动字符串中的内容,移动的规则如
下:把第1 到第m 个字符平移到字符串的最后,把第m+1 到最后的字符移到字符
串的前部。 例如,字符串中原有的内容为:ABCDEFGHIJK,m 的值为3,则移动
后字符串中的内容应该是:DEFGHIJKABC。 注意:部分源程序存在文件prog.c
中。 请勿改动主函数main 和其它函数中的任何内容,仅在函数fun 的花括号中填
入你编写的若干语句。
#include < stdio.h >
#include < string.h >
#define N 80
void fun(char *w, int m)
{……}
main()
{ char a[N]= "ABCDEFGHIJK";
int m;
printf("The original string:\n");puts(a);
printf("\n\nEnter m: ");scanf("%d",&m);
fun(a,m);
printf("\nThe string after moving:\n");puts(a);
printf("\n\n");
}
(2011年2月)
解析: 本题的考核点是一维数组的应用。
提示思路:本题要求把字符串中的第1到第m 个字符平移到字符串的最后,把
第m+1 到最后的字符移到字符串的前部,我们可以根据输入的m 的值,通过
for 循环语句,将m+1 到最后的字符之间的字符依次向前平移m 个存储单
元,本题中是通过语句w[j-1]=w[j];实现的,然后再将1 到m个字符逐一赋
给数组w[i-1],即w[i-1]=ch;。
void fun(char *w, int m)
{int i=0,x,j;
char ch;
for(j=0;w[j];j++)i++;
for(x=0;x< m;x++)
{ch=w[0];
for(j=1;j< i;j++) /*通过for 循环语句,将m+1到最后的字符之间的字符
依次向前平移m 个存储单元*/
{ w[j-1]=w[j];
}
w[i-1]=ch; /*将m+1 到最后的字符之间的字符依次向前平移m 个存储单元
*/
}
}