全国计算机等级考试二级c语言试题分析 下载本文

内容发布更新时间 : 2024/4/19 8:32:18星期一 下面是文章的全部内容请认真阅读。

int num=0,n,i;

printf(\:\\n\ gets(str);

while(str[num]) num++; n=proc(str,bb,num); printf(\

for(i=0;i

答案:【1】str[i]>=’0’&&str[i]<=’9’【2】str[i]-’O’【3】n

【解析】题目中要求把字符串str中的数字字符转换成数字并存放到整型数组bb中。首先,应判断字符串str中每个字符是否是数字字符。因此,【1】处填“str[i]>=’0’&&str[i]<=’9’”将每一个数字字符转化为数字放在整型数组bb中,因此,【2】处填“str[i]-’0’;由函数proc()可知,变量n中存放整型数组bb中的元素个数,最后要返回到主函数当中,因此,【3】处填’n’。

三、程序改错题(共24分)

下列给定程序中,函数proc()的功能是:读入一个字符串(长度<20),将该字符串中的所有字符按ASCIl码升序排序后输出。

例如,输入opdye,则应输出deopy。 请修改程序中的错误,使它能得到正确结果。

注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。

试题程序:

#include #include #include

//****found**** int proc(char str[]) { char c; unsigned i,j;

for(i=0;istr[j]) {

c=str[j]: //****found**** str[j]=str[i++]; str[i]=c; } }

void main() {

char str[81]; system(\

printf(\:\gets(str);

printf(\:\\n %s\,str); proc(str);

printf(\:\\n %s\,str); }

(1)错误:int proc(char str[]) 正确:void proc(char str[]) (2)错误:str[j]=str[i++]; 正确:str[j]=str[i];

【解析】由主函数中的函数调用可知,函数proc()没有返回值。因此,“int proc(char str[])”应改为“void proc(char str[])”;由函数proc()可知,if语句块完成将字符串str中的第i个元素与第j个元素相交换。因此,“str[j]=str[i++];”应改为“str[j]=str[i];”。

四、程序设计题(共18分)

请编写函数proc(),它的功能是计算:s=(ln(1)+ln(2)+ln(3)+…+ln(m))的平方根。

在C语言中可调用log(n)函数求ln(n)。

例如,若m的值为30,则proc()函数值为8.640500。 注意:部分源程序给出如下。

请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填人所编写的若干语句。

试题程序:

#include #include #include double proc(int m) { }

void main() {

system(\

printf(\,proc(30)); } 答案:

double proc(int m) { int i;

double s=0.0; /* s是用来存放其和*/ for(i=1;i<=m;i++)

s=s+log(i); /*计算s=ln(1)+ln(2)+ln(3)+…+ln(m)*/ return sqrt(s); /*最后将其开平方的值返回到主函数中*/ }

【解析】由题目中所给表达式可知,表达式的值为m项表达式的和然后开平方。可以首先通过m次循环求得m项表达式的和,然后将其和开平方并返回到主函数当中。