计算机二级c语言真题历年,国家计算机二级c语言历年上机真题及基础知识5

1.填空题

从键盘输入一组无符号整数并保存在数组xx[N]中,以整数0结束输入,要求这些数的最大位数不超过4位,其元素的个数通过变量num传入函数fun()。请补充函数fun(),该函数的功能是:从数组xx中找出个位和十位的数字之和大于5的所有无符号整数,结果保存在数组yy中,其个数由函数fun()返回。

例如:当xx[8]={123,11,25,222,42,333,14,5451}时,

bb[4]={25,42,333,5451}。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。

试题程序:

#include

#defineN1000

int fun(int xx[],int bb[],int num)

{

int i, n=0;

int g, s;

for(i=0;i

{

g=【1】;

s=xx[i]/10%10;

if((g+s)>5)

【2】;

}

return【3】;

}

main()

{

int xx[N];

int yy[N];

int num=0,n=0,i=0;

printf("Input number :\n");

do

{

scanf("%u",&xx[num]);

}

while(xx[num++]!=0);

n=fun(xx,yy,num);

printf("\nyy=");

for(i=0;i

printf("%u ",yy[i]);

}

答案及评析:

【1】xx[i]%10【2】bb[n++]=xx[i]【3】n

【解析】填空1:将一个整数对10取余,则得到这个整数的个位数,将一个整数除以10再对10取余,则得到这个整数的十位数。由程序可以看出,变量s保存了整数的十位数,所以应该将整数的个位数保存于变量g中。填空2:当整数的个位与十位的数字之和大于5时,则将这个整数存于数组bb中,同时,变量n记录了满足条件的无符号整数的个数。填空3:题目要求满足条件的无符号整数的个数由fun函数返回,所以函数返回n。

2.改错题

下列给定程序中,函数fun()的功能是:在字符串str中找出ASCⅡ码值最小的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。例如,调用fun()函数之前给字符串输入fagAgBDh,调用后字符串中的内容为AfaggBDh。

请改正程序中的错误,使它能得到正确结果。

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

试题程序:

#include

/**********************found***********************/

void fun(char p)

{

char min, *q;

int i=0;

min=p[i];

while (p[i]!=0)

{

if (min>p[i])

{

/**********************found***********************/

p=q+i;

min=p[i];

}

i++;

}

while(q>p)

{*q=*(q-1);

q--;

}

p[0]=min;

}

main()

{

char str[80];

printf("Enter a string: ");

gets(str);

printf("\nThe original string: ");

puts(str);

fun(str);

printf("\nThe string after moving: ");

puts(str);

printf("\n\n");

}

答案及评析:

(1)错误:void fun(char p)

正确:void fun(char *p)

(2)错误:p=q+i;

正确:q=p+i;

【解析】错误:由于本题中函数的功能是对字符串进行处理,而不是对单个字符进行处理,因此,函数的参数应为字符串指针。

错误2:使指针q指向ASCII码最小的字符

本题解答需要3个步骤:

(1)找到字符串中ASCII码值最小的字符,并保存。

(2)将该字符复制,并将该字符前面的字符串顺次后移。

(3)将ASCII码值最小的字符赋给字符串的第1个字符。找到ASCII码值最小的字符可以通过定义一个字符min,该字符初始时等于字符串的第1个字符,若字符串的下一个字符小于min,则将下一个字符赋给min,如此循环到字符尾,即可得到ASCII码值最小的字符,同时令指针q指向最小字符。之后对最小字符前面的子串顺次后移,可采用while语句实现。

此题需要熟练掌握和灵活应用C语言的字符与整型变量的关系以及字符串操作。

3.编程题

N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun(),它的功能是:找出学生的最低分,由函数值返回。

注意:部分源程序给出如下。

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

试题程序:

#include

#include

#defineN8

structslist

{ doubles;

struct slist*next;

};

typedef struct slistSTREC;

double fun(STREC *h)

{

}

STREC * creat (double *s)

{

STREC *h,*p,*q;

inti=0;

h=p=(STREC*)malloc(sizeof(STREC));

p->s=0;

while(i

{q=(STREC*) malloc(sizeof(STREC));

p->s=s[i]; i++; p->next=q; p=q;

}

p->next=NULL;

returnh;/*返回链表的首地址*/

}

outlist(STREC *h)

{

STREC *p;

p=h;

printf("head");

do

{printf("->%2.0f ",p->s);p=p->next;}/*输出各分数*/

while(p!=NULL);

printf("\n\n ");

}

main()

{

double s[N]={56,89,76,95,91,68,75,85}, min;

STREC *h;

h=creat(s);

outlist(h);

min=fun(h);

printf("min=%6.1f\n ",min);

}

答案及评析:

double fun(STREC *h)

{

double min=h->s;

while(h!=NULL)/*通过循环找到最低分数*/

{if(min>h->s)

min=h->s;

h=h->next;

}

return min;

}

【解析】在本题中,h为一个指向结构体的指针变量,若要引用它所指向的结构体中的某一成员时,要用指向运算符"->"。由于是链表,所以要使h逐一往后移动,使用的是h=h->next。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值