首页 二级C语言上机题库A4

二级C语言上机题库A4

举报
开通vip

二级C语言上机题库A4二级C语言上机题库A4 计算机等级考试二级公共基础知识 指导教师:王幸福 二级C语言上机试题汇编 if n = = 0 第01套 return 1.0 ; 填空题:给定程序中,函数fun的功能是:将形参n所指变while( n >1 && n scanf("%d", &n) ; void fun(unsigned long *n) printf("\n\n%d! =%lf\n\n", n, fun(n)) ; { unsigned long x=0, i; int t; } i=1; 解题思路:第一处...

二级C语言上机题库A4
二级C语言上机题库A4 计算机等级考试二级公共基础知识 指导教师:王幸福 二级C语言上机试题汇编 if n = = 0 第01套 return 1.0 ; 填空题:给定程序中,函数fun的功能是:将形参n所指变while( n >1 && n < 170 ) 量中,各位上为偶数的数去除,剩余的数按原来从高位到低/************found************/ 位的顺序组成一个新的数,并通过形参指针n传回所指变result *= n-- 量。例如,输入一个数:27638496,新的数:为739。请在return result ; 程序的下划线处填入正确的内容并把下划线删除, 使程序} 得出正确的结果。注意:源程序存放在考生文件夹下的main ( ) BLANK1.C中。不得增行或删行,也不得更改程序的结构~ { int n ; 给定源程序: printf("Input N:") ; #include scanf("%d", &n) ; void fun(unsigned long *n) printf("\n\n%d! =%lf\n\n", n, fun(n)) ; { unsigned long x=0, i; int t; } i=1; 解题思路:第一处:条件语句书写格式错误,应改为:if while(*n) (n==0)。 /**********found**********/ 第二处:语句后缺少分号。 { t=*n % __1__; *************************************************** /**********found**********/ 编程题: 请编写一个函数fun,它的功能是:将一个数字if(t%2!= __2__) 字符串转换为一个整数(不得调用C语言提供的将字符串转{ x=x+t*i; i=i*10; } 换为整数的函数)。例如,若输入字符串"-1234",则函数把*n =*n /10; 它转换为整数值 -1234。函数fun中给出的语句仅供参考。} 注意: 部分源程序存在文件PROG1.C文件中。请勿改动主函/**********found**********/ 数main和其它函数中的任何内容, 仅在函数fun的花括号*n=__3__; 中填入你编写的若干语句。 } 给定源程序: main() #include { unsigned long n=-1; #include while(n>99999999||n<0) long fun ( char *p) { printf("Please input(0 FILE *fp, *wf ; double fun ( int n ) int i ; { double result = 1.0 ; char s[20] ; /************found************/ long n ; 1 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 fp = fopen("c:\\test\\in.dat","r") ; { wf = fopen("c:\\test\\out.dat","w") ; /**********found**********/ for(i = 0 ; i < 10 ; i++) { __1__ fp; fscanf(fp, "%s", s) ; char ch; n = fun(s); fp = fopen("file1.txt", "w"); fprintf(wf, "%ld\n", n) ; fprintf(fp, "%s %d %f\n", s, a, f); } fclose(fp); fclose(fp) ; fp = fopen("file1.txt", "r"); fclose(wf) ; printf("\nThe result :\n\n"); } ch = fgetc(fp); 解题思路:本题是将一个数字字符串转换为一个整数。 /**********found**********/ 参考 答案 八年级地理上册填图题岩土工程勘察试题省略号的作用及举例应急救援安全知识车间5s试题及答案 : while (!feof(__2__)) { #include /**********found**********/ #include putchar(__3__); ch = fgetc(fp); } long fun ( char *p) putchar('\n'); { fclose(fp); /* 以下代码仅供参考 */ } int i, len, t; /* len为串长,t为正负标识 */ main() long x=0; { char a[10]="Hello!"; int b=12345; len=strlen(p); double c= 98.76; if(p[0]=='-') fun(a,b,c); { t=-1; len- -; p++; } } else t=1; 解题思路:考察把给定的数据写入到文本文件中,再从该文/* 以下完成数字字符串转换为一个数字 */ 件读出并显示在屏幕。 while(*p) x = x*10-48+(*p++); 第一处:定义文本文件类型变量,所以应填:FILE *。 return x*t; 第二处:判断文件是否结束,所以应填:fp。 } 第三处:显示读出的字符,所以应填:ch。 main() /* 主函数 */ *************************************************** { char s[6]; 改错题:给定程序MODI1.C中函数fun的功能是: 依次取出long n; 字符串中所有数字字符, 形成新的字符串, 并取代原字符printf("Enter a string:\n") ; 串。请改正函数fun中指定部位的错误, 使它能得出正确的gets(s); 结果。注意: 不要改动main函数, 不得增行或删行, 也不n = fun(s); 得更改程序的结构! 给定源程序: printf("%ld\n",n); #include NONO ( ); void fun(char *s) } { int i,j; 注意:由于NONO( )这个函数是改卷人用的,与考生没有什for(i=0,j=0; s[i]!='\0'; i++) 么关系,故下面从第2套试题开始均省略NONO( ) if(s[i]>='0' && s[i]<='9') 第02套 /**********found**********/ 填空题:给定程序中,函数fun的功能是将形参给定的字符s[j]=s[i]; 串、整数、浮点数写到文本文件中,再用字符方式从此文本/**********found**********/ 文件中逐个读入并显示在终端屏幕上。请在程序的下划线处s[j]="\0"; 填入正确的内容并把下划线删除, 使程序得出正确的结果。} 注意:源程序存放在考生文件夹下的BLANK1.C中。不得增main() 行或删行,也不得更改程序的结构~ { char item[80]; 给定源程序: printf("\nEnter a string : ");gets(item); #include printf("\n\nThe string is : \"%s\"\n",item); void fun(char *s, int a, double f) fun(item); 2 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 printf("\n\nThe string of changing is : 参考答案: \"%s\"\n",item ); } void fun(char s[][N], char *b) 解题思路: { 第一处: 要求是取出原字符串中所有数字字符组成一个新 int i,j,n=0; 的字符串,程序中是使用变量j来控制新字符串的位置,所for(i=0; i < N;i++) /* 请填写相应语句完成其功能 */ 以应改为:s[j++]=s[i];。 { 第二处: 置新字符串的结束符,所以应改为:s[j]='\0';. for(j = 0 ; j < M ; j++) { *************************************************** b[n] = s[j][i] ; 编程题:请编写函数fun, 函数的功能是: 将M行N列的二n = i * M + j + 1; 维数组中的字符数据, 按列的顺序依次放到一个字符串中。} 例如, 二维数组中的数据为: } W W W W b[n]='\0'; S S S S } H H H H 第03套 则字符串中的内容应是: WSHWSHWSH。 填空题:程序通过定义学生结构体变量,存储了学生的学号、注意:部分源程序在文件PROG1.C中。请勿改动主函数main姓名和3门课的成绩。所有学生数据均以二进制方式输出到和其它函数中的任何内容, 仅在函数fun的花括号中填入文件中。函数fun的功能是重写形参filename所指文件中你编写的若干语句。 最后一个学生的数据,即用新的学生数据覆盖该学生原来的给定源程序: 数据,其它学生的数据不变。请在程序的下划线处填入正确#include 的内容并把下划线删除, 使程序得出正确的结果。注意:源#define M 3 程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,#define N 4 也不得更改程序的结构~ void fun(char s[][N], char *b) 给定源程序: { #include #define N 5 typedef struct student { } long sno; main() char name[10]; { char float score[3]; } STU; a[100],w[M][N]={{'W','W','W','W'},{'S','S','S','S'},{'H','H','H','H'}}; void fun(char *filename, STU n) int i,j; { FILE *fp; /**********found**********/ printf("The matrix:\n"); for(i=0; inext=NULL; fp = fopen("student.dat", "rb"); for(i=1; i<=n; i++) fread(ss, sizeof(STU), N, fp); { s=(NODE *)malloc(sizeof(NODE)); fclose(fp); s->data=rand()%m; s->next=p->next; printf("\nThe original data :\n\n"); p->next=s; p=p->next; for (j=0; jnext; printf("\nThe data after modifing :\n\n"); printf("\n\nTHE LIST :\n\n HEAD "); fp = fopen("student.dat", "rb"); while(p) fread(ss, sizeof(STU), N, fp); { printf("->%d ",p->data); fclose(fp); p=p->next; for (j=0; j 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf , 并为各结点数据域赋0到m-1的编程题:请编写函数fun, 函数的功能是:统计一行字符串值。请改正函数Creatlink中指定部位的错误, 使它能得出中单词的个数,作为函数值返回。一行字符串在主函数中输正确的结果。注意: 不要改动main函数, 不得增行或删行, 入, 规定所有单词由小写字母组成,单词之间由若干个空格也不得更改程序的结构! 隔开, 一行的开始没有空格。注意:部分源程序在文件给定源程序: PROG1.C中。请勿改动主函数main和其它函数中的任何内#include 容, 仅在函数fun的花括号中填入你编写的若干语句。 #include 给定源程序: typedef struct aa #include { int data; #include struct aa *next; #define N 80 } NODE; int fun( char *s) NODE *Creatlink(int n, int m) { { NODE *h=NULL, *p, *s; int i; } /**********found***********/ main() 4 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 { char line[N]; int num=0; if (s[i].sno __2__ s[j].sno) printf("Enter a string :\n"); gets(line); { t = s[i]; s[i] = s[j]; s[j] = t; } num=fun( line ); fp = fopen(filename, "wb"); printf("The number of word is : %d\n\n",num); /**********found**********/ NONO(); __3__(s, sizeof(STU), N, fp); /* 二进制输出 */ } fclose(fp); 解题思路:本题是统计字符串中的单词数。 } 1. 利用while循环语句和指针变量,当字符为空格时,则main() 单词数k加1。 { STU t[N]={ {10005,"ZhangSan", 95, 80, 88}, 2. 循环结束返回k。 {10003,"LiSi", 85, 70, 78}, {10002,"CaoKai", 75, 60, 参考答案: 88}, {10004,"FangFang", 90, 82, 87}, {10001,"MaChao", int fun( char *s) 91, 92, 77}}, ss[N]; { int i,j; FILE *fp; int k = 1 ; fp = fopen("student.dat", "wb"); while(*s) { fwrite(t, sizeof(STU), 5, fp); if(*s == ' ') k++ ; fclose(fp); s++ ; printf("\n\nThe original data :\n\n"); } for (j=0; j for (i=0; i<3; i++) printf("%6.2f ", ss[j].score[i]); #define N 5 printf("\n"); typedef struct student { } long sno; } char name[10]; 解题思路:本题是考察把结构中的数据写入文件。 float score[3]; 第一处:建立文件的类型,考虑到是把结构中的数据(结构 } STU; 中的数据包含不打印的字符) 从文件中读出,所以应填: void fun(char *filename) "rb"。 { FILE *fp; int i, j; 第二处:判断当前学号是否大于刚读出的学号进行相比,如 STU s[N], t; 果大于,则进行交换,所以应填:>。 /**********found**********/ 第三处:把已排序的结构数据,重新写入文件,所以应填: fp = fopen(filename, __1__); fwrite。 fread(s, sizeof(STU), N, fp); *************************************************** fclose(fp); 改错题:给定程序MODI1.C中函数fun的功能是: 在字符串 for (i=0; i { static t=29,c=217,m=1024,r=0; #include r=(r*t+c)%m; return((double)r/m); void fun ( char s[], int n ) } { main() char a[80] , *p; { int age[N], i, d[M]; int i; for(i=0; i 10) b[M - 1]++ ; else b[j]++ ; 编程题: 请编写函数fun,函数的功能是:统计各年龄段的} 人数。N个年龄通过调用随机函数获得,并放在主函数的age} 数组中;要求函数把0至9岁年龄段的人数放在d[0]中,把第05套 10至19岁年龄段的人数放在d[1]中,把20至29岁年龄段填空题:给定程序中,函数fun的功能是将参数给定的字符的人数放在d[2]中,其余依此类推, 把100岁 (含100)以上串、整数、浮点数写到文本文件中,再用字符串方式从此文年龄的人数都放在d[10]中。结果在主函数中输出。 注意:本文件中逐个读入,并调用库函数atoi和atof将字符串转部分源程序在文件PROG1.C中。 请勿改动主函数main和其换成相应的整数、浮点数,然后将其显示在屏幕上。请在程 序的下划线处填入正确的内容并把下划线删除, 使程序得它函数中的任何内容,仅在函数fun的花括号中填入你编写 的若干语句。 出正确的结果。注意:源程序存放在考生文件夹下的给定源程序: BLANK1.C中。不得增行或删行,也不得更改程序的结构~ 给定源程序: #include #define N 50 #include #define M 11 #include void fun( int *a, int *b) void fun(char *s, int a, double f) { { /**********found**********/ 6 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 __1__ fp; { for(i=j=0; i b[j].s) j=i; int a1; double f1; /**********found**********/ fp = fopen("file1.txt", "w"); t(k)=b(j); fprintf(fp, "%s %d %f\n", s, a, f); b[j].s=0; /**********found**********/ } __2__ ; return t; fp = fopen("file1.txt", "r"); } /**********found**********/ outresult(STU a[], FILE *pf) fscanf(__3__,"%s%s%s", str, str1, str2); { int i; fclose(fp); for(i=0; i10 ) 改错题:给定程序MODI1.C中函数fun的功能是: 对N名学{ printf("\nGive the number of the students who have 生的学习成绩,按从高到低的顺序找出前m(m?10)名学生better score: "); 来, 并将这些学生数据存放在一个动态分配的连续存储区scanf("%d",&m); 中, 此存储区的首地址作为函数值返回。请改正函数fun} 中指定部位的错误, 使它能得出正确的结果。注意: 不要改pOrder=fun(a,m); 动main函数, 不得增行或删行, 也不得更改程序的结构! printf("***** THE RESULT *****\n"); 给定源程序: printf("The top :\n"); #include for(i=0; i printf(" %s %d\n",pOrder[i].num , pOrder[i].s); #include free(pOrder); #define N 10 } typedef struct ss 解题思路:第一处: 语句最后缺少分号。 { char num[10]; 第二处: 应该使用方括号,而不是圆括号。像此类,使用编 int s; 译,即可发现。 } STU; *************************************************** STU *fun(STU a[], int m) 编程题: 请编写函数fun, 函数的功能是: 删去一维数组 { STU b[N], *t; 中所有相同的数, 使之只剩一个。数组中的数已按由小到大 int i,j,k; 的顺序排列,函数返回删除后数组中数据的个数。例如, 一 /**********found**********/ 维数组中的数据是: 2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 t=(STU *)calloc(sizeof(STU),m) 10 10。删除后,数组中的内容应该是: 2 3 4 5 6 7 8 9 10。 for(i=0; i { if (i==1) #define N 80 /**********found**********/ int fun(int a[], int n) return __2__(x); { else } /**********found**********/ main() return __3__(x, y); {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; main() printf("The original data :\n"); { double x1=5, x2=3, r; for(i=0; i } /**********found**********/ a[j] = 0 ; char fun(char *s, char *t) return j ; { int sl=0,tl=0; char *ss, *tt; } ss=s; tt=t; 第06套 while(*ss) 填空题:给定程序中,函数fun的功能是根据形参i的值返{ sl++; 回某个函数的值。当调用正确时, 程序输出:x1=5.000000, /**********found**********/ x2=3.000000, x1*x1+x1*x2=40.000000请在程序的下划线(*ss)++; 处填入正确的内容并把下划线删除, 使程序得出正确的结} 果。注意:源程序存放在考生文件夹下的BLANK1.C中。不while(*tt) 得增行或删行,也不得更改程序的结构~ { tl++; 给定源程序: /**********found**********/ #include (*tt)++; double f1(double x) } { return x*x; } if(tl>sl) return t; double f2(double x, double y) else return s; { return x*y; } } 8 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 main() } { char a[80],b[80],*p,*q; int i; 解题思路:本题是考察字符串的操作。 printf("\nEnter a string : "); gets(a); 1. 由于函数fun1是将字符串中字符循环左移一个位置,并printf("\nEnter a string again : "); gets(b); 通过实参w返回循环左移一个位置的字符串。 printf("\nThe longer is :\n\n\"%s\"\n",fun(a,b)); 2. 利用循环for语句来操作多少个字符(m)需要循环左移。 } 参考答案: 解题思路: void fun(char *w, int m) /* 可调用fun1函数左移字符 第一处: 试题要求返回字符串的首地址,所以应改为:char */ *fun(char *s,char *t) { 第二处: 取字符串指针ss的下一个位置,所以应改为:int i; ss++;。 for(i = 0 ; i < m ; i++) fun1(w); 第三处:取字符串指针tt的下一个位置,所以应改为:} tt++;。 第07套 *************************************************** 填空题:程序通过定义并赋初值的方式,利用结构体变量存编程题: 请编写函数fun,函数的功能是: 移动字符串中的储了一名学生的信息。函数fun的功能是输出这位学生的信内容,移动的 规则 编码规则下载淘宝规则下载天猫规则下载麻将竞赛规则pdf麻将竞赛规则pdf 如下: 把第1到第m个字符, 平移到字符息。请在程序的下划线处填入正确的内容并把下划线删除,串的最后, 把第m+1到最后的字符移到字符串的前部。例如, 使程序得出正确的结果。注意:源程序存放在考生文件夹下字符串中原有的内容为: ABCDEFGHIJK, m的值为3, 则移动的BLANK1.C中。不得增行或删行,也不得更改程序的结构~ 后, 字符串中的内容应该是: DEFGHIJKABC。注意:部分源给定源程序: 程序在文件PROG1.C中。请勿改动主函数main和其它函数#include 中的内容,在函数fun的花括号中填入你编写的若干语句。 typedef struct 给定源程序: { int num; #include char name[9]; #include char sex; #define N 80 struct { int year,month,day ;} birthday; void fun1(char *w) /* 本函数的功能是将字符串中字符循float score[3]; 环左移一个位置 */ }STU; { /**********found**********/ int i; char t; void show(STU ___1___) t=w[0]; { int i; for(i=0;i } #define N 20 解题思路:本题是考察考生怎样获取一个符合要求的无符号int fun ( int * a, int n ) 整数。本题是应用if条件语句首先判断给出的数是几位数,{ int i, m, t, k ; 再模相应的值,最后得出的余数就是结果。 for(i=0;i<2;i++) { 参考答案: /**********found**********/ unsigned fun ( unsigned w ) m=0; { for(k=i+1;k10000) w %= 10000 ; /**********found**********/ else if(w>1000) w %= 1000 ; if(a[k]>a[m]) k=m; else if(w>100) w %= 100 ; t=a[i];a[i]=a[m];a[m]=t; else if(w>10) w %=10 ; } return w ; } } main( ) 第08套 { int x, b[N]={11,5,12,0,3,6,9,7,10,8}, n=10, i; 填空题:给定程序通过定义并赋初值的方式,利用结构体变for ( i=0; i 第一处:外循环每循环一次,把当前位置i赋值给m,所以typedef struct 应改为:m=i;。 { int num; 第二处:通过内循环来找出最大的一个数的位置k,所以应char name[9]; 改为:if(a[k]>a[m]) m=k;。 float score[3]; *************************************************** }STU; 编程题: 请编写一个函数 unsigned fun ( unsigned w ),void show(STU tt) w 是一个大于10的无符号整数,若 w 是 n (n ? 2)位的{ int i; 整数,函数求出w的低 n-1位的数作为函数值返回。 例如:printf("%d %s : ",tt.num,tt.name); w 值为 5923,则函数返回 923; w 值为 923 则函数返回 for(i=0; i<3; i++) 23。注意: 部分源程序存在文件PROG1.C中。请勿改动主函printf("%5.1f",tt.score[i]); 数main和其它函数中的任何内容,仅在函数fun的花括号printf("\n"); 中填入你编写的若干语句。 } 给定源程序: /**********found**********/ #include void modify(___1___ *ss,float a) unsigned fun ( unsigned w ) { int i; { for(i=0; i<3; i++) /**********found**********/ 10 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 ss->___2___ *=a; 为3,a 数组中的值为 } | 1 9 7 | main( ) a = | 2 3 8 | { STU std={ 1,"Zhanghua",76.5,78.0,82.0 }; | 4 5 6 | float a; 则返回主程序后a数组中的值应为 printf("\nThe original number and name and | 3 9 7 | scores :\n"); | 6 9 8 | show(std); |12 15 18 | printf("\nInput a number : "); scanf("%f",&a); 注意: 部分源程序存在文件PROG1.C中。请勿改动主函数/**********found**********/ main和其它函数中的任何内容,仅在函数fun的花括号中modify(___3___,a); 填入你编写的若干语句。 printf("\nA result of modifying :\n"); 给定源程序: show(std); #include } #include 解题思路:本题是利用结构体存储学生记录并由实参ss返#define N 5 回。 int fun ( int a[][N], int n ) 第一处:实参ss是一个结构型指针变量,所以应填:STU。 { 第二处:该学生的各科成绩都乘以一个系数a,所以应填:} score[i]。 main ( ) 第三处:函数的调用,由于函数定义时使用的指针结构型变{ int a[N][N], n, i, j; 量,所以应填: &std。 printf("***** The array *****\n"); *************************************************** for ( i =0; i=3 ); 给定源程序: printf("n = %4d\n",n); #include fun ( a, n ); long fun ( int k) printf ("***** THE RESULT *****\n"); { for ( i =0; i 0 printf("\n"); return (k*fun(k-1)); } /************found************/ NONO( ); else if ( k=0 ) } return 1L; 解题思路:本题是利用两重循环给二维数组左下三角元素中} 的值乘以n。 main() 参考答案: { int k = 10 ; int fun ( int a[][N], int n ) printf("%d!=%ld\n", k, fun ( k )) ; { } int i, j; 解题思路:第一处: 条件判断缺少圆括号。 for(i = 0 ; i < N ; i++) 第二处:判断相等的符号是 ==。 for(j = 0 ; j <= i; j++) *************************************************** a[i][j] *= n ; 编程题: 程序定义了N×N的二维数组,并在主函数中自动} 赋值。请编写函数fun(int a[][N], int n),函数的功能第09套 是:使数组左下三角元素中的值乘以n 。例如:若n的值填空题:给定程序中,函数fun的功能是将不带头节点的单 11 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 向链表结点数据域中的数据从小到大排序。即若原链表结点do 数据域从头至尾的数据为:10、4、2、8、6,排序后链表结{ printf("->%d", p->data); p=p->next; } 点数据域从头至尾的数据为:2、4、6、8、10。请在程序的while(p!=NULL); 下划线处填入正确的内容并把下划线删除, 使程序得出正printf("->End\n"); 确的结果。注意:源程序存放在考生文件夹下的BLANK1.C} 中。不得增行或删行,也不得更改程序的结构~ } 给定源程序: main() #include { NODE *head; #include int a[N]= {0, 10, 4, 2, 8, 6 }; #define N 6 head=creatlist(a); typedef struct node { printf("\nThe original list:\n"); int data; outlist(head); struct node *next; fun(head); } NODE; printf("\nThe list after inverting :\n"); void fun(NODE *h) outlist(head); { NODE *p, *q; int t; } p = h; 解题思路:本题是考察使用链表 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 ,使用两重while循环while (p) { 语句,对链表的结点数据进行升序排列。第一处:由于外循/**********found**********/ 环变量使用p指针,内循环变量使用q指针,所以q指向必q = __1__ ; 须指向p的next指针,因此应填写:p.next。 /**********found**********/ 第二处:判断内循环q指针是否结束,所以应填:q。 while (__2__) 第三处:外循环控制变量p指向自己的next指针,所以应{ if (p->data > q->data) 填:p.next。 { t = p->data; p->data = q->data; q->data = t; } *************************************************** q = q->next; 改错题:给定程序MODI1.C中函数fun的功能是: 将s所指} 字符串中的字母转换为按字母序列的后续字母(但Z转换为/**********found**********/ A, z转换为a),其它字符不变。请改正函数fun中指定部位p = __3__ ; 的错误, 使它能得出正确的结果。注意: 不要改动main函} 数, 不得增行或删行, 也不得更改程序的结构! } 给定源程序: NODE *creatlist(int a[]) #include { NODE *h,*p,*q; int i; #include h=NULL; void fun (char *s) for(i=0; idata=a[i]; while(*s!='@') q->next = NULL; { if(*s>='A' & *s<='Z' || *s>='a' && *s<='z') if (h == NULL) h = p = q; { if(*s=='Z') *s='A'; else { p->next = q; p = q; } else if(*s=='z') *s='a'; } else *s += 1; return h; } } /**********found***********/ void outlist(NODE *h) (*s)++; { NODE *p; } p=h; } if (p= =NULL) printf("The list is NULL!\n"); main() else { char s[80]; { printf("\nHead "); printf("\n Enter a string with length < 80. :\n\n "); 12 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 gets(s); } printf("\n The string : \n\n "); puts(s); 第10套 fun ( s ); 填空题:给定程序中,函数fun的功能是:判定形参a所指printf ("\n\n The Cords :\n\n "); puts(s); 的N×N(规定N为奇数)的矩 阵是否是"幻方",若是,函} 数返回值为1; 不是,函数返回值为0。"幻方"的判定条件解题思路: 是:矩阵每行、每列、主对角线及反对角线上元素之和都相第一处: 使用while循环来判断字符串指针s是否结束,所等。例如,以下3×3的矩阵就是一个"幻方": 以应改为:while(*s)。 4 9 2 第二处: 取字符串指针s的下一个位置,所以应改为:s++;。 3 5 7 *************************************************** 8 1 6 编程题: 请编写函数fun, 函数的功能是: 移动一维数组请在程序的下划线处填入正确的内容并把下划线删除, 使中的内容; 若数组中有n个整数, 要求把下标从0到p(含程序得出正确的结果。注意:源程序存放在考生文件夹下的p,p小于等于n-1)的数组元素平移到数组的最后。例如, 一BLANK1.C中。不得增行或删行,也不得更改程序的结构~ 维数组中的原始内容为: 1,2,3,4,5,6,7,8,9,10; p的值为给定源程序: 3。移动后, 一维数组中的内容应为: #include 5,6,7,8,9,10,1,2,3,4。注意:部分源程序在文件PROG1.C#define N 3 中。请勿改动主函数main和其它函数中的任何内容,仅在int fun(int (*a)[N]) 函数fun的花括号中填入你编写的若干语句。 给定源程序: { int i,j,m1,m2,row,colum; #include m1=m2=0; #define N 80 for(i=0; i 以及位置变量i置0,然后采用while循环和字符串指针pdouble fun( int m ) 来处理的,每循环一次来判断指针p所指的字符是否为空{ 格,如果不是空格,则把该字符写到str字符串中,位置由double t = 1.0; i来控制,如果是空格,则不处理,继续取下一字符,直至int i; 字符串结束为止,最后再把字符串结束符写到位置为i的for( i = 2; i <= m; i++ ) str上,再通过形参str返回。 /**********found**********/ t = 1.0-1 /i; 参考答案: /**********found**********/ int fun(char *str) _______; { } char *p = str ; main() int i = 0 ; { while(*p) { int m ; if(*p != ' ') str[i++] = *p ; printf( "\nPlease enter 1 integer numbers:\n" ); p++ ; scanf( "%d", &m); } printf( "\n\nThe result is %lf\n", fun( m ) ); str[i] = 0 ; } } 解题思路:第一处:在除法运算中,如果除数和被除数都是第11套 整数,所么所除结果也是整数,因此应改为t-=1./i。 填空题:给定程序中,函数fun的功能是将带头结点的单向第二处:应返回公式的值,函数中公式的值是存放在变量t链表逆置。即若原链表中从头至尾结点数据域依次为:2、4、中,所以应填returnt;。 6、8、10,逆置后,从头至尾结点数据域依次为: 10、8、6、*************************************************** 4、2。请在程序的下划线处填入正确的内容并把下划线删除, 编程题: 请编写一个函数,函数的功能是删除字符串中的使程序得出正确的结果。注意:源程序存放在考生文件夹下所有空格。例如, 主函数中输入"asd af aa z67", 则输出的BLANK1.C中。不得增行或删行,也不得更改程序的结构~ 为 "asdafaaz67"。注意:部分源程序在文件PROG1.C中。给定源程序: 请勿改动主函数main和其它函数中的任何内容,仅在函数#include fun的花括号中填入你编写的若干语句。 #include 给定源程序: #define N 5 #include typedef struct node #include { int fun(char *str) int data; { struct node *next; } NODE; } void fun(NODE *h) 14 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 { NODE *p, *q, *r; } /**********found**********/ 解题思路:本题是考察使用链表方法,对链表的结点数据进p = h->__1__; 行降序排列。 /**********found**********/ 第一处:使用结构指针p,来控制链表的结束,p必须指向if (p==__2__) return; h结构指针的next指针,来定位p的初始位置。所以应填q = p->next; 写:h->next。 p->next = NULL; 第二处:判断p指针是否结束,所以应填写:0。 while (q) 第三处:q指向原q的next指针,所以应填:r。 { r = q->next; q->next = p; *************************************************** /**********found**********/ 改错题:给定程序MODI1.C中函数fun的功能是: 计算s所p = q; q = __3__; 指字符串中含有t所指字符串的数目, 并作为函数值返回。} 请改正函数fun中指定部位的错误, 使它能得出正确的结h->next = p; 果。注意: 不要改动main函数, 不得增行或删行, 也不得} 更改程序的结构! NODE *creatlist(int a[]) 给定源程序: { NODE *h,*p,*q; int i; #include h = (NODE *)malloc(sizeof(NODE)); #include h->next = NULL; #define N 80 for(i=0; idata=a[i]; char *p , *r; q->next = NULL; n=0; if (h->next == NULL) h->next = p = q; while ( *s ) else { p->next = q; p = q; } { p=s; } /*********found**********/ return h; r=p; } while(*r) void outlist(NODE *h) if(*r==*p) { r++; p++; } { NODE *p; else break; p = h->next; /*********found**********/ if(*r= 0) if (p==NULL) printf("The list is NULL!\n"); else n++; { printf("\nHead "); s++; } do { printf("->%d", p->data); p=p->next; } return n; while(p!=NULL); } printf("->End\n"); main() } { char a[N],b[N]; int m; } printf("\nPlease enter string a : "); gets(a); printf("\nPlease enter substring b : "); gets( b ); main() { NODE *head; m=fun(a, b); int a[N]={2,4,6,8,10}; printf("\nThe result is : m = %d\n",m); } head=creatlist(a); printf("\nThe original list:\n"); 解题思路: outlist(head); 第一处: 程序中子串是由变量t来实现的,再根据下面fun(head); while循环体中语句可知,所以应改为:r=t;。 printf("\nThe list after inverting :\n"); 第二处: 是判断相等的条件,所以应改为:if(*r==0)。 outlist(head); *************************************************** 15 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 编程题: 请编写函数fun, 函数的功能是: 将放在字符串4、6、8、10,逆置后,从头至尾结点数据域依次为:10、8、数组中的M个字符串(每串的长度不超过N), 按顺序合并组6、4、2。请在程序的下划线处填入正确的内容并把下划线成一个新的字符串。函数fun中给出的语句仅供参考。例如, 删除, 使程序得出正确的结果。注意:源程序存放在考生文字符串数组中的M个字符串为 件夹下的BLANK1.C中。不得增行或删行,也不得更改程序AAAA 的结构~ BBBBBBB 给定源程序: CC #include 则合并后的字符串的内容应是: AAAABBBBBBBCC。提示:#include strcat(a,b)的功能是将字符串b复制到字符串a的串尾上,#define N 5 成为一个新串。注意:部分源程序在文件PROG1.C中。请勿typedef struct node { 改动主函数main和其它函数中的任何内容, 仅在函数funint data; 的花括号中填入你编写的若干语句。 struct node *next; 给定源程序: } NODE; #include /**********found**********/ #define M 3 __1__ * fun(NODE *h) #define N 20 { NODE *p, *q, *r; void fun(char a[M][N], char *b) p = h; { if (p == NULL) return NULL; } q = p->next; main() p->next = NULL; { char w[M][N]={"AAAA","BBBBBBB","CC"}, a[100]; while (q) int i ; { printf("The string:\n"); /**********found**********/ for(i=0; i__2__; printf("\n"); q->next = p; fun(w,a); p = q; printf("The A string:\n"); /**********found**********/ printf("%s",a);printf("\n\n"); q = __3__ ; NONO(); } } return p; 解题思路: } 本题是考察字符串的操作。使用for循环以及C语言函数NODE *creatlist(int a[]) strcat依次连接起来。 { NODE *h,*p,*q; int i; 参考答案: h=NULL; #include for(i=0; idata=a[i]; void fun(char a[M][N], char *b) q->next = NULL; { if (h == NULL) h = p = q; /* 以下代码仅供参考 */ else { p->next = q; p = q; } int i; *b=0; } for(i = 0 ; i < M ; i++) return h; strcat(b, a[i]) ; } } void outlist(NODE *h) 第12套 { NODE *p; 填空题:给定程序中,函数fun的功能是将不带头结点的单p=h; 向链表逆置。即若原链表中从头至尾结点数据域依次为:2、if (p==NULL) printf("The list is NULL!\n"); 16 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 else { char s[N], t[N]; { printf("\nHead "); printf("\nPlease enter string s : "); gets(s); do fun(s, t); { printf("->%d", p->data); p=p->next; } printf("\nThe result is : %s\n",t); while(p!=NULL); } printf("->End\n"); 解题思路:第一处: 根据试题分析,两个条件之间应该是} “或”的关系,而不是“与”的关系,所以应改为:if(i%2 } || s[i]%2==0)。 main() 第二处: 当字符串处理结束后,应该补上字符串的结束符,{ NODE *head; 那么字符串t的位置是由i来控制,所以应改为:t[j]=0;。 int a[N]={2,4,6,8,10}; *************************************************** head=creatlist(a); 编程题: 请编写函数fun, 函数的功能是: 将M行N列的printf("\nThe original list:\n"); 二维数组中的数据, 按列的顺序依次放到一维数组中。函数outlist(head); fun中给出的语句仅供参考。 head=fun(head); 例如, 二维数组中的数据为: printf("\nThe list after inverting :\n"); 33 33 33 33 outlist(head); 44 44 44 44 } 55 55 55 55 解题思路: 则一维数组中的内容应是: 33 44 55 33 44 55 33 44 55 33 本题考察使用链表方法,对链表的结点数据进行降序排列,44 55。注意:部分源程序在文件PROG1.C中。 请勿改动主最后通过函数进行返回。 函数main和其它函数中的任何内容, 仅在函数fun的花括第一处:由于链表中的所有结果要求通过函数进行返回,所号中填入你编写的若干语句。 以应填:NODE *。 给定源程序: 第二处:中间变量r用来保存q的next指针,所以应填:#include next。 void fun(int s[][10], int b[], int *n, int mm, int nn) 第三处:q指向原q的next指针,所以应填:r。 { *************************************************** 填空题:给定程序MODI1.C中函数fun的功能是: 将s所指} 字符串中位于奇数位置的字符或ASCII码为偶数的字符放main() 入t所指数组中(规定第一个字符放在第0位中)。例如, 字{ int 符串中的数据为: AABBCCDDEEFF, 则输出应当是:w[10][10]={{33,33,33,33},{44,44,44,44},{55,55,55,55 ABBCDDEFF。请改正函数fun中指定部位的错误, 使它能得}},i,j; 出正确的结果。注意: 不要改动main函数, 不得增行或删int a[100]={0}, n=0; 行, 也不得更改程序的结构! printf("The matrix:\n"); 给定源程序: for(i=0; i<3; i++) #include { for(j=0;j<4; j++)printf("%3d",w[i][j]); #include printf("\n"); #define N 80 } void fun(char *s, char t[]) fun(w,a,&n,3,4); { int i, j=0; printf("The A array:\n"); for(i=0; idata=a[i]; /* 以下代码仅供参考 */ q->next = NULL; int i,j,np=0; /* np用作b数组下标 */ if (h->next == NULL) h->next = p = q; for(i = 0 ; i < nn ; i++) else { p->next = q; p = q; } for(j = 0 ; j < mm ; j++) { } b[np] = s[j][i] ; return h; np = i * mm + j + 1; } } void outlist(NODE *h) *n=np; { NODE *p; } p = h->next; 第13套 if (p==NULL) printf("The list is NULL!\n"); 填空题:给定程序中,函数fun的功能是将带头节点的单向else 链表结点数据域中的数据从小到大排序。即若原链表结点数{ printf("\nHead "); 据域从头至尾的数据为:10、4、2、8、6,排序后链表结点do 数据域从头至尾的数据为:2、4、6、8、10。请在程序的下{ printf("->%d", p->data); p=p->next; } 划线处填入正确的内容并把下划线删除, 使程序得出正确while(p!=NULL); 的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。printf("->End\n"); 不得增行或删行,也不得更改程序的结构~ } 给定源程序: } #include main() #include { NODE *head; #define N 6 int a[N]= {0, 10, 4, 2, 8, 6 }; typedef struct node { head=creatlist(a); int data; printf("\nThe original list:\n"); struct node *next; outlist(head); } NODE; fun(head); void fun(NODE *h) printf("\nThe list after sorting :\n"); { NODE *p, *q; int t; outlist(head); } /**********found**********/ p = __1__ ; 解题思路:本题是考察使用链表方法,对链表的结点数据进while (p) 行升序排列。 第一{ /**********found**********/ 处:使用结构指针p,来控制链表的结束,p必须指向q = __2__ ; h结构指针的next指针,来定位p的初始位置。所以应填while (q) { 写:h->next。 /**********found**********/ 第二处:使用while循环,对链表中结点的数据进行排序,if (p->data __3__ q->data) q必须指向p结构指针的next指针。所以应填写:p->next。 { t = p->data; p->data = q->data; q->data = t; } 第三处:如果当前结点中的数据大于(大于等于)循环中的q = q->next; 结点数据,那么进行交换,所以应填写:>(或>=)。 } *************************************************** p = p->next; 改错题: 给定程序MODI1.C是建立一个带头结点的单向链} 表, 并用随机函数为各结点数据域赋值。函数fun的作用是} 求出单向链表结点(不包括头结点)数据域中的最大值, 并NODE *creatlist(int a[]) 且作为函数值返回。请改正函数fun中指定部位的错误, 使{ NODE *h,*p,*q; int i; 它能得出正确的结果。注意: 不要改动main函数, 不得增h = (NODE *)malloc(sizeof(NODE)); 行或删行, 也不得更改程序的结构! h->next = NULL; 给定源程序: 18 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 #include 解题思路: #include 程序中是使用while循环语句和结合结构指针p来找到数据typedef struct aa 域中的最大值。 { int data; 第一处: p指向形参结构指针h的next指针,所以应改为:struct aa *next; p=h->next;。 } NODE; 第二处: p指向自己的下一个结点,所以应改为:p=p->next, fun ( NODE *h ) *************************************************** { int max=-1; 编程题: 请编写函数fun, 函数的功能是: 将M行N列的NODE *p; 二维数组中的数据,按行的顺序依次放到一维数组中, 一维/***********found**********/ 数组中数据的个数存放在形参n所指的存储单元中。 p=h ; 例如, 二维数组中的数据为: while(p) 33 33 33 33 { if(p->data>max ) 44 44 44 44 max=p->data; 55 55 55 55 /***********found**********/ 则一维数组中的内容应是: 33 33 33 33 44 44 44 44 55 55 p=h->next ; 55 55。 } 注意:部分源程序在文件PROG1.C中。请勿改动主函数mainreturn max; 和其它函数中的任何内容, 仅在函数fun的花括号中填入} 你编写的若干语句。 outresult(int s, FILE *pf) { fprintf(pf,"\nThe max in link : %d\n",s);} NODE *creatlink(int n, int m) { NODE *h, *p, *s, *q; 给定源程序: int i, x; #include h=p=(NODE *)malloc(sizeof(NODE));h->data=9999; void fun(int (*s)[10], int *b, int *n, int mm, int nn) for(i=1; i<=n; i++) { { s=(NODE *)malloc(sizeof(NODE)); s->data=rand()%m; s->next=p->next; } p->next=s; p=p->next; main() } {int w[10][10] = {{33,33,33,33},{44,44,44,44}, p->next=NULL; {55,55,55,55}},i,j ; return h; int a[100] = {0}, n = 0 ; } printf("The matrix:\n") ; outlink(NODE *h, FILE *pf) for(i = 0 ; i < 3 ; i++) { NODE *p; { for(j = 0 ; j < 4 ; j++) printf("%3d",w[i][j]) ; p=h->next; printf("\n") ; fprintf(pf,"\nTHE LIST :\n\n HEAD "); } while(p) fun(w, a, &n, 3, 4) ; { fprintf(pf,"->%d ",p->data); p=p->next; } printf("The A array:\n") ; fprintf(pf,"\n"); for(i=0; i < n ; i++) } printf("%3d",a[i]); main() printf("\n\n") ; { NODE *head; int m; NONO() ; head=creatlink(12, 100); } outlink(head , stdout); 解题思路:本题是把二维数组中的数据按行存放到一维数组m=fun(head); 中。 printf("\nTHE RESULT :\n"); outresult(m, stdout); 1. 计算存放到一维数组中的位置。 } 2. 取出二维数组中的数据存放到一维数组(已计算出的位 19 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 置)中。 结果。 参考答案: 第一处:定义函数指针的类型,所以应填:double。 void fun(int (*s)[10], int *b, int *n, int mm, int nn) 第二处:使f指向函数f1,所以应填:f1。 { 第三处:使f指向函数f2,所以应填:f2。 int i, j, k ; *************************************************** for(i = 0 ; i < mm ; i++) 改错题:给定程序MODI1.C是建立一个带头结点的单向链表,for(j = 0 ; j < nn ; j++) { 并用随机函数为各结点赋值。函数fun的功能是将单向链表k = i * nn + j ; 结点 (不包括头结点)数据域为偶数的值累加起来, 并且作b[k] = s[i][j] ; 为函数值返回。请改正函数fun中指定部位的错误, 使它能} 得出正确的结果。注意: 不要改动main函数, 不得增行或*n = mm * nn ; 删行, 也不得更改程序的结构! } 给定源程序: 第14套 #include 填空题:给定程序中, 函数fun的功能是用函数指针指向要#include 调用的函数,并进行调用。 typedef struct aa 规定在__2__处使f指向函数f1,在__3__处使f指向函数{ int data; struct aa *next; }NODE; f2。当调用正确时,程序 int fun(NODE *h) 输出: x1=5.000000, x2=3.000000, { int sum = 0 ; x1*x1+x1*x2=40.000000 .请在程序的下划线处填入正确的NODE *p; 内容并把下划线删除, 使程序得出正确的结果。 注意:源/***********found**********/ 程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,p=h; 也不得更改程序的结构~ while(p) 给定源程序: { if(p->data%2==0) #include sum +=p->data; double f1(double x) /***********found**********/ { return x*x; } p=h->next; double f2(double x, double y) } { return x*y; } return sum; double fun(double a, double b) } { NODE *creatlink(int n) { NODE *h, *p, *s, *q; /**********found**********/ __1__ (*f)(); int i, x; double r1, r2; h=p=(NODE *)malloc(sizeof(NODE)); for(i=1; i<=n; i++) /**********found**********/ f = __2__ ; /* point fountion f1 */ { s=(NODE *)malloc(sizeof(NODE)); r1 = f(a); s->data=rand()%16; /**********found**********/ s->next=p->next; f = __3__ ; /* point fountion f2 */ p->next=s; r2 = (*f)(a, b); p=p->next; return r1 + r2; } } p->next=NULL; main() return h; { double x1=5, x2=3, r; } r = fun(x1, x2); outlink(NODE *h, FILE *pf) printf("\nx1=%f, x2=%f, x1*x1+x1*x2=%f\n",x1, x2, r); { NODE *p; } p = h->next; 解题思路:本题主要是考察用函数指针指向要调用的函数。fprintf(pf ,"\n\nTHE LIST :\n\n HEAD " ); 程序中共有三处要填上适当的内容,使程序能运行出正确的while(p) 20 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 { fprintf(pf ,"->%d ",p->data ); p=p->next; } for(i = 0 ; i < j / 2 ; i++) fprintf (pf,"\n"); if(str[i] != str[j - i - 1]) return 0 ; } return 1 ; outresult(int s, FILE *pf) } { fprintf(pf,"\nThe sum of even numbers : %d\n",s);} 第15套 main() 填空题:程序通过定义学生结构体变量,存储了学生的学号、{ NODE *head; int even; 姓名和3门课的成绩。所有学生数据均以二进制方式输出到head=creatlink(12); student.dat文件中。函数fun的功能是从指定文件中找出head->data=9000; 指定学号的学生数据,读入此学生数据,对该生的分数进行outlink(head , stdout); 修改,使每门课的分数加3分,修改后重写文件中该学生的even=fun(head); 数据,即用该学生的新数据覆盖原数据,其它学生数据不变;printf("\nThe result :\n"); outresult(even, stdout); 若找不到,则什么都不做。请在程序的下划线处填入正确的} 内容并把下划线删除, 使程序得出正确的结果。注意:源程解题思路:本题是考察如何使用单向链表把数据域的值按条序存放在考生文件夹下的BLANK1.C中。不得增行或删行,件进行累加。 也不得更改程序的结构~ 第一处:试题要求不计算头结点,所以应改为:p=h->next; 给定源程序: 第二处:指向p的下一个结点来实现循环,所以应改为:#include p=p->next; #define N 5 **************************************** typedef struct student { 编程题: 请编写函数fun, 函数的功能是: 判断字符串是long sno; 否为回文。若是, 函数返回1,主函数中输出: YES, 否则char name[10]; 返回0, 主函数中输出NO。回文是指顺读和倒读都一样的字float score[3]; 符串。例如, 字符串LEVEL是回文, 而字符串123312就不} STU; 是回文。注意:部分源程序在文件PROG1.C中。请勿改动主void fun(char *filename, long sno) 函数main和其它函数中的任何内容,仅在函数fun的花括{ FILE *fp; 号中填入你编写的若干语句。 STU n; int i; 给定源程序: fp = fopen(filename,"rb+"); #include /**********found**********/ #define N 80 while (!feof(__1__)) int fun(char *str) { fread(&n, sizeof(STU), 1, fp); /**********found**********/ { if (n.sno__2__sno) break; } } if (!feof(fp)) main() { char s[N] ; { for (i=0; i<3; i++) n.score[i] += 3; printf("Enter a string: ") ; gets(s) ; /**********found**********/ printf("\n\n") ; puts(s) ; fseek(__3__, -1L*sizeof(STU), SEEK_CUR); if(fun(s)) printf(" YES\n") ; fwrite(&n, sizeof(STU), 1, fp); else printf(" NO\n") ; } fclose(fp); NONO() ; } } 解题思路:本题是考察如何判断一个字符串是回文字符串,main() { STU t[N]={ {10001,"MaChao", 91, 92, 77}, 回文是指顺读和倒读都一样的字符串。可以利用for循环语 句来判断,如果前后不一致,则不是回文字符串。 {10002,"CaoKai", 75, 60, 88}, 参考答案: {10003,"LiSi", 85, 70, 78}, {10004,"FangFang", 90, 82, int fun(char *str) 87}, { {10005,"ZhangSan", 95, 80, 88}}, ss[N]; int i, j = strlen(str) ; int i,j; FILE *fp; 21 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 fp = fopen("student.dat", "wb"); /**********found**********/ fwrite(t, sizeof(STU), N, fp); n=strlen[ aa ]; fclose(fp); for( i=1; i=0) && ( ch #include *************************************************** 改错题:给定程序MODI1.C中函数fun的功能是:利用插入#define N 8 排序法对字符串中的字符按 从小到大的顺序进行排序。插struct slist 入法的基本算法是:先对字符串中的头两个元素进行排序。{ double s; 然后把第三个字符插入到前两个字符中,插入后前三个字符struct slist *next; 依然有序;再把第四个字符插入到前三个字符中,„„。待}; typedef struct slist STREC; 排序的字符串已在主函数中赋予。请改正程序中的错误,使 它能得出正确结果。注意:不要改动main函数,不得增行double fun( STREC *h ) 或删行,也不得更改程序的结构。 { 给定源程序: #include } #include STREC * creat( double *s) #define N 80 { STREC *h,*p,*q; int i=0; void insert(char *aa) h=p=(STREC*)malloc(sizeof(STREC));p->s=0; { int i,j,n; char ch; while(is=s[i]; i++; p->next=q; p=q; 有M个字符串,且串长next=0; 序存放在考生文件夹下的BLANK1.C中。不得增行或删行,return h; 也不得更改程序的结构~ } 给定源程序: outlist( STREC *h) #include { STREC *p; #include p=h->next; printf("head"); #define M 5 do #define N 20 { printf("->%2.0f",p->s);p=p->next;} void fun(char (*ss)[N]) while(p!=0); { int i, j, n, len=0; printf("\n\n"); for(i=0; in)n=len; STREC *h; } h=creat( s ); outlist(h); for(i=0; inext)。 } 3. 判断p指针是否结束,如果结束,则返回max,否则做main() 下一步。 {char ss[M][N]={"shanghai","guangzhou","beijing", 4. 判断max是否小于p->s,如果小于,则max取p->s,否"tianjing","cchongqing"}; 则不替换。 int i; 5. 取p->next赋值给p(取下一结点位置给p),转3继续。 printf("The original strings are :\n"); 参考答案: for(i=0; is; printf("The result is :\n"); STREC *p; for(i=0; inext; } while(p) 解题思路:第一处:利用for循环语句取当前字符串的长度,{ if(p->s>max ) 所以应填:ss[i]。 max=p->s; 第二处:在字符串的右边填字符*,其开始位置是n+j,其p=p->next; 中n是该字符串本身的长度,j是循环控制变量,所以应填:} n+j。 return max; 第三处:字符串处理结束应置字符串结束符,其位置是} n+j+1,所以应填:1。 第16套 *************************************************** 填空题:给定程序中,函数fun的功能是:求出形参ss所指改错题:给定程序MODI1.C中 fun 函数的功能是:将p所指字符串数组中最长字符串的长度,将其余字符串右边用字符字符串中每个单词的最后一个字母改成大写。(这里的“单 23 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 词”是指由空格隔开的字符串)。 写的若干语句。 例如, 若输入 "I am a student to take the 给定源程序: examination.", #include 则应输出 "I aM A studenT tO takE thE examination."。 #include 请修改程序中的错误之处, 使它能得出正确的结果。注意: #include 不要改动 main 函数, 不得删行, 也不得更改程序的结构! int fun(char *s,int num) 给定源程序: { #include #include } void fun( char *p ) main() { { int k = 0; char s[10]; for( ; *p; p++ ) printf("输入7个字符的字符串:"); if( k ) gets(s); { fun(s,7); /**********found***********/ printf("\n%s",s); if( p == ' ' ) NONO(); { } k = 0; 解题思路:本题是考察考生如何对字符串中的字符按降序进/**********found***********/ 行排序。给出的程序是使用双重for循环以及冒泡法进行排* (p-1) = toupper( *( p - 1 ) ) 序的,结果仍存放在原先的字符串上。 } 参考答案: } int fun(char *s,int num) else { k = 1; char ch ; } int i, j ; main() for(i = 1 ; i < 6 ; i++) { for(j = i + 1 ; j < 6 ; j++) char chrstr[64]; { if(*(s + i) < *(s + j)) int d ; { printf( "\nPlease enter an English sentence within 63 ch = *(s + j) ; letters: "); *(s + j) = *(s +i) ; gets(chrstr); *(s + i) = ch ; d=strlen(chrstr) ; } chrstr[d] = ' ' ; } chrstr[d+1] = 0 ; } printf("\n\nBefore changing:\n %s", chrstr); 第17套 fun(chrstr); 填空题:程序通过定义学生结构体数组,存储了若干名学生printf("\nAfter changing:\n %s", chrstr); 的学号、姓名和3门课的成绩。函数fun的功能是将存放学} 生数据的结构体数组,按照姓名的字典序(从小到大)排序。解题思路:第一处:if( p == ' ' )为if( *p == ' ' )。 请在程序的下划线处填入正确的内容并把下划线删除, 使第二处:语句后面要加 , 。 程序得出正确的结果。注意:源程序存放在考生文件夹下的*************************************************** BLANK1.C中。不得增行或删行,也不得更改程序的结构~ 编程题: 请编写函数fun, 对长度为7个字符的字符串, 除给定源程序: 首、尾字符外,将其余5个字符按ASCII码降序排列。例如,#include 原来的字符串为 CEAedca,排序后输出为 CedcEAa 。注意: #include 部分源程序在文件PROG1.C中。请勿改动主函数main和其struct student { 它函数中的任何内容, 仅在函数fun的花括号中填入你编long sno; 24 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 char name[10]; 为:eABCDFGH。请改正程序中的错误,使它能得出正确结果。float score[3]; 注意:不要改动main函数,不得增行或删行,也不得更改}; 程序的结构。 void fun(struct student a[], int n) 给定源程序: { #include /**********found**********/ fun( char *p ) __1__ t; { char max,*q; int i=0; int i, j; max=p[i]; /**********found**********/ while( p[i]!=0 ) for (i=0; i<__2__; i++) { if( max 0) q=p+i { t = a[i]; a[i] = a[j]; a[j] = t; } } } i++; main() } { struct student s[4]={{10001,"ZhangSan", 95, 80, /**********found**********/ 88},{10002,"LiSi", 85, 70, 78}, {10003,"CaoKai", 75, wihle( q>p ) 60, 88}, {10004,"FangFang", 90, 82, 87}}; { *q=*(q-1); int i, j; q--; printf("\n\nThe original data :\n\n"); } for (j=0; j<4; j++) p[0]=max; { printf("\nNo: %ld Name: %-8s Scores: ",s[j].sno, } s[j].name); main() for (i=0; i<3; i++) printf("%6.2f ", s[j].score[i]); { char str[80]; printf("\n"); printf("Enter a string: "); gets(str); } printf("\nThe original string: "); puts(str); fun(s, 4); fun(str); printf("\n\nThe data after sorting :\n\n"); printf("\nThe string after moving: "); puts(str); for (j=0; j<4; j++) printf("\n\n"); { printf("\nNo: %ld Name: %-8s Scores: ",s[j].sno, } s[j].name); 解题思路: for (i=0; i<3; i++) printf("%6.2f ", s[j].score[i]); 第一处:在语句后缺少分号,所应改为:q=p+i;。 printf("\n"); 第二处:保留字while写错,所应改为:while(q>p)。 } *************************************************** } 编程题: 学生的记录由学号和成绩组成,N名学生的数据解题思路:本题是对结构体数组中的姓名按升序进行排列。 已在主函数中放入结构体数组 s中, 请编写函数fun,它的第一处:t是一个临时变量,主要是存放学生数据的结构变功能是:把指定分数范围内的学生数据放在b所指的数组量,所以应填:struct student。 中,分数范围内的学生人数由函数值返回。例如,输入的分第二处:利用两重for循环进行排序操作,排序的终止条件数是60 69, 则应当把分数在60到69的学生数据进行输出,应该是总人数减1,所以应填:n-1。 包含60分和69分的学生数据。主函数中将把60放在low第三处:对姓名进行比较大小,所以应填:中,把69放在heigh中。注意: 部分源程序在文件PROG1.Ca[i].name,a[j].name。 文件中。请勿改动主函数main和其它函数中的任何内容,*************************************************** 仅在函数fun的花括号中填入你编写的若干语句。 改错题:给定程序MODI1.C中函数fun的功能是:在p所指给定源程序: 字符串中找出ASCII码值最大的字符,将其放在第一个位置#include 上;并将该字符前的原字符向后顺序移动。例如,调用fun#define N 16 函数之前给字符串输入:ABCDeFGH,调用后字符串中的内容typedef struct 25 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 { char num[10]; if(a[i].s >= l && a[i].s <= h) b[j++] = a[i] ; int s; return j ; } STREC; } int fun( STREC *a,STREC *b,int l, int h ) 第18套 { 填空题:给定程序中,函数fun的功能是:将形参s所指字 符串中的所有字母字符顺序前移,其他字符顺序后移,处理} 后新字符串的首地址作为函数值返回。例如,s所指字符串main() 为:asd123fgh543df,处理后新字符串为:asdfghdf123543。{STREC 请在程序的下划线处填入正确的内容并把下划线删除,使程s[N]={{"GA005",85},{"GA003",76},{"GA002",69}, 序得出正确的结果。注意:源程序存放在考生文件夹下的{"GA004",85},{"GA001",96},{"GA007",72},{"GA008",64}BLANK1.C中。不得增行或删行,也不得更改程序的结构~ ,{"GA006",87},{"GA015",85},{"GA013",94},{"GA012",64给定源程序: },{"GA014",91},{"GA011",90},{"GA017",64},{"GA018",6#include 4},{"GA016",72}}; #include STREC h[N],tt;FILE *out ; #include int i,j,n,low,heigh,t; char *fun(char *s) printf("Enter 2 integer number low & heigh : "); { int i, j, k, n; char *p, *t; scanf("%d%d", &low,&heigh); n=strlen(s)+1; if ( heigh< low ){ t=heigh;heigh=low;low=t; } t=(char*)malloc(n*sizeof(char)); n=fun( s,h,low,heigh ); p=(char*)malloc(n*sizeof(char)); printf("The student's data j=0; k=0; between %d--%d :\n",low,heigh); for(i=0; i='a')&&(s[i]<='z'))||((s[i]>='A')&&(s[i printf("%s %4d\n",h[i].num,h[i].s); ]<='Z'))) { printf("\n"); /**********found**********/ out = fopen("c:\\test\\out.dat","w") ; t[j]=__1__; j++;} n=fun( s,h,80,98 ); else fprintf(out,"%d\n",n); { p[k]=s[i]; k++; } for(i=0;ih[j].s) {tt=h[i] ;h[i]=h[j]; h[j]=tt;} for(i=0; i<__2__; i++) t[j+i]=p[i]; for(i=0;i #include #include #include int fun (char *s, char *t1, char *t2 , char *w) void fun(char *s, char t[]) { { int i; char *p , *r, *a; } strcpy( w, s ); main() /************found************/ { while ( w ) char s[100], t[100]; { p = w; r = t1; printf("\nPlease enter string S:"); scanf("%s", s); while ( *r ) fun(s, t); /************found************/ printf("\nThe result is: %s\n", t); IF ( *r == *p ) NONO(); { r++; p++; } } else break; 解题思路: if ( *r == '\0' ) a = w; 本题是从一个字符串按要求生成另一个新的字符串。我们使w++; 用for循环语句来解决这个问题。 } 参考答案: r = t2; void fun(char *s, char t[]) while ( *r ){ *a = *r; a++; r++; } { } int i, j = 0 ; main() for(i = 0 ; i < strlen(s); i++) { if(s[i] % 2= =0) char s[100], t1[100], t2[100], w[100]; t[j++] = s[i] ; printf("\nPlease enter string S:"); scanf("%s", s); t[j] = 0 ; printf("\nPlease enter substring t1:"); scanf("%s", } t1); 第19套 printf("\nPlease enter substring t2:"); scanf("%s", 填空题:程序通过定义学生结构体变量,存储了学生的学号、t2); 姓名和3门课的成绩。函数fun的功能是将形参a所指结构if ( strlen(t1)==strlen(t2) ) 体变量s中的数据进行修改,并把a中地址作为函数值返回{ fun( s, t1, t2, w); 主函数,在主函数中输出修改后的数据。例如:a所指变量printf("\nThe result is : %s\n", w); s中的学号、姓名、和三门课的成绩依次是:10001、" } ZhangSan "、95、80、88,修改后输出t中的数据应为:10002、else printf("\nError : strlen(t1) != strlen(t2)\n"); "LiSi "、96、81、89。请在程序的下划线处填入正确的内} 容并把下划线删除, 使程序得出正确的结果。注意:源程序解题思路:第一处:判断w指针所指的值是否是结束符,应存放在考生文件夹下的BLANK1.C中。不得增行或删行,也改为:while(*w)。 不得更改程序的结构~ 第二处:if错写成If。 给定源程序: *************************************************** #include 27 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 #include fun(char (*sq)[M]) struct student { { int i; char *sp; long sno; sp=sq[0]; char name[10]; for(i=0;isno = 10002; main() strcpy(a->name, "LiSi"); { char str[N][M], *longest; int i; /**********found**********/ printf("Enter %d lines :\n",N); for (i=0; i<3; i++) __2__ += 1; for(i=0; isno, 合并形成一个新的整数放在c 中。合并的方式是:将a中的t->name); 十位和个位数依次放在变量c的百位和个位上,b中的 十for (i=0; i<3; i++) printf("%6.2f ", t->score[i]); 位和个位数依次放在变量c的十位和千位上。 printf("\n"); 例如,当a,45,b=12。调用该函数后,c=2415。 注意: 部} 分源程序存在文件PROG1.C中。数据文件IN.DAT中的数据解题思路:本题利用形参对结构体变量中的值进行修改并通不得修改。请勿改动主函数main和其它函数中的任何内容,过地址把函数值返回。 仅在函数fun的花括号中填入你编写的若干语句。 第一处:必须定义结构指针返回类型,所以应填:struct 给定源程序: student *。 #include 第二处:分别对成绩增加1分,所以应填:a->score[i]。 void fun(int a, int b, long *c) 第三处:返回结构指针a,所以应填:a。 { *************************************************** } 改错题:给定程序MODI1.C中函数fun的功能是:从N个字main() 符串中找出最长的那个串,并将其地址作为函数值返回。各{ int a,b; long c; 字符串在主函数中输入,并放入一个字符串数组中。请改正printf("Input a, b:"); 程序中的错误,使它能得出正确结果。注意:不要改动mainscanf("%d%d", &a, &b); 函数,不得增行或删行,也不得更改程序的结构。 fun(a, b, &c); 给定源程序: printf("The result is: %ld\n", c); #include NONO(); #include } #define N 5 解题思路:本题是给出两个两位数的正整数分别取出各位上#define M 81 的数字,再按条件组成一个新数。取a十位数字的方法:/**********found**********/ a/10 ;取a个位数字的方法:a%10 28 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 参考答案: } void fun(int a, int b, long *c) 解题思路:第一处:求出N个数的平均值,所以应填:N。 { 第二处:利用for循环语句,把数组x中小于平均值的数,*c = (b%10)*1000+(a/10)*100+(b/10)*10+a%10; 依次存放到数组y中,其中位置由变量j来控制,所以应填:} j++。 第20套 第三处:i是while循环体的控制变量,每做一次循环均要填空题:给定程序中,函数fun的功能是:计算形参x所指加1。 所以应改为:i++; 数组中N个数的平均值(规定所有数均为正数),将所指数*************************************************** 组中小于平均值的数据移至数组的前部,大于等于平均值的改错题:给定程序MODI1.C中函数 fun 的功能是:统计字数据移至x所指数组的后部,平均值作为函数值返回,在主符串中各元音字母(即:A、E、I、O、U)的个数。注意:函数中输出平均值和移动后的数据。 字母不分大、小写。例如:若输入:THIs is a boot,则输例如,有10个正数:46 30 32 40 6 17 45 15 48 26,平出应该是:1、0、2、2、0。请改正程序中的错误,使它能均值为:30.500000 得出正确的结果。注意:不要改动 main 函数,不得增行或移动后的输出为:30 6 17 15 26 46 32 40 45 48请在程删行,也不得更改程序的结构~ 序的下划线处填入正确的内容并把下划线删除,使程序得出给定源程序: 正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C#include 中。不得增行或删行,也不得更改程序的结构~ fun ( char *s, int num[5] ) 给定源程序: { int k, i=5; #include for ( k = 0; k /**********found**********/ #define N 10 num[i]=0; double fun(double *x) for (; *s; s++) { int i, j; double av, y[N]; { i = -1; av=0; /**********found**********/ /**********found**********/ switch ( s ) for(i=0; i= 0) { if( x[i]!= -1 ) y[j++]=x[i]; num[i]++; /**********found**********/ } __3__; } } main( ) for(i=0; i 例如,有10个正数:46 30 32 40 6 17 45 15 48 26,平#define M 4 均值为:30.500000 #define N 5 移动后的输出为:46 32 40 45 48 30 6 17 15 26 int fun ( int a[M][N] ) 请在程序的下划线处填入正确的内容并把下划线删除, 使{ 程序得出正确的结果。注意:源程序存放在考生文件夹下的} BLANK1.C中。不得增行或删行,也不得更改程序的结构~ main( ) 给定源程序: { int aa[M][N]={{1,3,5,7,9}, #include {2,9,9,9,4}, #include {6,9,9,9,8}, #define N 10 {1,3,5,7,0}}; double fun(double *x) int i, j, y; { int i, j; double s, av, y[N]; clrscr(); s=0; printf ( "The original data is : \n" ); for(i=0; iav ){ y = fun ( aa ); /**********found**********/ printf( "\nThe sum: %d\n" , y ); y[__2__]=x[i]; x[i]=-1;} printf("\n"); for(i=0; i (这里的“单词”是指由空格隔开的字符串)。 #include 例如,若输入:I am a student to take the examination., #define N 5 则应输出:I Am A Student To Take The Examination.。 double fun ( int w[][N] ) 请改正程序中的错误,使程序能得出正确的结果。 { 注意:不要改动 main 函数,不得增行或删行,也不得更改} 程序的结构~ main ( ) 给定源程序: { int #include a[N][N]={0,1,2,7,9,1,9,7,4,5,2,3,8,3,1,4,5,6,8,2,5, #include 9,1,4,1}; /************found************/ int i, j; include double s ; /************found************/ printf("***** The array *****\n"); upfst ( char p ) for ( i =0; i /************found************/ #include for ( i=j+1; ia[i] ) { FILE *fp; int i,n; float x; /************found************/ if((fp=fopen(fname, "w"))==NULL) return 0; t=i; for(i=1;i<=10;i++) if ( p!=j ) /**********found**********/ { t = a[j]; a[j] = a[p]; a[p] = t; } fprintf(___1___,"%d %f\n",i,sqrt((double)i)); } printf("\nSucceed!~\n"); } /**********found**********/ putarr( int n, int *z ) ___2___; { int i; printf("\nThe data in file :\n"); for ( i = 1; i <= n; i++, z++ ) /**********found**********/ { printf( "%4d", *z ); if((fp=fopen(___3___,"r"))==NULL) if ( !( i%10 ) ) printf( "\n" ); return 0; } printf("\n"); fscanf(fp,"%d%f",&n,&x); } while(!feof(fp)) main() { printf("%d %f\n",n,x); fscanf(fp,"%d%f",&n,&x); } { int aa[20]={9,3,0,4,1,2,5,6,8,10,7}, n=11; fclose(fp); printf( "\n\nBefore sorting %d numbers:\n", n ); return 1; putarr( n, aa ); } fun( n, aa ); main() printf( "\nAfter sorting %d numbers:\n", n ); putarr( n, { char fname[]="myfile3.txt"; aa ); fun(fname); } } 解题思路:第一处:for循环的终止值应该 序整数从小到大排序。 请改正程序中的错误,使它能得出void fun(int a, int b, long *c) 正确的结果。注意:不要改动main函数,不得增行或删行,{ 也不得更改程序的结构~ } 给定源程序: main() #include { int a,b; long c; #include printf("Input a, b:"); 32 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 scanf("%d,%d", &a, &b); 填:a[0][i]。 fun(a, b, &c); 第二处:如果b[i]值小于a[j][i]的值,则把a[j][i]重新printf("The result is: %ld\n", c); 赋值给b[i]中,保存最大的值, NONO(); } 所以应填:<。 解题思路: 本题是给出两个两位数的正整数分别取出各位第三处:在主函数中,x是存放矩阵数据,y是存放每列的上的数字,再按条件组成一个新数。取a十位数字的方法:最大值,所以应填:x,y。 a/10 ;取a个位数字的方法:a%10 *************************************************** 参考答案: 改错题:给定程序MODI1.C中函数fun的功能是: 交换主函void fun(int a, int b, long *c) 数中两个变量的值。例如: 若变量a中的值原为8,b中的值{ 为3。程序运行后a中的值为3, b中的值为8。 请改正程*c=(b%10)*1000+(a%10)*100+(b/10)*10+(a/10); 序中的错误, 使它能计算出正确的结果。注意: 不要改动 } main 函数, 不得增行或删行, 也不得更改程序的结构! 第23套 给定源程序: 填空题:给定程序中,函数fun的功能是:找出N×N矩阵#include 中每列元素中的最大值,并按顺序依次存放于形参b所指的/*********found**********/ 一维数组中。请在程序的下划线处填入正确的内容并把下划int fun(int x,int y) 线删除, 使程序得出正确的结果。注意:源程序存放在考生{ 文件夹下的BLANK1.C中。不得增行或删行,也不得更改程int t; 序的结构~ /*********found**********/ 给定源程序: t=x;x=y;y=t; #include } #define N 4 main() void fun(int (*a)[N], int *b) { { int i,j; int a,b; for(i=0; i printf("\nThe result is:"); #define MAX 100 for(i=0; i (i/2)) aa[k++] = i; 值返回。 } 第一处:必须定义结构返回类型,所以应填:struct return k; student。 } 第二处:对姓名进行修改,所以应填:a.name。 第24套 第三处:分别对成绩增加1分,所以应填:a.score[i]。 填空题:程序通过定义学生结构体变量,存储了学生的学号、*************************************************** 姓名和3门课的成绩。函数fun的功能是将形参a中的数据改错题:假定整数数列中的数不重复,并存放在数组中。给进行修改,把修改后的数据作为函数值返回主函数进行输定程序MODI1.C中函数fun的功能是:删除数列中值为x出。例如:传给形参a的数据中,学号、姓名、和三门课的的元素。n中存放的是数列中元素的个数。请改正程序中的成绩依次是:10001、"ZhangSan"、95、80、88,修改后的错误,使它能得出正确结果。注意:不要改动main函数,数据应为:10002、"LiSi"、96、81、89。 请在程序的下划不得增行或删行,也不得更改程序的结构。 线处填入正确的内容并把下划线删除, 使程序得出正确的给定源程序: 结果。 注意:源程序存放在考生文件夹下的BLANK1.C中。#include 不得增行或删行,也不得更改程序的结构~ #define N 20 给定源程序: fun(int *a,int n,int x) #include { int p=0,i; #include a[n]=x; struct student { while( x!=a[p] ) long sno; p=p+1; char name[10]; /**********found**********/ float score[3]; if(P==n) return -1; 34 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 else A015",85}, { for(i=p;i a[i].s) 动主函数main和其它函数中的任何内容,仅在函数fun的{ j = 0 ; b[j++] = a[i] ; min = a[i].s ; 花括号中填入你编写的若干语句。 } 给定源程序: else if(min = = a[i].s) #include b[j++] = a[i] ; #define N 16 } typedef struct return j ; { char num[10]; } int s; 第25套 } STREC; 填空题:人员的记录由编号和出生年、月、日组成,N名人int fun( STREC *a, STREC *b ) 员的数据已在主函数中存入结构体数组std中,且编号唯{ 一。函数fun的功能是:找出指定编号人员的数据, 作为} 函数值返回,由主函数输出,若指定编号不存在,返回数据中main() 的编号为空串。请在程序的下划线处填入正确的内容并把下{ STREC 划线删除,使程序得出正确的结果。注意:源程序存放在考s[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",8生文件夹下的BLANK1.C中。不得增行或删行,也不得更改5}, 程序的结构~ {"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87},{"G给定源程序: 35 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 #include #include #include int fun (char *s, char *t) #define N 8 { typedef struct int n; char *p , *r; { char num[10]; n = 0; int year,month,day ; while ( *s ) }STU; { p = s; r = t; /**********found**********/ while ( *r ) ___1___ fun(STU *std, char *num) if ( *r == *p ) { { int i; STU a={"",9999,99,99}; /************found************/ for (i=0; i 程序中的错误,使它能得出正确的结果。注意:不要改动#include main 函数,不得增行或删行,也不得更改程序的结构~ void fun(char *s, char t[]) 给定源程序: { #include } 36 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 main() q=q->___3___; { } char s[100], t[100]; } printf("\nPlease enter string S:"); scanf("%s", s); } fun(s, t); } printf("\nThe result is: %s\n", t); SLIST *creatlist(int *a) NONO(); } { SLIST *h,*p,*q; int i; 解题思路:本题是从一个字符串按要求生成另一个新的字符h=p=(SLIST *)malloc(sizeof(SLIST)); 串。我们使用for循环语句来解决这个问题。 for(i=0; idata=a[i]; p->next=q; p=q; { } int i, j = 0 ; p->next=0; for(i = 0 ; i < strlen(s); i++) if(s[i] % 2) t[j++] return h; = s[i] ; } t[j] = 0 ; void outlist(SLIST *h) } { SLIST *p; 第26套 p=h->next; 填空题:给定程序中已建立一个带有头结点的单向链表,链if (p==NULL) printf("\nThe list is NULL!\n"); 表中的各结点按数据域递增有序链接。函数fun的功能是:else 删除链表中数据域值相同的结点,使之只保留一 个。请在程{ printf("\nHead"); 序的下划线处填入正确的内容并把下划线删除,使程序得出do { printf("->%d",p->data); p=p->next; } 正确的结果。 注意:源程序存放在考生文件夹下的while(p!=NULL); BLANK1.C中。不得增行或删行,也不得更改程序的结构~ printf("->End\n"); 给定源程序: } #include } #include main( ) #define N 8 { SLIST *head; int a[N]={1,2,2,3,4,4,4,5}; typedef struct list head=creatlist(a); { int data; printf("\nThe list before deleting :\n"); outlist(head); struct list *next; } SLIST; fun(head); void fun( SLIST *h) printf("\nThe list after deleting :\n"); outlist(head); { SLIST *p, *q; p=h->next; } if (p!=NULL) 解题思路:本题是考察考生对链表的操作,主要是解决删除{ q=p->next; 链表中数据域值相同的结点。程序中共有三处要填上适当的while(q!=NULL) 内容,使程序能运行出正确的结果。函数fun中使用两个临{ if (p->data==q->data) 时结构指针变量p和q对链表进行操作。首先p指向链表开 始的next指针,q指向p的next指针,再利用while循环{ p->next=q->next; /**********found**********/ 语句来判断指针q是否NULL,如果q指针是指向NULL,那free(___1___); 么函数结束返回。如果不是NULL,那么就要判断p和q中/**********found**********/ data值是否相同,如果值相同,则要删除该结点,然后继q=p->___2___; 续判断下一结点值是相同,如果还相同,那么继续删除结点,} 直至不相同为止。如果两个结点的值不相同,那么p就指向else q,q指向q的next指针再继续操作上述过程。 删除结点{ p=q; 的方法是:先将p的next指针指向q的next指针,再释放/**********found**********/ q指针指向的内存,最后把q指针再指向p的next指针就 37 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 可以删除一个链表中的结点了。 void fun ( int m, int *a , int *n ) 第一处:释放q指针所指的内存空间,应填q。 { 第二处:q指针指向p的next指针,重新完成链接,应填} next。 main( ) 第三处:两个结点的值不相同,那么q就指向q的next指{ int aa[M], n, k; 针,应填next。 fun ( 50, aa, &n ); *************************************************** for ( k = 0; k < n; k++ ) 改错题:给定程序MODI1.C中函数fun的功能是:用选择法if((k+1)%20==0) printf("\n"); 对数组中的n个元素按从小到 大的顺序进行排序。 请修改else printf( "%4d", aa[k] ); 程序中的错误,使它能得出正确的结果。注意:不要改动printf("\n") ; main函数,不得增行和删行,也不得更改程序的结构~ NONO( ); 给定源程序: } #include 解题思路:本题考察对某个数能被其他的数整除方式,并把#define N 20 符合条件的数存放在数组a中。我们给出的程序是使用forvoid fun(int a[], int n) 循环语句以及取模的方式来解决这个问题的。 { int i, j, t, p; 参考答案: for (j = 0 ;j < n-1 ;j++) { void fun ( int m, int *a , int *n ) /************found************/ { p = j int i ; for (i = j;i < n; i++) *n=0 ; if(a[i] < a[p]) for(i=7 ; i<=m; i++) /************found************/ if((i % 7 == 0) || (i % 11 == 0)) a[(*n)++]=i ; p = j; } t = a[p] ; a[p] = a[j] ; a[j] = t; 第27套 } 填空题:给定程序中,函数fun的功能是:计算下式前n} 项的和作为函数值返回。 例如,当形参n的值为10时,函main() 数返回:9.612558。请在程序的下划线处填入正确的内容并{ 把下划线删除,使程序得出正确的结果。注意:源程序存放int a[N]={9,6,8,3,-1},i, m = 5; 在考生文件夹下的BLANK1.C中。不得增行或删行,也不得printf("排序前的数据:") ; 更改程序的结构~ for(i = 0;i < m;i++) printf("%d ",a[i]); printf("\n"); 给定源程序: fun(a,m); #include printf("排序后的数据:") ; double fun(int n) for(i = 0;i < m;i++) printf("%d ",a[i]); printf("\n"); { int i; double s, t; } /**********found**********/ 解题思路:第一处:语句后缺少分号。 s=__1__; 第二处:保存最小值的位置,所以应改为:p = i;。 /**********found**********/ *************************************************** for(i=1; i<=__2__; i++) 编程题: 请编写一个函数fun,它的功能是:求出1到m{ t=2.0*i; 之间(含m)能被7或11整除的所有整数放在数组a中,通/**********found**********/ 过n返回这些数的个数。例如,若传送给m的值为50,则s=s+(2.0*i-1)*(2.0*i+1)/__3__; 程序输出:7 11 14 21 22 28 33 35 42 44 49注意: 部分} 源程序存在文件PROG1.C中。请勿改动主函数main和其它return s; 函数中的任何内容,仅在函数fun的花括号中填入 你编写} 的若干语句。 main() 给定源程序: { int n=-1; #include while(n<0) #define M 100 { printf("Please input(n>0): "); scanf("%d",&n); } 38 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 printf("\nThe result is: %f\n",fun(n)); #include } #include 解题思路:第一处:根据公式可知,累加和变量s,应置0。 double fun ( double eps) 第二处:for循环的终止值应为形参n。 { 第三处:根据公式以及函数体中t变量内容,所以应填:t*t。 } *************************************************** main( ) 改错题:给定程序MODI1.C中函数 fun 的功能是:统计{ double x; substr所指子字符串在str所指字符串中出现的次数。例printf("Input eps:") ; 如,若字符串为aaas lkaaas,子字符串为as,则应输出2。scanf("%lf",&x); printf("\neps = %lf, PI=%lf\n", x, 请改正程序中的错误,使它能计算出正确的结果。注意:不fun(x)); 要改动main函数,不得增行或删行,也不得更改程序的结NONO(); 构~ } 给定源程序: 解题思路:本题是根据公式进行计算。 #include 参考答案: fun (char *str,char *substr) double fun ( double eps) { int i,j,k,num=0; { /************found************/ double s=1,t=1./3; for(i = 0, str[i], i++) int n=1; for(j=i,k=0;substr[k]==str[j];k++,j++) while(t>=eps) /************found************/ { s+=t; n++; t=t*n/(2.0*n+1); } If(substr[k+1]=='\0') return (s*2.0); { num++; } break; 第28套 } 填空题:给定程序中,函数fun的功能是:统计形参s所指return num; 字符串中数字字符出现的次数,并存放在形参t所指的变量} 中,最后在主函数中输出。例如,形参s所指的字符串为:main() abcdef35adgh3kjsdf7。输出结果为:4。请在程序的下划线{ 处填入正确的内容并把下划线删除,使程序得出正确的结char str[80],substr[80]; 果。注意:源程序存放在考生文件夹下的BLANK1.C中。不printf("Input a string:") ; 得增行或删行,也不得更改程序的结构~ gets(str); 给定源程序: printf("Input a substring:") ; #include gets(substr); void fun(char *s, int *t) printf("%d\n",fun(str,substr)); { int i, n; } n=0; 解题思路:第一处:循环for语句中应有分号。 /**********found**********/ 第二处:if错写成If。 for(i=0; ___1___ !=NULL; i++) *************************************************** /**********found**********/ 编程题: 请编写一个函数fun,它的功能是:根据以下公if(s[i]>='0'&&s[i]<= ___2___ ) n++; 式求π的值(要求满足精度 /**********found**********/ 0.0005, 即某项小于0.0005时停止迭代): ___3___ ; π 1 1×2 1×2×3 1×2ׄ×n } ? = 1+ ? +?——+ ???? +„„+ ?——???? 2 3 3×5 3×5×7 3×5ׄ×(2n+1) main() 程序运行后,如果输入精度0.0005,则程序输出为3.14„。 { char s[80]="abcdef35adgh3kjsdf7"; 注意: 部分源程序存在文件PROG1.C文件中。请勿改动主函int t; 数main和其它函数中的任何内容,仅在函数fun的花括号printf("\nThe original string is : %s\n",s); 中填入你编写的若干语句。 fun(s,&t); 给定源程序: printf("\nThe result is : %d\n",t); 39 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 } } 解题思路: main( ) 第一处:在for循环中终止值要判断字符串是否结束符,所{ int aa[1000], n, k ; 以应填:s[i]。 fun ( aa, &n ) ; 第二处:判断是否是数字,所以应填:'9'。 for ( k = 0 ; k < n ; k++ ) 第三处:字符串中数字字符出现的次数n,并存放在形参tif((k + 1) % 10 == 0) printf("\n") ; 所指的变量中,所以应填:*t=n。 else printf("%5d", aa[k]) ; *************************************************** NONO( ); 改错题:给定程序MODI1.C中函数fun的功能是:通过某种} 方式实现两个变量值的交换,规定不允许增加语句和表达解题思路: 式。例如变量a 中的值原为8,b中的值原为3, 程序运行本题利用for循环语句以及取模%运算来得出符合条件的整后 a 中的值为 3,b中的值为8。请改正程序中的错误,使数并存入a所指的数组。 它能得出正确的结果。注意: 不要改动 main 函数,不得参考答案: 增行或删行,也不得更改程序的结构~ void fun (int *a, int *n) 给定源程序: { #include int i ; int fun(int *x,int y) *n = 0 ; { for(i = 7 ; i < 1000 ; i++) int t ; if(((i % 7) = = 0 || (i % 11) = = 0) && (i % 77) != /**************found**************/ 0) t = x ; x = y ; a[(*n)++] = i ; /**************found**************/ } return(y) ; 第29套 } 填空题:程序通过定义学生结构体变量,存储了学生的学号、main() 姓名和3门课的成绩。函数fun的功能是对形参b所指结构{ 体变量中的数据进行修改,最后在主函数中输出修改后的数int a = 3, b = 8 ; 据。 例如: b所指变量t中的学号、姓名、和三门课的成printf("%d %d\n", a, b) ; 绩依次是: 10002、 "ZhangQi"、93、85、87,修改后输出b = fun(&a, b) ; t中的数据应为:10004、" LiJie "、93、85、87。请在程printf("%d %d\n", a, b) ; 序的下划线处填入正确的内容并把下划线删除, 使程序得} 出正确的结果。注意:源程序存放在考生文件夹下的解题思路:第一处:由于x是整型指针变量,所以地址不能BLANK1.C中。不得增行或删行,也不得更改程序的结构~ 赋值给整型变量,因此必须取x地址上的值,所以应改为给定源程序: t=*x;*x=y;。 #include 第二处:已交换后的值存放在t中,所以返回值应为#include return(t);。 struct student { *************************************************** long sno; 编程题: 请编写函数fun,它的功能是: 求出 1 到 1000 char name[10]; 之间能被 7 或11整除、但不能同时被 7 和 11 整除的所float score[3]; 有整数并将它们放在a所指的数组中,通过 n 返回这些数}; 的个数。注意: 部分源程序在文件PROG1.C中。请勿改动主void fun( struct student *b) 函数main和其它函数中的任何内容,仅在函数fun的花括{ int i; 号中填入你编写的若干语句。 /**********found**********/ 给定源程序: b__1__ = 10004; #include /**********found**********/ void fun (int *a, int *n) strcpy(b__2__, "LiJie"); { } main() 40 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 { struct student t={10002,"ZhangQi", 93, 85, 87}; *************************************************** int i; 编程题: 学生的记录由学号和成绩组成,N名学生的数据printf("\n\nThe original data :\n"); 已在主函数中放入结构体数组s中, 请编写函数fun,它的printf("\nNo: %ld Name: %s\nScores: ",t.sno, t.name); 功能是:把高于等于平均分的学生数据放在b所指的数组for (i=0; i<3; i++) printf("%6.2f ", t.score[i]); 中,高于等于平均分的学生人数通过形参n传回,平均分通printf("\n"); 过函数值返回。注意: 部分源程序在文件PROG1.C文件中。/**********found**********/ 请勿改动主函数main和其它函数中的任何内容,仅在函数fun(__3__); fun的花括号中填入你编写的若干语句。 printf("\nThe data after modified :\n"); 给定源程序: printf("\nNo: %ld Name: %s\nScores: ",t.sno, t.name); #include for (i=0; i<3; i++) printf("%6.2f ", t.score[i]); #define N 12 printf("\n"); typedef struct } { char num[10]; 解题思路:本题是对结构体变量中的值进行修改并通过函数double s; 中的参数进行返回。 } STREC; 第一处:对学号进行更改,所以应填:->sno。 double fun( STREC *a, STREC *b, int *n ) 第二处:对姓名进行更改,所以应填:->name。 { 第三处:对函数的调用,所以应填:&t。 *************************************************** } 改错题:给定程序MODI1.C中函数fun的功能是:应用递归main() 算法求形参a的平方根。求平方根的迭代公式如下: { STREC 1 a s[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",8x1 = ? ( x0 + ? ) 2 x0 5}, 例如,a为2时,平方根值为:1.414214。{"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87},{"G请改正程序中的错误,使它能得出正确结果。 A09",60}, 注意:不要改动main函数,不得增行或删行,也不得更改{"GA11",79},{"GA12",73},{"GA10",90}}; 程序的结构。 STREC h[N], t;FILE *out ; 给定源程序: int i,j,n; double ave; #include ave=fun( s,h,&n ); #include printf("The %d student data which is higher /**********found**********/ than %7.3f:\n",n,ave); double fun(double a, dounle x0) for(i=0;i0.00001 ) fprintf(out, "%d\n%7.3f\n", n, ave); y=fun(a,x1); for(i=0;i t) b[(*n)++] = 第二处:对结构体中的成员name进行替换,所以应填:a[i] ; b.name。 return t ; 第三处:分别输出结构体中的成绩,所以应填:score[i]。 } *************************************************** 第30套 改错题:给定程序MODI1.C中函数fun的功能是:从s所指填空题:程序通过定义学生结构体变量,存储了学生的学号、字符串中删除所有小写字母c。请改正程序中的错误,使它姓名和3门课的成绩。函数fun的功能是将形参a所指结构能计算出正确的结果。注意:不要改动 main 函数,不得增体变量中的数据赋给函数中的结构体变量b,并修改b中的行或删行,也不得更改程序的结构~ 学号和姓名,最后输出修改后的数据。例如:a所指变量中给定源程序: 的学号、姓名、和三门课的成绩依次是:10001、"ZhangSan"、#include 95、80、88,则修改后输出b中的数据应为:10002、"LiSi"、void fun( char *s ) 95、80、88。请在程序的下划线处填入正确的内容并把下划{ int i,j; 线删除, 使程序得出正确的结果。注意:源程序存放在考生for(i=j=0; s[i]!='\0'; i++) 文件夹下的BLANK1.C中。不得增行或删行,也不得更改程if(s[i]!='c') 序的结构~ /************found************/ 给定源程序: s[j]=s[i]; #include /************found************/ #include s[i]='\0'; struct student { } long sno; main() char name[10]; { char s[80]; float score[3]; printf("Enter a string: "); gets(s); }; printf("The original string: "); puts(s); void fun(struct student a) fun(s); { struct student b; int i; printf("The string after deleted : "); /**********found**********/ puts(s);printf("\n\n"); b = __1__; } b.sno = 10002; 解题思路:第一处: 新字符串的位置值是由变量j来控制/**********found**********/ 的,但程序中字符赋值后没有对j进行增量的语句,所以应strcpy(__2__, "LiSi"); 改为:s[j++]=s[i];。 printf("\nThe data after modified :\n"); 第二处: 对新字符串添加字符串结束符,由于程序中使用变printf("\nNo: %ld Name: %s\nScores: ",b.sno, b.name); 量j对新字符串来控制的,所以应改为:s[j]=0;。 /**********found**********/ ***************************************************for (i=0; i<3; i++) printf("%6.2f ", b.__3__); ************** printf("\n"); 编程题: 假定输入的字符串中只包含字母和*号。请编写函} 数fun,它的功能是:将字符串中的前导*号全部移到字符main() 串的尾部。函数fun中给出的语句仅供参考。 例如,字符 42 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 串中的内容为:*******A*BC*DEF*G****,移动后,字符串中生文件夹下的BLANK1.C中。不得增行或删行,也不得更改的内容应当是:A*BC*DEF*G***********。在编写函数时, 不程序的结构~ 得使用C语言提供的字符 串函数。注意: 部分源程序在文给定源程序: 件PROG1.C文件中。请勿改动主函数main和其它函数中的#include 任何内容,仅在函数fun的花括号中填入你编写的若干语void fun(char *s, char *p) 句。 { int i, j, n, x, t; 给定源程序: n=0; #include for(i=0; s[i]!='\0'; i++) n++; void fun( char *a ) for(i=1; is[j]) t=j; printf("Enter a string:\n");gets(s); if(t!=i) fun( s ); { x=s[i]; s[i]=s[t]; s[t]=x; } printf("The string after moveing:\n");puts(s); } NONO(); for(i=1,j=0; i0;n--) /* 在串尾补n个'*' */ —?1 - — + — - — + „„ *q++='*'; 4 3 5 7 *q='\0'; 例如, 程序运行后, 输入0.0001, 则程序输出3.1414。 } 请改正程序中的错误,使它能输出正确的结果。 第31套 注意:不要改动 main 函数,不得增行或删行,也不得更改填空题:给定程序中,函数fun的功能是:对形参s所指字程序的结构~ 符串中下标为奇数的字符按 ASCII码大小递增排序,并将给定源程序: 排序后下标为奇数的字符取出,存入形参p所指字符数组#include 中,形成一个新串。例如,形参s所指的字符串为:#include baawrskjghzlicda,执行后p所指字符数组中的字符串应float fun ( float num ) 为:aachjlsw。请在程序的下划线处填入正确的内容并把下{ int s ; 划线删除,使程序得出正确的结果。注意:源程序存放在考float n, t, pi ; 43 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 t = 1 ; pi = 0 ; n = 1 ; s = 1 ; NONO() ; /**************found**************/ } while(t >= num) 解题思路:本题是利用字符串拷贝和字符串连接来生成新的{ 字符串。 pi = pi + t ; 参考答案: n = n + 2 ; void fun (char a[], char b[], int n) s = -s ; { strncpy(b, a, n) ; /**************found**************/ b[n] = 0 ; t = s % n ; strcat(b, a + n + 1) ; } } pi = pi * 4 ; 第32套 return pi ; 填空题:给定程序中,函数fun的功能是:在形参ss所指字} 符串数组中,将所有串长超过k的字符串中右边的字符删main( ) 除,只保留左边的k个字符。ss所指字符串数组中共有N{ float n1, n2 ; 个字符串,且串长小于M。请在程序的下划线处填入正确的printf("Enter a float number: ") ; 内容并把下划线删除, 使程序得出正确的结果。注意:源程scanf("%f", &n1) ; 序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,n2 = fun(n1) ; 也不得更改程序的结构~ printf("%6.4f\n", n2) ; 给定源程序: } #include 解题思路:第一处:要判断t的最后一项绝对小于指定的数,#include 由于t是实数,那么应改为while(fabs(t)>=num)。 #define N 5 第二处:t是s除以n的值,而不是取余数,所以应改t=s/n;。 #define M 10 *************************************************** /**********found**********/ 编程题“请编写一个函数void fun (char a[],char b[],int void fun(char (*ss) __1__, int k) n),其功能是:删除一个字符串中指定下标的字符。其中, a{ int i=0 ; 指向原字符串, 删除指定字符后的字符串存放在b所指的/**********found**********/ 数组中,n中存放指定的下标。例如,输入一个字符串: World,while(i< __2__) { 然后输入3,则调用该函数后的结果为: Word。注意: 部分/**********found**********/ 源程序在文件PROG1.C中。请勿改动主函数main和其它函ss[i][k]=__3__; i++; } 数中的任何内容,仅在函数fun的花括号中填入你编写的若} 干语句。 main() 给定源程序: { char #include x[N][M]={"Create","Modify","Sort","skip","Delete"}; #include int i; #define LEN 20 printf("\nThe original string\n\n"); void fun (char a[], char b[], int n) for(i=0;i 公式求π值,并作为函数值返回。例如,给指定精度的变量void fun( char *a, int n ) eps输入0.0005时,应当输出Pi=3.140578。 { 1 1 2 1 2 3 1 2 3 4 π ? =1+ ? + ?×? + ?×?×? + ?×?×?×? +„ 2 3 3 5 3 5 7 3 5 7 9 } 请改正程序中的错误,使它能得出正确结果。 main() 注意:不要改动main函数,不得增行或删行,也不得更改{ char s[81]; int n; 程序的结构。 printf("Enter a string:\n");gets(s); 给定源程序: printf("Enter n : ");scanf("%d",&n); #include fun( s,n ); #include printf("The string after deleted:\n");puts(s); double fun(double eps) NONO(); { double s,t; int n=1; } s=0.0; 解题思路:本题是考察字符串的操作。利用for循环来判断/************found************/ a[j]的字符是否是字符串结束符,如果不是字符串结束符,t=0; 则把a[j]的字符依次存放到a[i]。其中,变量i是n的初while( t>eps) 始值,变量j是字符串前导的*号数。 { s+=t; 参考答案: t=t * n/(2*n+1); void fun( char *a, int n ) n++; { } /* 以下代码仅供参考 */ /************found************/ int i=0,j,k=0; return(s); while(a[k]=='*') k++; /* k为统计*字符个数 */ } if(k>n) main() { { double x; i=n;j=k; printf("\nPlease enter a precision: "); /* 以下完成将下标为k至串尾的字符前移k-n个位置 */ scanf("%lf",&x); for(; a[j] !=0 ; j++) printf("\neps=%lf, Pi=%lf\n\n",x,fun(x)); a[i++]=a[j]; } a[i] = 0; 解题思路: } 第一处: 初始化t的值,根据程序中的计算程序和试题的要} 求得出,t应为1。 第33套 第二处: 根据公式π/2得出,所以返回时应原有s的基础填空题:给定程序的功能是:调用函数fun将指定源文件中上乘以2作为返回值。 所以应该为:return(2*s); 的内容复制到指定的目标文件中,复制成功时函数返回值为*************************************************** 1,失败时返回值为0。在复制的过程中,把复 制的内容输编程题: 假定输入的字符串中只包含字母和*号。请编写函出到终端屏幕。主函数中源文件名放在变量sfname中,目数fun,它的功能是:使字符串的前导*号不得多于n个;若标文件名放在变量tfname中。请在程序的下划线处填入正多于n个,则删除多余的*号; 若少于或等于n个, 则什么确的内容并把下划线删除,使程序得出正确的结果。注意:也不做,字符串中间和尾部的*号不删除。函数fun中给出的源程序存放在考生文件夹下的BLANK1.C中。不得增行或删语句仅供参考。 例如,字符串中的内容为:行,也不得更改程序的结构~ *******A*BC*DEF*G****,若n的值为4,删除后,字符串给定源程序: 中的内容应当是:****A*BC*DEF*G****;若n的值为8,则#include 字符串中的内容仍为:*******A*BC*DEF*G****。n的值在#include 主函数中输入。 在编写函数时,不得使用C语言提供的字int fun(char *source, char *target) 符串函数。注意: 部分源程序在文件PROG1.C文件中。请勿{ FILE *fs,*ft; char ch; 45 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 /**********found**********/ { int d; if((fs=fopen(source, ___1___))==NULL) long sl=1; return 0; *t = 0; if((ft=fopen(target, "w"))==NULL) while ( s > 0) return 0; { d = s%10; printf("\nThe data in file :\n"); /************found************/ ch=fgetc(fs); if (d%2=0) /**********found**********/ { *t=d* sl+ *t; while(!feof(___2___)) sl *= 10; { putchar( ch ); } /**********found**********/ /************found************/ fputc(ch,___3___); s \= 10; ch=fgetc(fs); } } } fclose(fs); fclose(ft); main() printf("\n\n"); { long s, t; return 1; printf("\nPlease enter s:"); scanf("%ld", &s); } fun(s, &t); main() printf("The result is: %ld\n", t); { char sfname[20] ="myfile1",tfname[20]="myfile2"; } FILE *myf; int i; char c; 解题思路:第一处:判断相等的条件是 == 。 myf=fopen(sfname,"w"); 第二处:整除的符号是 / 。 printf("\nThe original data :\n"); *************************************************** for(i=1; i<30; 编程题: 函数fun的功能是:将两个两位数的正整数a、bi++){ c='A'+rand()%25;fprintf(myf,"%c",c); 合并形成一个整数放在c中。合并的方式是:将a数的十位printf("%c",c); } 和个位数依次放在c数的十位和千位上, b数的十位和个fclose(myf);printf("\n\n"); 位数依次放在c数的百位和个位上。例如,当a,45,b=12if (fun(sfname, tfname)) printf("Succeed!"); 时,调用该函数后,c=5142。注意: 部分源程序存在文件else printf("Fail!"); PROG1.C中。数据文件IN.DAT中的数据不得修改。请勿改} 动主函数main和其它函数中的任何内容,仅在函数fun的解题思路:本题要求是把一个文件中的内容复制到另一个文花括号中填入你编写的若干语句。 件中。程序中共有三处要填上适当的内容,使程序能运行出给定源程序: 正确的结果。 #include 第一处:要求打开一个读方式的源文件,因此可以填上"r"void fun(int a, int b, long *c) 或"r+"。打开读文件操作的流是fs。 { 第二处:用while循环来判断源文件是否已读到文件结束} 符,int feof(FILE *stream),因此,此处只能填写fs。 main() 第三处:把已经读取的字符写入目标文件中,打开写文件操{ int a,b; long c; 作的流是ft,因此,此处只能填写ft。 printf("Input a, b:"); *************************************************** scanf("%d,%d", &a, &b); 改错题:给定程序MODI1.C中函数fun的功能是:将长整型fun(a, b, &c); 数中每一位上为偶数的数依次取出,构成一个新数放在tprintf("The result is: %ld\n", c); 中。高位仍在高位,低位仍在低位。例如,当s中的数为:NONO(); 87653142时,t中的数为:8642。请改正程序中的错误,使} 它能得出正确的结果。注意:不要改动main函数,不得增解题思路:本题是给出两个两位数的正整数分别取出各位上行或删行,也不得更改程序的结构~ 给定源程序: 的数字,再按条件组成一个新数。取a十位数字的方法:a/10 ;#include 取a个位数字的方法:a%10 void fun (long s, long *t) 参考答案: 46 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 void fun(int a, int b, long *c) 数寻找两个素数, 这两个素数之和等于该偶数,并将这两个{ 素数通过形参指针传回主函数。请改正函数fun中指定部位*c=(a%10)*1000+(b/10)*100+(a/10)*10+(b%10); 的错误, 使它能得出正确的结果。注意: 不要改动main函} 数, 不得增行或删行, 也不得更改程序的结构! 第34套 给定源程序: 填空题:用筛选法可得到2,n(n<10000)之间的所有素数,#include 方法是:首先从素数2开始,将所有2的倍数的数从数表中#include 删去(把数表中相应位置的值置成0);接着从数 表中找下void fun(int a,int *b,int *c) 一个非0数,并从数表中删去该数的所有倍数;依此类推,{ int i,j,d,y; 直到所找的下一个数等于n为止。这样会得到一个序列:2,for(i=3;i<=a/2;i=i+2) { 3,5,7,11,13,17,19,23,„„函数fun用筛选法找/**************found**************/ 出所有小于等于n的素数,并统计素数的个数作为函数值返Y=1; 回。请在程序的下划线处填入正确的内容并把下划线删除,for(j=2;j<=sqrt((double)i);j++) 使程序得出正确的结果。注意:源程序存放在考生文件夹下if(i%j==0) y=0; 的BLANK1.C中。不得增行或删行,也不得更改程序的结构~ if(y==1) { 给定源程序: /**************found**************/ #include d==a-i; int fun(int n) for(j=2;j<=sqrt((double)d);j++) { int a[10000], i,j, count=0; if(d%j==0) y=0; for (i=2; i<=n; i++) a[i] = i; if(y==1) i = 2; { *b=i; *c=d; } while (i 应填:a[i]。 double fun(int n) 第二处:找出下一个不是的a[i],所以应填:a[i]。 { 第三处:输出素数,只要判断a[i]不是0就是素数,所以} 应填:0。 main() *************************************************** { int n; double s; 改错题:给定程序MODI1.C中函数fun的功能是: 为一个偶printf("\nInput n: "); scanf("%d",&n); 47 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 s=fun(n); { int x[N][N]={0},i,j; printf("\n\ns=%f\n",s); fun(x); NONO(); printf("\nThe result is:\n"); } for(i=0; i 3,„依次类推。例如,若N=5,生成的矩阵为: #include 1 1 1 1 1 void fun( int m, int k ) 1 2 2 2 1 { 1 2 3 2 1 int aa[20], i; 1 2 2 2 1 for( i = 0; m; i++ ) 1 1 1 1 1 { 请在程序的下划线处填入正确的内容并把下划线删除, 使/**********found**********/ 程序得出正确的结果。 aa[i] = m/k; 注意:源程序存放在考生文件夹下的BLANK1.C中。不得增m /= k; 行或删行,也不得更改程序的结构~ } 给定源程序: for( ; i; i-- ) #include /**********found**********/ #define N 7 printf( "%d", aa[ i ] ); /**********found**********/ } void fun(int (*a) __1__) main() { int i,j,k,m; { if(N%2==0) m=N/2 ; int b, n; else m=N/2+1; printf( "\nPlease enter a number and a base:\n" ); for(i=0; i 的单向链表中结点的个数, 存放在形参n所指的存储单元#include 中。请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。注意:源程序存放在考生文件夹下 的BLANK1.C中。 不得增行或删行,也不得更改程序的结构~ fun(char(*a)[81],int num,char **max) 给定源程序: { #include #include } #define N 8 main() typedef struct list { { int data; char ss[10][81],*ps; struct list *next; int n,i=0; } SLIST; printf("输入若干个字符串:"); SLIST *creatlist(int *a); gets(ss[i]); void outlist(SLIST *); puts(ss[i]); void fun( SLIST *h, int *n) while(!strcmp(ss[i],"****")==0) { SLIST *p; { /**********found**********/ i++; ___1___=0; gets(ss[i]); p=h->next; puts(ss[i]); while(p) } { (*n)++; n=i; /**********found**********/ fun(ss,n,&ps); p=p->___2___; printf("\nmax=%s\n",ps); } } NONO(); } main() 解题思路:本题是考察考生怎样从已输入的字符串中找出长{ SLIST *head; int a[N]={12,87,45,32,91,16,20,48}, num; 度最大的字符串。求字符串的长度可以使用strlen函数。 参考答案: head=creatlist(a); outlist(head); fun(char(*a)[81],int num,char **max) /**********found**********/ { fun(___3___, &num); /* 以下代码仅供参考 */ printf("\nnumber=%d\n",num); int i,k=0,maxlen; /* k为a数组中最长串所在元素的下} SLIST *creatlist(int a[]) 标,初始为0,maxlen为其串长 */ maxlen=strlen(a[k]); { SLIST *h,*p,*q; int i; for(i=1;i maxlen) q->data=a[i]; p->next=q; p=q; { } maxlen = strlen(a[i]) ; p->next=0; k = i ; return h; 49 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 } { void outlist(SLIST *h) char s[100], t[100], *p; { SLIST *p; printf("\nPlease enter string S :"); scanf("%s", s ); p=h->next; printf("\nPlease enter substring t :"); scanf("%s", if (p==NULL) printf("The list is NULL!\n"); t ); else p = fun( s, t ); { printf("\nHead "); if ( p ) printf("\nThe result is : %s\n", p); do else printf("\nNot found !\n" ); { printf("->%d",p->data); p=p->next; } } while(p!=NULL); 解题思路:第一处:指向空指针错误,Null应NULL。 printf("->End\n"); 第二处:比较指针位置的值是否相等,所以应改为:} } if(*r==*p)。 解题思路:本题是要求统计出带有头结点的单向链表中结点*************************************************** 的个数。 编程题: 函数fun的功能是: 将s所指字符串中除了下标第一处:对n所指的存储单元进行初始化,所以应填:*n。 为偶数、同时ASCII值也为偶数的字符外,其余的全都删除;第二处:指向p的下一个结点,所以应填:next。 串中剩余字符所形成的一个新串放在t所指的数组中。例第三处:函数调用,在主函数中已经给出了head,所以应如,若s所指字符串中的内容为:"ABCDEFG123456",其中填:head。 字符A的ASCII码值为奇数,因此应当删除;其中字符B*************************************************** 的ASCII码值为偶数,但在数组中的下标为奇数,因此也应改错题:给定程序MODI1.C中函数fun的功能是:求出s当删除;而字符2的ASCII码值为偶数,所在数组中的下标所指字符串中最后一次出现的t 所指子字符串的地址,通也为偶数,因此不应当删除,其它依此类推。最后t所指的过函数值返回,在主函数中输出从此地址开始的字符串;若数组中的内容应是:"246"。注意: 部分源程序存在文件未找到,则函数值为NULL。例如,当字符串中的内容为:PROG1.C中。请勿改动主函数main和其它函数中的任何内"abcdabfabcdx",t中的内容为:"ab"时,输出结果应是:容,仅在函数fun的花括号中填入你编写的若干语句。 abcdx。当字符串中的内容为:"abcdabfabcdx",t中的内给定源程序: 容为:"abd"时,则程序输出未找到信息:not be found!。#include 请改正程序中的错误,使它能得出正确的结果。注意:不要#include 改动main函数,不得增行或删行,也不得更改程序的结构~ void fun(char *s, char t[]) 给定源程序: { #include } #include main() char * fun (char *s, char *t ) { { char *p , *r, *a; char s[100], t[100]; /************found************/ printf("\nPlease enter string S:"); scanf("%s", s); a = Null; fun(s, t); while ( *s ) printf("\nThe result is: %s\n", t); { p = s; r = t; NONO(); while ( *r ) } /************found************/ 解题思路:本题是从一个字符串按要求生成另一个新的字符if ( r == p ) 串。我们使用for循环语句来解决这个问题。 { r++; p++; } 参考答案: else break; void fun(char *s, char t[]) if ( *r == '\0' ) a = s; { s++; int i, j = 0 ; } for(i = 0 ; i < strlen(s) ; i += 2) return a ; if(s[i] % 2 == 0) t[j++] = s[i] ; } t[j] = 0 ; main() } 50 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 第37套 给定源程序: 填空题:给定程序中,函数fun的功能是:在形参ss所指字#include 符串数组中,查找含有形参substr所指子串的所有字符串/************found************/ 并输出,若没找到则输出相应信息。ss所指字符串数组中fun(int x, y, z ) 共有N个字符串,且串长小于M。程序中库函数strstr(s1, { int j,t ,n ,m; s2)的功能是在s1串中查找s2子串,若没有,函数值为0,j = 1 ; 若有,为非0。请在程序的下划线处填入正确的内容并把下t=j%x; 划线删除, 使程序得出正确的结果。注意:源程序存放在考m=j%y ; 生文件夹下的BLANK1.C中。不得增行或删行,也不得更改n=j%z; 程序的结构~ while(t!=0||m!=0||n!=0) 给定源程序: { j = j+1; #include t=j%x; #include m=j%y; #define N 5 n=j%z; #define M 15 } void fun(char (*ss)[M], char *substr) /************found************/ { int i,find=0; return i; /**********found**********/ } for(i=0; i< __1__ ; i++) main( ) /**********found**********/ { int x1,x2,x3,j ; if( strstr(ss[i], __2__) != NULL ) printf("Input x1 x2 x3: "); { find=1; puts(ss[i]); printf("\n"); } scanf("%d%d%d",&x1,&x2,&x3); /**********found**********/ printf("x1=%d, x2=%d, x3=%d \n",x1,x2,x3); if (find==__3__) printf("\nDon't found!\n"); j=fun(x1,x2,x3); } printf("The minimal common multiple is : %d\n",j); main() } {char x[N][M]={"BASIC","C langwage","Java", 解题思路:第一处: 函数中形参的定义不正确,应改为:"QBASIC","Access"},str[M]; fun(int x,int y, int z)。 int i; 第二处: 程序中三个数的最小公倍数是用j处理的,所以应printf("\nThe original string\n\n"); 返回j的值。 for(i=0;i 改错题:给定程序MODI1.C中函数fun的功能是:求三个数void fun( char *a, int n,int h,int e ) 的最小公倍数。例如,给主函数中的变量x1、x2、x3分别{ 输入15 11 2,则输出结果应当是:330。请改正程序中的} 错误,使它能得出正确结果。注意:不要改动main函数,main() 不得增行或删行,也不得更改程序的结构。 { char s[81],*t,*f; int m=0, tn=0, fn=0; 51 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 printf("Enter a string:\n");gets(s); a[j] = a[i]; ___2___; t=f=s; } while(*t){t++;m++;} /**********found**********/ t--; return ___3___; while(*t=='*'){t--;tn++;} } while(*f=='*'){f++;fn++;} main() fun( s , m,fn,tn ); { int b[N]={9,1,4,2,3,6,5,8,7}, i, n; printf("The string after deleted:\n");puts(s); printf("\nThe original data :\n"); NONO(); for (i=0; i 为5。请在程序的下划线处填入正确的内容并把下划线删int fun(int a,int b) 除,使程序得出正确的结果。注意:源程序存放在考生文件{ int r,t; 夹下的BLANK1.C中。不得增行或删行,也不得更改程序的if(a } #define N 9 r=a%b; int fun(int a[], int n) while(r!=0) { int i,j; { a=b; b=r; r=a%b; } j = 0; /************found************/ for (i=0; i 解题思路: #include 第一处:交换值的次序有问题,所以应改为:t=a;a=b;b=t;。 #define N 5 第二处:返回值错误,应改为:return(b);。 #define M 10 *************************************************** int fun(char (*ss)[M], int k) 编程题: 假定输入的字符串中只包含字母和*号。请编写函{ int i,j=0,len; 数fun,它的功能是:删除字符串中所有的*号。在编写函/**********found**********/ 数时,不得使用C语言提供的字符串函数。例如,字符串中for(i=0; i< __1__ ; i++) 的内容为:****A*BC*DEF*G*******,删除后,字符串中的内{ len=strlen(ss[i]); 容应当是:ABCDEFG。注意: 部分源程序在文件PROG1.C中。/**********found**********/ 请勿改动主函数main和其它函数中的任何内容,仅在函数if(len<= __2__) fun的花括号中填入你编写的若干语句。 /**********found**********/ 给定源程序: strcpy(ss[j++],__3__); #include } void fun( char *a ) return j; { } } main() main() { char { char s[81]; x[N][M]={"Beijing","Shanghai","Tianjing","Nanjing", printf("Enter a string:\n");gets(s); "Wuhan"}; fun( s ); int i,f; printf("The string after deleted:\n");puts(s); printf("\nThe original string\n\n"); NONO(); for(i=0;i NONO(); #include } void fun(char *p ,char *q, char *c) 解题思路:本题是考察字符串的操作。 { 1. 使用while循环语句求出字符串前导*号的个数。 /************found************/ 2. 使用while循环语句判断a[i]是否是字符串结束符标int k = 1; 志,如果不是字符串结束标志,则再判断是否是字符*号,/************found************/ 如果不是*号,则把a[i]字符存入a[k]中,如果是*号则跳while( *p != *q ) 过该*号,直至字符串结束为止。 { if( *p<*q ) c[k]=*q; 参考答案: else c[k]=*p; void fun( char *a ) if(*p) p++; { int i=0,k; if(*q) q++; while(a[i]=='*') i++; k++; k=i; } while(a[i]!='\0') } { main() if(a[i] != '*') a[k++]=a[i]; { char a[10]="aBCDeFgH", b[10]="ABcd", c[80]={'\0'}; i++; fun(a,b,c); } printf("The string a: "); puts(a); a[k]='\0'; printf("The string b: "); puts(b); } printf("The result : "); puts(c); 第40套 } 填空题:给定程序中已建立一个带有头结点的单向链表,链解题思路:第一处: 存放字符串初始位置也是从0开始存放表中的各结点按结点数据域中的数据递增有序链接。函数的,由于k是控制c字符串的位置值,所以k值应为0。 fun的功能是:把形参x的值放入一个新结点并插入到链表第二处: 判断两个字符串中是否有字符串结束符产生,所以中,插入后各结点数据域的值仍保持递增有序。请在程序的应改为:while( *p || *q ), 下划线处填入正确的内容并把下划线删除,使程序得出正确而不是两字符串中对应位置的值不相等。 的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。*************************************************** 不得增行或删行,也不得更改程序的结构~ 编程题: 假定输入的字符串中只包含字母和*号。请编写函给定源程序: 数fun,它的功能是:除了字符串前导的*号之外,将串中其#include 它*号全部删除。在编写函数时,不得使用C语言提供 #include 的字符串函数。函数fun中给出的语句仅供参考。 #define N 8 例如,字符串中的内容为:****A*BC*DEF*G*******,删除typedef struct list 后, 字符串中的内容应当是:****ABCDEFG。注意: 部分源{ int data; 程序在文件PROG1.C文件中。请勿改动主函数main和其它struct list *next; 函数中的任何内容,仅在函数fun的花括号中填入你编写的} SLIST; 若干语句。 void fun( SLIST *h, int x) 给定源程序: { SLIST *p, *q, *s; #include s=(SLIST *)malloc(sizeof(SLIST)); void fun( char *a ) /**********found**********/ { s->data=___1___; q=h; } p=h->next; main() while(p!=NULL && x>p->data) { { char s[81]; /**********found**********/ printf("Enter a string:\n");gets(s); q=___2___; fun( s ); p=p->next; 54 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 } 因此,此处应填p。 s->next=p; 第三处:当找到结点位置后,就要插入这个数,完成插入过/**********found**********/ 程。由于函数体中分配了结构指针s,s的next指针已经指q->next=___3___; 向了p,所以,当前位置q的next指针就应该指向指针s} 完成链表的链接。因此,此处应填s。 SLIST *creatlist(int *a) *************************************************** { SLIST *h,*p,*q; int i; 改错题:给定程序MODI1.C中函数fun的功能是:计算正整h=p=(SLIST *)malloc(sizeof(SLIST)); 数num的各位上的数字之积。例如,若输入:252,则输出for(i=0; idata=a[i]; p->next=q; p=q; 改动main函数,不得增行或删行,也不得更改程序的结构~ } 给定源程序: p->next=0; #include return h; long fun (long num) } { void outlist(SLIST *h) /************found************/ { SLIST *p; long k; p=h->next; do if (p==NULL) printf("\nThe list is NULL!\n"); { k*=num%10 ; else /************found************/ { printf("\nHead"); num\=10 ; do { printf("->%d",p->data); p=p->next; } } while(num) ; while(p!=NULL); return (k) ; printf("->End\n"); } } main( ) } { long n ; main() printf("\Please enter a number:") ; scanf("%ld",&n) ; { SLIST *head; int x; printf("\n%ld\n",fun(n)) ; int a[N]={11,12,15,18,19,22,25,29}; } head=creatlist(a); 解题思路:第一处:由于在k定义时没有赋初值,所以kprintf("\nThe list before inserting:\n"); 是一个随机数,根据试题要求,k应赋值为1。 outlist(head); 第二处:整除的符号是 / 。 printf("\nEnter a number : "); scanf("%d",&x); *************************************************** fun(head,x); 编程题: 请编写一个函数fun,它的功能是:计算n门课printf("\nThe list after inserting:\n"); 程的平均分,计算结果作为函数值返回。例如:若有5门课outlist(head); 程的成绩是:90.5, 72, 80, 61.5, 55 则函数的值为:71.80。} 注意: 部分源程序存在文件PROG1.C中。请勿改动主函数解题思路:本题是要求在一个有序的链表中插入一个数,插main和其它函数中的任何内容,仅在函数fun的花括号中填入后各结点仍然是有序的。程序中共有三处要填上适当的内入你编写的若干语句。 容,使程序能运行出正确的结果。 给定源程序: 第一处:在函数fun的开始处,已经对结构指针s分配了内#include 存,其中data是一个整型变量,实际要求填入一个整型数float fun ( float *a , int n ) 据。根据本题要求在一个链表插入一个整型数,该数已通过{ 函数的形参x传入,因此应填x。 } 第二处:使用一个while循环找出要插入一个数的位置,在main() 循环体中q实际上保留当前链表p位置的临时变量,如果{ float score[30]={90.5, 72, 80, 61.5, 55}, aver; x>p->data时,那么再移动链表指针到下一个结果,再进行aver = fun( score, 5 ); 判断是否符合条件,如果仍大于,则仍q保留链表p的位置。printf( "\nAverage score is: %5.2f\n", aver); 55 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 NONO ( ); printf("m=%5.1f ",m); } printf("\n"); 解题思路:本题是使用循环来计算平均值且结果由函数值返} 回。 解题思路: 参考答案: 第一处:计算好的平均值通过形参av返回,所以应填:*av。 float fun ( float *a , int n ) 第二处:计算小于平均值且最接近平均值的位置j,所以应{ 填:i。 int i; 第三处:返回该数,所以应填:x[j]。 float ave=0.0; *************************************************** for(i=0; i 值返回,在主函数中输出。 /************found************/ 例如,有10个正数:46 30 32 40 6 17 45 15 48 26,平int fun ( int n ) 均值为:30.500000 { float A=1; int i; 主函数中输出:m=30.0 请在程序的下划线处填入正确的内/************found************/ 容并把下划线删除,使程序得出正确的结果。注意:源程序for (i=2; i main( ) #define N 10 { int n ; double fun(double x[],double *av) printf("\nPlease enter n: ") ; { int i,j; double d,s; scanf("%d", &n ) ; s=0; printf("A%d=%f\n", n, fun(n) ) ; } for(i=0; i if(s[i]>='0' && s[i]<='9') #include { #define N 5 /**********found**********/ int fun ( int a[][N], int m ) t2[j]=s[i]; ___1___; { } } else t1[k++]=s[i]; main ( ) t2[j]=0; t1[k]=0; { int a[N][N], m, i, j; /**********found**********/ printf("***** The array *****\n"); for(i=0; i=3 ); printf("\nThe original string is : %s\n",s); printf("m = %4d\n",m); fun(s); fun ( a ,m ); printf("\nThe result is : %s\n",s); printf ("THE RESULT\n"); } for ( i =0; i a[i][j] *= m ; #include } #define MAXLINE 20 第42套 fun ( char *pstr[6]) 填空题:给定程序中,函数fun的功能是: 将s所指字符串{ int i, j ; 中的所有数字字符移到所有非数字字符之后,并保持数字字char *p ; 符串和非数字字符串原有的先后次序。例如,形参s所指的for (i = 0 ; i < 5 ; i++ ) { 字符串为:def35adh3kjsdf7。执行结果为:/**************found**************/ defadhkjsdf3537。请在程序的下划线处填入正确的内容并for (j = i + 1, j < 6, j++) 把下划线删除,使程序得出正确的结果。 { 注意:源程序存放在考生文件夹下的BLANK1.C中。不得增if(strcmp(*(pstr + i), *(pstr + j)) > 0) 行或删行,也不得更改程序的结构~ { 给定源程序: p = *(pstr + i) ; #include /**************found**************/ 57 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 *(pstr + i) = pstr + j ; if(*p == c) cnt++ ; *(pstr + j) = p ; p++ ; } } } } } main( ) return cnt ; { int i ; } char *pstr[6], str[6][MAXLINE] ; 第43套 for(i = 0; i < 6 ; i++) pstr[i] = str[i] ; 填空题:给定程序中,函数fun的功能是:在形参ss所指printf( "\nEnter 6 string(1 string at each line): 字符串数组中查找与形参t所指字符串相同的串,找到后返\n" ) ; 回该串在字符串数组中的位置(下标值),未找到则返回-1。for(i = 0 ; i < 6 ; i++) scanf("%s", pstr[i]) ; ss所指字符串数组中共有N个内容不同的字符串,且串长fun(pstr) ; 小于M。请在程序的下划线处填入正确的内容并把下划线删printf("The strings after sorting:\n") ; 除, 使程序得出正确的结果。注意:源程序存放在考生文件for(i = 0 ; i < 6 ; i++) printf("%s\n", pstr[i]) ; 夹下的BLANK1.C中。不得增行或删行,也不得更改程序的} 结构~ 解题思路:第一处:for循环语句中缺少分号。 给定源程序: 第二处:应该把pstr+j位置上的值赋值给*(pstr+i)上,所#include 以应改为:*(pstr+i)=*(pstr+j);。 #include *************************************************** #define N 5 编程题: 请编写函数fun,它的功能是:求出ss所指字符#define M 8 串中指定字符的个数,并返回此值。例如,若输入字符串: int fun(char (*ss)[M],char *t) 123412132,输入字符为: 1,则输出:3。注意: 部分源程序在{ int i; 文件PROG1.C中。请勿改动主函数main和其它函数中的任/**********found**********/ 何内容,仅在函数fun的花括号中填入你编写的若干语句。 for(i=0; i< __1__ ; i++) 给定源程序: /**********found**********/ #include if(strcmp(ss[i],t)==0 ) return __2__ ; #include return -1; #define M 81 } int fun(char *ss, char c) main() { { char } ch[N][M]={"if","while","switch","int","for"},t[M]; int n,i; main() { char a[M], ch; printf("\nThe original string\n\n"); printf("\nPlease enter a string:"); gets(a); for(i=0;i 的字符串,t是存放*号字符串。 fun( int *b ) 3. 最后利用字符串拷贝和连接,重新组成字符串a。 { int k,a1,a2,i=0; 参考答案: for(k=10; k<=55; k++) { void fun( char *a ) /************found************/ { a2=k/1O; char *p = a ; a1=k-a2*10; while(*p) p++ ; p- - ; if((k%3==0 && a2==5)||(k%3==0 && a1==5)) while(*p == '*') p- - ; { b[i]=k; i++; } p++ ; } *p = 0 ; /************found************/ } return k; 第44套 } 填空题:函数fun的功能是进行数字字符转换。若形参chmain( ) 中是数字字符'0','9', 则'0'转换成'9','1'转换成'8',{ int a[100],k,m; '2'转换成'7',„„,'9'转换成'0';若是其它字符则保持m=fun( a ); 不变;并将转换后的结果作为函数值返回。请在程序的下划printf("The result is :\n"); 线处填入正确的内容并把下划线删除,使程序得出正确的结for(k=0; k a2=k/10;。 /**********found**********/ 第二处: 要求统计个数并存入变量i中,最后返回i,所以___1___ fun(char ch) 应改为:return i;。 { *************************************************** /**********found**********/ 编程题: 假定输入的字符串中只包含字母和*号。请编写函if (ch>='0' && ___2___) 数fun,它的功能是:将字符串尾部的*号全部删除,前面/**********found**********/ 和中间的*号不删除。 例如,字符串中的内容为:return '9'- (ch-___3___); ****A*BC*DEF*G*******,删除后,字符串中的内容应当是:return ch ; ****A*BC*DEF*G。在编写函数时,不得使用C语言提供的字} 符串函数。注意: 部分源程序在文件PROG1.C文件中。请勿main() 改动主函数main和其它函数中的任何内容,仅在函数fun{ char c1, c2; 的花括号中填入你编写的若干语句。 printf("\nThe result :\n"); 给定源程序: c1='2'; c2 = fun(c1); #include printf("c1=%c c2=%c\n", c1, c2); void fun( char *a ) c1='8'; c2 = fun(c1); { printf("c1=%c c2=%c\n", c1, c2); c1='a'; c2 = fun(c1); } main() printf("c1=%c c2=%c\n", c1, c2); } { char s[81]; 解题思路:第一处:要求返回处理好的字符,所以应填:char。 printf("Enter a string:\n");gets(s); 第二处:判断该字符是否是数字,所以应填:ch<='9'。 fun( s ); 第三处:只要减去'0'的ASCII值,即可得到要求的结果,printf("The string after deleted:\n");puts(s); 所以应填:'0'。 59 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 *************************************************** #include 改错题:给定程序MODI1.C中函数fun的功能是:将p所指#define N 8 字符串中的所有字符复制到b中,要求每复制三个字符之后struct slist 插入一个空格。例如,在调用fun函数之前给a输入字符串:{ double s; ABCDEFGHIJK,调用函数之后,字符数组b中的内容则为:struct slist *next; ABC DEF GHI JK。请改正程序中的错误,使它能得出正确结}; 果。注意:不要改动main函数,不得增行或删行,也不得typedef struct slist STREC; 更改程序的结构。 double fun( STREC *h ) 给定源程序: { #include } void fun(char *p, char *b) STREC * creat( double *s) { int i, k=0; { STREC *h,*p,*q; int i=0; while(*p) h=p=(STREC*)malloc(sizeof(STREC));p->s=0; { i=1; while(is=s[i]; i++; p->next=q; p=q; b[k]=p; } k++; p++; i++; p->next=0; } return h; if(*p) } { outlist( STREC *h) /**********found**********/ { STREC *p; b[k++]=" "; p=h->next; printf("head"); } do } { printf("->%4.1f",p->s);p=p->next;} b[k]='\0'; while(p!=0); } printf("\n\n"); main() } { char a[80],b[80]; main() printf("Enter a string: "); gets(a); { double s[N]={85,76,69,85,91,72,64,87},ave; printf("The original string: "); puts(a); STREC *h; fun(a,b); h=creat( s ); outlist(h); printf("\nThe string after insert space: "); puts(b); ave=fun( h ); printf("\n\n"); printf("ave= %6.3f\n",ave); } NONO(); 解题思路:第一处:b[k]=*p; 。 } 第二处:把空格字符赋值给b[k++]中,而不是一个空格的解题思路:本题是计算链表结构中成绩的平均分。具体操作字符串。 所以应该:b[k++]=’’; 请看答案程序中的说明。 *************************************************** 参考答案: 编程题: N名学生的成绩已在主函数中放入一个带头节点double fun( STREC *h ) 的链表结构中,h指向链表的头节点。请编写函数fun,它的{ 功能是:求出平均分,由函数值返回。例如,若学生的成绩STREC *p=h->next; 是:85,76,69,85,91,72,64,87, 则平均分应当是:double av=0.0; 78.625。注意: 部分源程序在文件PROG1.C中。请勿改动主int n = 0 ; 函数main和其它函数中的任何内容,仅在函数fun的花括while(p!=NULL) 号中填入你编写的若干语句。 { 给定源程序: av = av + p->s ; #include p=p->next; 60 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 n++; 改错题:给定程序MODI1.C中函数fun的功能是:按以下递} 归公式求函数值。 av /= n ; 10 (n=1) return av ; fun(n)= } fun (n-1)+2 (n>1) 第45套 例如,当给n输入5时,函数值为18;当给n输入3时,填空题:函数fun的功能是:把形参a所指数组中的偶数按函数值为14。 原顺序依次存放到a[0]、 a[1]、a[2]、„„中,把奇数从请改正程序中的错误,使它能得出正确结果。注意:不要改数组中删除,偶数个数通过函数值返回。例如:若a所指数动main函数,不得增行或删行,也不得更改程序的结构。 组中的数据最初排列为:9、1、4、2、3、6、5、8、7,删给定源程序: 除奇数后a所指数组中的数据为:4、2、6、8,返回值为4。#include 请在程序的下划线处填入正确的内容并把下划线删除,使程/************found************/ 序得出正确的结果。注意:源程序存放在考生文件夹下的fun ( n ) BLANK1.C中。不得增行或删行,也不得更改程序的结构~ { int c; 给定源程序: /************found************/ #include if(n=1) #define N 9 c = 10 ; int fun(int a[], int n) else { int i,j; c= fun(n-1)+2; j = 0; return(c); for (i=0; i 则j加1,所以应填a[j]。 void fun( char *a,int n ) 第三处:返回删除奇数后a所指数组中数据的元素j,所以{ 应填:j。 } *************************************************** main() 61 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 { char s[81]; int n; if(strlen(ps[k]) < strlen(__2__) ) k=j; printf("Enter a string:\n");gets(s); /**********found**********/ printf("Enter n : ");scanf("%d",&n); tp=ps[i]; ps[i]=ps[k]; ps[k]= __3__ ; fun( s,n ); } printf("The string after deleted:\n");puts(s); printf("\nThe string after sorting by length:\n\n"); NONO(); for(i=0; i 串,且串长小于M。请在程序的下划线处填入正确的内容并#include 把下划线删除, 使程序得出正确的结果。注意:源程序存放/************found************/ 在考生文件夹下的BLANK1.C中。不得增行或删行,也不得fun(int n) 更改程序的结构~ { double sum, s0, s1, s2, s; int k; 给定源程序: sum = 1.0; #include if (n <= 2) sum = 0.0; #include s0 = 0.0; s1 = 0.0; s2 = 1.0; #define N 5 for (k = 4; k <= n; k++) #define M 8 { s = s0 + s1 + s2; void fun(char (*ss)[M]) sum += sqrt(s); { char *ps[N],*tp; int i,j,k; s0 = s1; s1 = s2; s2 = s; for(i=0; i 值由函数值返回。例如,当n = 10,x,0.3时,函数值为#include 1.349859。注意: 部分源程序在文件PROG1.C文件中。 请#include 勿改动主函数main和其它函数中的任何内容,仅在函数funvoid fun(char *s) 的花括号中填入你编写的若干语句。 { int k[26]={0},n,i,max=0; char ch; 给定源程序: while(*s) #include { if( isalpha(*s) ) { #include /**********found**********/ double fun(double x , int n) ch=tolower(__1__); { n=ch-'a'; } /**********found**********/ main() k[n]+= __2__ ; { } printf("%f\n", fun(0.3,10)); s++; NONO(); /**********found**********/ } if(max 行实型的类型转换。 #include 参考答案: /************found************/ double fun( int n ) void fun( int k ) { { int n; float s, w, p, q; double s = 0.0 ; n = 1; int i ; s = 1.0; for(i = 1 ; i <= n ; i++) s = s + 1.0 / (i * (i + 1)) ; while ( n <= k ) return s ; { w = 2.0 * n; } p = w - 1.0; 第48套 q = w + 1.0; 填空题:给定程序中,函数fun的功能是:将形参s所指字s = s * w *w/p/q; 符串中的数字字符转换成对应的数值,计算出这些数值的累n++; 加和作为函数值返回。例如,形参s所指的字符串为:} abs5def126jkm8,程序执行后的输出结果为:22。 /************found************/ 请在程序的下划线处填入正确的内容并把下划线删除, 使return s 程序得出正确的结果。 } 注意:源程序存放在考生文件夹下的BLANK1.C中。不得增main ( ) 行或删行,也不得更改程序的结构~ { 给定源程序: printf("%f\n", fun (10)); #include } #include 解题思路: #include 第一处:由于函数返回是实数,所以必须定义返回的类型,int fun(char *s) 只有整型或无结果返回可以忽略,其他必须定义返回的类{ int sum=0; 型,所以要在此行前加上double或float。 while(*s) { 第二处:缺少分号。 /**********found**********/ *************************************************** if( isdigit(*s) ) sum+= *s- __1__ ; 编程题: 编写函数fun,它的功能是:计算并输出下列级/**********found**********/ 数和: __2__; 1 1 1 } S = ?? + ?? + „ + ??? 1×2 2×3 n(n+1) /**********found**********/ 例如,当n = 10时,函数值为:0.909091。注意: 部分源return __3__ ; 程序在文件PROG1.C文件中。请勿改动主函数main和其它} 函数中的任何内容,仅在函数fun的花括号中填入 main() 你编写的若干语句。 { char s[81]; int n; 给定源程序: printf("\nEnter a string:\n\n"); gets(s); #include n=fun(s); double fun( int n ) printf("\nThe result is: %d\n\n",n); } { 解题思路:本题是把字符串中是数字字符转换成对应的数值} 并进行累加。 main() /* 主函数 */ 第一处:'0'字符对应的ASCII值是48,因此数字字符转换{ 成对应数值时只要减去48,即是该数字字符对应的数值,printf("%f\n", fun(10)); 所以应填:48。 NONO(); 第二处:到字符串下一个位置,所以应填:s++。 } 第三处:返回累加和sum,所以应填:sum。 解题思路:本题是根据公式计算结果。使用for循环语句进*************************************************** 64 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 改错题:给定程序MODI1.C中函数fun的功能是:计算小于参考答案: 形参k的最大的10个能被13或17整除的自然数之和。kdouble fun( int n) 的值由主函数传入,若k的值为500,则函数值为4622。请{ 改正程序中的错误,使程序能输出正确的结果。注意:不要double sum=0.0; 改动main函数,不得增行或删行,也不得更改程序的结构~ int i; 给定源程序: for(i=21; i<=n; i++) #include if((i % 3==0) && (i % 7==0)) sum+=i; int fun( int k ) return sqrt(sum) ; { int m=0, mc=0, j ; } while ((k >= 2) && (mc < 10)) 第49套 { 填空题:给定程序中,函数fun的功能是:将形参s所指字/************found************/ 符串中所有ASCII码值小于97的字符存入形参t所指字符if ((k%13 = 0) || (k%17 = 0)) 数组中,形成一个新串,并统计出符合条件的字符个数作为{ m = m+ k; mc++; } 函数值返回。例如,形参s所指的字符串为:Abc@1x56*,k--; 程序执行后t所指字符数组中的字符串应为:A@156*。请在} 程序的下划线处填入正确的内容并把下划线删除, 使程序return m; 得出正确的结果。注意:源程序存放在考生文件夹下的/************found************/ BLANK1.C中。不得增行或删行,也不得更改程序的结构~ _____ 给定源程序: main ( ) #include { int fun(char *s, char *t) printf("%d\n", fun (500)); { int n=0; } while(*s) 解题思路: { if(*s < 97) { 第一处:判断相等的条件是==,而不是=,所以只能在比较/**********found**********/ 处再添加一个=。 *(t+n)= __1__ ; n++; } 第二处:经过编译可知,"{"和"}"没有配对,所以在横线处/**********found**********/ 加上"}"。 __2__ ; *************************************************** } 编程题: 编写函数fun,它的功能是:求小于形参n同时*(t+n)=0; /**********found**********/ 能被3与7整除的所有自然数之和的平方根,并作为函数值 返回。例如若n为1000时,程序输出应为:s = 153.909064。return __3__ ; 注意: 部分源程序在文件PROG1.C文件中。请勿改动主函数} main() main和其它函数中的任何内容,仅在函数fun的花括号中 填入你编写的若干语句。 { char s[81],t[81]; int n; 给定源程序: printf("\nEnter a string:\n"); gets(s); #include n=fun(s,t); #include printf("\nThere are %d letter which ASCII code is less double fun( int n) than 97: %s\n",n,t); } { } 解题思路:本题是根据条件组成新的字符串并统计出符合条main() /* 主函数 */ 件的个数n。 { 第一处:把符合条件的当前字符存放到t字符串中,所以应printf("s =%f\n", fun ( 1000) ); 填:*s。 NONO(); 第二处:到字符串下一个位置,所以应填:s++。 } 第三处:返回符合条件的字符个数n,所以应填:n。 解题思路:本题是求小于形参n同时能被3与7整除的所有*************************************************** 自然数之和的平方根,并作为函数值返回。 改错题:给定程序MODI1.C中函数 fun 的功能是:由形参 65 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 给定n个实数,输出平均值,并统计在平均值以上(含平均{ 值)的实数个数。例如,n,8时,输入:printf("P=%f\n", fun (12,8)); 193.199,195.673,195.757,196.051,196.092,196.596, NONO(); 196.579,196.763 } 所得平均值为:195.838745,在平均值以上的实数个数应为:解题思路:本题是计算阶乘。 5 。请改正程序中的错误,使程序能输出正确的结果。注意:参考答案: 不要改动main函数,不得增行或删行,也不得更改程序的long jc(int m) 结构~ { 给定源程序: long s=1; #include int i ; int fun(float x[], int n) for(i=1;i<=m;i++) s=s*i ; { return s; /************found************/ } int j, c=0, float xa=0.0; float fun(int m, int n) for (j=0; j xa) 第50套 c++; 填空题:给定程序中,函数fun的功能是:有N×N矩阵,以return c; 主对角线为对称线,对称元素相加并将结果存放在左下三角} 元素中,右上三角元素置为0。例如,若N=3,有下列矩阵: main ( ) 1 2 3 { float x[100] = {193.199, 195.673, 195.757, 196.051, 4 5 6 196.092, 196.596, 196.579, 7 8 9 196.763}; 计算结果为 printf("%d\n", fun (x, 8)); 1 0 0 } 6 5 0 解题思路: 10 14 9 第一处:两种类型变量定义之间应该用分号,所以应改为:请在程序的下划线处填入正确的内容并把下划线删除,使程int j, c=0; float xa=0.;。 序得出正确的结果。 第二处:在C语言中,大于等于应表达为>=。 注意:源程序存放在考生文件夹下的BLANK1.C中。不得增*************************************************** 行或删行,也不得更改程序的结构~ 编程题: 编写函数fun,其功能是:根据以下公式求P的给定源程序: 值,结果由函数值带回。m与n为两个正整数且要求m > n。 #include m! #define N 4 P = ???—— n!(m-n)! /**********found**********/ 例如:m,12,n,8时,运行结果为495.000000。注意: 部void fun(int (*t)___1___ ) 分源程序在文件PROG1.C文件中。请勿改动主函数main和{ int i, j; 其它函数中的任何内容,仅在函数fun的花括号中填入你编for(i=1; i /**********found**********/ float fun(int m, int n) ___2___ =t[i][j]+t[j][i]; { /**********found**********/ } ___3___ =0; main() /* 主函数 */ } 66 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 } if (x==y||y==z){printf("Data error!\n");exit(0);} } sum=fun(x,y,z); main() printf("The result is : %5.2f\n",sum); { int t[][N]={21,12,13,24,25,16,47,38,29,11,32, } 54,42,21,33,10}, i, j; 解题思路: printf("\nThe original array:\n"); 第一处:define定义错误,所以应改为:#define FU(m,n) for(i=0; i 第二处:对称元素相加,其结果仍存放在左下三角元素中,void fun( char *a ) 所以应填:t[i][j]。 { 第三处:右上三角元素置为0,所以应填:t[j][i]。 } *************************************************** main() 改错题:给定程序MODI1.C中函数fun的功能是:计算函数 { char s[81]; F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值。其中x和y的值printf("Enter a string:\n");gets(s); 不等,z和y的值不等。 fun( s ); 例如,当x的值为9、y的值为11、z的值为15时,函数值printf("The string after deleted:\n");puts(s); 为 -3.50。 NONO(); 请改正程序中的错误,使它能得出正确结果。 } 注意:不要改动main函数,不得增行或删行,也不得更改解题思路:本题是考察字符串的操作。 程序的结构。 1. 利用循环扫描出字符串左边第1个字符不是'*'的字符。 给定源程序: 2. 再利用循环把以后的字符依次移动原字符串首地址开始#include 存放。 #include 3. 最后给字符串a加上结束符。 #include 参考答案: /************found************/ void fun( char *a ) #define FU(m,n) (m/n) { float fun(float a,float b,float c) int j=0; { float value; char *p = a ; value=FU(a+b,a-b)+FU(c+b,c-b); while(*p == '*') p++ ; /************found************/ while(*p) { Return(Value); a[j++] = *p ; } p++; main() } { float x,y,z,sum; a[j]=0 ; printf("Input x y z: "); } scanf("%f%f%f",&x,&y,&z); 第51套 printf("x=%f,y=%f,z=%f\n",x,y,z); 填空题:给定程序中,函数fun的功能是:计算出形参s 67 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 所指字符串中包含的单词个数,作为函数值返回。为便于统int count = 0, k, i ; 计,规定各单词之间用空格隔开。例如,形参s所指的字符for ( k = 0 ; k < n ; k++ ) 串为:This is a C language program.,函数的返回值为/**************found**************/ 6。请在程序的下划线处填入正确的内容并把下划线删除,t = s[k] ; 使程序得出正确的结果。注意:源程序存放在考生文件夹下ave = t / n ; 的BLANK1.C中。不得增行或删行,也不得更改程序的结构~ for ( i = 0 ; i < n ; i++ ) 给定源程序: if ( s[ i ] < ave ) count++ ; #include /**************found**************/ int fun(char *s) *aver = Ave ; { int n=0, flag=0; return count ; while(*s!='\0') } { if(*s!=' ' && flag==0) { main() /**********found**********/ { float s[30], aver ; __1__ ; flag=1;} int m, i ; /**********found**********/ printf ( "\nPlease enter m: " ) ; scanf ("%d", &m ) ; if (*s==' ') flag= __2__ ; printf ( "\nPlease enter %d mark :\n ", m ) ; /**********found**********/ for( i = 0 ; i < m ; i++ ) scanf ( "%f", s + i ) ; __3__ ; printf( "\nThe number of students : %d \n" , fun ( s, } m, &aver ) ); return n; printf( "Ave = %f\n", aver ) ; } } main() 解题思路: { char str[81]; int n; 第一处:应求累加和,而不赋值,所以应改为t+=s[k];。 printf("\nEnter a line text:\n"); gets(str); 第二处:所以应改为:*aver = ave ;。 n=fun(str); *************************************************** printf("\nThere are %d words in this text.\n\n",n); 编程题: 请编写函数fun,其功能是求出数组的最大元素} 在数组中的下标并存放在k所指的存储单元中。例如, 输入解题思路:本题是统计字符串中包含的单词个数。 如下整数: 876 675 896 101 301 401 980 431 451 777 第一处:单词个数用变量n来统计,当当前字母不是空格且则输出结果为: 6, 980注意: 部分源程序在文件PROG1.Cflag状态标志为0时,则单词数就加1,将状态标志flag文件中。请勿改动主函数main和其它函数中的任何内容,置为1,所以应填:n++。 仅在函数fun的花括号中填入你编写的若干语句。 第二处:当当前字符是空格时,flag状态标志置0,所以应给定源程序: 填:0。 #include 第三处:到字符串下一个位置,所以应填:s++。 int fun(int *s, int t, int *k) *************************************************** { 改错题:给定程序MODI1.C中函数 fun 的功能是:从n(形} 参)个学生的成绩中统计出低于平均分的学生人数,此人数main( ) 由函数值返回,平均分存放在形参aver所指的存储单元中。{ 例如,若输入 8 名学生的成绩:80.5 60 72 90.5 98 51.5 int a[10]={876,675,896,101,301,401,980,431,451,777}, 88 64则低于平均分的学生人数为: 4 (平均分为:k ; 75.5625 )。请改正程序中的错误,使它能统计出正确的结fun(a, 10, &k) ; 果。注意:不要改动 main 函数,不得增行或删行,也不得printf("%d, %d\n", k, a[k]) ; 更改程序的结构~ NONO( ) ; 给定源程序: } #include 解题思路:本题考察如何在指定的数组找出最大元素值的下#define N 20 标,通过形参*k返回到主程序中。给出的程序是使用forint fun ( float *s, int n, float *aver ) 循环语句进行处理的,在循环之前,首先把数组的第一个元{ float ave, t = 0.0 ; 素值赋给最大值变量max,位置pos为0,然后通过循环依 68 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 次判断下一元素值是否大于最大值max,如果大于,那么把main() 这个数重新赋给max,位置i赋给pos,循环结果,即可得{ int 到最大值的位置pos,最后执行语句*k=pos就可以实现返回t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,3 了。 3,10}, i, j; 参考答案: printf("The original array:\n"); int fun(int *s, int t, int *k) for(i=0; i 请在程序的下划线处填入正确的内容并把下划线删除,使程double fun( double q ) 序得出正确的结果。注意:源程序存放在考生文件夹下的{ int n; double s,t; BLANK1.C中。不得增行或删行,也不得更改程序的结构~ n = 2; 给定源程序: s = 2.0; #include while (s<=q) #define N 4 { void fun(int (*t)[N]) t=s; { int i, j, x; /************found************/ /**********found**********/ s=s+(n+1)/n; for(i=0; i<___1___; i++) n++; { } /**********found**********/ printf("n=%d\n",n); x=t[i][___2___] ; /************found************/ for(j=N-1; j>=1; j--) return s; t[i][j]=t[i][j-1]; } /**********found**********/ main ( ) t[i][___3___]=x; { } printf("%f\n", fun(50)); } } 69 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 解题思路:第一处:如果两个整数类型相除,结果仍为整数,正确的内容并把下划线删除,使程序得出正确的结果。注意:所以必须转换其中一个数的类型,所以应改为:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删s+=(float)(n+1)/n;。 行,也不得更改程序的结构~ 第二处:返回结果错误,应改为:return t;。 给定源程序: *************************************************** #include 编程题: 编写函数fun,它的功能是:求Fibonacci数列#include 中大于t的最小的一个数,结果由函数返回。其中Fibonaccidouble fun(double x) 数列F(n)的定义为: { double f, t; int n; F(0),0,F(1),1 f = 1.0 + x; F(n),F(n,1),F(n,2) /**********found**********/ 例如:当t = 1000时,函数值为:1597。注意: 部分源程t = ___1___; 序在文件PROG1.C中。请勿改动主函数main和其它函数中n = 1; 的任何内容,仅在函数fun的花括号中填入你编写的若干语do { 句。 n++; 给定源程序: /**********found**********/ #include t *= (-1.0)*x/___2___; #include f += t; int fun( int t) } { /**********found**********/ } while (___3___ >= 1e-6); main() /* 主函数 */ return f; { int n; } n=1000; main() printf("n = %d, f = %d\n",n, fun(n)); { double x, y; NONO(); x=2.5; } y = fun(x); 解题思路:本题是考察考生用递推算法来求出斐波那契数列printf("\nThe result is :\n"); 中每项的值。给出的程序就是用变量f、f0和f1来表示递printf("x=%-12.6f y=%-12.6f\n", x, y); 推的过程,给变量f0和f1最初分别置数列中第1项和第2} 项的值0和1,然后进入循环,执行语句f=f0+f1;将所得解题思路:第一处:根据公式可知,变量t的值为-x。 和值存入f中,这就是数列的第3项,把f1的值移入f0第二处:根据公式可知,此处应该除以n,所以应填:n。 中,将f的值移入f1中,为求数列的下一列作好准备;接第三处:根据试题中条件的要求,所以应填:fabs(t)。 着进入下一次循环,通过语句f=f0+f1求得数列的第4项,*************************************************** 不断重复以上步骤,每重复一次就依次求得数列的下一项,改错题:给定程序MODI1.C中函数fun的功能是: 求整数x直至某项满足要为止。 的y次方的低3位值。例如,整数5的6次方为15625, 此参考答案: 值的低3位值为625。请改正函数fun中指定部位的错误, int fun( int t) 使它能得出正确的结果。注意: 不要改动main函数, 不得{ 增行或删行, 也不得更改程序的结构! int f0 = 0, f1 = 1, f ; 给定源程序: do { #include f = f0 + f1 ; long fun(int x,int y,long *p ) f0 = f1 ; { int i; f1 = f ; long t=1; } while(f < t) ; /**************found**************/ return f ; for(i=1; i 解题思路:第一处:错误在for循环语句上,根据试题要求,#include 终止条件应该是i<=y。 #define N 8 第二处:要取低3位的值时,应模1000取余数,而不是整typedef struct list 除1000取商。 { int data; *************************************************** struct list *next; 编程题: 例如, 在主函数中从键盘给x输入0.21后,输出} SLIST; 为:s=1.100000。注意: 部分源程序在文件PROG1.C中。请SLIST *creatlist(int *); 勿改动主函数main和其他函数中的任何内容, 仅在函数void outlist(SLIST *); fun的花括号中填入你编写的若干语句。 int fun( SLIST *h) 给定源程序: { SLIST *p; int s=0; #include p=h->next; #include while(p) double fun(double x) { { /**********found**********/ } s+= p->___1___; main() /**********found**********/ { double x,s; p=p->___2___; printf("Input x: "); scanf("%lf",&x); } s=fun(x); return s; printf("s=%f\n",s); } main() NONO(); } { SLIST *head; 解题思路:本题是根据给定的公式进行计算。具体操作请看int a[N]={12,87,45,32,91,16,20,48}; head=creatlist(a); outlist(head); 答案程序中的说明。 参考答案: /**********found**********/ printf("\nsum=%d\n", fun(___3___)); double fun(double x) } { SLIST *creatlist(int a[]) int n=1; { SLIST *h,*p,*q; int i; double sn=1; h=p=(SLIST *)malloc(sizeof(SLIST)); double xn=1,xn1=0; for(i=0; i=0.000001) { q=(SLIST *)malloc(sizeof(SLIST)); q{ ->data=a[i]; p->next=q; p=q; xn=xn*x*(0.5-n+1)/n; } xn=(xn-1)*x*(0.5-n+1)/n*/ p->next=0; n+=1; return h; sn+=xn; } } void outlist(SLIST *h) 71 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 { SLIST *p; else w++; p=h->next; } if (p==NULL) printf("The list is NULL!\n"); } else main() { printf("\nHead "); { do char s[100], t1[100], t2[100], w[100]; { printf("->%d", p->data); p=p->next; } printf("\nPlease enter string S:"); scanf("%s", s); while(p!=NULL); printf("\nPlease enter substring t1:"); scanf("%s", printf("->End\n"); t1); } printf("\nPlease enter substring t2:"); scanf("%s", } t2); 解题思路:本题是计算出带有头结点的单向链表中各结点数if ( strlen(t1)==strlen(t2) ) { 据域中值之和。 fun( s, t1, t2, w); 第一处:累加数据域中的值,所以应填:data。 printf("\nThe result is : %s\n", w); 第二处:指定p的下一个指针,所以应填:next。 } 第三处:函数调用,在主函数中已经给出了head,所以应else printf("Error : strlen(t1) != strlen(t2)\n"); 填:head。 } *************************************************** 解题思路: 改错题:给定程序MODI1.C中函数fun的功能是:将s所指第一处:判断字符串当前字符是否是字符串结束符,所以应字符串中出现的与t1所指字符串相同的子串全部替换成t2改为:while(*r)。 所指字符串,所形成的新串放在w所指的数组中。在此处,第二处:语句后缺少分号。 要求t1和t2所指字符串的长度相同。例如,当s所指字符*************************************************** 串中的内容为:"abcdabfab",t1所指子串中的内容为:编程题: 函数fun的功能是:将s所指字符串中下标为偶"ab",t2所指子串中的内容为:"99"时,结果在w所指的数的字符删除,串中剩余字符形成的新串放在t所指数组数组中的内容应为:"99cd99f99"。请改正程序中的错误,中。例如,当s所指字符串中的内容为:"ABCDEFGHIJK",使它能得出正确的结果。注意:不要改动main函数,不得在t所指数组中的内容应是:"BDFHJ"。注意: 部分源程序增行或删行,也不得更改程序的结构~ 存在文件PROG1.C中。请勿改动主函数main和其它函数中给定源程序: 的任何内容,仅在函数fun的花括号中填入你编写的若干语#include 句。 #include 给定源程序: int fun (char *s, char *t1, char *t2 , char *w) #include { #include int i; char *p , *r, *a; void fun(char *s, char t[]) strcpy( w, s ); { while ( *w ) } { p = w; r = t1; main() /************found************/ { while ( r ) char s[100], t[100]; if ( *r == *p ) { r++; p++; } printf("\nPlease enter string S:"); scanf("%s", s); else break; fun(s, t); if ( *r == '\0' ) printf("\nThe result is: %s\n", t); { a = w; r = t2; NONO(); while ( *r ){ } /************found************/ 解题思路:本题是从一个字符串按要求生成另一个新的字符*a = *r; a++; r++ 串。我们使用for循环语句来解决这个问题。 } 参考答案: w += strlen(t2) ; void fun(char *s, char t[]) } { 72 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 int i, j = 0 ; 出: 8.391667。 for(i = 1 ; i < strlen(s); i+=2) t[j++] = s[i] ; 请改正程序中的错误,使它能得出正确的结果。注意:不要t[j] = 0 ; 改动 main 函数,不得增行或删行,也不得更改程序的结构~ } 给定源程序: 第55套 #include 填空题:给定程序中,函数fun的功能是:判断形参s所指/**************found**************/ 字符串是否是"回文" (Palindrome),若是,函数返回值为fun (int n ) 1;不是,函数返回值为0。"回文" 是正读和反读都一样的{ int a = 2, b = 1, c, k ; 字符串(不区分大小写字母)。例如,LEVEL和Level是"回double s=0.0 ; 文",而LEVLEV不是"回文"。请在程序的下划线处填入正确for ( k = 1; k <= n; k++ ) 的内容并把下划线删除, 使程序得出正确的结果。注意:源{ s = s + 1.0 * a / b ; 程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,/**************found**************/ 也不得更改程序的结构~ c = a; a += b; b += c; 给定源程序: } #include return(s) ; #include } #include main( ) int fun(char *s) { int n = 5 ; { char *lp,*rp; printf( "\nThe value of function is: %lf\n", fun /**********found**********/ ( n ) ) ; lp= __1__ ; } rp=s+strlen(s)-1; 解题思路:第一处:由于计算的实型值要通过函数返回,所while((toupper(*lp)==toupper(*rp)) && (lp 解题思路:本题是判断字符串是否是“回文”。 void fun(int m, int k, int xx[]) 第一处:根据函数体fun中,对变量lp的使用可知,lp应{ 指向形参s,所以应填:s。 } 第二处:rp是指向字符串的尾指针,当每做一次循环rp指main() 向就要指向前一个字符,所以应填:rp--。 { 第三处:当lp和rp相等时,则表示字符串是回文并返回1,int m, n, zz[1000] ; 否则就返回0,所以应填:return 0。 printf( "\nPlease enter two integers:") ; *************************************************** scanf("%d%d", &m, &n ) ; 改错题:给定程序MODI1.C中fun函数的功能是:求出以下fun( m, n, zz) ; 分数序列的前n项之和。 for( m = 0 ; m < n ; m++ ) 2 3 5 8 13 21 printf("%d ", zz[m]) ; ?? , ?? , ?? , ?? , ?? , ?? , „„ 1 2 3 5 8 13 printf("\n") ; 和值通过函数值返回main函数。例如,若 n = 5,则应输NONO( ) ; 73 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 } { printf(" open fail!!\n"); exit(0); } 解题思路:本题是考察考生如何判断一个数是素数,再判断ReadText(fp); 所求出的素数是否符合题义要求,如果符合,则存入指定的fclose(fp); 数组xx中保存,最后由形参xx返回。 } 本题是用while循环语句分别求出5个符合题义的素数。其/**********found**********/ 中,j是控制变量,m是所求素数要大于这个数且还要紧靠void WriteText(FILE ___1___) 这个数,k是所求素数的个数,j是当前所求第几个素数。{ char str[81]; 其中while循环体中的for循环语句是判断t是否是素数。 printf("\nEnter string with -1 to end :\n"); 参考答案: gets(str); void fun(int m, int k, int xx[]) while(strcmp(str,"-1")!=0) { { /**********found**********/ int i, j=1, t=m+1; fputs(___2___,fw); fputs("\n",fw); while(j<=k) gets(str); { } for(i = 2 ; i < t; i++) } { void ReadText(FILE *fr) if(t % i= =0) break; { char str[81]; if(i= =t) printf("\nRead file and output to screen :\n"); { fgets(str,81,fr); xx[j-1] = i; while( !feof(fr) ) { j++; /**********found**********/ } printf("%s",___3___); t++; fgets(str,81,fr); } } } } } 解题思路:本题要求是把键盘上输入的内容写到指定的文件 第56套 中。程序中共有三处要填上适当的内容,使程序能运行出正填空题:给定程序的功能是:从键盘输入若干行文本(每行确的结果。 不超过80个字符),写到文件myfile4.txt中,用-1作为字第一处:要求填写文件流的自变量名,在这个函数中,已有符串输入结束的标志。然后将文件的内容读出显示在屏幕的语句fputs("\n",fw);分析可知:由于文件流变量fw在上。文件的读写分别由自定义函数ReadText和WriteText函数体没有定义过,所以本处应填*fw或fw[]。 实现。请在程序的下划线处填入正确的内容并把下划线删第二处:通过while循环语句,把键盘上输入的内容,要写除,使程序得出正确的结果。注意:源程序存放在考生文件入到指定的文件中,键盘上输入的内容已存入字符串str夹下的BLANK1.C中。不得增行或删行,也不得更改程序的变量中,因此,本处应填写str。 结构~ 第三处:要把已存入文件中的内容,再从文件中读出且已存给定源程序: 入字符串变量str中,最后在屏幕显示出来,因此,此处应#include 填写str。 #include *************************************************** #include 改错题:给定程序MODI1.C中函数fun的功能是:从低位开void WriteText(FILE *); 始取出长整型变量s中奇数位上的数,依次构成一个新数放void ReadText(FILE *); 在t中。高位仍在高位,低位仍在低位。例如,当s中的数main() 为:7654321时,t中的数为:7531。请改正程序中的错误,{ FILE *fp; 使它能得出正确的结果。注意:不要改动main函数,不得if((fp=fopen("myfile4.txt","w"))==NULL) 增行或删行,也不得更改程序的结构~ { printf(" open fail!!\n"); exit(0); } 给定源程序: WriteText(fp); #include fclose(fp); /************found************/ if((fp=fopen("myfile4.txt","r"))==NULL) void fun (long s, long t) 74 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 { long sl=10; } *t = s % 10; 第57套 while ( s > 0) 填空题:函数fun的功能是:把形参a所指数组中的最小值{ s = s/100; 放在元素a[0]中,接着把 *t = s%10 * sl + *t; 形参a所指数组中的最大值放在a[1]元素中;再把a所指/************found************/ 数组元素中的次小值放在a[2]中,把a所指数组元素中的 sl = sl*100; 次大值放在a[3];其余以此类推。例如:若a所指数组中} 的数据最初排列为:9、1、4、2、3、6、5、8、7;则按规} 则移动后,数据排列为:1、9、2、8、3、7、4、6、5。形main() 参n中存放a所指数组中数据的个数。注意:规定fun函数{ long s, t; 中的max存放当前所找的最大值,px存放当前所找最大值printf("\nPlease enter s:"); scanf("%ld", &s); 的下标。请在程序的下划线处填入正确的内容并把下划线删fun(s, &t); 除,使程序得出正确的结果。注意:源程序存放在考生文件printf("The result is: %ld\n", t); 夹下的BLANK1.C中。不得增行或删行,也不得更改程序的} 结构~ 解题思路:第一处:在函数fun中使用了*t,但在函数定义给定源程序: 时没有使用*t,所以应改为:void fun(long s,long *t)。 # include 第二处:每循环一次,sl的值就乘以10,所以应改为:#define N 9 sl=sl*10;。 void fun(int a[], int n) *************************************************** { int i,j, max, min, px, pn, t; 编程题: 函数fun的功能是:将两个两位数的正整数a、bfor (i=0; i /**********found**********/ void fun(int a, int b, long *c) if (min>___3___) { { min = a[j]; pn = j; } } } main() if (pn != i) { int a,b; long c; { t = a[i]; a[i] = min; a[pn] = t; printf("Input a, b:"); if (px == i) px =pn; scanf("%d,%d", &a, &b); } fun(a, b, &c); if (px != i+1) printf("The result is: %ld\n", c); { t = a[i+1]; a[i+1] = max; a[px] = t; } NONO(); } } } 解题思路:本题是给出两个两位数的正整数分别取出各位上main() 的数字,再按条件组成一个新数。取a十位数字的方法:a/10 { int b[N]={9,1,4,2,3,6,5,8,7}, i; 取a个位数字的方法:a%10 printf("\nThe original data :\n"); 参考答案: for (i=0; i } #define N 8 解题思路:第一处:外循环每循环一次均把数组a当前位置typedef struct 的值,分别赋值给max和min变量,所以应填:a[i]。 { char num[10]; 第二处:判断max是否小于a[j],若小于,则把a[j]赋值double s[N]; 给max,所以应填:a[j]。 double ave; 第三处:判断min是否大于a[j],若大于,则把a[j]赋值} STREC; 给min,所以应填:a[j]。 void fun(STREC *a) *************************************************** { 改错题:给定程序MODI1.C中函数fun的功能是:用递归算} 法计算斐波拉契数列中第n项的值。从第1项起,斐波拉契main() 数列为:1、1、2、3、5、8、13、21、„„ { STREC s={"GA005",85.5,76,69.5,85,91,72,64.5,87.5}; 例如,若给n输入7,该项的斐波拉契数值为:13。请改正int i; 程序中的错误,使它能得出正确结果。注意:不要改动mainfun( &s ); 函数,不得增行或删行,也不得更改程序的结构。 printf("The %s's student data:\n", s.num); 给定源程序: for(i=0;i printf("%4.1f\n",s.s[i]); long fun(int g) printf("\nave=%7.3f\n",s.ave); { NONO(); /**********found**********/ } switch(g); 解题思路:本题求记录结构中学生课程成绩的平均值,其结{ case 0: return 0; 果仍放在该记录结构中。 /**********found**********/ 参考答案: case 1 ;case 2 : return 1 ; void fun(STREC *a) } { return( fun(g-1)+fun(g-2) ); int i ; } for(i = 0 ; i < N ; i++) main() a->ave = a->ave + a->s[i] ; { long fib; int n; a->ave /= N ; printf("Input n: "); scanf("%d",&n); printf("n } = %d\n",n); 第58套 fib=fun(n); 填空题:给定程序中,函数fun的功能是:把形参s所指字printf("fib = %d\n\n",fib); 符串中最右边的n个字符复制到形参t所指字符数组中,形} 成一个新串。若s所指字符串的长度小于n,则将整个字符解题思路:第一处:switch后有多余的分号。 串复制到形参t所指字符数组中。例如,形参s所指的字符第二处:case 1后没有返回语句,也应该为return 1;。所串为:abcdefgh,n的值为5,程序执行后t所指字符数组中以应改为:case 1: return 1; case 的字符串应为:defgh。请在程序的下划线处填入正确的内2:return 1;。 容并把下划线删除, 使程序得出正确的结果。注意:源程序*************************************************** 存放在考生文件夹下的BLANK1.C中。不得增行或删行,也编程题: 某学生的记录由学号、8门课程成绩和平均分组不得更改程序的结构~ 成,学号和8门课程的成绩已在主函数中给出。请编写函数给定源程序: fun,它的功能是:求出该学生的平均分放在记录的ave成员#include 中。例如,学生的成绩是:#include 85.5,76,69.5,85,91,72,64.5,87.5,他的平均分应当是:#define N 80 78.875。注意: 部分源程序在文件PROG1.C中。请勿改动主void fun(char *s, int n, char *t) 函数main和其它函数中的任何内容,仅在函数fun部位中{ int len,i,j=0; 填入你编写的若干语句。 len=strlen(s); 76 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 /**********found**********/ 解题思路: 第一处:判断素数的条件是一个数i除自身或if(n>=len) strcpy(__1__); 1除外不被任何数k整除的数,如果一个数i被另一个数kelse { 取模,模值等于零,那么这个不是素数并退出循环体,所以/**********found**********/ 应改为if(i%k==0)。 for(i=len-n; i<=len-1; i++) t[j++]= __2__ ; 第二处:如果i不被循环中任一个k值不整除,那么循环结/**********found**********/ 束后k的值应该等于i,所以应改为if(k==i)或if(k>=i)t[j]= __3__ ; 也可以。 } *************************************************** } 编程题: 请编写函数fun,它的功能是:求出能整除形参xmain() 且不是偶数的各整数,并按从小到大的顺序放在pp所指的{ char s[N],t[N]; int n; 数组中,这些除数的个数通过形参n返回。例如,若 x 中的printf("Enter a string: ");gets(s); 值为: 35,则有 4 个数符合要求,它们是: 1, 5, 7, 35。printf( "Enter n:"); scanf("%d",&n); 注意: 部分源程序在文件PROG1.C文件中。请勿改动主函数fun(s,n,t); main和其它函数中的任何内容,仅在函数fun的花括号中printf("The string t : "); puts(t); 填入你编写的若干语句。 } 给定源程序: 解题思路:本题是根据要求来复制字符串。 #include 第一处:当给定的长度n大于该字符串s的长度,那么把该void fun ( int x, int pp[], int *n ) 字符串直接拷贝到t就可以了,所以应填:t,s。 { 第二处:使用for循环语句,把最右边n个字符依次添加到} t中,所以应填:s[i]。 main( ) 第三处:字符串操作结束,需要到t加一个字符串结束符,{ int x, aa[1000], n, i ; 所以应填:'\0'。 printf( "\nPlease enter an integer number:\n" ) ; *************************************************** scanf("%d", &x) ; 改错题:给定程序MODI1.C中函数fun的功能是:找出一个fun(x, aa, &n ) ; 大于形参m且紧随m的素数,并作为函数值返回。请改正程for( i = 0 ; i < n ; i++ ) 序中的错误,使它能得出正确的结果。注意:不要改动mainprintf("%d ", aa[i]) ; 函数,不得增行或删行,也不得更改程序的结构~ printf("\n") ; 给定源程序: NONO( ) ; #include } int fun(int m) 解题思路:本题是求出能整除形参x且不是偶数的各整数,{ int i, k ; 并按从小到大的顺序放在pp所指的数组中,这些除数的个for (i = m + 1 ; ; i++) { 数通过形参n返回。 for (k = 2 ; k < i ; k++) 参考答案: /**************found**************/ void fun ( int x, int pp[], int *n ) if (i % k != 0) { break ; int i; /**************found**************/ *n=0; if (k < i) for(i=1; i <= x; i++) return(i); if((x % i== 0) && (i % 2)) pp[(*n)++]=i; } } } 第59套 void main() 填空题:给定程序中,函数fun的功能是:在3×4的矩阵{ 中找出在行上最大、在列上最小的那个元素,若没有符合条int n ; 件的元素则输出相应信息。 n = fun(20) ; 例如,有下列矩阵: printf("n=%d\n", n) ; 1 2 13 4 } 7 8 10 6 77 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 3 5 9 7 *************************************************** 程序执行结果为:find: a[2][2]=9请在程序的下划线处填改错题:给定程序MODI1.C中函数fun的功能是:根据整型 入正确的内容并把下划线删除, 使程序得出正确的结果。注形参m的值,计算如下公式的值。 1 1 1 意:源程序存放在考生文件夹下的BLANK1.C中。不得增行t = 1 - ----- - ----- - „„ - ----- 2*2 3*3 m*m 或删行,也不得更改程序的结构~ 例如,若 m 中的值为: 5,则应输出: 0.536389。 给定源程序: 请改正程序中的错误,使它能得出正确的结果。 #include 注意:不要改动main函数,不得增行或删行,也不得更改#define M 3 程序的结构~ #define N 4 给定源程序: void fun(int (*a)[N]) #include { int i=0,j,find=0,rmax,c,k; double fun ( int m ) while( (i fun(x); #include } int fun(int score[], int m, int below[]) 解题思路:本题是在矩阵中找出在行上最大、在列上最小的{ 那个元素。 第一处:找出行上最大的数,并该位置j(列)} 保存在c中,所以应填:j。 main( ) 第二处:使用while循环语句和控制变量find,如果该数{ int i, n, below[9] ; 不是列是最小数,那么把find置0,所以应填:0。 int score[9] = {10, 20, 30, 40, 50, 60, 70, 80, 90} ; 第三处:i是while的控制变量,所以每做一次循环,该数n = fun(score, 9, below) ; 均要加1,所以应填:i++。 78 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 printf( "\nBelow the average score are: " ) ; for(i=0; i<3; i++) for (i = 0 ; i < n ; i++) printf("%d ", below[i]) ; printf("%d,%s\n",std[i].num,std[i].name); NONO() ; } } 解题思路:本题是要求对结构体数组中的三个元素按num解题思路:本题是计算平均成绩,再把低于平均成绩的分数成员升序排列。 存入依次数组below中。 第一处:由于在函数体fun中,已经使用了std变量,所以参考答案: 应填:*std。 int fun(int score[], int m, int below[]) 第二处:由于temp是存放交换记录的中间变量,所以应填:{ PERSON。 float av=0.0 ; 第三处:函数的调用,所以应填:std。 int i, j=0 ; *************************************************** for(i=0; iscore[i]) below[j++]=score[i]; 结果是 "abcCDEF"。请改正程序中的错误,使它能得出正确return j; 的结果。注意:不要改动 main 函数,不得增行或删行,也} 不得更改程序的结构~ 第60套 给定源程序: 填空题:给定程序中,函数fun的功能是:将形参指针所指#include 结构体数组中的三个元素按num成员进行升序排列。请在程#include 序的下划线处填入正确的内容并把下划线删除,使程序得出int fun ( char str[][10], int m, char *pt ) 正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C{ 中。不得增行或删行,也不得更改程序的结构~ /************found************/ 给定源程序: Int k, q, i ; #include for ( k = 0; k < m; k++ ) typedef struct { q = strlen ( str [k] ); { int num; for (i=0; istd[1].num) { int m, h ; { temp=std[0]; std[0]=std[1]; std[1]=temp; } char s[10][10], p[120] ; if(std[0].num>std[2].num) printf( "\nPlease enter m:" ) ; { temp=std[0]; std[0]=std[2]; std[2]=temp; } scanf("%d", &m) ; gets(s[0]) ; if(std[1].num>std[2].num) printf( "\nPlease enter %d string:\n", m ) ; for ( h = 0; h < m; h++ ) gets( s[h]) ; { temp=std[1]; std[1]=std[2]; std[2]=temp; } } fun(s, m, p) ; main() printf( "\nThe result is : %s\n", p) ; { PERSON } std[ ]={ 5,"Zhanghu",2,"WangLi",6,"LinMin" }; 解题思路:第一处:保留字int错写成Int。 int i; 第二处:字符数组的字符串书写格式错误。 /**********found**********/ *************************************************** fun(___3___); 编程题: 程序定义了N×N的二维数组,并在主函数中自动printf("\nThe result is :\n"); 赋值。请编写函数 79 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 fun( int a[][N]),函数的功能是:使数组左下三角元素中写英文字母,则转换成对应的小写英文字母;若是 的值全部置成0 。 其它字符则保持不变;并将转换后的结果作为函数值返回。例如:a 数组中的值为 请在程序的下划线处填入正确的内容并把下划线删除,使程 | 1 9 7 | 序得出正确的结果。注意:源程序存放在考生文件夹下的a = | 2 3 8 | BLANK1.C中。不得增行或删行,也不得更改程序的结构~ | 4 5 6 | 给定源程序: 则返回主程序后a数组中的值应为 #include | 0 9 7 | #include | 0 0 8 | char fun(char ch) | 0 0 0 | { 注意: 部分源程序存在文件PROG1.C中。 /**********found**********/ 请勿改动主函数main和其它函数中的任何内容,仅在函数if ((ch>='a')___1___(ch<='z')) fun的花括号中填入你编写的若干语句。 return ch -'a' + 'A'; 给定源程序: if ( isupper(ch) ) #include /**********found**********/ #include return ch +'a'-___2___ ; #define N 5 /**********found**********/ int fun ( int a[][N] ) return ___3___; { } } main() main ( ) { char c1, c2; { int a[N][N], i, j; printf("\nThe result :\n"); printf("***** The array *****\n"); c1='w'; c2 = fun(c1); for ( i =0; i 小写英文字母,则转换成对应的大写英文字母;若ch中是大#define M 4 80 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 /**************found**************/ { void fun(int a) int s = 0, i ; { int i,j,k,m; for(i = 2 ; i < n ; i++) if(n % i == 0) s +=i ; printf("Enter 4 number : "); return s ; for(i=0; i0;i--) 填空题:给定程序中,函数fun的功能是:把形参s所指字{ k=a[M-1]; 符串中下标为奇数的字符右 移到下一个奇数位置,最右边for(j=M-1;j>0;j--) 被移出字符串的字符绕回放到第一个奇数位置,下标为偶数/**************found**************/ 的字符不动(注:字符串的长度大于等于2)。例如,形参saa[j]=a[j-1]; 所指的字符串为:abcdefgh,执行结果为:ahcbedgf。请在a[0]=k; 程序的下划线处填入正确的内容并把下划线删除,使程序得for(m=0; m main() void fun(char *s) { int a[M]; { int i, n, k; char c; fun(a); printf("\n\n"); n=0; } for(i=0; s[i]!='\0'; i++) n++; 解题思路:第一处:在函数fun体中,a是一个整型数组,/**********found**********/ 所以形参a应定义为指针型整数变量。 第二处:变量书写if(n%2==0) k=n-___1___ ; 错误,aa应为a。 else k=n-2; *************************************************** /**********found**********/ 编程题: 请编写一个函数fun, 它的功能是: 计算并输出c=___2___ ; 给定整数n的所有因子(不包括1与n自身)之和。规定nfor(i=k-2; i>=1; i=i-2) s[i+2]=s[i]; 的值不大于1000。例如,在主函数中从键盘给n输入的值为/**********found**********/ 856, 则输出为:sum=763。注意:部分源程序在文件PROG1.Cs[1]=___3___ ; 中。请勿改动主函数main和其他函数中的任何内容,在函数} fun的花括号中填入你编写的若干语句。 main() { char s[80]="abcdefgh"; 给定源程序: #include printf("\nThe original string is : %s\n",s); int fun(int n) fun(s); printf("\nThe result is : %s\n",s); { } } main() 解题思路:第一处:首先判断字符串的长度是奇数还是偶数,{ int n,sum; 如果是奇数,则k=n-1,所以应填:1。 printf("Input n: "); scanf("%d",&n); 第二处:取字符串最后一个奇数位的字符,并由变量c保存,sum=fun(n); 所以应填:s[k]。 printf("sum=%d\n",sum); 第三处:第1位奇数位用最一个奇数位字符替换,所以应填:NONO(); c。 } *************************************************** 解题思路:本题是考察考生怎样利用循环来求出一个数n改错题:给定程序MODI1.C中 fun 函数的功能是:求 的所有(除1和自身外)因子i并求出它们的和s作为函数s = aa„ aa - ... - aaa - aa - a 值返回。判断因子的条件是:n % i == 0,(i是大于1且(此处 aa„ aa 表示 n 个 a, a 和 n 的值在 1 至 9 之小于n中所有的正整数)。 间) 参考答案: 例如 a = 3, n = 6, 则以上表达式为: int fun(int n) s = 333333 - 33333 - 3333 - 333 - 33 - 3其值是:296298 81 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 a 和 n 是 fun 函数的形参,表达式的值作为函数值传回 int bb[26], k, n ; main函数。请改正程序中的错误,使它能计算出正确的结printf( "\nPlease enter a char string:" ) ; scanf("%s", 果。注意: 不要改动 main 函数,不得增行或删行,也不aa) ; 得更改程序的结构~ fun(aa, bb ) ; 给定源程序: for ( k = 0 ; k < 26 ; k++ ) printf ("%d ", bb[k]) ; #include printf( "\n" ) ; long fun (int a, int n) NONO ( ) ; { int j ; } /**************found**************/ 解题思路:本题是考察考生在给定的字符串中统计出26个long s = 0, t = 1 ; 小写字母的次数并存入到指定的数组中且由形参返回。其中for ( j = 0 ; j < n ; j++) 数组下标的位置可以通过某一个字符的ASCII值减去97或t = t * 10 + a ; 直接减'a'也可以,就可以得出该字符出现次数存放的位置。s = t ; 例如:字符为b,那么位置为'b'-'a'=1,就是实际存放的for ( j = 1 ; j < n ; j++) { 位置。 /**************found**************/ 参考答案: t = t % 10 ; void fun(char *tt, int pp[]) s = s - t ; { } char *p = tt ; return(s) ; int i ; } for(i = 0 ; i < 26 ; i++) pp[i] = 0 ; main( ) while(*p) { int a, n ; { printf( "\nPlease enter a and n:") ; if(*p >= 'a' && *p <= 'z') pp[*p - 'a'] += 1 ; scanf( "%d%d", &a, &n ) ; p++ ; printf( "The value of function is: %ld\n", fun ( a, } n ) ); } } 第63套 解题思路:第一处:根据for循环计算t的值可知,变量t填空题:给定程序中函数fun的功能是:有N×N矩阵,根的初值不正确,应为0。 据给定的m(m<=N)值,将每行元素中的值均右移m个位置,第二处:每次循环都是取t除以10的值,而不是取余数,左边置为0。例如,N=3,m=2,有下列矩阵 所以应改t=t/10;。 1 2 3 *************************************************** 4 5 6 编程题: 请编写一个函数 void fun(char *tt, int pp[]),7 8 9 统计在tt所指字符串中'a' 到 'z' 26个小写字母各自出程序执行结果为 现的次数,并依次放在pp所指数组中。例如,当输入字符0 0 1 串:abcdefgabcdeabc 后,程序的输出结果应该是: 0 0 4 3 3 3 2 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 注意: 部分源程序在文件PROG1.C中。请勿改动主函数main请在程序的下划线处填入正确的内容并把下划线删除,使程和其它函数中的任何内容,仅在函数fun的花括号中填入你序得出正确的结果。 编写的若干语句。 注意:源程序存放在考生文件夹下的BLANK1.C中。不得增给定源程序: 行或删行,也不得更改程序的结构~ #include 给定源程序: #include #include void fun(char *tt, int pp[]) #define N 4 { void fun(int (*t)[N], int m) } { int i, j; main( ) /**********found**********/ { char aa[1000] ; for(i=0; i=0; j--) } /**********found**********/ if (yes) { sum +=high; n++; } t[i][j+___2___ ]=t[i][j]; high--; /**********found**********/ } for(j=0; j<___3___; j++) return sum ; t[i][j]=0; } } main ( ) } { main() printf("%d\n", fun (100)); { int t[][N]={21,12,13,24,25,16,47,38,29,11,32,54, } 42,21,33,10}, i, j, m; 解题思路: printf("\nThe original array:\n"); 第一处:括号没有匹配。 for(i=0; i 请改正程序中的错误,使程序能输出正确的结果。注意:不#include 要改动main函数,不得增行或删行,也不得更改程序的结float fun() 构~ { 给定源程序: #include #include } int fun( int high ) main() { int sum = 0, n=0, j, yes; { /************found************/ printf("Root =%f\n", fun()); while ((high >= 2) && (n < 10) NONO(); { yes = 1; } for (j=2; j<=high/2; j++ ) 解题思路:本题是根据给定的公式及条件来计算方程的一个if (high % j ==0 ){ 实根。 /************found************/ 参考答案: yes=0; break 83 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 printf("\n"); float fun() } { fun(x,2); float x0, x1=0.0; printf("The array after moving:\n\n"); do { for(i=0; i0.000001); } return x1; } } 解题思路:第一处:外循环p的终止变量的值,试题要求第 第64套 k列左移,所以应填:k。 填空题:给定程序中,函数fun的功能是:将a所指3×5第二处:矩阵共N列,所以应填:N-1。 矩阵中第k列的元素左移到第0列,第k列以后的每列元素第三处:把存放在临时变量temp中的值,放到a[i][N-1]行依次左移,原来左边的各列依次绕到右边。 中,所以应填:temp。 例如,有下列矩阵: *************************************************** 1 2 3 4 5 改错题:给定程序MODI1.C中函数fun的功能是:根据形参1 2 3 4 5 m的值(2?m?9〕,在m行m列的二维数组中存放如下所示1 2 3 4 5 规律的数据,由main函数输出。 若k为2,程序执行结果为 例如,若输入 2 | 若输入 4 3 4 5 1 2 则输出: | 则输出: 3 4 5 1 2 1 2 | 1 2 3 4 3 4 5 1 2 2 4 | 2 4 6 8 请在程序的下划线处填入正确的内容并把下划线删除,使程| 3 6 9 12 序得出正确的结果。 | 4 8 12 16 注意:源程序存放在考生文件夹下的BLANK1.C中。不得增请改正程序函数中的错误,使它能得出正确的结果。 行或删行,也不得更改程序的结构~ 注意:不要改动main函数,不得增行或删行,也不得更改给定源程序: 程序的结构~给定源程序: #include #include #define M 3 #define M 10 #define N 5 int a[M][M] = {0} ; void fun(int (*a)[N],int k) /**************found**************/ { int i,j,p,temp; fun(int **a, int m) /**********found**********/ { int j, k ; for(p=1; p<= __1__; p++) for (j = 0 ; j < m ; j++ ) for(i=0; i 编程题: 函数fun的功能是:将a、b中的两个两位正整数#define N 3 合并形成一个新的整数放在c中。合并的方式是:将a中的#define M 4 十位和个位数依次放在变量c的十位和千位上,b中的十位/**********found**********/ 和个位数依次放在变量c的个位和百位上。例如,当a,45,void fun(int (*a)[N], int __1__) b=12。调用该函数后,c=5241。注意: 部分源程序存在文件{ int i,j,temp ; PROG1.C中。数据文件IN.DAT中的数据不得修改。请勿改/**********found**********/ 动主函数main和其它函数中的任何内容,仅在函数fun的for(i = 0 ; i < __2__ ; i++) 花括号中填入你编写的若干语句。 { temp=a[0][i] ; 给定源程序: /**********found**********/ #include a[0][i] = __3__ ; void fun(int a, int b, long *c) a[k][i] = temp ; { } } } main() main() { int a,b; long c; { int x[M][N]={ {1,2,3},{4,5,6},{7,8,9},{10,11,12} }, printf("Input a, b:"); i,j; scanf("%d%d", &a, &b); printf("The array before moving:\n\n"); fun(a, b, &c); for(i=0; i 10 11 12 void fun( char t[] ) 请在程序的下划线处填入正确的内容并把下划线删除, 使{ 85 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 char c; } int i, j; 解题思路:本题是考察考生在字符串指定位置上的字母转换/**********found***********/ 为大写。给出的程序是由i来控制字符串所在的位置,字符for( i = strlen( t ); i; i-- ) 串指针p是指向形参ss,再使用while循环语句对p进行for( j = 0; j < i; j++ ) 控制来判断字符串是否结束,在循环体中使用if条件语句/**********found***********/ 来判断位置i是否为奇数且p所指的当前字符是否为'a'至if( t[j] < t[ j + 1 ] ) 'z'的字母,如果满足这两个条件,则把该小写字母转换成{ 大写字符,小写字母与大写字母的差是32,所以只小写字c = t[j]; 母减去32,即可得到该字母的大写字母,且转换后的字母t[j] = t[ j + 1 ]; 仍存放到原字符串的位置上,转换结束后,最后通过形参t[j + 1 ] = c; ss返回已转换后的字符串。 } 参考答案: } void fun( char *ss ) main() { { char *p = ss ; char s[81]; int i = 0 ; printf( "\nPlease enter a character string: " ); while(*p) { gets( s ); if((i % 2) && (*p >= 'a' && *p <= 'z')) *p -= 32 ; printf( "\n\nBefore sorting:\n \"%s\"", s ); p++ ; fun( s ); i++ ; printf( "\nAfter sorting decendingly:\n \"%s\"", s ); } } return ss ; 解题思路:第一处:外for循环的初始值应是strlen(t)-1。 } 第二处:由于是按升序排序,所以应 if(t[j]>t[j+1])。 第66套 *************************************************** 填空题:给定程序中,函数fun的功能是:将形参std所指编程题: 请编写一个函数fun, 其功能是: 将ss所指字符结构体数组中年龄最大者的数据作为函数值返回,并在串中所有下标为奇数位置上的字母转换为大写(若该位置上main函数中输出。请在程序的下划线处填入正确的内容并不是字母, 则不转换)。例如, 若输入"abc4EFg",则应输出把下划线删除,使程序得出正确的结果。注意:源程序存放"aBc4EFg"。注意: 部分源程序在文件PROG1.C文件中。请在考生文件夹下的BLANK1.C中。不得增行或删行,也不得勿改动主函数main和其它函数中的任何内容, 仅在函数更改程序的结构~ fun的花括号中填入你编写的若干语句。 给定源程序: 给定源程序: #include #include typedef struct #include { char name[10]; void fun( char *ss ) int age; { }STD; } STD fun(STD std[], int n) void main( void ) { STD max; int i; { /**********found**********/ char tt[51]; max= ___1___; printf( "\nPlease enter an character string within 50 for(i=1; i printf("\n"); /**********found**********/ NONO( ); void fun ( int a, b ) } { int t; 解题思路:本题是求出二维数组每列中最小元素,并依次放/**********found**********/ 入pp所指一维数组中。 t = b; b = a ; a = t; 参考答案: } void fun ( int tt[M][N], int pp[N] ) main ( ) { { int a, b; int i,j, min, k ; printf ( "Enter a , b : "); scanf ( "%d,%d", &a, &b ); for(i = 0 ; i < N ; i++) { fun ( &a , &b ) ; min = tt[0][i] ; k = 0 ; printf (" a = %d b = %d\n ", a, b ); for(j = 1 ; j < M ; j++) } if(min > tt[j][i]) { 解题思路:第一处:函数形参定义不正确,在定义第2个形 min=tt[j][i] ; 参时,也应加上int。由于通过该函数实现两数交换,在Ck = j ; 语言中,必须交换地址中的值,所以应定义为int *a,int } *b。 pp[i] = tt[k][i] ; 第二处:要交换地址中的值,不能交换地址,必须指定地址} 中的值,因此应改为 } t=*b;*b=*a;*a=t;。 第67套 *************************************************** 填空题:给定程序中,函数fun的功能是:调用随机函数产编程题: 请编一个函数void fun(int tt[M][N ], int 生20个互不相同的整数放在形参a所指数组中(此数组在pp[N]),tt指向一个M行N列的二维数组,求出二维数组主函数中已置0)。请在程序的下划线处填入正确的内容并每列中最小元素,并依次放入pp所指一维数组中。二维数把下划线删除, 使程序得出正确的结果。注意:源程序存放组中的数已在主函数中赋予。注意: 部分源程序存在文件在考生文件夹下的BLANK1.C中。不得增行或删行,也不得PROG1.C中。请勿改动主函数main和其它函数中的任何内更改程序的结构~ 容,仅在函数fun的花括号中填入你编写的若干语句。 给定源程序: 给定源程序: #include #include #define N 20 87 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 void fun( int *a) } { int i, x, n=0; for (i=0;i<3;i++) x=rand()%20; sum=sum+a[i][i]; /**********found**********/ printf("Sum=%d\n",sum); while (n<__1__) } { for(i=0; i 组中,所以应填:n。 int fun(int array[3][3]) { *************************************************** 改错题:给定程序MODI1.C中函数fun的功能是: 先从键盘} 上输入一个3行3列矩阵的各个元素的值, 然后输出主对角main() 线元素之和。请改正函数fun中的错误或在横线处填上适当{ 的内容并把横线删除,使它能得出正确的结果。注意:不要int i,j; 改动 main 函数,不得增行或删行,也不得更改程序的结构~ int array[3][3]={{100,200,300}, 给定源程序: {400,500,600}, #include {700,800,900}}; int fun() for (i=0;i<3;i++) { { for (j=0;j<3;j++) int a[3][3],sum; printf("%7d",array[i][j]); int i,j; printf("\n"); /*********found**********/ } ______; fun(array); for (i=0;i<3;i++) printf("Converted array:\n"); { for (j=0;j<3;j++) for (i=0;i<3;i++) /*********found**********/ { for (j=0;j<3;j++) scanf("%d",a[i][j]); printf("%7d",array[i][j]); 88 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 printf("\n"); int n,k,i; } printf("\nThe original strings are :\n"); NONO(); for(i=0;i 行,也不得更改程序的结构~ double fun( int m ) 给定源程序: { #include double t = 1.0; #define M 5 int i; #define N 20 for( i = 2; i <= m; i++ ) /**********found**********/ /**********found**********/ int fun(char (*ss) ___1___, int *n) t += 1.0/k; { int i, k=0, len=0; /**********found**********/ for(i=0; i*n) { int m; /**********found**********/ printf( "\nPlease enter 1 integer number:" ); ___3___; scanf( "%d", &m ); k=i; printf( "\nThe result is %lf\n", fun( m ) ); } } } 解题思路:第一处:在此变量k没有定义过,再根据公式和return(k); for循环语句中所用的变量可知,这里的k实际上是i。 } 第二处:应是返回公式的值,函数中公式的值是存放在变量main() t中,所以应填return t;。 { char *************************************************** ss[M][N]={"shanghai","guangzhou","beijing","tianjin编程题: 编写一个函数,该函数可以统计一个长度为2的g","cchongqing"}; 89 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 字符串在另一个字符串中出现的次数。例如,假定输入的字个字符串转换成面值相同的整数,并进行相加作为函数值返符串为: asd asasdfg asd as zx67 asd mklo,子字符串回,规定字符串中只含9个以下数字字符。 为:as,则应输出6。注意:部分源程序在文件PROG1.C中。例如,主函数中输入字符串:32486和12345,在主函数中请勿改动主函数main和其它函数中的任何内容,仅在函数输出的函数值为:44831。请在程序的下划线处填入正确的fun的花括号中填入你编写的若干语句。 内容并把下划线删除, 使程序得出正确的结 果。注意:源给定源程序: 程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,#include 也不得更改程序的结构~ #include 给定源程序: #include int fun(char *str,char *substr) #include { #include } #define N 9 main() long ctod( char *s ) { { long d=0; char str[81],substr[3]; while(*s) int n; if(isdigit( *s)) { printf("输入主字符串: "); /**********found**********/ gets(str); d=d*10+*s-__1__; printf("输入子字符串: "); /**********found**********/ gets(substr); __2__; } puts(str); return d; puts(substr); } n=fun(str,substr); long fun( char *a, char *b ) printf("n=%d\n",n); { NONO(); /**********found**********/ } return __3__; 解题思路:本题是统计一个字符串在另一个字符串中出现的} 次数。程序 流程 快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计 如下: main() 1. 利用strstr函数,首先找到第一个出现的位置。 { char s1[N],s2[N]; 2. 利用while循环和strstr依次查找所有出现的位置,并do { printf("Input string s1 : "); gets(s1); } 进行统计,并把统计结果作为函数值返回。 strstr(const char *s1, const char *s2)是字符串s2在while( strlen(s1)>N ); s1中出现的位置,如果找到则返回位置指针。 do { printf("Input string s2 : "); gets(s2); } 参考答案: int fun(char *str,char *substr) while( strlen(s2)>N ); { printf("The result is: %ld\n", fun(s1,s2) ); int cnt = 0 ; } char *p = str, *q ; 解题思路:第一处:数字字符与其对应的数值相差48,所while(*p) { 以应填:48。 q = strstr(p, substr) ; 第二处:到字符串下一个位置,所以应填:s++。 if(q == NULL) break; 第三处:返回两个数字字符串经转换成数值的和,所以应填:p = q + strlen(substr) ; ctod(a)+ctod(b)。 cnt++ ; *************************************************** } 改错题:给定程序MODI1.C中 fun 函数的功能是:分别统return cnt ; 计字符串中大写字母和小写字母的个数。例如, 给字符串 s } 输入:AAaaBBb123CCccccd,则应输出结果: 第69套 upper = 6, lower = 8。请改正程序中的错误,使它能计算填空题:给定程序中,函数fun的功能是将a和b所指的两出正确的结果。 90 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 注意:不要改动 main 函数,不得增行或删行,也不得更改0.5(实现四舍五入),再把这个数存放到一个长整型变量中,程序的结构~ 目的是把小数点后的小数去除,最后把这个数转换成浮点型给定源程序: 数除以100,即可得出所的结果。 #include 参考答案: /**********found**********/ float fun ( float h ) void fun ( char *s, int a, int b ) { long w ; { w = h * 100 + 0.5 ; while ( *s ) return (float) w / 100 ; { if ( *s >= 'A' && *s <= 'Z' ) } /**********found**********/ 第70套 *a=a+1 ; 填空题:给定程序中,函数fun的功能是:计算形参x所指if ( *s >= 'a' && *s <= 'z' ) 数组中N个数的平均值(规定所有数均为正数),作为函数/**********found**********/ 值返回;并将大于平均值的数放在形参y所指数组中,在主*b=b+1; 函数中输出。例如,有10个正数:46 30 32 40 6 17 45 15 s++; 48 26,平均值为: } 30.500000主函数中输出:46 32 40 45 48请在程序的下划} 线处填入正确的内容并把下划线删除,使程序得出正确的结main( ) 果。注意:源程序存放在考生文件夹下的BLANK1.C中。不{ char s[100]; int upper = 0, lower = 0 ; 得增行或删行,也不得更改程序的结构~ printf( "\nPlease a string : " ); gets ( s ); 给定源程序: fun ( s, & upper, &lower ); #include printf( "\n upper = %d lower = %d\n", upper, lower ); #define N 10 } double fun(double x[],double *y) 解题思路:第一处:在等式右边应写*a。 { int i,j; double av; 第二处:在等式右边应写*b。 /**********found**********/ *************************************************** av=__1__; 编程题: 请编一个函数fun,函数的功能是使实型数保留2/**********found**********/ 位小数,并对第三位进行四舍五入(规定实型数为正数)。for(i=0; iav) y[__3__]= x[i]; 其它函数中的任何内容,仅在函数fun的花括号中填入你编y[j]=-1; 写的若干语句。 return av; 给定源程序: } #include main() float fun ( float h ) { int i; double x[N],y[N]; { for(i=0; i=0; i++) printf("%5.1f ",y[i]); printf ( "The original data is : " ); printf("\n"); } printf ( "%f \n\n", a ); printf ( "The result : %f\n", fun ( a ) ); 解题思路:第一处:计算平均值时,需对变量av进行初始NONO( ); 化为0。 } 第二处:利用for循环计算其平均值,所以应填:x[i]/N。 解题思路:本题主要是考察考生保留小数点后两位数并对第第三处:把数组x中元素值大于平均值的数依次存放到形参三位进行四舍五入。方法是先把这个数乘以100,然后再加y所指的数组中其中位置由变量j来控制,所以应填:j++。 91 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 *************************************************** { STU 改错题:给定程序MODI1.C中函数fun的功能是:根据整型a[N]={ {"A01",81},{"A02",89},{"A03",66},{"A04",87},形参m,计算如下公式的值。 {"A05",77}, 1 1 1 1 {"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",y = ------ + ------- + ------- + „„ + ------- 100*100 200*200 300*300 m*m 71} }, m ; 例如,若m = 2000,则应输出: 0.000160。请改正程序中int i; 的语法错误,使它能计算出正确的结果。注意:不要改动 printf("***** The original data *****\n"); main 函数,不得增删行,不得更改程序的结构~ for ( i=0; i< N; i++ )printf("No = %s Mark = %d\n", 给定源程序: a[i].num,a[i].s); #include fun ( a, &m ); /************found************/ printf ("***** THE RESULT *****\n"); fun ( int m ) printf ("The lowest : %s , %d\n",m.num, m.s); { double y = 0, d ; NONO( ); int i ; } /************found************/ 解题思路: for( i = 100, i <= m, i += 100 ) 本题考察学生在一组记录中找出最低分。我们使用for循环{ d = (double)i * (double)i ; 语句来解决这个问题。 y += 1.0 / d ; 参考答案: } fun( STU a[], STU *s ) return( y ) ; { } int i, min = a[0].s, j = 0; main( ) for(i = 1 ; i < N ; i++) { int n = 2000 ; if(min > a[i].s) printf( "\nThe result is %lf\n", fun ( n ) ) ; { } j = i ; 解题思路:第一处:由于计算的实型值要通过函数返回,所min = a[i].s ; 以必须定义函数的返回类型,只要int或void 可以省略,} 其他都要定义类型。由于返回是实型值,所以应在数名前加*s = a[j] ; 上double等定义。如果使用float则精度不够,所以在这} 里不能使用float定义。第二处:在for循环中,两个“;”第71套 不可省略,在此把“;”错写成“,”。 填空题:给定程序中,函数fun的功能是:将形参s所指字*************************************************** 符串中的所有数字字符顺序前移,其他字符顺序后移,处理编程题: 已知学生的记录由学号和学习成绩构成,N名学后新字符串的首地址作为函数值返回。 生的数据已存入a结构体数组中。请编写函数 fun,函数的例如,s所指字符串为:asd123fgh5##43df,处理后新字符功能是:找出成绩最低的学生记录,通过形参返回主函数(规串为:123543asdfgh##df。 定只有一个最低分)。注意: 部分源程序存在文件PROG1.C请在程序的下划线处填入正确的内容并把下划线删除,使程文件中。请勿改动主函数main和其它函数中的任何内容,序得出正确的结果。 仅在函数fun的花括号中填入你编写的若干语句。 注意:源程序存放在考生文件夹下的BLANK1.C中。不得增给定源程序: 行或删行,也不得更改程序的结构~ #include 给定源程序: #include #include #define N 10 #include typedef struct ss #include { char num[10]; int s; } STU; #include fun( STU a[], STU *s ) char *fun(char *s) { { int i, j, k, n; char *p, *t; } n=strlen(s)+1; main ( ) t=(char*)malloc(n*sizeof(char)); 92 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 p=(char*)malloc(n*sizeof(char)); i++; j--; j=0; k=0; } for(i=0; i 应该为"1g2f3e4dcba"。请改正程序中的错误,使它能得出#include 正确的结果。注意:不要改动main函数,不得增行或删行,void fun(char *s, char t[]) 也不得更改程序的结构~ { 给定源程序: #include } #include main() void fun( char *a, char *b, char *c ) { { char s[100], t[100]; int i , j; char ch; printf("\nPlease enter string S:"); scanf("%s", s); i = 0; j = strlen(b)-1; fun(s, t); /************found************/ printf("\nThe result is: %s\n", t); while ( i > j ) NONO(); { ch = b[i]; b[i] = b[j]; b[j] = ch; } 93 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 解题思路:本题是从一个字符串按要求生成另一个新的字符#include 串。我们使用for循环语句来解决这个问题。 #include 参考答案: /************found************/ void fun(char *s, char t[]) void fun (char s, char t) { { int i, j = 0 ; int i, d; for(i = 0 ; i < strlen(s) ; i++) d = strlen(s); if(!((i % 2) ==0 && (s[i] % 2))) t[j++] = s[i] ; for (i = 0; i printf("\nThe result is: %s\n", t); double fun(double e) } { int i; double s, x; 解题思路:第一处:从函数体fun中可知,两个均为字符指/**********found**********/ 针型变量,应改为:void fun (char *s, char *t)。 s=0; i=__1__; 第二处:字符串结束位置错误,应改为:t[2*d]=0;。 x=1.0; *************************************************** while(x>e){ 编程题: 函数fun的功能是: 将s所指字符串中除了下标/**********found**********/ 为奇数、同时ASCII值也为奇数的字符之外,其余的所有字__2__; 符都删除,串中剩余字符所形成的一个新串放在t所指的数/**********found**********/ 组中。例如,若s所指字符串中的内容为:"ABCDEFG12345",x=(2.0*i-1)/((__3__)*(2.0*i)); 其中字符A的ASCII码值虽为奇数,但所在元素的下标为偶s=s+x; 数,因此必需删除;而字符1的ASCII码值为奇数,所在数} 组中的下标也为奇数,因此不应当删除,其它依此类推。最return s; 后t所指的数组中的内容应是:"135"。注意: 部分源程序} 存在文件PROG1.C中。请勿改动主函数main和其它函数中main() 的任何内容,仅在函数fun的花括号中填入你编写的若干语{ double e=1e-3; 句。 printf("\nThe result is: %f\n",fun(e)); 给定源程序: } #include 解题思路:第一处:根据公式以及下面的程序,可以得出i#include 应为0。 void fun(char *s, char t[]) 第二处:根据公式以及i的初值为0,所以应填:i++。 { 第三处:根据公式要求,所以应填:2.0*i。 *************************************************** } 改错题:给定程序MODI1.C中函数 fun 的功能是:将s所main() 指字符串的正序和反序进行连接,形成一个新串放在t所指{ 的数组中。例如,当s所指字符串为:"ABCD" 时,则t所char s[100], t[100]; 指字符串中的内容应为:"ABCDDCBA"。请改正程序中的错误,printf("\nPlease enter string S:"); scanf("%s", s); 使它能得出正确的结果。注意:不要改动main函数,不得fun(s, t); 增行或删行,也不得更改程序的结构~ printf("\nThe result is: %s\n", t); 给定源程序: NONO(); 94 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 } 下分数序列的前n项之和。和值通过函数值返回到main函解题思路:本题是从一个字符串按要求生成另一个新的字符数。 3 5 8 13 21 2 串。我们使用for循环语句来解决这个问题。 ?? , ?? , ?? , ?? , ?? , ?? , „„ 1 2 3 5 8 13 参考答案: 例如,若n = 5,则应输出:8.391667。请改正程序中的错void fun(char *s, char t[]) 误,使它能计算出正确的结果。注意:不要改动main函数,{ 不得增行或删行,也不得更改程序的结构~ int i, j = 0 ; 给定源程序: for(i = 1 ; i < strlen(s) ; i += 2) #include if(s[i] % 2) t[j++] = s[i] ; /************found************/ t[j] = 0 ; fun ( int n ) } { int a, b, c, k; double s; 第73套 s = 0.0; a = 2; b = 1; 填空题:给定程序中,函数fun的功能是计算下式: for ( k = 1; k <= n; k++ ) { /************found************/ s = s + (Double)a / b; c = a; a = a + b; b = c; 例如:若形参e的值为1e-3,函数的返回值为0.551690。 } 请在程序的下划线处填入正确的内容并把下划线删除,使程return s; 序得出正确的结果。注意:源程序存放在考生文件夹下的} BLANK1.C中。不得增行或删行,也不得更改程序的结构~ main( ) 给定源程序: { int n = 5; #include printf( "\nThe value of function is: %lf\n", fun double fun(double e) ( n ) ); { int i, k; double s, t, x; } s=0; k=1; i=2; 解题思路:第一处:由于计算的实型值要通过函数返回,所/**********found**********/ 以必须定义函数的返回类型,只要int或void可以省略,x=__1__/4; 其他都要定义类型。由于返回是实型值,所以应在数名前加/**********found**********/ 上double或float等定义。 while(x __2__ e) 第二处:double的第1个字母错写成大写D。 { s=s+k*x; *************************************************** k=k* (-1); 编程题: 请编写一个函数fun,它的功能是:求出一个2t=2*i; ×M整型二维数组中最大元素的值,并将此值返回调用函/**********found**********/ 数。注意: 部分源程序存在文件PROG1.C文件中。请勿改动x=__3__/(t*t); 主函数main和其它函数中的任何内容,仅在函数fun的花i++; 括号中填入你编写的若干语句。 } 给定源程序: return s; #include } #define M 4 main() fun (int a[][M]) { double e=1e-3; { printf("\nThe result is: %f\n",fun(e)); } } main( ) 解题思路:第一处:根据公式,首项应该是3.0/4,所以应{ int arr[2][M]={5,8,3,45,76,-4,12,82} ; 填:3.0 。 printf("max =%d\n", fun(arr)) ; 第二处:当x大于e时,循环体才会运行,所以应填:>。 NONO( ) ; 第三处:分子的值是2i+1,所以应填:(t+1)。 } *************************************************** 解题思路:本题是求出一个2×M整型二维数组中最大元素改错题:给定程序MODI1.C中函数 fun 的功能是:求出以 95 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 的值。 printf("%d %d-%d-%d\n",k[i].num,k[i].year,k[i].mont 参考答案: h,k[i].day); fun (int a[][M]) } { } int i, j, max=a[0][0]; 解题思路:本题是从给定的人员数据中找出年龄相同的记录for(i=0; i<2; i++) 存入k中,并返回符合条件的人数。 for(j=0; j #include /************found************/ #define N 8 IsPrime ( int n ); typedef struct { int i, m; { int num; m = 1; int year,month,day ; for ( i = 2; i < n; i++ ) }STU; /************found************/ int fun(STU *std, STU *k, int year) if !( n%i ) { int i,n=0; { m = 0; break ; } for (i=0; i 函数main和其它函数中的任何内容,仅在函数fun的花括号#define M 5 中填入你编写的若干语句。 #define N 20 给定源程序: void fun(char (*ss)[N]) #include { int i, j, k, n[M]; char t[N]; #include for(i=0; in[j]) ___2___; main ( ) if(k!=i) { STU a[N]={ {"A01",81},{"A02",89},{"A03",66}, { strcpy(t,ss[i]); {"A04",87},{"A05",77},{"A06",90},{"A07",79},{"A08",strcpy(ss[i],ss[k]); 61},{"A09",80},{"A10",71} }, m ; /**********found**********/ int i; strcpy(ss[k],___3___); printf("***** The original data *****\n"); n[k]=n[i]; for ( i=0; i< N; i++ )printf("No = %s Mark = %d\n", } a[i].num,a[i].s); } fun ( a, &m ); } printf ("***** THE RESULT *****\n"); main() printf ("The top : %s , %d\n",m.num, m.s); { char NONO( ); ss[M][N]={"shanghai","guangzhou","beijing","tianjin } g","cchongqing"}; 解题思路: int i; 本题考察学生在一组记录中找出最高分。我们使用for循环printf("\nThe original strings are :\n"); 语句来解决这个问题。 for(i=0; i 中。不得增行或删行,也不得更改程序的结构~ #include 给定源程序: /**********found**********/ #include void fun(char str, char ch ) 97 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 { while ( *str && *str != ch ) str++; for循环语句把原字符串的字符从尾部依次赋给临时变量b/**********found**********/ (从头开始)中,循环结束后,再把临时变量b的内容重新if ( *str == ch ) 复制给原字符串变量即可。 { str [ 0 ] = ch; 参考答案: /**********found**********/ fun ( char *s ) str[1] = '0'; { } char b[N] ; } int i = 0, j ; main( ) memset(b, 0, N) ; { char s[81], c ; for(j = strlen(s) - 1 ; j >= 0 ; j--) printf( "\nPlease enter a string:\n" ); gets ( s ); b[i++] = s[j] ; printf ("\n Please enter the character to search : " ); strcpy(s, b) ; c = getchar(); } fun(s, c) ; 第76套 printf( "\nThe result is %s\n", s); 填空题:给定程序中,函数fun的功能是:计算下式前n} 项的和作为函数值返回。 例如,当形参n的值为10时,函 数返回:-0.204491。请在程序的下划线处填入正确的内容解题思路: 并把下划线删除,使程序得出正确的结果。注意:源程序存第一处:第1个形参应该是字符串类型,应改为:void 放在考生文件夹下的BLANK1.C中。不得增行或删行,也不fun(char *str, char ch)。 得更改程序的结构~ 第二处:应该是判断不相等,所以应改为:if(*str!=ch)。 给定源程序: 第三次:置字符串结束符错误,所以应改为:str[1] = 0;。 #include *************************************************** double fun(int n) 编程题: 请编一个函数fun(char *s),函数的功能是把s{ int i, k; double s, t; 所指字符串中的内容逆置。例如:字符串中原有的字符串为:s=0; abcdefg, 则调用该函数后, 串中的内容为:gfedcba。 注/**********found**********/ 意: 部分源程序存在文件PROG1.C中。请勿改动主函数maink=__1__; 和其它函数中的任何内容,仅在函数fun的花括号中填入你for(i=1; i<=n; i++) { 编写的若干语句。 /**********found**********/ 给定源程序: t=__2__; #include s=s+k*(2*i-1)*(2*i+1)/(t*t); #include /**********found**********/ #define N 81 k=k*__3__; fun ( char *s ) } { return s; } } main( ) main() { char a[N]; { int n=-1; printf ( "Enter a string : " ); gets ( a ); while(n<0) printf ( "The original string is : " ); puts( a ); { printf("Please input(n>0): "); scanf("%d",&n); } fun ( a ); printf("\nThe result is: %f\n",fun(n)); printf("\n"); } printf ( "The string after modified : "); 解题思路: puts ( a ); 第一处:k是用来管理正负号的,公式中第一个值是正数,NONO( ); 所以应填:1。 } 第二处:根据公式,t是2i,所以应填:2*i。 解题思路:本题是考察考生如何对字符串中的字符进行逆序第三处:根据公式,第2个是负数,所以应填:(-1)。 操作。给出的程序使用了一个临时变量b的字符串,使用*************************************************** 98 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 改错题:给定程序MODI1.C中函数 fun 的功能是:判断一NONO(); 个整数是否是素数,若是返回1,否则返回0。在main()函} 数中,若fun返回1输出YES,若fun返回0输出NO!。请解题思路:本题是找出一维整型数组元素中最大的值和它所改正程序中的错误,使它能得出正确的结果。注意:不要改在的下标, 最大的值和它所在的下标通过形参传回。具体动main函数。不得增行或删行,也不得更改程序的结构~ 看参考源程序中的说明。 给定源程序: 参考答案: #include void fun(int a[], int n , int *max, int *d ) int fun ( int m ) { int i ; { int k = 2; *max=a[0];*d = 0 ; while ( k <= m && (m%k)) for(i = 1; i < n; i++) /************found************/ if(*max < a[i]) k++ { /************found************/ *max = a[i]; if (m = k ) *d = i ; return 1; } else return 0; } } main( ) 第77套 { int n; 填空题:给定程序中,函数fun的功能是:将形参n中,各printf( "\nPlease enter n: " ); scanf( "%d", &n ); 位上为偶数的数取出,并按原来从高位到低位相反的顺序组if ( fun ( n ) ) printf( "YES\n" ); 成一个新的数,并作为函数值返回。例如,输入一个整数:else printf( "NO!\n" ); 27638496,函数返回值为:64862。请在程序的下划线处填} 入正确的内容并把下划线删除, 使程序得出正确的结果。注解题思路: 第一处:语句后缺少分号。 意:源程序存放在考生文件夹下的BLANK1.C中。不得增行第二处:条件判断相等的符号是==。 或删行,也不得更改程序的结构~ *************************************************** 给定源程序: 编程题: 请编写一个函数fun,它的功能是:找出一维整#include 型数组元素中最大的值和它所在的下标, 最大的值和它所unsigned long fun(unsigned long n) 在的下标通过形参传回。数组元素中的值已在主函数 { unsigned long x=0; int t; 中赋予。主函数中x是数组名, n是x中的数据个数,maxwhile(n) { t=n%10; 存放最大值,index存放最大值所在元素的下标。注意: 部 分源程序存在文件PROG1.C文件中。请勿改动主函数main/**********found**********/ 和其它函数中的任何内容,仅在函数fun的花括号中填入 if(t%2==__1__) /**********found**********/ 你编写的若干语句。 给定源程序: x=__2__+t; #include /**********found**********/ #include n=__3__; void fun(int a[], int n , int *max, int *d ) } { return x; } } main() main() { int i, x[20], max , index, n = 10; { unsigned long n=-1; while(n>99999999||n<0) randomize() ; for (i=0;i < n;i++) {x[i] = rand()%50; printf("%4d", { printf("Please input(0 第三处:每循环一次n的值缩小10倍,所以应填:n/10。 void fun(char p1[], char p2[]) *************************************************** { 改错题:给定程序MODI1.C中函数fun的功能是:将长整型} 数中每一位上为奇数的数依次取出,构成一个新数放在tmain() 中。高位仍在高位,低位仍在低位。例如,当s中的数为:{ char s1[80], s2[40] ; 87653142时,t中的数为:7531。请改正程序中的错误,使printf("Enter s1 and s2:\n") ; 它能得出正确的结果。注意:不要改动main函数,不得增scanf("%s%s", s1, s2) ; 行或删行,也不得更改程序的结构~ 给定源程序: printf("s1=%s\n", s1) ; #include printf("s2=%s\n", s2) ; void fun (long s, long *t) printf("Invoke fun(s1,s2):\n") ; { int d; fun(s1, s2) ; long sl=1; printf("After invoking:\n") ; /************found************/ printf("%s\n", s1) ; t = 0; NONO() ; while ( s > 0) } { d = s%10; 解题思路:本题是不使用字符串库函数来实现两个字符串的/************found************/ 连接。 if (d%2 == 0) 参考答案: { *t = d * sl + *t; void fun(char p1[], char p2[]) sl *= 10; { } char *p=p1; s /= 10; while(*p)p++; } while(*p2) *p++ = *p2++; } *p=0; main() } { long s, t; 第78套 clrscr(); 填空题:给定程序中,函数fun的功能是:将N×N矩阵主对printf("\nPlease enter s:"); scanf("%ld", &s); 角线元素中的值与反向对角线对应位置上元素中的值进行fun(s, &t); 交换。例如,若N=3,有下列矩阵: printf("The result is: %ld\n", t); 1 2 3 } 4 5 6 解题思路:第一处:由于t是一个指针变量,赋初值的方式7 8 9 应为:*t=0; 。 交换后为: 第二处:d%2条件判断时应为不是0,所以应改为:3 2 1 if(d%2!=0)。 4 5 6 *************************************************** 9 8 7 编程题: 编写一个函数fun,它的功能是:实现两个字符串请在程序的下划线处填入正确的内容并把下划线删除,使程的连接(不使用库函数strcat), 即把p2所指的字符串连接序得出正确的结果。 注意:源程序存放在考生文件夹下的到p1所指的字符串后。例如,分别输入下面两个字符串: BLANK1.C中。不得增行或删行,也不得更改程序的结构~ FirstString-- 给定源程序: SecondString #include 程序输出: #define N 4 FirstString--SecondString /**********found**********/ 注意: 部分源程序在文件PROG1.C文件中。请勿改动主函数void fun(int ___1___ , int n) main和其它函数中的任何内容,仅在函数fun的花括号中{ int i,s; 填入你编写的若干语句。 /**********found**********/ 100 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 for(___2___; i++) { mid=(low+high)/2; { s=t[i][i]; if(m a[mid]) } low=mid+1; } else return(mid); main() } { int t[][N]={21,12,13,24,25,16,47,38,29,11,32,54, return(-1); 42,21,33,10}, i, j; } printf("\nThe original array:\n"); main() for(i=0; i=0) printf("m=%d,index=%d\n",m,k); for(i=0; i (mid)中元素的值进行比较。如果m的值大于中间位置元void fun( char *a, char *p ) 素中的值, 则下一次的查找范围落在中间位置之后的元素{ 中;反之,下一次的查找范围落在中间位置之前的元素中。 直到low>high,查找结束。请改正程序中的错误,使它能} 得出正确结果。注意:不要改动main函数,不得增行或删main() 行,也不得更改程序的结构。 { char s[81],*t; 给定源程序: printf("Enter a string:\n");gets(s); #include t=s; #define N 10 while(*t)t++; /************found************/ t--; void fun(int a[], int m ) while(*t=='*')t--; { int low=0,high=N-1,mid; fun( s , t ); while(low<=high) printf("The string after deleted:\n");puts(s); 101 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 NONO(); main() } { char 解题思路:本题是考察字符串的操作。 ss[M][N]={"shanghai","guangzhou","beijing","tianjin1. 利用循环扫描出p指针左边的字符是否是'*',如果不是g","chongqing"}; '*',则依次把这些字符移动原字符串a首地址开始存放。 int n,k,i; 2. 把p指针所指的字符串也依次存放到字符串a中。 printf("\nThe original strings are :\n"); 3. 最后给字符串a加上结束符。 for(i=0;i 的内容并把下划线删除,使程序得出正确的结果。注意:源#include 程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,char* fun( char tt[] ) 也不得更改程序的结构~ { 给定源程序: int i; #include for( i = 0; tt[i]; i++ ) #include /**********found***********/ #define M 5 if(( 'a' <= tt[i] )||( tt[i] <= 'z' ) ) #define N 20 /**********found***********/ int fun(char (*ss)[N], int *n) tt[i] += 32; { int i, k=0, len= N; return( tt ); /**********found**********/ } for(i=0; i<___1___; i++) main( ) { len=strlen(ss[i]); { if(i==0) *n=len; char tt[81]; /**********found**********/ printf( "\nPlease enter a string: " ); if(len ___2___ *n) gets( tt ); { *n=len; printf( "\nThe result string is:\n%s", fun( tt ) ); } k=i; } 解题思路:第一处:判断是小写字母,则条件应该是与的关 } 系。 /**********found**********/ 第二处:小写字母的ASCII值减去32正好是其大写字母。 return(___3___); *************************************************** } 编程题: 请编写函数fun,其功能是: 将所有大于1小于 102 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 整数m的非素数存入xx所指数组中, 非素数的个数通过k填空题:给定程序中,函数fun的功能是:将形参n中,各传回。例如,若输入:17,则应输出:4 6 8 9 10 12 14 15 16。位上为偶数的数取出,并按原来从高位到低位的顺序组成一注意: 部分源程序在文件PROG1.C中。请勿改动主函数main个新的数,并作为函数值返回。例如,从主函数输入一个整和其它函数中的任何内容, 仅在函数fun的花括号中填入数:27638496,函数返回值为:26846。请在程序的下划线你编写的若干语句。 处填入正确的内容并把下划线删除, 使程序得出正确的结给定源程序: 果。注意:源程序存放在考生文件夹下的BLANK1.C中。不#include 得增行或删行,也不得更改程序的结构~ void fun( int m, int *k, int xx[] ) 给定源程序: { #include unsigned long fun(unsigned long n) } { unsigned long x=0, s, i; int t; main() s=n; { /**********found**********/ int m, n, zz[100]; i=__1__; printf( "\nPlease enter an integer number between 10 /**********found**********/ and 100: " ); while(__2__) scanf( "%d", &n ); { t=s%10; fun( n, &m, zz ); if(t%2==0){ printf( "\n\nThere are %d non-prime numbers less /**********found**********/ than %d:", m, n ); x=x+t*i; i=__3__; for( n = 0; n < m; n++ ) } printf( "\n %4d", zz[n] ); s=s/10; NONO(); } } return x; 解题思路:本题是考察考生如何判断一个数不是素数,如果} 所给出的数是非素数且小于指定的数,那么这些数应存放到main() 指定的数组xx中保存,最后由形参xx返回。 在给出的程{ unsigned long n=-1; 序中函数isP就是判断一个数是否是素数,若是非素数,则while(n>99999999||n<0) 返回1,否则返回0。本题是用for(i=2;i 解题思路:第一处:对变量i赋初值,根据i的使用规则来int isP(int m) 看,i应等于1。 { 第二处:while循环要求计算后的s应大于0,所以应填:s。 int j, tag = 0 ; 第三处:每循环一次,i要乘以10,所以应填:i*10。 for(j = 2 ; j < m && !tag ; j++) *************************************************** if(m % j == 0) tag = 1 ; 改错题:给定程序MODI1.C中函数fun的功能是:输出Mreturn tag ; 行M列整数方阵,然后求两条对角线上元素之和,返回此和} 数。请改正程序中的错误,使它能得出正确的结果。注意:void fun( int m, int *k, int xx[] ) 不要改动main函数,不得增行或删行,也不得更改程序的{ 结构~ int i, cnt = 0 ; 给定源程序: for(i = 2 ; i < m ; i++) #include if(isP(i)) xx[cnt++] = i ; #define M 5 *k = cnt ; /************found************/ } int fun(int n, int xx[][]) 第80套 { int i, j, sum=0; 103 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 printf( "\nThe %d x %d matrix:\n", M, M ); 取a个位数字的方法:a%10 for( i = 0; i < M; i++ ) 参考答案: { for( j = 0; j < M; j++ ) void fun(int a, int b, long *c) /************found************/ { printf( "%f ", xx[i][j] ); *c=(a/10)*1000+(b%10)*100+(a%10)*10+(b/10); printf("\n"); } } 第81套 for( i = 0 ; i < n ; i++ ) 填空题:给定程序中,函数fun的功能是:在形参s所指字sum += xx[i][i]+xx[i][ n-i-1 ]; 符串中的每个数字字符之后插入一个*号。例如,形参s所return( sum ); 指的字符串为:def35adh3kjsdf7。执行结果为: } def3*5*adh3*kjsdf7*。请在程序的下划线处填入正确的内main( ) 容并把下划线删除,使程序得出正确的结果。注意:源程序{ int aa[M][M]={{1,2,3,4,5},{4,3,2,1,0}, 存放在考生文件夹下的BLANK1.C中。不得增行或删行,也 {6,7,8,9,0},{9,8,7,6,5},{3,4,5,6,7}}; 不得更改程序的结构~ printf ( "\nThe sum of all elements on 2 diagnals 给定源程序: is %d.",fun( M, aa )); #include } void fun(char *s) 解题思路: { int i, j, n; 第一处:形参必须定义字符串数组的长度,所以应改为:int for(i=0; s[i]!='\0'; i++) fun(int n,int xx[][M])。 /**********found**********/ 第二处:由于xx是整型的双维数组,不能用浮点型输出,if(s[i]>='0' ___1___ s[i]<='9') 所以应改为:printf("%d { n=0; ",xx[i][j]);。 /**********found**********/ *************************************************** while(s[i+1+n]!= ___2___) n++; 编程题: 函数fun的功能是:将a、b中的两个两位正整数for(j=i+n+1; j>i; j--) 合并形成一个新的整数放在c中。合并的方式是:将a中的/**********found**********/ 十位和个位数依次放在变量c的千位和十位上,b中的十位s[j+1]= ___3___; 和个位数依次放在变量c的个位和百位上。例如,当a,45,s[j+1]='*'; b=12。调用该函数后,c=4251。注意: 部分源程序存在文件i=i+1; PROG1.C中。数据文件IN.DAT中的数据不得修改。请勿改} 动主函数main和其它函数中的任何内容,仅在函数fun的} 花括号中填入你编写的若干语句。 main() 给定源程序: { char s[80]="ba3a54cd23a"; #include printf("\nThe original string is : %s\n",s); void fun(int a, int b, long *c) fun(s); { printf("\nThe result is : %s\n",s); } } 解题思路:第一处:判断是数字,应该使用“与”,所以应main() 填:&&。 { int a,b; long c; 第二处:判断字符串是否是字符串结束符,所以应填:'\0'。 printf("Input a, b:"); 第三处:如果当前字符是数字字符,则把当前字符以后的所scanf("%d%d", &a, &b); 有字符往后一个位置,所以应填:s[j]。 fun(a, b, &c); *************************************************** printf("The result is: %ld\n", c); 改错题:给定程序MODI1.C中函数fun的功能是:根据整型NONO(); 形参m,计算如下公式的值。 1 1 1 1 } y = 1 + ----- + ----- + ----- + „„ + ----- 2*2 3*3 4*4 m*m 解题思路:本题是给出两个两位数的正整数分别取出各位上例如,若 m 中的值为: 5,则应输出:1.463611。请改正程的数字,再按条件组成一个新数。取a十位数字的方法:a/10 104 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 序中的错误,使它能得出正确的结果。注意: 不要改动 main for (i = 0 ; i < 3 ; i++) { 函数,不得增行或删行,也不得更改程序的结构~ for (j = 0 ; j < 3 ; j++) 给定源程序: printf("%7d", t[i][j]) ; #include printf("\n") ; double fun ( int m ) } { double y = 1.0 ; NONO () ; int i; } /**************found**************/ 解题思路:本题考察考生如何实现矩阵的转置,然后执行两for(i = 2 ; i < m ; i++) 个矩阵中的元素值相加生成一个新的矩阵矩阵转置实现上/**************found**************/ 就是原行元素值变为列元素值,原列元素值变为行元素值。 y += 1 / (i * i) ; 参考答案: return( y ) ; void fun ( int a[3][3], int b[3][3]) } { main( ) int c[3][3] ; { int n = 5 ; int i, j ; printf( "\nThe result is %lf\n", fun ( n ) ) ; for(i = 0 ; i < 3 ; i++) } for(j = 0 ; j < 3 ; j++) 解题思路: { 第一处:使用for循环计算公式,必须计算到m,所以应改c[i][j] = a[j][i] ; 为for(i=2; i<=m; i++)。 b[i][j] = a[i][j] + c[i][j] ; 第二处:在除法运算中,如果除数和被除数都是整数,所以} 所除结果也是整数,因此应改为y+=1./(i*i)。 } *************************************************** 编程题: 请编写函数fun, 函数的功能是:实现B=A+A', 即第82套 把矩阵A加上A的转置, 存放在矩阵B中。计算结果在 main 填空题:给定程序中,函数fun的功能是:找出100,999函数中输出。 之间(含100和999)所有整数中各位上数字之和为x(x例如,输入下面的矩阵: 其转置矩阵为: 为一正整数)的整数,然后输出;符合条件的整数个数作为1 2 3 1 4 7 函数值返回。例如,当x值为5时,100,999之间各位上4 5 6 2 5 8 数字之和为5的整数有:104、113、122、131、140、203、7 8 9 3 6 9 212、221、230、302、311、320、401、410、500。共有15程序输出: 个。当x值为27时,各位数字之和为27的整数是:999。2 6 10 只有1个。请在程序的下划线处填入正确的内容并把下划线6 10 14 删除, 使程序得出正确的结 果。注意:源程序存放在考生10 14 18 文件夹下的BLANK1.C中。不得增行或删行,也不得更改程注意: 部分源程序在文件PROG1.C中。请勿改动主函数main序的结构~ 和其它函数中的任何内容,仅在函数fun的花括号中填入你给定源程序: 编写的若干语句。 #include 给定源程序: fun(int x) #include { int n, s1, s2, s3, t; void fun ( int a[3][3], int b[3][3]) n=0; { t=100; /**********found**********/ } while(t<=__1__){ main( ) /* 主程序 */ /**********found**********/ { int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}, s1=t%10; s2=(__2__)%10; s3=t/100; t[3][3] ; /**********found**********/ int i, j ; if(s1+s2+s3==__3__) fun(a, t) ; { printf("%d ",t); 105 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 n++; 编程题: 学生的记录由学号和成绩组成,N名学生的数据} 已在主函数中放入结构体数组s中,请编写函数fun,它的t++; 功能是:按分数的高低排列学生的记录,高分在前。 注意: } 部分源程序在文件PROG1.C文件中。请勿改动主函数mainreturn n; 和其它函数中的任何内容,仅在函数fun的花括号中填入你} 编写的若干语句。 main() 给定源程序: { int x=-1; #include while(x<0) #define N 16 { printf("Please input(x>0): "); scanf("%d",&x); } typedef struct printf("\nThe result is: %d\n",fun(x)); { char num[10]; } int s; 解题思路: } STREC; 第一处:使用while循环找出100,999之间所有整数,所int fun( STREC a[] ) 以应填:999。 { 第二处:s2是求十位数字,所以应填:t/10。 } 第三处:各位数字之和为x,所以应填:x。 main() *************************************************** {STREC 改错题:给定程序MODI1.C中函数fun的功能是:从低位开s[N]={{"GA005",85},{"GA003",76},{"GA002",69}, 始取出长整型变量s中偶数位上的数,依次构成一个新数放{"GA004",85}, 在t中。高位仍在高位,低位仍在低位。例如,当s中的数{"GA001",91},{"GA007",72},{"GA008",64}, 为:7654321时,t中的数为:642。请改正程序中的错误,{"GA006",87}, 使它能得出正确的结果。注意:不要改动main函数,不得{"GA015",85},{"GA013",91},{"GA012",64}, 增行或删行,也不得更改程序的结构~ 给定源程序: {"GA014",91}, #include {"GA011",66},{"GA017",64},{"GA018",64}, /************found************/ {"GA016",72}}; void fun (long s, long t) int i;FILE *out ; { long sl=10; fun( s ); s /= 10; printf("The data after sorted :\n"); *t = s % 10; for(i=0;i0,所以应改为:while(s>0)。 { *************************************************** STREC tmp; 106 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 int i,j; 化,所以应填:0。 for(i = 0; i < N; i++) 第二处:找出x?999,所以应填:x。 for(j = i+1; j < N; j++) 第三处:循环控制变量t每循环一次t要加1,所以应填:if(a[i].s < a[j].s) t++。 { *************************************************** tmp = a[i]; 改错题:给定程序MODI1.C中函数fun的功能是:先将sa[i] = a[j]; 所指字符串中的字符按逆序存放到t所指字符串中,然后把a[j] = tmp; s所指串中的字符按正序连接到t所指串的后面。 例如:} 当s所指的字符串为:"ABCDE"时,则t所指的字符串应为:} "EDCBAABCDE"。 请改正程序中的错误,使它能得出正确的 第83套 结果。注意:不要改动main函数,不得增行或删行,也不填空题:给定程序中,函数fun的功能是:找出100至x(x得更改程序的结构~ ?999)之间各位上的数字之和为15的所有整数,然后输出;给定源程序: 符合条件的整数个数作为函数值返回。例如,当n值为500#include 时,各位数字之和为15的整数有:159、168、177、186、#include 195、249、258、267、276、285、294、339、348、357、366、void fun (char *s, char *t) 375、384、393、429、438、447、456、465、474、483、492。{ 共有26个。请在程序的下划线处填入正确的内容并把下划/************found************/ 线删除, 使程序得出正确的结果。注意:源程序存放在考生int i; 文件夹下的BLANK1.C中。不得增行或删行,也不得更改程sl = strlen(s); 序的结构~ for (i=0; i t[i] = s[sl-i]; fun(int x) for (i=0; i999||x<0) 在文件PROG1.C中。数据文件IN.DAT中的数据不得修改。{ printf("Please input(0 解题思路:第一处:符合条件的整数个数n,必须进行初始void fun(int a, int b, long *c) 107 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 { 转换后的小写字母作为函数值返回。例如,若形参是字母A,} 则转换为小写字母f; 若形参是字母W,则转换为小写字母main() /* 主函数 */ b。请改正函数fun中指定部位的错误, 使它能得出正确的{ int a,b; long c; 结果。注意: 不要改动main函数, 不得增行或删行, 也不printf("Input a, b:"); 得更改程序的结构! scanf("%d%d", &a, &b); 给定源程序: fun(a, b, &c); #include printf("The result is: %ld\n", c); #include NONO(); char fun(char c) } { if( c>='A' && c<='Z') 解题思路: /**************found**************/ 本题是给出两个两位数的正整数分别取出各位上的数字,再C=C+32; 按条件组成一个新数。 if(c>='a' && c<='u') 取a十位数字的方法:a/10;取a个位数字的方法:a%10 /**************found**************/ 参考答案: c=c-5; void fun(int a, int b, long *c) else if(c>='v'&&c<='z') { c=c-21; *c=(b/10)*1000+(a/10)*100+(b%10)*10+(a%10); return c; } } 第84套 main() 填空题:函数fun的功能是:从三个形参a,b,c中找出中{ char c1,c2; 间的那个数,作为函数值返回。例如,当a=3, b=5, c=4printf("\nEnter a letter(A-Z): "); c1=getchar(); 时,中数为4。请在程序的下划线处填入正确的内容并把下if( isupper( c1 ) ) 划线删除,使程序得出正确的结果。注意:源程序存放在考{ c2=fun(c1); 生文件夹下的BLANK1.C中。不得增行或删行,也不得更改printf("\n\nThe letter \'%c\' change to \'%c\'\n", 程序的结构~ c1,c2); 给定源程序: } #include else printf("\nEnter (A-Z)!\n"); int fun(int a, int b, int c) } { 解题思路:第一处:变量c错写成大写C了。 int t; 第二处:要求转换为其后的第5个字母,所以应改为:/**********found**********/ c=c+5;。 t = (a>b) ? (b>c? b :(a>c?c:___1___)) : ((a>c)?___2___ : *************************************************** ((b>c)?c:___3___)); 编程题: 请编写函数fun, 其功能是: 计算并输出。例如, return t; 在主函数中从键盘给n输入20后,输出为:s=534.188884。} 注意: 要求n的值大于1但不大于100。部分源程序在文件main() PROG1.C中。请勿改动主函数main和其他函数中的任何内{ int a1=3, a2=5, a3=4, r; 容, 仅在函数fun的花括号中填入你编写的若干语句。 r = fun(a1, a2, a3); 给定源程序: printf("\nThe middle number is : %d\n", r); #include } #include 解题思路:第一处:给三个数进行比较大小,所以应填:a。 double fun(int n) 第二处:给三个数进行比较大小,所以应填:a。 { 第三处:给三个数进行比较大小,所以应填:b。 } *************************************************** main() 改错题:给定程序MODI1.C中函数fun的功能是: 首先将大{ int n; double s; 写字母转换为对应小写字母;若小写字母为a,u,则将其转printf("\n\nInput n: "); scanf("%d",&n); 换为其后的第5个字母;若小写字母为v,z, 使其值减21。s=fun(n); 108 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 printf("\n\ns=%f\n\n",s); return (1); NONO(); } } main() 解题思路:本题是根据公式计算多项式的值。注意变量的取{ STYPE s[10]={ {1,"aaaaa","111111"}, 值范围。 {1,"bbbbb","222222"},{1,"ccccc","333333"}, 参考答案: {1,"ddddd","444444"},{1,"eeeee","555555"}}; double fun(int n) int k; { k=fun(s); int i; if (k==1) double fac=1.0; { printf("Succeed!"); check(); } double sum=1.0; else for(i=2;i<=n;i++) printf("Fail!"); { } fac+=sqrt(i); void check() sum+=fac; { FILE *fp; int i; } STYPE s[10]; return sum; if((fp=fopen("myfile5.dat","rb"))==NULL) } { printf("Fail !!\n"); exit(0); } 第85套 printf("\nRead file and output to screen :\n"); 填空题:给定程序的功能是调用fun函数建立班级通讯录。printf("\n num name tel\n"); 通讯录中记录每位学生的编号、姓名和电话号码。班级的人for(i=0; i 中。程序中共有三处要填上适当的内容,使程序能运行出正#include 确的结果。 #define N 5 第一处:结构定义自变量,因此应填写STYPE。 typedef struct 第二处:在所填行的下面一行,使用fopen来创建一个二进{ int num; 制文件,但文件流的变量名fp已经给出,这样,此处只能char name[10]; 填写FILE。 char tel[10]; 第三处:fwrite是把变量中的内容写入指定文件中,再根}STYPE; 据fwrite参数的使用要求,所以只能填写文件流变量fp。 void check(); *************************************************** /**********found**********/ 改错题:给定程序MODI1.C中函数fun的功能是:先将在字int fun(___1___ *std) 符串s中的字符按正序存放到t串中,然后把s中的字符按{ 逆序连接到t串的后面。例如:当s中的字符串为:"ABCDE"/**********found**********/ 时,则t中的字符串应为:"ABCDEEDCBA"。请改正程序中的___2___ *fp; int i; 错误,使它能得出正确的结果。注意:不要改动main函数,if((fp=fopen("myfile5.dat","wb"))==NULL) 不得增行或删行,也不得更改程序的结构! return(0); 给定源程序: printf("\nOutput data to file !\n"); #include for(i=0; i /**********found**********/ void fun (char *s, char *t) fwrite(&std[i], sizeof(STYPE), 1, ___3___); { int i, sl; fclose(fp); sl = strlen(s); 109 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 /************found************/ 填空题:甲乙丙丁四人同时开始放鞭炮,甲每隔t1秒放一for( i=0; i<=s1; i ++) 次,乙每隔t2秒放一次, 丙 每隔t3秒放一次,丁每隔t4t[i] = s[i]; 秒放一次,每人各放n次。函数fun的功能是根据形参 提for (i=0; i printf("The result is: %s\n", t); /**********found**********/ } #define OK(i, t, n) ((___1___%t==0) && (i/t /**********found**********/ void fun(int a, int b, long *c) return ___3___; { } } main() main() { int t1=7, t2=5, t3=6, t4=4, n=10, r; { int a,b; long c; r = fun(t1, t2, t3, t4, n); printf("Input a, b:"); scanf("%d,%d", &a, &b); printf("The sound : %d\n", r); fun(a, b, &c); } printf("The result is: %d\n", c); 解题思路:第一处:根据定义的要求,所以应填:i。 NONO(); 第二处:for循环语句的增量,所以应填:t++。 } 第三处:返回统计次数,所以应填:count。 解题思路: *************************************************** 本题是给出两个两位数的正整数分别取出各位上的数字,再改错题:给定程序MODI1.C中函数fun的功能是: 根据输入按条件组成一个新数。 的三个边长(整型值), 判断能否构成三角形; 构成的是等取a十位数字的方法:a/10 ;取a个位数字的方法:a%10 边三角形, 还是等腰三角形。若能构成等边三角形 函数返参考答案: 回3,若能构成等腰三角形函数返回2, 若能构成一般三角void fun(int a, int b, long *c) 形函数返回1, 若不能构成三角形函数返回0。请改正函数{ fun中指定部位的错误, 使它能得出正确的结果。注意: 不*c=(a/10)*1000+(b/10)*100+(a%10)*10+(b%10); 要改动main函数, 不得增行或删行, 也不得更改程序的结} 构! 第86套 给定源程序: 110 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 #include 之和。 #include 参考答案: /**************found**************/ double fun(int n) void fun(int a,int b,int c) { { if(a+b>c && b+c>a && a+c>b) { int i,j=0; if(a==b && b==c) double s=0; return 3; for (i=3; i<=n; i++) else if(a==b||b==c||a==c) { return 2; for (j=2; j 第二处:语句后缺少分号。 int c1,c2,c3; *************************************************** void fun(long n) 编程题: 请编写函数fun, 其功能是: 计算并输出3到n{ c1 = c2 = c3 = 0; 之间(含3和n)所有素数的平方根之和。例如, 在主函数中while (n) { 从键盘给n输入100后,输出为: sum=148.874270。注意: 要/**********found**********/ 求n的值大于2但不大于100。部分源程序在文件PROG1.Cswitch(___1___) 中。请勿改动主函数main和其他函数中的任何内容,仅在{ 函数fun的花括号中填入你编写的若干语句。 /**********found**********/ 给定源程序: case 1: c1++;___2___; #include /**********found**********/ #include case 2: c2++;___3___; case 3: c3++; double fun(int n) } { n /= 10; } } main() } { int n; double sum; main() printf("\n\nInput n: "); scanf("%d",&n); { long n=123114350L; fun(n); sum=fun(n); printf("\n\nsum=%f\n\n",sum); printf("\nThe result :\n"); NONO(); printf("n=%ld c1=%d c2=%d c3=%d\n",n,c1,c2,c3); } } 解题思路: 解题思路:第一处:取个位数上的数,所以n%10就可以得本题是计算并输出3到n之间(含3和n)所有素数的平方根到个位数。 111 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 第二处:switch条件判断中,满足条件做好后,必须使用double fun(int n) break语句跳出选择体,所以应填:break。 { 第三处:同第二处。 } *************************************************** main() 改错题:给定程序MODI1.C中函数fun的功能是: 统计一个{ int n; double s; 无符号整数中各位数字值为零的个数, 通过形参传回主函printf("\nInput n: "); scanf("%d",&n); 数;并把该整数中各位上最大的数字值作为函数值返回。例s=fun(n); 如, 若输入无符号整数30800, 则数字值为零的个数为3, printf("\n\ns=%f\n\n",s); 各位上数字值 最大的是8。请改正函数fun中指定部位的NONO(); 错误, 使它能得出正确的结果。注意: 不要改动main函数, } 不得增行或删行, 也不得更改程序的结构! 解题思路:本题是根据公式计算多项式的值。注意变量的取给定源程序: 值范围。 #include 参考答案: int fun(unsigned n, int *zero) double fun(int n) { int count=0,max=0,t; { do double s=0, t=1; { t=n%10; int i ; /**************found**************/ for(i=1; i<=n; i++) if(t=0) { count++; t *= i; if(max 编程题: 请编写函数fun, 其功能是: 计算并输出下列多#define N 9 项式的值: /**********found**********/ 1 1 1 void fun(int ___1___, int n) S = 1 + ?? + —?? + „ + ????? 1*2 1*2*3 1*2*3*„50 { int i, j, max, min, px, pn, t; 例如, 在主函数中从键盘给n输入50后,输出/**********found**********/ 为:s=1.718282。注意: 要求n的值大于1但不大于100。for (i=0; i { if (max < a[j]) 112 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 { max = a[j]; px = j; } { w[k]=sum/5; sum=0; k++; } if (min > a[j]) } { min = a[j]; pn = j; } return k; } } if (px != i) main( ) { t = a[i]; a[i] = max; a[px] = t; { double a[SIZE],b[SIZE/5]; if (pn == i) pn= px; int i, k; } k = fun(a,b); if (pn != i+1) printf("The original data:\n"); { t = a[i+1]; a[i+1] = min; a[pn] = t; } for(i=0; i 数组中。若s所指数组中元素的个数不是5的倍数,多余部#define N 8 分忽略不计。例如,s所指数组有14个元素,则只对前10typedef struct 个元素进行处理,不对最后的4个元素求平均值。请改正程{ char num[10]; 序中的错误,使它能得出正确结果。注意:不要改动maindouble s; 函数,不得增行或删行,也不得更改程序的结构。 } STREC; 给定源程序: double fun( STREC *a, STREC *b, int *n ) #include { #define SIZE 20 } fun(double *s, double *w) main() { int k,i; double sum; { STREC s[N]={{"GA05",85},{"GA03",76},{"GA02",69}, for(k=2,i=0;ih[j].s) {t=h[i] ;h[i]=h[j]; h[j]=t;} { m=n; for(i=0;i=0; j--) } ss[i][m--]=ss[i][j]; 解题思路:本题是利用循环计算出记录结构中学生成绩的平for(j=0; j 改动 main 函数, 不得增行或删行, 也不得更改程序的结#include 构! #define M 5 给定源程序: #define N 20 #include void fun(char (*ss)[N]) double fun(int n) { int i, j, k=0, n, m, len; { for(i=0; i1 && n<170) if(i==0) n=len; /*********found*********/ if(len>n) { result*=--n; 114 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 /*********found*********/ { return _____; char *p = s ; } int i = 0 ; main() while(*p) { { if(*p != c) s[i++] = *p ; int n; p++ ; printf("Enter an integer: "); } scanf("%d",&n); s[i] = 0 ; printf("\n\n%d!=%lg\n\n",n,fun(n)); } } 第90套 解题思路: 填空题:函数fun的功能是:统计所有小于等于n(n>2)的第一处:--n是先减1,n--是后减1。本题应该先乘以n,素数的个数,素数的个数作为函数值返回。请在程序的下划再减1,才正确。所以应填:n-- 线处填入正确的内容并把下划线删除,使程序得出正确的结第二处:返回计算结果,所以应填:result。 果。注意:源程序存放在考生文件夹下的BLANK1.C中。不*************************************************** 得增行或删行,也不得更改程序的结构~ 编程题: 编写函数fun,函数的功能是: 从s所指的字符给定源程序: 串中删除给定的字符。同一字母的大、小写按不同字符处理。#include 若程序执行时输入字符串为: turbo c and borland c++ 从int fun(int n) 键盘上输入字符:n, 则输出后变为: turbo c ad borlad c++{ int i,j, count=0; 如果输入的字符在字符串中不存在, 则字符串照原样输出。printf("\nThe prime number between 3 to %d\n", n); 注意: 部分源程序在文件PROG1.C中。请勿改动主函数mainfor (i=3; i<=n; i++) { 和其它函数中的任何内容, 仅在函数fun的花括号中填入/**********found**********/ 你编写的若干语句。 for (___1___; j if (___2___%j == 0) #include break; int fun(char s[],char c) /**********found**********/ { if (___3___>=i) } { count++; printf( count%15? "%5d":"\n%5d",i); } main() } { return count; static char str[]="turbo c and borland c++"; } char ch; main() printf("原始字符串:%s\n", str); { int n=20, r; printf("输入一个字符:"); r = fun(n); scanf("%c",&ch); printf("\nThe number of prime is : %d\n", r); fun(str,ch); } printf("str[]=%s\n",str); 解题思路: NONO(); 第一处:素数的条件是除1和其本身外不能整除该数,所以} 应填:2。 解题思路:本题是考察考生怎样在字符串中删除指定的字第二处:判断i是否素数,所以应填:i。 符,结果仍存放在原字符串中。给出的程序是引用字符串指第三处:如果内循环for中所有数都不能整除i,那么i是针p和while循环语句以及if条件判断语句进行处理的,素数且j大于等于i,所以应填:j。 新字符串的位置是由i来控制的,循环结束后,再给新字符*************************************************** 串置字符串结束符,最后产生的新字符串形参s返回到主程改错题:数列中,第一项值为3, 后一项都比前一项的值增序中。 5;给定程序MODI1.C中函数 fun的功能是: 计算前参考答案: n(4 int i; #define N 20 double sum=0.0; int fun(int n,int *a) if (n>1 && n<=100) { int i,j,k,sum; { /**************found**************/ for(i=1; i<=n; i++) sum=j==0; sum+=1.0/(2*i-1)-1.0/(2*i); for(k=3,i=0;i printf("\nEnter n (4 d=fun(n,a); double fun(double x) printf("\n\nThe result :\n"); { double f, t; int n; for(i=0; i= 1e-6); 他函数中的任何内容, 仅在函数fun的花括号中填入你编return f; 写的若干语句。 } 给定源程序: main() #include { double x, y; double fun(int n) x=2.5; { y = fun(x); printf("\nThe result is :\n"); } main() printf("x=%-12.6f y=%-12.6f \n", x, y); { int n; double s; } printf("\nInput n: "); scanf("%d",&n); 解题思路:第一处:根据公式可知,此处应填:x。 s=fun(n); 第二处:根据公式可知,此处应该除以n,所以应填:n。 printf("\ns=%f\n",s); 第三处:计算的结果进行累加并赋值给变量f,所以应填: 116 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 t。 { *************************************************** } 改错题:给定程序MODI1.C中函数fun的功能是: 计算nmain() 的5次方的值(规定n的值大于2、小于8),通过形参指针传{ double 回主函数;并计算该值的个位、十位、百位上数字之和作为s,a[9]={12.0,34.0,4.0,23.0,34.0,45.0,18.0,3.0,11.0} 函数值返回。例如,7的5次方是16807, 其低3位数的和值; 是15。请改正函数fun中指定部位的错误, 使它能得出正int i; 确的结果。注意: 不要改动main函数, 不得增行或删行, printf("\nThe original data is :\n"); 也不得更改程序的结构! for(i=0;i<9;i++)printf("%6.1f",a[i]); 给定源程序: printf("\n\n"); #include s=fun(a); #include printf("s=%f\n\n",s); int fun( int n ,int *value ) NONO(); { int d,s,i; } /**************found**************/ 解题思路: d=0; s=0; 本题是计算并输出给定数组中每相邻两个元素之平均值的for(i=1; i<=5; i++) d=d*n; 平方根之和。 *value=d; 参考答案: for(i=1; i<=3; i++) double fun(double x[9]) { s=s+d%10; { /**************found**************/ int i ; d=d\10; double avg=0.0,sum=0.0; } for (i=0;i<8;i++) return s; { } avg=(x[i]+x[i+1])/2; main() sum+=sqrt(avg); { int n, sum, v; } do return sum; { printf("\nEnter n( 2=8); 第92套 sum=fun( n,&v ); 填空题:函数fun的功能是:计算: printf("\n\nThe result:\n value=%d 的前n项。若x=2.5,函数值为:12.182340。请在程序的sum=%d\n\n",v,sum); 下划线处填入正确的内容并把下划线删除,使程序得出正确} 的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。解题思路:第一处:变量d的初始值应为1。 不得增行或删行,也不得更改程序的结构~ 第二处:整除的符号是/。 给定源程序: *************************************************** #include 编程题: 请编写函数fun, 其功能是: 计算并输出给定数double fun(double x, int n) 组(长度为9)中每相邻两个元 素之平均值的平方根之和。{ double f, t; int i; 例如, 给定数组中的9个元素依次为12.0、34.0、4.0、23.0、f = 1.0; 34.0、45.0、18.0、3.0、11.0, 输出应为: s=35.951014。/**********found**********/ 注意:部分源程序在文件PROG1.C中。请勿改动主函数maint = ___1___; 和其他函数中的任何内容,仅在函数fun的花括号中填入你/**********found**********/ 编写的若干语句。 for (i=___2___; i /**********found**********/ #include t *= x/___3___; double fun(double x[9]) f += t; 117 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 } 解题思路:第一处:k应该取循环变量i的值,所以应改为:return f; k=i;。 } 第二处:语句后缺少分号。 main() *************************************************** { double x, y; 编程题: 请编写函数fun, 其功能是: 计算并输出给定10x=2.5; 个数的方差:例如,给定的10个数为95.0、89.0、76.0、65.0、y = fun(x, 12); 88.0、72.0、85.0、81.0、90.0、56.0,输出为s=11.730729。 printf("\nThe result is :\n"); 注意:部分源程序在文件PROG1.C中。请勿改动主函数mainprintf("x=%-12.6f y=%-12.6f\n", x, y); 和其他函数中的任何内容, 仅在函数fun的花括号中填入} 你编写的若干语句。 解题思路:第一处:t是处理公式中每一项中间项,所以应给定源程序: 填:1。 #include 第二处:根据公式可知,for循环变量的初始值应从1开始。 #include 第三处:每做一次循环均要除以变量i的值,所以应填:i。 double fun(double x[10]) *************************************************** { 改错题:给定程序MODI1.C中函数fun的功能是: 找出100} 至n(不大于1000)之间三位数字相等的所有整数, 把这些main() 整数放在s所指数组中, 个数作为函数值返回。 请改正函{ double s, x[10]={95.0,89.0,76.0,65.0,88.0,72.0, 数fun中指定部位的错误, 使它能得出正确的结果。注意: 85.0,81.0,90.0,56.0}; 不要改动main函数, 不得增行或删行, 也不得更改程序的int i; 结构! printf("\nThe original data is :\n"); 给定源程序: for(i=0;i<10;i++)printf("%6.1f",x[i]); #include printf("\n\n"); #define N 100 s=fun(x); int fun(int *s, int n) printf("s=%f\n\n",s); { int i,j,k,a,b,c; NONO(); j=0; } for(i=100; i 1000); main函数中将多次调用fun函数,每调用一次fun函数,输num = fun( a,n ); 出链表尾部结点中的数据,并释放该结点,使链表 缩短。printf("\n\nThe result :\n"); 请在程序的下划线处填入正确的内容并把下划线删除,使程for(i=0; i while (head->next != NULL){ #include fun(head); #define N 8 printf("\n\n"); typedef struct list printf("\nOutput from head again :\n"); { int data; outlist(head); struct list *next; } } SLIST; } void fun( SLIST *p) 解题思路:本题是对已经建立的链表,通过调用一次函数就{ SLIST *t, *s; 输出链表尾部的数据。程序中共有三处要填上适当的内容,t=p->next; s=p; 使程序能运行出正确的结果。 while(t->next != NULL) 第一处:由于本题要求输出链表尾部的数据,函数是利用{ s=t; while循环语句找出链表尾部的指针并存入临时变量s中,/**********found**********/ 那么每循环一次就要判断链表是否已结束位置,如果是,则t=t->___1___; 退出循环, 进行输出,由于是通过t指针变量进行操作的,} 因此,都要取t的next指针重新赋给t来实现,所以本处/**********found**********/ 应填next。 printf(" %d ",___2___); 第二处:输出最后一个结点的数据,所以应填t->data或s->next=NULL; (*t).data。 /**********found**********/ 第三处:输出出最后一个结点数据后,并把此结点删除了,free(___3___); 程序要求释放内存,所以应填t。 } *************************************************** SLIST *creatlist(int *a) 改错题:给定程序MODI1.C中函数fun的功能是:将字符串{ SLIST *h,*p,*q; int i; 中的字符按逆序输出,但不改变字符串中的内容。例如,若h=p=(SLIST *)malloc(sizeof(SLIST)); 字符串为abcd,则应输出:dcba。请改正程序中的错误,for(i=0; idata=a[i]; p->next=q; p=q; 给定源程序: } #include p->next=0; /************found************/ return h; fun (char a) } { if ( *a ) void outlist(SLIST *h) { fun(a+1) ; { SLIST *p; /************found************/ p=h->next; printf("%c" *a) ; if (p==NULL) printf("\nThe list is NULL!\n"); } else } { printf("\nHead"); main( ) do { printf("->%d",p->data); p=p->next; } { char s[10]="abcd"; while(p!=NULL); printf("处理前字符串=%s\n处理后字符串=", s); printf("->End\n"); fun(s); printf("\n") ; } } } 解题思路: 第一处:形参a应定义为字符串指针。 main() 第二处:语句中缺少逗号。 { SLIST *head; *************************************************** int a[N]={11,12,15,18,19,22,25,29}; 编程题: 请编写一个函数fun,它的功能是:比较两个字head=creatlist(a); 符串的长度,(不得调用C语言提供的求字符串长度的函printf("\nOutput from head:\n"); outlist(head); 数),函数返回较长的字符串。若两个字符串长度相同, printf("\nOutput from tail: \n"); 则返回第一个字符串。例如,输入beijing shanghai 119 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 (为回车键), 函数将返回shanghai。注意: 部{ double f, t; int i; 分源程序存在文件PROG1.C中。请勿改动主函数main和其/**********found**********/ 它函数中的任何内容,仅在函数fun的花括号中填入你编写f = ___1___; 的若干语句。 t = -1; 给定源程序: for (i=1; i { char *fun ( char *s, char *t) /**********found**********/ { t *= (___2___)*x/i; } /**********found**********/ main( ) f += ___3___; { char a[20],b[20]; } printf("Input 1th string:") ; return f; gets( a); } printf("Input 2th string:") ; main() gets( b); { double x, y; printf("%s\n",fun (a, b )); x=2.5; NONO (); y = fun(x, 15); } printf("\nThe result is :\n"); 解题思路:本题是比较两个字符串的长度并按要求返回字符printf("x=%-12.6f y=%-12.6f\n", x, y); 串。我们给出的程序是使用for循环来判断两个字符串中哪} 一个比较长或相等,循环的终止值为两个字符串中是否字符解题思路:第一处:根据公式可知,变量f的初值为1。 串结束符,如果有,则退出循环体。接下来再判断两个字符第二处:根据公式可知,此处是正负号的变换,所以应填:串是否同时出现结束符,则返回第一个字符串s,如果不没-1。 有同时出现,则判断哪一个字符串先有结束符,则按要求返第三处:计算的结果进行累加并赋值给变量f,所以应填:回指定的字符串。 t。 参考答案: *************************************************** char *fun ( char *s, char *t) 改错题:给定程序MODI1.C中函数fun的功能是: 从3个红{ 球,5个白球, 6个黑球中任意取出8个作为一组,进行输出。int i; 在每组中,可以没有黑球,但必须要有红球和白球。 组合数char *p=s, *q=t; 作为函数值返回。正确的组合数应该是15。程序中i的值for(i=0;*p && *q; i++) 代表红球数, j的值代表白球数,k的值代表黑球数。请改正{ 函数fun中指定部位的错误, 使它能得出正确的结果。注意: p++; q++; 不要改动main函数, 不得增行或删行, 也不得更改程序的} 结构! if(*p == 0 && *q == 0) return s ; 给定源程序: if(*p) return s ; #include else return t ; int fun() } { int i,j,k,sum=0; 第94套 printf("\nThe result :\n\n"); 填空题:函数fun的功能是:计算的前n项之和。若x=2.5,/**************found**************/ n=15时,函数值为:1.917914。请在程序的下划线处填入for(i=0; i<=3; i++) 正确的内容并把下划线删除,使程序得出正确的结果。注意:{ for(j=1; j<=5; j++) 源程序存放在考生文件夹下的BLANK1.C中。不得增行或删{ k=8-i-j; 行,也不得更改程序的结构~ /**************found**************/ 给定源程序: if(K>=0 && K<=6) #include { sum=sum+1; #include printf("red:%4d white:%4d black:%4d\n",i,j,k); double fun(double x, int n) } 120 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 } 线元素中的值。例如,若N=3,有下列矩阵: } 1 2 3 return sum; 4 5 6 } 7 8 9 main() fun函数首先累加1、5、9,然后累加3、5、7,函数的返{ int sum; 回值为30。请在程序的下划线处填入正确的内容并把下划sum=fun(); 线删除,使程序得出正确的结果。注意:源程序存放在考生printf("sum =%4d\n\n",sum); 文件夹下的BLANK1.C中。不得增行或删行,也不得更改程} 序的结构~ 解题思路:第一处:外for循环的初始变量i的值应为1。 给定源程序: 第二处:变量k写成了大写K了。 #include *************************************************** #define N 4 编程题: 请编写函数fun, 其功能是: 计算并输出下列多fun(int t[][N], int n) 项式的值: 例如, 在主函数中从键盘给n输入15, 则输出{ int i, sum; 为:s=2.718282。注意: 要求n的值大于1但不大于100。 部/**********found**********/ 分源程序在文件PROG1.C中。请勿改动主函数main和其他___1___; 函数中的任何内容, 仅在函数fun的花括号中填入你编写for(i=0; i for(i=0; i 主对角线元素和反向对角线元素之和,并作为函数值返回。#include 注意:要求先累加主对角线元素中的值,然后累加反向对角double funx(double x) 121 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 { return(2*x*x*x-4*x*x+3*x-6); } t--; double fun( double m, double n) while(*t=='*')t--; { while(*f=='*')f++; /************found************/ fun( s , f,t ); int r; printf("The string after deleted:\n");puts(s); r=(m+n)/2; NONO(); /************found************/ } while(fabs(n-m)<0.001) 解题思路:本题是考察字符串的操作。 { if(funx(r)*funx(n)<0) m=r; 1. 把r指针左边的字符仍存放字符串a首地址开始的位置else n=r; 上。 r=(m+n)/2; 2. 把r指针和p指针中间的字符进行判断,其字符是否是} '*',如果不是'*',则把这些字符放到第1步操作字符串areturn r; 的后面。 } 3. 把p指针右边的字符放到第2步操作字符串a的后面。 main( ) 4. 最后给字符串a加上结束符。 { double m,n, root; 参考答案: printf("Enter m n : \n"); scanf("%lf%lf",&m,&n); void fun( char *a, char *h,char *p ) root=fun( m,n ); { printf("root = %6.3f\n",root); int j=0; } char *q=a; 解题思路:第一处:变量r应该定义为实数型double或浮while(*q && q < h) a[j++] = *q++ ; 点型float变量。 while(*h && *p && h < p) { 第二处:while必须先满足条件,才做循环体的内容,所以if(*h != '*') a[j++] = *h ; 应改为:while(fabs(n-m)>0.001)。 h++; *************************************************** } 编程题: 假定输入的字符串中只包含字母和*号。请编写函while(*p) a[j++] = *p++ ; 数fun,它的功能是: 除了字符串前导和尾部的*号之外,将a[j] = 0 ; 串中其它*号全部删除。形参h已指向字符串中第 } 一个字母,形参p已指向字符串中最后一个字母。在编写函第96套 数时,不得使用C语言 填空题:给定程序中,函数fun的功能是:有N×N矩阵,将矩提供的字符串函数。 阵的外围元素顺时针旋转。 例如,字符串中的内容为:****A*BC*DEF*G********,删除操作顺序是:首先将第一行元素的值存入临时数组r,然后后,字符串中的内 使第一列成为第一行, 容应当是:****ABCDEFG********。在编写函数时,不得使最后一行成为第一列,最后一列成为最后一行,临时数组中用C语言提供的字符串函数。注意: 部分源程序在文件的元素成为最后一列。 PROG1.C中。请勿改动主函数main和其它函数中的任何内例如,若N=3,有下列矩阵: 容,仅在函数fun的花括号中填入你编写的若干语句。 1 2 3 给定源程序: 4 5 6 #include 7 8 9 void fun( char *a, char *h,char *p ) 计算结果为 { 7 4 1 8 5 2 } 9 6 3 main() 请在程序的下划线处填入正确的内容并把下划线删除,使程{ char s[81],*t, *f; 序得出正确的结果。注意:源程序存放在考生文件夹下的printf("Enter a string:\n");gets(s); BLANK1.C中。不得增行或删行,也不得更改程序的结构~ t=f=s; 给定源程序: while(*t)t++; #include 122 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 #define N 4 给定源程序: void fun(int (*t)[N]) #include { int j ,r[N]; #include for(j=0; j=0;___2___ ) return (x +1)/(x-2); t[N-1][N-1-j]=t[j][N-1]; } for(j=N-1; j>=0; j--) double fun( int n ) /**********found**********/ { int i; double s=0.0, y; t[j][N-1]=r[___3___]; for (i= -n; i<=n; i++) } {y=f(1.0*i); s += y;} main() /************found************/ { int return s t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,3} 3,10}, i, j; main ( ) printf("\nThe original array:\n"); { printf("%f\n", fun(5) ); for(i=0; i 第三处:把临时数组中的元素成为最后一列,所以应填:j。 #include *************************************************** double fun( int m ) 改错题:给定程序MODI1.C中函数 fun 的功能是:计算 { S = f(-n) + f(-n+1) +„+ f(0) + f(1) + f(2) +„+ f(n) } 的值。例如,当n为5时,函数值应为:10.407143。f(x)main() 函数定义如下: { printf("%f\n", fun(20)); (x+1)/(x-2) x>0 且 x?2 NONO(); f(x) = 0 x=0 或 x=2 } (x-1)/(x-2) x<0 解题思路:本题是根据给定的公式计算结果。使用for循环请改正程序中的错误,使程序能输出正确的结果。 语句依次求出每一项的值,分别进行累加并把结果存入变量注意:不要改动main函数,不得增行或删行,也不得更改s中,循环结束后再对s求平方根,结果仍存入s中,最后程序的结构~ 返回s。 123 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 参考答案: *************************************************** double fun( int m ) 改错题:给定程序MODI1.C中函数fun的功能是:将一个由{ double s = 0.0 ; 八进制数字字符组成的字符串转换为与其面值相等的十进int i ; 制整数。规定输入的字符串最多只能包含5位八进制数字字for(i = 1 ; i <= m ; i++) s += log(1.0 * i) ; 符。例如,若输入:77777,则输出将是:32767。请改正程s = sqrt(s) ; 序中的错误,使它能得出正确结果。注意:不要改动mainreturn s ; 函数,不得增行或删行,也不得更改程序的结构。 } 给定源程序: 第97套 #include 填空题:函数fun的功能是:逆置数组元素中的值。例如:int fun( char *p ) 若a所指数组中的数据依次为:1、2、3、4、5、6、7、8、{ int n; 9,则逆置后依次为:9、8、7、6、5、4、3、2、1。形参n/**********found**********/ 给出数组中数据的个数。请在程序的下划线处填入正确的内n= *P-'o'; 容并把下划线删除,使程序得出正确的结果。注意:源程序p++; 存放在考生文件夹下的BLANK1.C中。不得增行或删行,也while( *p!=0 ) { 不得更改程序的结构~ /**********found**********/ 给定源程序: n=n*8+*P-'o'; #include p++; void fun(int a[], int n) } { int i,t; return n; /**********found**********/ } for (i=0; i<___1___; i++) main() { { char s[6]; int i; int n; t=a[i]; printf("Enter a string (Ocatal digits): "); gets(s); /**********found**********/ if(strlen(s)>5){ printf("Error: String too a[i] = a[n-1-___2___]; longer !\n\n");exit(0); } /**********found**********/ for(i=0; s[i]; i++) ___3___ = t; if(s[i]<'0'||s[i]>'7') } {printf("Error:%c not is ocatal } digits!\n\n",s[i]);exit(0); } main() printf("The original string: "); puts(s); { int b[9]={1,2,3,4,5,6,7,8,9}, i; n=fun(s); printf("\nThe original data :\n"); printf("\n%s is convered to integer for (i=0; i<9; i++) number: %d\n\n",s,n); printf("%4d ", b[i]); } printf("\n"); 解题思路: 第一和第二处:*p错写成 *P,'0' 错写成 'o'。 fun(b, 9); *************************************************** printf("\nThe data after invert :\n"); 编程题: 学生的记录由学号和成绩组成,N名学生的数据for (i=0; i<9; i++) 已在主函数中放入结构体数组s中,请编写函数fun,它的功printf("%4d ", b[i]); 能是:函数返回指定学号的学生数据,指定的学号在主函数printf("\n"); 中输入。若没找到指定学号,在结构体变量中给学号置空串,} 给成绩置-1,作为函数值返回。(用于字符串比较的函数是解题思路: strcmp)。注意: 部分源程序在文件PROG1.C中。请勿改动第一处:利用for循环语句,对数组中的各元素进行逆置,主函数main和其它函数中的任何内容,仅在函数fun的花所以终止值为n/2。 括号中填入你编写的若干语句。 第二处:进行交换数组中元素的值,由于是依次是首和尾交给定源程序: 换,所以应填:i。 #include 第三处:使用中间变量t来交换的,所以应填:a[n-i-1]。 #include 124 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 #define N 16 break ; typedef struct } { char num[10]; return c ; int s; } } STREC; 第98套 STREC fun( STREC *a, char *b ) 填空题:给定程序中,函数fun的功能是:在带有头结点的{ 单向链表中,查找数据域中值为ch的结点。找到后通过函} 数值返回该结点在链表中所处的顺序号;若不存在 值为chmain() 的结点,函数返回0值。请在程序的下划线处填入正确的内{ STREC 容并把下划线删除,使程序得出正确的结果。注意:源程序s[N]={{"GA005",85},{"GA003",76},{"GA002",69}, 存放在考生文件夹下的BLANK1.C中。 {"GA004",85},{"GA001",91},{"GA007",72},{"GA008",64}不得增行或删行,也不得更改程序的结构~ , 给定源程序: {"GA006",87},{"GA015",85},{"GA013",91},{"GA012",64}#include , #include {"GA014",91},{"GA011",77},{"GA017",64},{"GA018",64}#define N 8 , typedef struct list {"GA016",72}}; { int data; STREC h; struct list *next; char m[10]; } SLIST; int i;FILE *out ; SLIST *creatlist(char *); printf("The original data:\n"); void outlist(SLIST *); for(i=0; inext; } /**********found**********/ printf("\n\nEnter the number: ");gets(m); while(p!=___1___) h=fun( s,m ); { n++; printf("The data : "); /**********found**********/ printf("\n%s %4d\n",h.num,h.s); if (p->data==ch) return ___2___; printf("\n"); else p=p->next; out = fopen("c:\\test\\out.dat","w") ; } h=fun(s,"GA013"); return 0; } fprintf(out,"%s %4d\n",h.num,h.s); fclose(out); main() } { SLIST *head; int k; char ch; 解题思路:本题是从学生记录体中找出给定的学号。 char a[N]={'m','p','g','a','w','x','r','d'}; 参考答案: head=creatlist(a); STREC fun( STREC *a, char *b ) outlist(head); { printf("Enter a letter:"); STREC c ; scanf("%c",&ch); int i ; /**********found**********/ c.num[0] = '\0' ; c.s = -1 ; k=fun(___3___); for(i = 0 ; i < N ; i++) if (k==0) printf("\nNot found!\n"); if(strcmp(a[i].num, b)==0) else printf("The sequence number is : %d\n",k); { } strcpy(c.num, a[i].num) ; SLIST *creatlist(char *a) c.s=a[i].s; { SLIST *h,*p,*q; int i; 125 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 h=p=(SLIST *)malloc(sizeof(SLIST)); printf("Input a string:"); for(i=0; idata=a[i]; p->next=q; p=q; { s[i]=c;i++;c=getchar(); } } s[i]='\0'; p->next=0; fun(s); return h; puts(s); } } void outlist(SLIST *h) 解题思路:第一处:保留字for错写成For。 { SLIST *p; 第二处:置字符串结束符错误,应该是:'\0'。 p=h->next; if (p==NULL) printf("\nThe list is NULL!\n"); else 编程题: 请编写一个函数fun,它的功能是:将ss所指字{ printf("\nHead"); 符串中所有下标为奇数位置上的字母转换为大写(若该位置do 上不是字母,则不转换)。例如, 若输入"abc4EFg",则应输{ printf("->%c",p->data); p=p->next; } 出"aBc4EFg"。注意: 部分源程序存在文件PROG1.C中。请while(p!=NULL); 勿改动主函数main和其它函数中的任何内容,仅在函数funprintf("->End\n"); 的花括号中填入你编写的若干语句。 } 给定源程序: } #include 解题思路:本题是在给定的链表中要求找出指定的值。 #include 第一处:判断p是否结束,所以应填:NULL。 void fun ( char *ss ) 第二处:在函数fun中,使用n来计算结点的位置,当找到{ ch值,则返回结点的位置n,所以应填:return n。 } 第三处:函数调用,在主函数中已经给出了head和ch,所main( ) 以应填:head,ch。 { char tt[81] ; *************************************************** printf( "\nPlease enter an string within 80 改错题:给定程序MODI1.C中函数fun的功能是:删除p所characters:\n" ); gets( tt ); 指字符串中的所有空白字符(包括制表符、回车符及换行printf( "\n\nAfter changing, the string\n \"%s\"", 符)。输入字符串时用'#'结束输入。请改正程序中的错误,tt ); 使它能输出正确的结果。注意:不要改动main函数,不得fun( tt ); 增行或删行,也不得更改程序的结构~ printf( "\nbecomes\n \"%s\"\n", tt ); 给定源程序: NONO ( ); #include } #include 解题思路:本题是考察对字母按要求进行转换。其中大小字#include 母的ASCII值相差32。 fun ( char *p) 参考答案: { int i,t; char c[80]; void fun ( char *ss ) /************found************/ { For (i = 0,t = 0; p[i] ; i++) int i ; if(!isspace(*(p+i))) c[t++]=p[i]; for(i = 1 ; i < strlen(*ss) ; i+=2) /************found************/ { c[t]="\0"; if(ss[i] >= 'a' && ss[i] <= 'z') ss[i] -= 32 ; strcpy(p,c); } } } main( ) 第99套 { char c,s[80]; 填空题:函数fun的功能是:将形参a所指数组中的前半部int i=0; 分元素中的值和后半部分元素中的值对换。形参n中存放数 126 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 组中数据的个数,若n为奇数,则中间的元素不动。例如:/**********found**********/ 若a所指数组中的数据依次为:1、2、3、4、5、6、7、8、float *k; 9,则调换后为:6、7、8、9、5、1、2、3、4。请在程序的if( *a<*b ) 下划线处填入正确的内容并把下划线删除,使程序得出正确{ k=*a; *a=*b; *b=k; } 的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。/**********found**********/ 不得增行或删行,也不得更改程序的结构~ if( *a>*c ) 给定源程序: { k=*c; *c=*a; *a=k; } #include if( *b<*c ) #define N 9 { k=*b; *b=*c; *c=k; } void fun(int a[], int n) } { int i, t, p; main() /**********found**********/ { float a,b,c; p = (n%2==0)?n/2:n/2+___1___; printf("Input a b c: "); scanf("%f%f%f",&a,&b,&c); for (i=0; i 第二处:使用for循环语句来交换数组元素的值,所以应填:#define N 16 i。 typedef struct 第三处:使用中间变量t来交换的,所以应填:a[p+i]=t。 { char num[10]; *************************************************** int s; 改错题:给定程序MODI1.C中函数fun的功能是:把主函数} STREC; 中输入的3个数,最大的放在a中,最小的放在c中,中间int fun( STREC *a, STREC *b ) 的放在b中。例如,输入的数为:55 12 34,输出结果应当{ 是:a=55.0 , b=34.0 , c=12.0。请改正程序中的错误,使} 它能得出正确结果。注意:不要改动main函数,不得增行main() 或删行,也不得更改程序的结构。 {STREC s[N]={{"GA05",85},{"GA03",76},{"GA02",69}, 给定源程序: {"GA04",85},{"GA01",91},{"GA07",72},{"GA08",64},{"G #include A06",87},{"GA015",85},{"GA013",91},{"GA012",64},{"G void fun(float *a,float *b,float *c) A014",91},{"GA011",77},{"GA017",64},{"GA018",64},{" { GA016",72}}; 127 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 STREC h[N]; s[j+1]=___3___ ; int i,n;FILE *out ; i=i+1; n=fun( s,h ); } printf("The %d highest score :\n",n); } for(i=0;i 符串中寻找与参数c相同的字符,并在其后插入一个与之相double fun ( int x[]) 同的字符,若找不到相同的字符则函数不做任何处理。例如,{ s所指字符串为:baacda,c中的字符为:a,执行后s所指/************found************/ 字符串为:baaaacdaa。请在程序的下划线处填入正确的内int sum = 0.0; 容并把下划线删除,使程序得出正确的结果。 注意:源程int c=0, i=0; 序存放在考生文件夹下的BLANK1.C中。不得增行或删行,while (x[i] != 0) 也不得更改程序的结构~ { if (x[i] > 0) { 给定源程序: sum += x[i]; c++; } #include i++; void fun(char *s, char c) } { int i, j, n; /************found************/ /**********found**********/ sum \= c; for(i=0; s[i]!=___1___ ; i++) return sum; if(s[i]==c) } { main( ) /**********found**********/ { int x[1000]; int i=0; n=___2___ ; printf( "\nPlease enter some data (end with 0): " ); while(s[i+1+n]!='\0') n++; do for(j=i+n+1; j>i; j--) s[j+1]=s[j]; { scanf("%d", &x[i]); } /**********found**********/ while (x[i++] != 0); 128 兰大高校 计算机等级考试二级公共基础知识 指导教师:王幸福 printf("%f\n", fun ( x )); } 解题思路: 第一处:由于sum是存放实数值,因此不能定义为整型,所以应改为double sum=0.0;或float sum=0.0;。 第二处:除的运算符是“/”。 *************************************************** 编程题: 编写函数fun,函数的功能是:根据以下公式计算s,计算结果作为函数值返回;n通过形参传入。 1 1 1 S=1 + ?? + ??? + ... + ?????? 1+2 1+2+3 1+2+3+...+n 例如:若n的值为11时,函数的值为:1.833333 注意: 部分源程序在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include float fun(int n) { } main() { int n; float s; printf("\nPlease enter N:"); scanf("%d", &n); s = fun(n); printf("the result is: %f\n", s); NONO(); } 解题思路: 本题是根据给定的公式计算结果。使用for循环语句依次求出每一项的值,分别进行累加并 把结果存入变量s中,最后返回s。 参考答案: float fun(int n) { int i,j,t; float s=0; for(i=1;i<=n;i++) { t=0; for(j=1;j<=i;j++) t+=j; s=s+1./t; } return s; } 129 兰大高校
本文档为【二级C语言上机题库A4】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_624976
暂无简介~
格式:doc
大小:616KB
软件:Word
页数:0
分类:互联网
上传时间:2017-09-26
浏览量:11