2017年全国计算机等级考试C语言上机考试题库 - 91-95套共5套新题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2017年全国计算机等级考试C语言上机考试题库

学生练习用第91套至第95套内涵5套新题

第九十一套

1、程序填空

下列给定程序中,函数fun的功能是:逆置数组元素中的值。例如:若a所指数组中的数据为:1、2、3、4、5、6、7、8、9,则逆置后依次为:9、8、7、6、5、4、3、2、1。形参n给出数组中数据的个数。

请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序在文件BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

-----------------------------------------------------------------------------------------------------------------

#include

void fun(int a[], int n)

{ int i,t;

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

for (i=0; i<___1___; i++)

{

t=a[i];

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

a[i] = a[n-1-___2___];

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

___3___ = t;

}

}

main()

{ int b[9]={1,2,3,4,5,6,7,8,9}, i;

printf("\nThe original data :\n");

for (i=0; i<9; i++)

printf("%4d ", b[i]);

printf("\n");

fun(b, 9);

printf("\nThe data after invert :\n");

for (i=0; i<9; i++)

printf("%4d ", b[i]);

printf("\n");

}

-----------------------------------------------------------------------------------------------------------------

【参考答案】

(1)n/2 (2)i (3)a[n-i-1]或a[n-1-i]

本题考查:for循环语句;变量交换算法。

【解题思路】

填空1:逆置数组元素中的值,将a[0]与a[n-1]对换位置,依此类推,那么需要对换n/2次。

填空2:将a[0]与a[n-1]对换位置,a[1]与a[n-2]对换位置,依次类推,则

a[i]=a[n-1-i]。

填空3:普通的调换位置程序,显然填入a[n-i-1]。

2、程序修改

下列给定程序中函数fun的功能是:将一个由八进制数字字符组成的字符串转换成十进制整数。规定输入的字符串最多只能包含5位八进制数字字符。

例如,若输入77777,则输出32767。

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

注意:部分源程序在文件MODI1.C中,不得增行或删行,也不得更改程序的结构。-----------------------------------------------------------------------------------------------------------------

#include

int fun( char *p )

{ int n;

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

n= *p-'o';

p++;

while( *p!=0 ) {

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

n=n*8+*p-'o';

p++;

}

return n;

}

main()

{ char s[6]; int i; int n;

printf("Enter a string (Ocatal digits): "); gets(s);

if(strlen(s)>5){ printf("Error: String too longer !\n\n");exit(0); }

for(i=0; s[i]; i++)

if(s[i]<'0'||s[i]>'7')

{ printf("Error: %c not is ocatal digits!\n\n",s[i]);exit(0); }

printf("The original string: "); puts(s);

n=fun(s);

printf("\n%s is convered to integer number: %d\n\n",s,n);

}

-----------------------------------------------------------------------------------------------------------------

【参考答案】

(1)n=*p-'0';

(2)n=n*8+*p-'0';

本题考查:数字和字符转换方法;八进制转十进制方法。

【解题思路】

(1)"0"和"1"是字符串中的数字字符,为了进行数字运算,必须要将数字字符转换为数字,用数字字符减去字符'0'的ASCII码,就得到对应的数字。题中给出的是"o",不是"0"。

(2)要在一个八进制数的最后加上一位,原来各个位上的数上升一位,只需将原数乘以8再加上个位数。

【解题宝典】

各种进制之间转换方法需要掌握,二进制数、八进制数、十六进制数转换为十进制数采取按权求和的方法;十进制数转换为二进制数、八进制数、十六进制数采取除2/8/16取余方法来实现。

3、程序设计

学生的记录由学号成绩组成,N名学生的数据已放入主函数中的结构体数组s中,请编写函数fun,其功能是:函数返回该学号的学生数据,指定的学号在主函数中输入。若没找到指定学号,在结构体变量中给学号置空串,给成绩置-1,作为函数值返回。(用于字符串比较的函数是strcmp)。

注意:部分源程序在文件PROG1.C中。

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

-----------------------------------------------------------------------------------------------------------------

#include

#include

#define N 16

typedef struct

{ char num[10];

int s;

} STREC;

STREC fun( STREC *a, char *b )

{

}

main()

{ STREC s[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85}, {"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87},

{"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},

{"GA011",77},{"GA017",64},{"GA018",64},{"GA016",72}};

STREC h;

char m[10];

int i;FILE *out ;

printf("The original data:\n");

相关文档
最新文档