知ing

最新计算机二级C语言上机试题汇编100套

NCRE研究组 编 / 高等教育出版社

゛Zirro、Y 上传

查看本书

97套: 

函数fun的功能是:逆置数组元素中的值。例如:若a所指数组中的数据依次为:123456789,则逆置后依次为:987654321。形参n给出数组中数据的个数。 

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 

注意:源程序存放在考生文件夹下的BLANK1.C中。 

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

给定源程序: 

#include <stdio.h> 

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"); 

解题思路: 

第一处:利用for循环语句,对数组中的各元素进行逆置,所以终止值为n/2。 

第二处:进行交换数组中元素的值,由于是依次是首和尾交换,所以应填:i。 

第三处:使用中间变量t来交换的,所以应填:a[n-i-1]。 

*************************************************** 

给定程序MODI1.C中函数fun的功能是:将一个由八进制数字字符组成的字符串转换为与其面值相等的十进制整数。规定输入的字符串最多只能包含5位八进制数字字符。 

例如,若输入:77777,则输出将是:32767。 

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

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

给定源程序: 

#include <stdio.h> 

int fun( char *p ) 

{ int n; 

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

n= *P-'o'; 

p++; 

while( *p!=0 ) { 

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

\TAB n=n*8+*P-'o'; 

\TAB 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); 

解题思路: 

第一和第二处:*p错写成*P'0'错写成'o'。 

*************************************************** 

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

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

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

给定源程序: 

#include <stdio.h> 

#include <string.h> 

#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}, 

\TAB \TAB {"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87}, 

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

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

STREC h; 

char m[10]; 

int i;FILE *out ; 

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

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

{ if(i%4==0) printf("\n"); 

printf("%s %3d ",s[i].num,s[i].s); 

printf("\n\nEnter the number: ");gets(m); 

h=fun( s,m ); 

printf("The data : "); 

printf("\n%s %4d\n",h.num,h.s); 

printf("\n"); 

out = fopen("c:\\test\\out.dat","w") ; 

h=fun(s,"GA013"); 

fprintf(out,"%s %4d\n",h.num,h.s); 

fclose(out); 

解题思路: 

本题是从学生记录体中找出给定的学号。具体操作请看答案程序中的说明。 

参考答案: 

STREC fun( STREC *a, char *b ) 

STREC c ; 

int i ; 

c.num[0] = '\0' ; / * 置初始空串 */ 

c.s = -1 ; / * 置成绩为-1 */ 

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

if(strcmp(a[i].num, b)==0) { / * 判断学号是否相等 */ 

strcpy(c.num, a[i].num) ; / * 相等,则对学号进行赋值 */ 

c.s=a[i].s; / * 相等,则对成绩进行赋值 */ 

break ; / * 退出循环体 */ 

return c ; / * 返回结构体变量 */ 

※※※※※※※※※※※※※※※※※※※※※※※※※ 


查看更多