C上机试题及答案.docx
C上机试题及答案二级C语言上机考试复习资料,共有50套题目一、程序填空题 1、给定程序中,函数fun的功能是:在随意给定的9个正整数中找出按升序排列时处于中间的数,将原数据序列中比该中间数小的数用该中间数交换,位置不变,在主函数中输出处理后的数据序列,并将中间数作为函数值返回。 例如,有9个正整数:1 5 7 23 87 5 8 21 45 按升序排列时的中间数为:8 处理后主函数中输出的数列为:8 8 8 23 87 8 8 21 45 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 留意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的构造!#include <stdio.h>#define N 9int fun(int x) int i,j,k,t,mid,bN; for(i=0;i<N;i+) bi=xi; for(i=0;i<=N/2;i+) k=i; for(j=i+1;j<N;j+) if(bk>bj) k=j; if(k != i ) /*found*/ t=bi; bi=_1_; bk=t; /*found*/ mid=b_2_; for(i=0; i<N; i+)/*found*/ if(xi _3_ mid) xi=mid; return mid;main() int i, xN=1,5,7,23,87,5,8,21,45; for(i=0; i<N; i+) printf("%d ",xi); printf("nThe mid data is: %dn",fun(x); for(i=0; i<N; i+) printf("%d ",xi); printf("n"); 2、给定程序中,函数fun的功能是建立一个N×N的矩阵。 矩阵元素的构成规律是:最外层元素的值全部为1;从外向内第2层元素的值全部为2;第3层元素的值全部为3,依次类推。例如,若N=5,生成的矩阵为: 1 1 1 1 1 1 2 2 2 1 1 2 3 2 1 1 2 2 2 1 1 1 1 1 1 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。 留意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的构造!#include <stdio.h>#define N 7/*found*/void fun(int (*a) _1_) int i,j,k,m; if(N%2=0) m=N/2 ; else m=N/2+1; for(i=0; i<m; i+) /*found*/ for(j= _2_ ; j<N-i; j+) aij=aN-i-1j=i+1; for(k=i+1; k<N-i; k+)/*found*/ aki=akN-i-1= _3_; main() int xNN=0,i,j; fun(x); printf("nThe result is:n"); for(i=0; i<N; i+) for(j=0; j<N; j+) printf("%3d",xij); printf("n"); 3、给定程序中,函数fun的功能是: 将s所指字符串中的全部数字字符移到全部非数字字符之后,并保持数字字符串和非数字字符串原有的先后次序。例如,形参s所指的字符串为:def35adh3kjsdf7。执行结果为:defadhkjsdf3537。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 留意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的构造!#include <stdio.h>void fun(char *s) int i, j=0, k=0; char t180, t280; for(i=0; si!='0' i+) if(si>='0' && si<='9') /*found*/ t2j=si; _1_; else t1k+=si; t2j=0; t1k=0;/*found*/ for(i=0; i<k; i+) _2_;/*found*/ for(i=0; i<_3_; i+) sk+i=t2i;main() char s80="def35adh3kjsdf7" printf("nThe original string is : %sn",s); fun(s); printf("nThe result is : %sn",s); 4、给定程序中,函数fun的功能是:有N×N矩阵,以主对角线为对称线,对称元素相加并将结果存放在左下三角元素中,右上三角元素置为0。例如,若N=3,有下列矩阵: 1 2 3 4 5 6 7 8 9计算结果为 1 0 0 6 5 0 10 14 9 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 留意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的构造!#include <stdio.h>#define N 4/*found*/void fun(int (*t)_1_ ) int i, j; for(i=1; i<N; i+) for(j=0; j<i; j+) /*found*/ _2_ =tij+tji;/*found*/ _3_ =0; main() int tN=21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10, i, j; printf("nThe original array:n"); for(i=0; i<N; i+) for(j=0; j<N; j+) printf("%2d ",tij); printf("n"); fun(t); printf("nThe result is:n"); for(i=0; i<N; i+) for(j=0; j<N; j+) printf("%2d ",tij); printf("n"); 5、给定程序中,函数fun的功能是:对形参s所指字符串中下标为奇数的字符按ASCII码大小递增排序,并将排序后下标为奇数的字符取出,存入形参p所指字符数组中,形成一个新串。 例如,形参s所指的字符串为:baawrskjghzlicda,执行后p所指字符数组中的字符串应为:aachjlsw。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 留意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的构造!#include <stdio.h>void fun(char *s, char *p) int i, j, n, x, t; n=0; for(i=0; si!='0' i+) n+; for(i=1; i<n-2; i=i+2) /*found*/ _1_;/*found*/ for(j=_2_+2 ; j<n; j=j+2) if(st>sj) t=j; if(t!=i) x=si; si=st; st=x; for(i=1,j=0; i<n; i=i+2, j+) pj=si;/*found*/ pj=_3_;main() char s80="baawrskjghzlicda", p50; printf("nThe original string is : %sn",s); fun(s,p); printf("nThe result is : %sn",p); 6、程序通过定义并赋初值的方式,利用构造体变量存储了一名学生的信息。函数fun的功能是输出这位学生的信息。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 留意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的构造!#include <stdio.h>typedef struct int num; char name9; char sex; struct int year,month,day ; birthday; float score3;STU;/*found*/void show(STU _1_) int i; printf("n%d %s %c %d-%d-%d", tt.num, tt.name, tt.sex, tt.birthday.year, tt.birthday.month, tt.birthday.day); for(i=0; i<3; i+)/*found*/ printf("%5.1f", _2_); printf("n");main( ) STU std= 1,"Zhanghua",'M',1961,10,8,76.5,78.0,82.0 ; printf("nA student data:n");/*found*/ show(_3_); 7、给定程序中,函数fun的功能是:计算N×N矩阵的主对角线元素和反向对角线元素之和,并作为函数值返回。留意:要求先累加主对角线元素中的值,然后累加反向对角线元素中的值。例如,若N=3,有下列矩阵: 1 2 3 4 5 6 7 8 9fun函数首先累加1、5、9,然后累加3、5、7,函数的返回值为30。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 留意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的构造!#include <stdio.h>#define N 4fun(int tN, int n) int i, sum;/*found*/ _1_; for(i=0; i<n; i+)/*found*/ sum+=_2_ ; for(i=0; i<n; i+)/*found*/ sum+= tin-i-_3_ ; return sum;main() int tN=21,2,13,24,25,16,47,38,29,11,32,54,42,21,3,10,i,j; printf("nThe original data:n"); for(i=0; i<N; i+) for(j=0; j<N; j+) printf("%4d",tij); printf("n"); printf("The result is: %d",fun(t,N); 8、给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定全部数均为正数),作为函数值返回;并将大于平均值的数放在形参y所指数组中,在主函数中输出。 例如,有10个正数:46 30 32 40 6 17 45 15 48 26,平均值为:30.500000 主函数中输出:46 32 40 45 48 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 留意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的构造!#include <stdlib.h>#include <stdio.h>#define N 10double fun(double x,double *y) int i,j; double av;/*found*/ av=_1_;/*found*/ for(i=0; i<N; i+) av = av + _2_; for(i=j=0; i<N; i+)/*found*/ if(xi>av) y_3_= xi; yj=-1; return av;main() int i; double xN = 46,30,32,40,6,17,45,15,48,26; double yN; for(i=0; i<N; i+) printf("%4.0f ",xi); printf("n"); printf("nThe average is: %fn",fun(x,y); for(i=0; yi>=0; i+) printf("%5.0f ",yi); printf("n"); 9、给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定全部数均为正数),将所指数组中小于平均值的数据移至数组的前部,大于等于平均值的数据移至x所指数组的后部,平均值作为函数值返回,在主函数中输出平均值和挪动后的数据。 例如,有10个正数:46 30 32 40 6 17 45 15 48 26,平均值为:30.500000 挪动后的输出为:30 6 17 15 26 46 32 40 45 48 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 留意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的构造!#include <stdlib.h>#include <stdio.h>#define N 10double fun(double *x) int i, j; double av, yN; av=0;/*found*/ for(i=0; i<N; i+) av +=_1_; for(i=j=0; i<N; i+) if( xi<av )/*found*/ yj=xi; xi=-1; _2_; i=0; while(i<N) if( xi!= -1 ) yj+=xi;/*found*/ _3_; for(i=0; i<N; i+)xi = yi; return av;main() int i; double xN; for(i=0; i<N; i+) xi=rand()%50; printf("%4.0f ",xi); printf("n"); printf("nThe average is: %fn",fun(x); printf("nThe result :n",fun(x); for(i=0; i<N; i+) printf("%5.0f ",xi); printf("n"); 10、给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定全部数均为正数),将所指数组中大于平均值的数据移至数组的前部,小于等于平均值的数据移至x所指数组的后部,平均值作为函数值返回,在主函数中输出平均值和挪动后的数据。 例如,有10个正数:46 30 32 40 6 17 45 15 48 26,平均值为:30.500000 挪动后的输出为:46 32 40 45 48 30 6 17 15 26 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。 留意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的构造!#include <stdlib.h>#include <stdio.h>#define N 10double fun(double *x) int i, j; double s, av, yN; s=0; for(i=0; i<N; i+) s=s+xi;/*found*/ av=_1_; for(i=j=0; i<N; i+) if( xi>av )/*found*/ y_2_=xi; xi=-1; for(i=0; i<N; i+)/*found*/ if( xi!= _3_) yj+=xi; for(i=0; i<N; i+)xi = yi; return av;main() int i; double xN= 46,30,32,40,6,17,45,15,48,26; for(i=0; i<N; i+) printf("%4.0f ",xi); printf("n"); printf("nThe average is: %fn",fun(x); printf("nThe result :n",fun(x); for(i=0; i<N; i+) printf("%5.0f ",xi); printf("n"); 11、函数fun的功能是:把形参a所指数组中的奇数按原依次依次存放到a0、a1、a2、中,把偶数从数组中删除,奇数个数通过函数值返回。例如:若a所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7,删除偶数后a所指数组中的数据为:9、1、3、5、7,返回值为5。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 留意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的构造!#include <stdio.h>#define N 9int fun(int a, int n) int i,j; j = 0; for (i=0; i<n; i+)/*found*/ if (ai%2=_1_) /*found*/ aj = ai; _2_; /*found*/ return _3_;main() int bN=9,1,4,2,3,6,5,8,7, i, n; printf("nThe original data :n"); for (i=0; i<N; i+) printf("%4d ", bi); printf("n"); n = fun(b, N); printf("nThe number of odd : %d n", n); printf("nThe odd number :n"); for (i=0; i<n; i+) printf("%4d ", bi); printf("n"); 12、给定程序中,函数fun的功能是:求ss所指字符串数组中长度最短的字符串所在的行下标,作为函数值返回,并把其串长放在形参n所指变量中。ss所指字符串数组中共有M个字符串,且串长<N。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 留意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的构造!#include <stdio.h>#include <string.h>#define M 5#define N 20int fun(char (*ss)N, int *n) int i, k=0, len= N;/*found*/ for(i=0; i<_1_; i+) len=strlen(ssi); if(i=0) *n=len;/*found*/ if(len _2_ *n) *n=len; k=i; /*found*/ return(_3_);main() char ssMN="shanghai","guangzhou","beijing","tianjing","chongqing" int n,k,i; printf("nThe original strings are :n"); for(i=0;i<M;i+)puts(ssi); k=fun(ss,&n); printf("nThe length of shortest string is : %dn",n); printf("nThe shortest string is : %sn",ssk); 13、人员的记录由编号和诞生年、月、日组成,N名人员的数据已在主函数中存入构造体数组std中。函数fun的功能是:找出指定诞生年份的人员,将其数据放在形参k所指的数组中,由主函数输出,同时由函数值返回满意指定条件的人数。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 留意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的构造!#include <stdio.h>#define N 8typedef struct int num; int year,month,day ;STU;int fun(STU *std, STU *k, int year) int i,n=0; for (i=0; i<N; i+)/*found*/ if( _1_=year)/*found*/ kn+= _2_;/*found*/ return (_3_);main() STU stdN= 1,1984,2,15,2,1983,9,21,3,1984,9,1,4,1983,7,15, 5,1985,9,28,6,1982,11,15,7,1982,6,22,8,1984,8,19; STU kN; int i,n,year; printf("Enter a year : "); scanf("%d",&year); n=fun(std,k,year); if(n=0) printf("nNo person was born in %d n",year); else printf("nThese persons were born in %d n",year); for(i=0; i<n; i+) printf("%d %d-%d-%dn",ki.num,ki.year,ki.month,ki.day); 14、函数fun的功能是:将形参a所指数组中的前半局部元素中的值和后半局部元素中的值对换。形参n中存放数组中数据的个数,若n为奇数,则中间的元素不动。例如:若a所指数组中的数据依次为:1、2、3、4、5、6、7、8、9,则调换后为:6、7、8、9、5、1、2、3、4。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 留意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的构造!#include <stdio.h>#define N 9void fun(int a, int n) int i, t, p;/*found*/ p = (n%2=0)n/2:n/2+_1_; for (i=0; i<n/2; i+) t=ai;/*found*/ ai = ap+_2_;/*found*/ _3_ = t; main() int bN=1,2,3,4,5,6,7,8,9, i; printf("nThe original data :n"); for (i=0; i<N; i+) printf("%4d ", bi); printf("n"); fun(b, N); printf("nThe data after moving :n"); for (i=0; i<N; i+) printf("%4d ", bi); printf("n"); 15、给定程序中,函数fun的功能是将形参给定的字符串、整数、浮点数写到文本文件中,再用字符方式从今文本文件中逐个读入并显示在终端屏幕上。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确嶄绸果。 留意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的构造!#include <stdio.h>void fun(char *s, int a, double f)/*found*/ _1_ fp; char ch; fp = fopen("", "w"); fprintf(fp, "%s %d %fn", s, a, f); fclose(fp); fp = fopen("", "r"); printf("nThe result :nn"); ch = fgetc(fp);/*found*/ while (!feof(_2_) /*found*/ putchar(_3_); ch = fgetc(fp); putchar('n'); fclose(fp);main() char a10="Hello!" int b=12345; double c= 98.76; fun(a,b,c); 16、给定程序中,函数fun的功能是:找出N×N矩阵中每列元素中的最大值,并按依次依次存放于形参b所指的一维数组中。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。 留意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的构造!#include <stdio.h>#define N 4void fun(int (*a)N, int *b) int i,j; for(i=0; i<N; i+) /*found*/ bi= _1_; for(j=1; j<N; j+)/*found*/ if(bi _2_ aji) bi=aji; main() int xNN= 12,5,8,7,6,1,9,3,1,2,3,4,2,8,4,3 ,yN,i,j; printf("nThe matrix :n"); for(i=0;i<N; i+) for(j=0;j<N; j+) printf("%4d",xij); printf("n"); /*found*/ fun(_3_); printf("nThe result is:"); for(i=0; i<N; i+) printf("%3d",yi); printf("n"); 17、给定程序中,函数fun的功能是:统计形参s所指字符串中数字字符出现的次数,并存放在形参t所指的变量中,最终在主函数中输出。例如,形参s所指的字符串为:abcdef35adgh3kjsdf7。输出结果为:4。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 留意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的构造!#include <stdio.h>void fun(char *s, int *t) int i, n; n=0;/*found*/ for(i=0; _1_ !=0; i+)/*found*/ if(si>='0'&&si<= _2_ ) n+;/*found*