计算机二级C语言上机真题(37)【附详解】
【真题1】 函数fun 的功能是:将字符串tt 中的小写字母改为对应的大写字母,其
它字符不变。例如,若输入"Ab,cD",则输出"AB,CD"。
#include < conio.h >#include < stdio.h >#include < string.h >char
*fun(char tt[])
{ int i;
for(i=0;tt[i];i++)
/************found************/
if(('a'< =tt[i])&&(tt[i]< =__1___))
/************found************/
tt[i]-=__2____;
return(tt);
}
main()
{
char tt[81];
printf("\nPlease enter a string:");
gets(tt);
printf("\nThe result string is:\n%s",fun(tt));
}
(2011年2月)
解析: 本题着重考察考生对C 语言中一些简单算法的掌握情况。
答案:【1】'z' 【2】32
【真题2】 下列给定程序中,函数fun()的功能是根据整型形参m,计算如下公式
的值。
y=1-1/(2×2)+1/(3×3)-1/(4×4)+…+(-1)(m+1)/(m×m)
例如:m 中的值为5,则应输出0.838611。
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main 函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include < conio.h >#include < stdio.h >double fun(int m)
{ double y=1.0;
/**********************found***********************/
int j=1;
int i;
for(i=2; i< =m; i++)
{
j=-1*j;
/**********************found***********************/
y+=1/(i * i);
}
return(y);
}
main()
{ int n=5;
clrscr();
printf("\nThe result is %lf\n" ,fun(n));
}
(2011年2月)
解析: (1)错误:int j=1; 正确:double j=1.0;
(2)错误:y+=1/(i * i); 正确:y+=j/(i * i);
错误1:为了做后面的除法运算,j要定义为实型数,否则除得的结果将为整
数。
错误2:题中公式是加减相间的运算,通过j来实现。
【真题3】 请编写函数fun,其功能是:计算并输出给定10 个数的方差:
┌ 1 10 ┐0.5
S=│ ─ Σ (Xk-X')^2│
└ 10 k=1 ┘
1 10
其中X'=─ Σ Xk
10 k=1
例如,给定的10 个数为95.0、89.0、76.0、65.0、88.0、72.0、85.0、81.0、
90.0、56.0,输出为s=11.730729。
注意:部分源程序在文件prog.c 中。
请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编
写的若干语句。
#include < stdio.h >#include < math.h >double fun(double x[10])
{……}
main()
{ double s, x[10]={95.0,89.0,76.0,65.0,88.0,72.0,85.0,81.0,90.0,56.0};
int i;
printf("\nThe original data is :\n");
for(i=0;i< 10;i++)printf("%6.1f",x[i]); printf("\n\n");
s=fun(x);
printf("s=%f\n\n",s);
}
(2011年2月)
解析: 本题的考核点是c 语言中for 循环语句的使用。
提示思路:本题要求计算给定数的方差,方差是指总体各单位的标志值与其算
术平均数离差的平方之和,除以单位数后的平方根。根据所给公式,第一个公
式中用到X'的值,所以先运算出X'的值,X'是一个求和运算,可通过一个循环
累加实现,求s 值也是一个累加的过程,然后对此和开根,开根运算可通过函
数sqrt()实现。
#include < stdio.h >
#include < math.h >
double fun(double x[10])
{ int i; /*定义变量*/
double avg=0.0;
double sum=0.0;
double abs=0.0;
double fc;
for (i=0;i< 10;i++) /*循环开始*/
sum+=x[i]; /*计算已结定的10 个数之和,并将其值赋给变量sum 中*/
avg=sum/10; /*计算已结定的10 个数的平均值,并将其值赋给变量avg*/
for (i=0;i< 10;i++) /*循环开始*/
abs+=(x[i]-avg)*(x[i]-avg); /*计算(Xk-X')的平方和,并将其值赋给变量
abc*/
fc=sqrt(abs/10) ; /*sqrt(abs/10)函数是计算abs/10 的平方根*/
return fc; /*返回结果*/
}
它字符不变。例如,若输入"Ab,cD",则输出"AB,CD"。
#include < conio.h >#include < stdio.h >#include < string.h >char
*fun(char tt[])
{ int i;
for(i=0;tt[i];i++)
/************found************/
if(('a'< =tt[i])&&(tt[i]< =__1___))
/************found************/
tt[i]-=__2____;
return(tt);
}
main()
{
char tt[81];
printf("\nPlease enter a string:");
gets(tt);
printf("\nThe result string is:\n%s",fun(tt));
}
(2011年2月)
解析: 本题着重考察考生对C 语言中一些简单算法的掌握情况。
答案:【1】'z' 【2】32
【真题2】 下列给定程序中,函数fun()的功能是根据整型形参m,计算如下公式
的值。
y=1-1/(2×2)+1/(3×3)-1/(4×4)+…+(-1)(m+1)/(m×m)
例如:m 中的值为5,则应输出0.838611。
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main 函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include < conio.h >#include < stdio.h >double fun(int m)
{ double y=1.0;
/**********************found***********************/
int j=1;
int i;
for(i=2; i< =m; i++)
{
j=-1*j;
/**********************found***********************/
y+=1/(i * i);
}
return(y);
}
main()
{ int n=5;
clrscr();
printf("\nThe result is %lf\n" ,fun(n));
}
(2011年2月)
解析: (1)错误:int j=1; 正确:double j=1.0;
(2)错误:y+=1/(i * i); 正确:y+=j/(i * i);
错误1:为了做后面的除法运算,j要定义为实型数,否则除得的结果将为整
数。
错误2:题中公式是加减相间的运算,通过j来实现。
【真题3】 请编写函数fun,其功能是:计算并输出给定10 个数的方差:
┌ 1 10 ┐0.5
S=│ ─ Σ (Xk-X')^2│
└ 10 k=1 ┘
1 10
其中X'=─ Σ Xk
10 k=1
例如,给定的10 个数为95.0、89.0、76.0、65.0、88.0、72.0、85.0、81.0、
90.0、56.0,输出为s=11.730729。
注意:部分源程序在文件prog.c 中。
请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编
写的若干语句。
#include < stdio.h >#include < math.h >double fun(double x[10])
{……}
main()
{ double s, x[10]={95.0,89.0,76.0,65.0,88.0,72.0,85.0,81.0,90.0,56.0};
int i;
printf("\nThe original data is :\n");
for(i=0;i< 10;i++)printf("%6.1f",x[i]); printf("\n\n");
s=fun(x);
printf("s=%f\n\n",s);
}
(2011年2月)
解析: 本题的考核点是c 语言中for 循环语句的使用。
提示思路:本题要求计算给定数的方差,方差是指总体各单位的标志值与其算
术平均数离差的平方之和,除以单位数后的平方根。根据所给公式,第一个公
式中用到X'的值,所以先运算出X'的值,X'是一个求和运算,可通过一个循环
累加实现,求s 值也是一个累加的过程,然后对此和开根,开根运算可通过函
数sqrt()实现。
#include < stdio.h >
#include < math.h >
double fun(double x[10])
{ int i; /*定义变量*/
double avg=0.0;
double sum=0.0;
double abs=0.0;
double fc;
for (i=0;i< 10;i++) /*循环开始*/
sum+=x[i]; /*计算已结定的10 个数之和,并将其值赋给变量sum 中*/
avg=sum/10; /*计算已结定的10 个数的平均值,并将其值赋给变量avg*/
for (i=0;i< 10;i++) /*循环开始*/
abs+=(x[i]-avg)*(x[i]-avg); /*计算(Xk-X')的平方和,并将其值赋给变量
abc*/
fc=sqrt(abs/10) ; /*sqrt(abs/10)函数是计算abs/10 的平方根*/
return fc; /*返回结果*/
}