计算机二级C语言上机真题(22)【附详解】
【真题1】 下列给定程序中,函数fun()的功能是:将字符串p 中所有字符复制到
字符串b 中,要求每复制3 个字符之后插入一个空格。例如,在调用fun()函数之前
给字符串a 输入ABCDEFGHIJK,调用函数之后,字符串b 中的内容则为ABC
DEF GHI JK。
试题程序:
#include < stdio.h >void fun(char *p,char *b)
{ int i, k=0;
while(__1__)
{ i=0;
while(__2__&&*p)
{
b[k]=*p;
k++;p++;i++;
}
if(*p)
{ b[__3__]= ' ';}
}
b[k]= '\0';
}
main()
{ char a[80],b[80];
printf("Enter a string: "); gets(a);
printf("The original string: "); puts(a);
fun(a,b);
printf("\nThe string after insert space: ");
puts(b);
printf("\n\n ");
}
(2011年2月)
解析: 填空1:根据题目的意思,这里应该是利用wile循环处理字符串,因为
字符串的结束标志\0可以作为循环结束的判断条件,所以C 语言中很多情况都
这样使用,考生要注意。
填空2:根据题目的意思,此处是对于写入的字符个数进行计数,如果到3就
应该结束这个循环插入空格,所以应该和是否到达串结尾为逻辑与的关系。
填空3:由算法可以看出,此处是在输出结果中置入空格字符,注意插入空格后
指针应该后移。
答案:【1】*p 【2】i< 3 【3】k++
【真题2】 下列给定程序中,函数fun()的功能是逐个比较a,b 两个字符串对应位
置中的字符,把ASCII值小或相等的字符依次存放到c 数组中,形成一个新的字符
串。
例如:a中的字符串为fshADfg,b 中的字符串为sdAEdi,则c 中的字符串应为
fdAADf。
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main 函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include < stdio.h >#include < string.h >void fun(char *p,char *q,char
*c)
{ int k=0;
while(*p||*q)
/**********************found***********************/
{ if (*p< =*q)
c[k]=*q;
else c[k]=*p;
if(*p) p++;
if(*q) q++ ;
/**********************found***********************/
k++
}
}
main()
{ char a[10]="fshADfg",b[10]="sdAEdi",c[80]={'\0'};
fun(a,b,c);
printf("The string a:"); puts(a);
printf("The string b:"); puts(b);
printf("The result :"); puts(c);
}
(2011年2月)
解析: (1)错误: { if (*p< =*q)
正确:{ if (*p >=*q)
(2)错误:k++
正确:k++;
错误1:依题意,把ASCII值小或相等的字符存放到c 数组中,故if语句的关
系运算符应为" >="。
错误2:C语言规定,每个语句要用分号结束。
【真题3】 编写函数fun,它的功是计算:
s=(In(1)+In(2)+In(3)+……+In(m))^0.5,s作为函数值返回。在C语言中可
调用log(n)函数求In(n)。log 函数的引用说明是:double log(double x)。
例如,若m 的值为:20,fun 函数值为:6.506583。
注意:部分源程序存在文件prog.c 中。
请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编
写的若干语句。
#include < conio.h >#include < math.h >#include < stdio.h >double
fun( int m)
{……}
main()
{ clrscr();
printf("%f\n",fun(20));
}
(2011年2月)
解析: 本题的考核点是公式算法。
解题思路:从1 至m累计log(i)的和值,最后求它的平方根。
本评析仅供参考。
double fun( int m)
{ int i;
double s=0;
for (i=1;i< =m;i++) /*求In(1)~In(m)的和*/
s=s+log(i);
s=sqrt(s); /*求s的平方根*/
return (s);
}
字符串b 中,要求每复制3 个字符之后插入一个空格。例如,在调用fun()函数之前
给字符串a 输入ABCDEFGHIJK,调用函数之后,字符串b 中的内容则为ABC
DEF GHI JK。
试题程序:
#include < stdio.h >void fun(char *p,char *b)
{ int i, k=0;
while(__1__)
{ i=0;
while(__2__&&*p)
{
b[k]=*p;
k++;p++;i++;
}
if(*p)
{ b[__3__]= ' ';}
}
b[k]= '\0';
}
main()
{ char a[80],b[80];
printf("Enter a string: "); gets(a);
printf("The original string: "); puts(a);
fun(a,b);
printf("\nThe string after insert space: ");
puts(b);
printf("\n\n ");
}
(2011年2月)
解析: 填空1:根据题目的意思,这里应该是利用wile循环处理字符串,因为
字符串的结束标志\0可以作为循环结束的判断条件,所以C 语言中很多情况都
这样使用,考生要注意。
填空2:根据题目的意思,此处是对于写入的字符个数进行计数,如果到3就
应该结束这个循环插入空格,所以应该和是否到达串结尾为逻辑与的关系。
填空3:由算法可以看出,此处是在输出结果中置入空格字符,注意插入空格后
指针应该后移。
答案:【1】*p 【2】i< 3 【3】k++
【真题2】 下列给定程序中,函数fun()的功能是逐个比较a,b 两个字符串对应位
置中的字符,把ASCII值小或相等的字符依次存放到c 数组中,形成一个新的字符
串。
例如:a中的字符串为fshADfg,b 中的字符串为sdAEdi,则c 中的字符串应为
fdAADf。
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main 函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include < stdio.h >#include < string.h >void fun(char *p,char *q,char
*c)
{ int k=0;
while(*p||*q)
/**********************found***********************/
{ if (*p< =*q)
c[k]=*q;
else c[k]=*p;
if(*p) p++;
if(*q) q++ ;
/**********************found***********************/
k++
}
}
main()
{ char a[10]="fshADfg",b[10]="sdAEdi",c[80]={'\0'};
fun(a,b,c);
printf("The string a:"); puts(a);
printf("The string b:"); puts(b);
printf("The result :"); puts(c);
}
(2011年2月)
解析: (1)错误: { if (*p< =*q)
正确:{ if (*p >=*q)
(2)错误:k++
正确:k++;
错误1:依题意,把ASCII值小或相等的字符存放到c 数组中,故if语句的关
系运算符应为" >="。
错误2:C语言规定,每个语句要用分号结束。
【真题3】 编写函数fun,它的功是计算:
s=(In(1)+In(2)+In(3)+……+In(m))^0.5,s作为函数值返回。在C语言中可
调用log(n)函数求In(n)。log 函数的引用说明是:double log(double x)。
例如,若m 的值为:20,fun 函数值为:6.506583。
注意:部分源程序存在文件prog.c 中。
请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编
写的若干语句。
#include < conio.h >#include < math.h >#include < stdio.h >double
fun( int m)
{……}
main()
{ clrscr();
printf("%f\n",fun(20));
}
(2011年2月)
解析: 本题的考核点是公式算法。
解题思路:从1 至m累计log(i)的和值,最后求它的平方根。
本评析仅供参考。
double fun( int m)
{ int i;
double s=0;
for (i=1;i< =m;i++) /*求In(1)~In(m)的和*/
s=s+log(i);
s=sqrt(s); /*求s的平方根*/
return (s);
}