1、(共85分)一、单项选择题(每小题1分,共10分) 1. 若变量已定义并赋值,下列符合C语法的表达式是 ( 16 ) 16 (A) a:=b+1 (B) a=b=c+2 (C) int 18.5%3 (D) a=a+7=c+b 2. 以下程序输出的结果是 ( 17 ) void main() char a=Hello China; s5=0; puts(s); 17 (A) Hello (B) China (C) Hello China (D) O 3. 有以下程序 #include char *p,*q; p=(char *)malloc(sizeof(char)*20); q=p; sca
2、nf(%s %s,p,q); printf(%s,%sn 若输入abc def,则输出为 ( 18 )。 18 (A) def,def (B) abc,def (C) abc,d (D) d,d 4.下列函数形式正确的是( 19 )。 19 (A) double fun(int x,int y) (B) fun(int x,y) z=x+y; int z; return z; return z; (C) fun(x,y) (D) double fun(int x,int y) int x,y; double z; double z=x+y; z=x+y; 5.下列有关类和对象的说法不正确的是(
3、 20 ) 。 20 (A) 对象是类的一个实例 (B) 一个类只能有一个对象 (C) 任何一个对象只能属于一个具体的类 (D) 类与对象的关系和数据类型与变量的关系相似 6. 派生类的对象对它的基类成员中( 21 )是可以访问的。 21 (A) 公有继承的公有成员 (B) 公有继承的私有成员 (C) 保护继承的公有成员 (D) 私有继承的公有成员 7. 已知学生的结构体描述如下: struct students int no; char name10; char sex; struct int day; int month; int year; birth; int score; ; 用学生
4、结构体定义了变量w : struct students w; 设变量w中的生日是1982年5月29日,下列对生日的正确赋值方法是( 22 )。 22 (A) day=29; (B) w.day=29 month=5; w.month=5; year=1982; w.year=1982; (C) w.birth.day=29; (D) birth.day=29; w.birth.month=5; birth.month=5; w.birth.year=1982; birth.year=1982; 8. 假定p1和p2是已赋值的int型指针,则下面有关运算中,( 23 )是非法的。 23 (A)
5、(p1+=4)=p2 (B) p2=10-p1; (C) if(p1!=p2) printf(!=); (D) p1+=(p2-p1); 9. 关于C/C+语言,以下叙述正确的是( 24 )。 24 (A) C是面向过程的程序设计语言,C+不支持面向过程的程序设计 (B) C语言支持图形设计,C+不支持 (C) C程序由函数组成,而C+程序由类组成 (D) C是C+的子集 10. 设有以下语句: char x=3,y=6,z; z=xy2; 则z的值是( 25 )。 25 (A) 00010100 (B) 00011100 (C) 00011011 (D) 00011000二、读程序回答问题(
6、每个选择3分,共45分) 1. 下列程序运行的结果为 ( 26 )。 # include int a=2,b=-1,c=2; if(ab) if(b void fun(char *fname, char *st) FILE *fp; int i; fp=fopen(fname,w for(i=0; i union value char ch; int n; double f; Data; coutsizeof(Data)=sizeof(Data)endl; Data.ch=aData.ch Data.n=100;Data.h Data.f=78.168;Data.f=48 & *p=101 &
7、=107) sum2+; else; p+;sum1,sum2 程序的运行结果是 ( 31 )。 31 (A) 3,2 (B) 2,3 (C) 3,12 (D) 12,3 while(*p!) 与 ( 32 ) 功能相同。 32 (A) while(*p!=0) (B) while(*p=0) (C) while(*p) (D) while(*p!0) 6. 读下列程序: void fun(char *w, int n) char t,*s1,*s2; s1=w; s2=w+n-1; while(s1s2) t=*s1+; *s1=*s2-; *s2=t; char *p; p=1234567
8、 fun(p,strlen(p); puts(p); 输出结果是 ( 33 )。 33 (A) 7654321 (B) 1711717 (C) 1714171 (D) 1234567 若把程序中的语句:while(s1 改写成: while (s1s2) t=*s1; *s1=*s2; s1+; s2+; ,则输出结果是( 34 )。 34 (A) 7654321 (B) 1711717 (C) 1714171 (D) 1234567 7. 下列程序运行结果是 ( 35 )。 # define X 5 # define Y X+1 # define Z Y*X/2 int a; a=Y;%d
9、, Z);%dn,-a); 35 (A) 7 6 (B) 12 6 (C) 12 5 (D) 7 5 8. 读下列程序: int x; void sub(int *s , int x ) static int t=0; x+=st; t+; int a=3,8,4,2,i; int x=0;4; i+) sub(a,x);%3d,x); 程序的执行结果是 ( 36 )。 36 (A) 3 8 4 2 (B) 3 11 15 17 (C) 0 0 0 0 (C) 2 4 8 3 若把程序第二行的语句 int x; 删除,运行结果是 ( 37 )。 37 (A) 3 8 4 2 (B) 3 11
10、15 17 9. 读下列程序分析运行结果 char *cat( char *str1 , char *str2 ) char *pt; for(pt=str1; *pt! pt+); while(*str2! *pt+=*str2+; return(pt); char *p,s130=210,s230=45 p=cat(s1,s2);,p-s1); 主函数中,执行第一个输出函数后的结果为 ( 38 )。 38 (A) 5 (B) 6 (C) 7 (D) 8 主函数中,执行第二个输出函数后的结果为 ( 39 )。 39 (A) 5 (B) 6 (C) 7 (D) 8 10. 下列程序的运行结果是
11、 ( 40 )。 char *str=OneTwoThreeFour; char *ptr=str;i=0; -i) d= ;%c, );n 2. 有一个数是43634,其左右对称,求比它大的对称数中最小的那个。 long int i=43634,j; int count,ch10; do j=i; count=0; while(j) chcount=j%10; j= ; count+; if( ) while(1);%ldn 3. 以下程序能统计并输出1至100之间所有能被3整除但不能被7整除的所有正整数。 # define M 100 void fun( int m, int *p, in
12、t *t) int i,num=0; for(i=1;=m; if( ) ; *t=num; int aM,n,k; ; for(k=0;kn;k+) if( (k+1) % 5 = 0 ) else ,ak); 4. 下面程序功能是从字符串s中删除任何在第二个字符串t中出现的字符,然后输出。 char s81,t20,*p1,*p2;%s%s, ); p1=s;*(p+i); for(p2=t;*p2;p2+) while( ) strcpy( );,s); 5. 文件stu.txt中存放了一个学生各门课程的考试分数,数据之间以逗号分割。下面程序将文件中的所有分数取出,计算出平均分,显示在屏
13、幕上,还要把这个平均分数按原文件的数据格式记录在原文件中。例如文件stu.txt中存放的为“60.5,81.1,93.5,90.5”,则程序运行后文件stu.txt中为“60.5,81.1,93.5,90.5,78.366669”。 int n=0; float x=0.0,y; fp= ; fscanf( ); if(feof(fp) break; x+=y; n+; x=x/n;average=%f二级 (C与 C+语言 )上机考试试卷 (第一套) 参考答案一、 程序调试题(文件名为test1-1.c)(40分) 磁盘上有一个名为test1-1.c的C程序文件,其功能是:输入一个字符串,将
14、其中的每一个连续的数字序列看作一个整数,将这些整数检索出来后依次放入一个long int型数组中,请改正程序中的错误,使程序能得出正确的结果. 注意:不要增加或删除行,不要合适改程序结构.#include =0 &=9) /* 改为:*p=0 &=9 或 *p=57 */ sign=1; helpk+=*p; else if(sign=1) /* 改为:= */ int n=0; while(-k=0) numi+=(helpk-48)*(long int)pow(n+,10); /* 改为:pow(10,n+) */ k=0; sign=0; else /* 改为:else; */ whil
15、e(*(p-1)! for(m=0; mi; m+)%d, numm); /* 改为:%ld (即长整型格式输出) */评分标准:每改对一处得6分,结果正确得4分二、编程题(程序文件取名为 test1-2.c)(60分) 请用函数调用方式编写程序,要求能实现: (1)在被调函数中求出1到1000之内能被7或11整除,但不能被7和11同时整除的所有整数,并把它们放到数组a中. (2)在主函数中将符合上述条件的整数个数和所有整数输出到屏幕以级文件test1-2.dat中1被调函数fun编写正确 20分 2文件打开和关闭正确 10分3函数调用正确 5分 4屏幕输出和文件输出正确 15分5输出格式正确
16、 5分 6程序结构合理 5分参考程序:# include # define M 1000int fun(int *a) int m,k=0; for(m=1;m=M;m+) if( (m%7=0 & m%11!=0) | (m%7! m%11=0) ) ak+=m; return k; int aM,n,k; clrscr(); /*清屏函数*/ fp=fopen(test1-2.dat n=fun(a);,n); fprintf(fp, printf(%5d if( (k+1)%10 = 0 )二级 (C与 C+语言 )上机考试试卷 (第二套) 参考答案一、 程序调试题(文件名为 test2-1.c)( 40 分 ) 磁盘上有一个名为test2-1.c的C程序文件,其功能是:求出数组中值最大的元素在数组中的下标,并将最大值增添在数组的最后,如:876 675 896 101 401 980 431 451 777(原数组)876 675 896 101 401 980 431 451 777 980(增添后的数组)请改正程序中的错误,合程序能得出正确的结果.#define N 80void fun(int *s, int *t, i
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1