知ing

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

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

゛Zirro、Y 上传

查看本书

05套: 

给定程序中,函数fun的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数atoiatof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。 

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

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

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

给定源程序: 

#include <stdio.h> 

#include <stdlib.h> 

void fun(char *s, int a, double f) 

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

__1__ fp; 

char str[100], str1[100], str2[100]; 

int a1; double f1; 

fp = fopen("file1.txt", "w"); 

 

fprintf(fp, "%s %d %f\n", s, a, f); 

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

__2__ ; 

fp = fopen("file1.txt", "r"); 

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

fscanf(__3__,"%s%s%s", str, str1, str2); 

fclose(fp); 

a1 = atoi(str1); 

f1 = atof(str2); 

printf("\nThe result :\n\n%s %d %f\n", str, a1, f1); 

main() 

{ char a[10]="Hello!"; int b=12345; 

double c= 98.76; 

fun(a,b,c); 

解题思路: 

本题是考察先把给定的数据写入到文本文件中,再从该文件读出并转换成相应的整数、浮点数显示在屏幕上。 

第一处:定义文本文件类型变量,所以应填:FILE *。 

第二处:关闭刚写入的文件,所以应填:fclose(fp)。 

第三处:从文件中读出数据,所以应填:fp。 

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

给定程序MODI1.C中函数fun的功能是N名学生的学习成绩,按从高到低的顺序找出前m(m10)名学生来并将这些学生数据存放在一个动态分配的连续存储区中此存储区的首地址作为函数值返回。 

请改正函数fun中指定部位的错误使它能得出正确的结果。 

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

给定源程序: 

#include <stdio.h> 

#include <alloc.h> 

#include <string.h> 

#define N 10 

typedef struct ss 

{ char num[10]; 

int s; 

} STU; 

STU *fun(STU a[], int m) 

{ STU b[N], *t; 

int i,j,k; 

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

t=(STU *)calloc(sizeof(STU),m) 

for(i=0; i<N; i++) b[i]=a[i]; 

for(k=0; k<m; k++) 

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

if(b[i].s > b[j].s) j=i; 

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

 

t(k)=b(j); 

b[j].s=0; 

return t; 

outresult(STU a[], FILE *pf) 

{ int i; 

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

fprintf(pf,"No = %s Mark = %d\n", a[i].num,a[i].s); 

fprintf(pf,"\n\n"); 

main() 

{ STU a[N]={ {"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77}, 

{"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71} }; 

STU *pOrder; 

int i, m; 

printf("***** The Original data *****\n"); 

outresult(a, stdout); 

printf("\nGive the number of the students who have better score: "); 

scanf("%d",&m); 

while( m>10 ) 

{ printf("\nGive the number of the students who have better score: "); 

scanf("%d",&m); 

pOrder=fun(a,m); 

printf("***** THE RESULT *****\n"); 

printf("The top :\n"); 

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

printf(" %s %d\n",pOrder[i].num , pOrder[i].s); 

free(pOrder); 

解题思路: 

第一处语句最后缺少分号。 

第二处应该使用方括号,而不是圆括号。 

像此类,使用编译,即可发现。 

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

请编写函数fun, 函数的功能是删去一维数组中所有相同的数使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。 

例如一维数组中的数据是: 2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10。 

删除后,数组中的内容应该是: 2 3 4 5 6 7 8 9 10。 

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

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

给定源程序: 

#include <stdio.h> 

#define N 80 

int fun(int a[], int n) 

 

main() 

{ int a[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10},i,n=20; 

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

for(i=0; i<n; i++)printf("%3d",a[i]); 

n=fun(a,n); 

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

for(i=0;i<n;i++)printf("%3d",a[i]); printf("\n\n"); 

NONO(); 

解题思路: 

本题是删除已排序过数组中的相同数。 

1. 取出数组中的第1个数存放在临时变量k中,再利用for循环来依次判断所有的数。 

2. 如果取出的数和k相比,如果不相同,则仍存放在原数组中,其中存放的位置由j来控制,接着把这个数重新存入k。如果相同,则取下一数。 

参考答案: 

int fun(int a[], int n) 

int i, j = 1, k = a[0] ; 

for(i = 1 ; i < n ; i++) 

if(k != a[i]) { 

a[j++]=a[i] ; 

k = a[i] ; 

a[j] = 0 ; 

return j ; 

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


查看更多