/**********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