指针
一 单项选择题(每题2分,共40分) 1 以下叙述中错误的是_B__。
A 在程序中凡是以“#”开始的语句行都是预处理命令行 B 预处理命令行的最后不能以分号表示结束 C #define MAX是合法的宏定义命令行
D C程序对预处理命令行的处理是在程序执行的过程中进行的
2 若程序中有宏定义行:#define N 100 ,则以下叙述中正确的是__B_。 A 宏定义行中定义了标识符N的值为整数100
B 在编译程序对C源程序进行预处理时用100替换标识符N C 对C源程序进行编译时用100替换标识符N D 在运行时用100替换标识符 3 若有如下宏定义:
#define N 2 #define y(n) ((N+1)*n)
则执行下列语句:z=4*(N+y(5));后的结果是_B__。
A 语句有错误 B z值为68 C z值为60 D z值为180 4 以下程序运行后的输出结果是_A__。
#define F(X,Y) (X)*(Y) main()
{ int a=3,b=4;
printf(\"%d\\n\
_
}
A 12 B 15 C 16 D 20 5 以下程序运行后的输出结果是_C__。
#define f(x) (x*x) main()
{ int i1,i2;
i1=f(8)/f(4); i2=f(4+4)/f(2+2); printf(\"%d,%d\\n\}
A 64,28 B 4,4 C 4,3 D 64,64 6 若已定义a为int型变量,则__D_是对指针变量p的正确说明和初始化。 A int p=&a; B int *p=a; C int *p=*a; D int *p=&a; 7 已知下列说明语句:
static int a[]={2,4,6,8}
static int *p[]={a,a+1,a+2,a+3}; int **q; q=p;
则表达式**(q+2)的值是_A__。
A 6 B 2 C 4 D 8
8 下面是一个初始化指针的语句:int *px=&a;,其中指针变量的名字应该__C_。 A *px B a C px D &a 9 若指针px为空指针,则_B__。。
A px指向不定 B px的值为零 C px的目标为零 D px的地址为零 10 对下语句int *px[10];,下面正确的说法是_B__。
A px是一个指针,指向一个数组,数组的元素是整数型。 B px是一个数组,其数组的每一个元素是指向整数的指针。 C A和B均错,但它是C语言的正确语句。 D C语言不允许这样的语句。
_
11 具有相同基类型的指针变量p和数组y,下列写法中不合法的是_D__。
A p=y B *p=y[i] C p=&y[i] D p=&y 12 已知static int a[]={5,4,3,2,1},*p[]={a+3,a+2,a+1,a},**q=p; , 则表达式 *(p[0]+1)+**(q+2) 的值是_A__。
A 5 B 4 C 6 D 7 13 说明语句int *(*p)();的含义为_D__。
A p是一个指向int型数组的指针 B p是指针变量,它构成了指针数组
C p是一个指向函数的指针,该函数的返回值是一个整型
D p是一个指向函数的指针,该函数的返回值是一个指向整型的指针 14 设有如下程序段
char s[20]=\"Beijing\ p=s;
则执行p=s;语句后,以下叙述正确的是_A__。 A 可以用*p表示s[0]
B s数组中元素个数和p所指字符串长度相等 C s和p都是指针变量
D 数组s中的内容和指针变量p中的内容相同
15 设int型变量i、n均已定义,指针变量s1、s2各指向一个字符串。在for(i=0;i 16 给出下列程序的运行结果_B__。 #include { static char a[]=\"language\char *ptr1=a,*ptr2=b; int k; for(k=0;k<7;k++) if(*(ptr1+k)==*(ptr2+k)) printf(\"%c\} A gae B ga C language 17 以下程序执行后的输出结果是_A__。 void fun1(char *p) { char *q; q=p; while(*q!='\\0'){ (*q)++; q++; } } main() { char a[]={\"Program\ p=&a[3]; fun1(p); printf(\"%s\\n\} A Prohsbn B Prphsbn C Progsbn 18 以下程序执行后的输出结果是_C__。 void swap(char *x,char *y) { char t; t=*x; *x=*y; *y=t; } main() { char *s1=\"abc\ swap(s1,s2); printf(\"%s,%s\\n\} A 123,abc B abc,123 C 1bc,a23 19 以下程序执行后的输出结果是__C_。 main() { char *p[]={\"3697\int i,j; long num=0; for(i=0;i<2;i++) { j=0; while(p[i][j]!='\\0') { if((p[i][j]-'0')%2) num=10*num+p[i][j]-'0'; j+=2; } _ D 有语法错误 D Program D 321,cba _ } printf(\"%d\\n\} A 35 B 37 C 39 D 3975 20 下列程序运行后的输出结果是_A__。 void main() { char str[]=\"The_Microsoft\"; int n=4; sub(str,0,n-1); sub(str,0,strlen(str)-1); printf(\"%s\\n\} sub(str,n1,n2) char *str; int n1,n2; { char c,*p; p=str+n2; str=str+n1; while(str { c=*str; *str=*p; *p=c; str++; p--; } } A tfosorciMThe_ B. ehT_Microsoft C tfosorciM_ehT D. Microsoft_The 二 填空题(每空3分,共30分) 1 以下程序的定义语句中,x[1]的初值是 2 ,程序运行后输出的内容是 2468 。 main() { int x[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16},*p[4],i; for(i=0; i<4; i++) { p[i]=&x[2*i+1]; printf(\"%d\ } printf(\"\\n\"); } 2 以下程序的输出结果是 2 5 。 void swap(int *a, int *b) { int *t; t=a; a=b; b=t; } main() { int i=2,j=5,*p=&i,*q=&j; swap(p,q); printf(\"%d %d\\n\} _ 3 以下程序的输出结果是 4 。 main() { int a[5]={2,4,6,8,10}, *p; p=a; p++; printf(\"%d\} 4 以下程序的输出结果是__55__。 #define M 5 #define N M+M main() { int k; k=N*N*5; printf(\"%d\\n\} 5 若有定义语句:int a[4]={0,1,2,3},*p;p=&a[1];则++(*p)的值是 2 。 6 若有定义:int a[2][3]={2,4,6,8,10,12};则*(&a[0][0]+2*2+1)的值是 12 ,*(a[1]+2)的值是 12 。 7 若有程序段: int *p[3],a[6],i; for(i=0;i<3;i++) p[i]=&a[2*i] ; 则*p[0]引用的是a数组元素 a[0] ,*(p[1]+1)引用的是a数组元素 a[3] 。 三 程序填空题(每空3分,共30分) 1 下面函数的功能是从输入的十个字符串中找出最长的那个串,请填空使程序完整。 void fun(char str[10][81],char **sp) { int i; *sp = 【1】str[0] ; for(i=1;i<10; i++) if(strlen(*sp) } 2 下面函数的功能是将一个整数字符串转换为一个整数,例如:\"1234\"转换为1234,请填空使程序完整。 int chnum(char *p) { int num=0,k,len,j; len=strlen(p); for( ; 【3】*p ; p++) { k= 【4】*p-'0' ; j=(--len); while( 【5】j-- ) k=k*10; num=num+k; } return (num); } 3 下面函数的功能使统计子串substr在母串str中出现的次数,请填空使程序完整。 int count(char *str, char *substr) { int i,j,k,num=0; for(i=0; 【6】str[i] ;i++) for( 【7】j=i ,k=0;substr[k]==str[j];k++,j++) if(substr [ 【8】k+1 ]==’\\0’) { num++ ; break ; } return (num); } 4 下面函数的功能是用递归法将一个整数存放到一个字符数组中,存放时按逆序存放,如483存放成“384”,请填空使程序完整。 void convert(char *a, int n) { int i; if((i=n/10)!=0) convert( 【9】a+1 ,i); else *(a+1)=0; *a= 【10】n%10+'0’ ; } _ 结构体 文件 单项选择题(1~8题每题5分,9~18题每题6分,共100分) 1 有以下说明语句,对结构变量中成员age的正确引用是__A_。 struct student { int age; int sex; }stud1,*p; A p->age B student.age C *p.age stud1.student.age 2 说明语句如下,则正确的叙述是_D__。 union data { int x; char y; float z; }a; A data和a均是共用体类型变量 B a所占内存长度等于其成员x、y、z各在内存所占长度之和 C 任何情况下,均不能对a作整体赋值 D a的地址和它的各成员地址都是同一地址 3 共用体成员的数据类型_B__。 A 相同 B 可以不同也可以相同 C 长度一样 D 是结构体变量 4 由系统分配和控制的标准输出文件为__D_。 A 键盘 B 磁盘 C 打印机 D 显示器 5 下列关于C语言数据文件的叙述中正确的是 C 。 A C语言只能读写文本文件 B C语言只能读写二进制文件 C 文件由字符序列组成,可按数据的存放形式分为二进制文件和文本文件 D _ D 文件由二进制数据序列组成 6 若要用fopen函数建一个新的二进制文件,该文件要既能读也能写,则文件方式字符串应该为_B__。 A \"ab+\" B \"wb+\" C \"rb+\" D \"ab\" 7 下列程序运行后的输出结果是__A_。 struct s { int n; char *c; }*p; char d[]={'a','b','c','d','e'}; struct s a[]={10,&d[0],20,&d[1],30,&d[2],40,&d[3],50,&d[4]}; #include printf(\"%d\\n\printf(\"%d\\n\printf(\"%c\\n\} A 11 B 11 C 10 D 10 20 20 20 20 c b c b 8 已知 struct student { char *name; int student_no; char grade; }; struct student temp,*p=&temp; temp.name=\"chou\"; 则下面不正确的是_B__。 表达式 值 A p->name chou B (*p)->name+2 h C *p->name+2 e D *(p->name+2) o 9 下面程序运行后,其输出结果是_B__。 #include { int x; char *s; }t; func(struct tree t) { t.x=10; t.s=\"computer\"; return 0; } main() { t.x=1; t.s=\"minicomputer\"; func(t); printf(\"%d,%s\\n\} A 10,computer B 1,minicomputer 10,minicomputer 10 下列程序的输出结果是__B_。 #include C 1,computer _ D _ { union { int i[2]; long k; char c[4]; }t,*s=&t; s->i[0]=0x39; s->i[1]=0x38; printf(\"%lx \printf(\"%c\\n\ } A 390038 39 B 380039 9 C 3938 38 D 3839 8 11 若已定义了如下的共用体类型变量x,则x所占用的内存字节数为__C_。 union data { int i; char cha; double f; }x; A 7 B 11 C 8 D 10 12 如下说明语句: enum A {A0=1,A1=3,A2,A3,A4,A5}; enum A B; 执行 B=A3; printf(\"%d\\n\输出是_A__。 A 5 B 3 C 2 D 编译时出错 13 有以下说明语句,则结构变量s的成员num的不正确引用是_B__。 struct student { int num; int age; }s,*p; A s.num B *p.num C p->num D (*p).num 14 以下各选项试图说明一种新的类型名,其中正确的是 C 。 A typedef integer int; B typedef integer=int; C typedef int integer; D typedef int=integer; 15 运行下面程序,其输出结果是__C_。 #include { int a,b; char *ch; }; main() { struct sample arg; arg.a=1000;arg.b=100;arg.ch=\"abcd\"; f1(arg); } f1(struct sample param) { param.a+=param.b; param.ch[2]='x'; printf(\"%d\\n\ _ printf(\"%s\\n\ } A 1000 B 1100 C 1100 D 100 abcd abcd abxd abcd 16 fwrite函数的一般调用形式是_D__。 A fwrite(buffer,count,size,fp); B fwrite(fp,size,count,buffer); C fwrite(fp,count,size,buffer); D fwrite(buffer,size,count,fp); 17 C语言文件操作函数fread(buffer,size,n,fp)的功能是_B__。 A 从文件fp中读n个字节存入buffer B 从文件fp中读n个大小为size字节的数据项存入buffer中 C 从文件fp中读入n个字节放入大小为size字节的缓冲区buffer中 D 从文件fp中读入n个字符数据放入buffer中 18 若有如下定义: struct data { int i; char ch; float f; }b; 则结构体变量b占用内存的字节数是 A 。 A 7 B 4 C 1 D 2 _ 指针 一 单项选择题(每题2分,共40分) 1-5 B B B A C 6-10 D A C B B 11-15 D A A A 16-20 B A C C A D 二 填空题(每空3分,共30分) 1① 1② 2③ 3④ 4⑤ 三 程序填空题(每空3分,共30分) 【1】 str[0] 【6】 str[i] 【2】 *sp=str[i] 【7】 j=i 【3】 *p 【8】 k+1 【4】 *p-'0' 【9】 a+1 【5】 j-- 【10】n%10+'0' 2 2468 2 5 4 55 5⑥ 6⑦ 6⑧ 7⑨ 7⑩ 2 12 12 a0] a[3] 结构体 文件 单项选择题(1~8题每题5分,9~18题每题6分,共100分) 1-5 A D B D C 6-10 B A B B B _ 11-15 16-18 D B A C A B C C 因篇幅问题不能全部显示,请点此查看更多更全内容