C 语言程序设计试题 第 1 2 3 章概述 类型 表达式 一 选择题 1 一个 C 程序由若干个 C 函数组成, 各个函数在文件中的位置顺序为 :( ) A 任意 B 第一个函数必须是主函数, 其他函数任意 C 必须完全按照执行的顺序排列 D 其他函数可以任意, 主函数必须在最后 2 下列四个叙述中, 正确的是 :( ) A C 程序中的所有字母都必须小写 B C 程序中的关键字必须小写, 其他标示符不区分大小写 C C 程序中的所有字母都不区分大小写 D C 语言中的所有关键字必须小写 3 下列四个叙述中, 错误的是 :( ) A 一个 C 源程序必须有且只能有一个主函数 B 一个 C 源程序可以有多个函数 C 在 C 源程序中注释说明必须位于语句之后 D C 源程序的基本结构是函数 4 下面不是 C 语言合法标识符的是 :( ) A abc B 5n C _4m D x3 5 以下叙述不正确的是 :( ) A. 分号是 C 语句的必要组成部分 B. C 程序的注释可以写在语句的后面 C. 函数是 C 程序的基本单位 D. 主函数的名字不一定非用 main 来表示 6 C 语言中允许的基本数据类型包括 :( ) A. 整型 实型 逻辑型 B. 整型 实型 字符型 C. 整型 字符型 逻辑型 D. 整型 实型 逻辑型 字符型 7 C 语言中能用八进制表示的数据类型为 :( ) A 字符型 整型 C 字符型 实型 双精度型 8 下列属于 C 语言合法的字符常数是 :( ) B 整形 实型 D 字符型 整型 实型 双精度型 A \97 B A C \t D \0 9 在 C 语言 (VC 环境 ) 中,5 种基本数据类型的存储空间长度的排列顺序为 :( ) A char<int<=long int <=float<double B char=int<long int <=float<double C char<int<long int=float=double
D char=int=<long int <=float<double 10 在 C 语言中 (VC 环境 ), 一定是长整型常数的是 :( ) A 0L B 4962710 C 0412765 D 0xa34b7fe 11 若有以下定义语句 char c1= b, c2= e ; printf( %d,%c\n,c2-c1,c2- a + A ); 则输出 结果是 :( ) A 2,M B 3,E C 2,E D 输出项与相应的格式控制不一致, 输出结果不确定 12 以下合法的赋值语句是 :( ) A x=y=100 B d--; C x + y D c = int(a+b); 13 设变量 t 为 int 型, 下列选项中不正确的赋值语句是 :( ) A ++t; B n1=(n2=(n3=0)); C k=i==m; D a=b+c=1; 14 在以下一组运算符中, 优先级最高的是 :( ) A <= B == C % D && 15 下列能正确表示 a 10 或 a 0 的关系表达式是 :( ) A a>=10 or a<=0 B a<=10 a>=0 C a>=10 a<=0 D a>=10 && a<=0 16 下列只有当整数 x 为奇数时, 其值为 真 的表达式是 :( ) A x%2==0 B!(x%2==0) C (x-x/2*2)==0 D!(x%2) 17 设 a 为整型变量, 不能正确表达数学关系 10<a<15 的 C 语言表达式是 :( ) A 1 0< a < 15 B!(a<=10 a>=15) C a>10 && a<15 D!(a<=10) &&!(a>=15) 18 已知 x=43, ch= A,y=0; 则表达式 (x>=y&&ch< B &&!y) 的值是 :( ) A 0 B 语法错 C 1 D 假 19 表达式 17%4 /8 的值为 :( ) A 0 B 1 C 2 D 3 20 语句 printf( %d,(a=2)&&(b= -2)); 的输出结果是 :( ) A 无输出 B 结果不确定 C -1 D 1 21 一个可执行的 C 程序的开始执行点是 :( ) A. 程序中的第一个语句 B. 包含文件中的第一个函数 C. 名为 main 的函数 D. 程序中的第一个函数 22 组成 C 语句的一个必不可少的符号是 :( ) A. 逗号 B. 引号 C. 冒号 D. 分号
23 若将 int long float 等类型的数据进行混合运算, 其结果的数据类型是 :( ) A. int B. long C. float D. double 24 下述是 C 语言中有关变量定义的几个说法, 正确的是 :( ) A. 变量可以不定义直接使用 B. 一个说明语句只能定义一个变量 C. 几个不同类型的变量可在同一语句中定义 D. 变量可以在定义时进行初绐化 25 与 x * = y + z 等价的赋值表达式是 :( ) A. x = y + z B. x = x * y + z C. x = x * (y + z) D. x = x + y * z 26 当代电子计算机能够自动地处理指定的问题是因为 :( ) A. 计算机是电动的 B. 有解决该问题的计算机程序 C. 事先存储了解决该问题的程序 D. 以上都不是 ( 知识点 : 程序的基本概念 ; 难度系数 :2; ) 27 以下叙述中最准确的是 :( ) A. 计算机程序是处理某一问题所有指令的集合 B. 计算机程序是处理某一问题所用到的所有数据的集合 C. 计算机程序是处理某一问题的所有指令及其数据的集合 D. 计算机程序是处理某一问题的所有指令及其数据的有序集合 ( 知识点 : 程序的基本概念 ; 难度系数 :2; ) 28 关于计算机程序设计, 以下描述最准确的是 :( ) A. 程序设计就是用语言来编写程序 B. 程序设计就是用计算机语言来编写程序 C. 程序设计就是用计算机程序设计语言来编写程序 D. 程序设计就是用计算机能识别的语言来编写程序 ( 知识点 : 程序设计的基本概念 ; 难度系数 :1; ) 29 目前编写计算机程序一般采用的是 :( ) A. 机器语言 B. 汇编语言 C. 高级语言 D. 英语 ( 知识点 : 程序设计的基本概念 ; 难度系数 :1; ) 30 设计一个计算机程序最基本的工作是 :( ) A. 制定正确的算法 B. 选择合理的数据结构 C. 制定正确的算法和选择合理的数据结构 D. 以上都不是 ( 知识点 : 算法的基本概念 ; 难度系数 :1; ) 31 算法具有五个特性, 以下选项中不属于算法特性的是 :( ) A. 有穷性 B. 简洁性 C. 可行性 D. 确定性 ( 知识点 : 算法的基本概念 ; 难度系数 :3; ) 32 下述哪一个不是结构化程序基本结构 :( ) A. 顺序 B. 选择 C. 循环 D. 嵌套 ( 知识点 : 结构化程序设计的概念 ; 难度系数 :2; ) 33 C 语言是一种 :( ) A. 机器语言 B. 汇编语言 C. 高级语言 D. 以上都不是 ( 知识点 :C 语言的特点 ; 难度系数 :1; )
34 C 语言源程序的扩展名为 :( ) A..exe B..c C..obj D..cpp ( 知识点 :C 语言的特点 ; 难度系数 :1; ) 35 C 程序编译后最终产生 ( 即计算机执行 ) 的文件的扩展名为 ( ) A..exe B..c C..obj D..cpp ( 知识点 :C 语言的特点 ; 难度系数 :1; ) 36 下列各项中, 不是 C 语言的特点是 :( ) A. 语言简洁 紧凑, 使用方便 B. 程序执行效率高, 可移植性好 C. 能实现汇编语言的大多数功能 D. 有较强的网络操作功能 ( 知识点 :C 语言的特点 ; 难度系数 :3; ) 37 构成 C 语言源程序的基本单位是 :( ) A. 子程序 B. 过程 C. 文本 D. 函数 ( 知识点 :C 程序的特点 ; 难度系数 :1; ) 38 下列叙述正确的是 :( ) A.C 语言源程序可以直接在 DOS 环境中运行 B. 编译 C 语言源程序得到的目标文件可以直接在 DOS 环境中运行 C.C 语言源程序经过编译 连接得到的可执行程序可以直接在 DOS 环境中运行 D.C 语言源程序可以直接在 VC++ 环境中运行 ( 知识点 :C 程序的特点 ; 难度系数 :2; ) 39 某 C 程序由一个主函数 和一个自定义函数 max() 组成, 则该程序 :( ) A. 写在前面的函数先开始执行 B. 总是从 函数开始执行 C. 总是从 max() 函数开始执行 D. 写在后面的函数先开始执行 ( 知识点 :C 程序的特点 ; 难度系数 :1; ) 40 以下叙述不正确的是 :( ) A. 分号是 C 语句的必要组成部分 B.C 程序的注释可以写在语句的后面 C. 函数是 C 程序的基本单位 D. 主函数的名字不一定用 mian 表示 ( 知识点 :C 程序的特点 ; 难度系数 :1; ) 41 以下为 C 语句的是 :( ) A.a=8 B.a++; C.if(a>8) D. #include <stdio.h> ( 知识点 :C 语句的特点 ; 难度系数 :2; ) 以下不是 C 语句的是 :( ) A.a=8; B.a++; C.if(a>8); D.for(i=1;i<5;i++) ( 知识点 :C 语句的特点 ; 难度系数 :2; ) 42 以下所列语句中, 合法的语句是 :( ) A.a=1,b=2 B.++a; C.a=a+1=5 D.y=int(a); ( 知识点 :C 语句的特点 ; 难度系数 :2; ) 43 C 程序中的复合语句指的是 :( ) A. 并列的多个 C 语句 B. 写在同一行中的多个 C 语句 C. 用一对大括号对括的多个 C 语句 D. 就是函数体中的语句 ( 知识点 :C 语句的特点 ; 难度系数 :2; ) 44 当一个很长的 C 语句 ( 中间无字符串 ) 在一行写不下 ( 超出屏幕的宽度 ) 时, 应该 :( )
A. 由系统自动换行 B. 立即按回车键换行 C. 在任意一个空格处按回车键换行 D. 输入一个分号后并按回车键换行换行 ( 知识点 :C 语句的特点 ; 难度系数 :2; ) 45 在 x 值处于 -2~2,4~8 时值为 真, 否则为 假 的表达式是 :( ) A.( 2> x> -2 ) (4 > x > 8) B.!((( x < -2 ) ( x >2 )&&(( x <= 4 ) ( x > 8 )) C.( x < 2 )&&( x >= -2 )&&( x > 4 )&&( x < 8 ) D.( x > -2 )&&( x >4 ) ( x < 8 )&&( x < 2 ) 二 判断题 1. ( T )C 语言是严格区分大写和小写的, 因次主函数不能写成 以外的其他形式 2. ( F )C 语言程序是从源文件的第一条语句开始执行的 3. ( T )C 语言对其数据在内存中所占用的实际字节数是有明确规定的 4. ( F )C 语言中 /*..*/ 之间的注释内容是不能跨行的 5. ( F )C 语言中多个以 ; 结束的语句不能放在同一行 6. ( T ) 以下常数 :'101',e3, \78,(2+3)e(4-2) 都是不合法的 7. ( F ) 变量说明语句 int a=b=c=23; 是正确的 8. ( F ) 字符型数据不可以和整数数据一起进行算术运算 9. ( F )C 语句 :3*x*x+4*x+1+6sin(x)=y. 是可以允许的 10. ( T ) 表达式 m=(a=4,4*5) 和 m=a=4,4*5 的值是相等的 11. ( T )C 语言中强制类型转换不会改变原变量的原有数据类型 12. ( F ) 表达式 j=-i++ 和 j=-(i++) 不相等 13. ( T ) 程序段 :i=8,j=10;printf("%d,%d,%d,%d\n",i,j,++i,j++); 其结果 9,10,9,10. 14. ( F )C 语言中放在 之间的内容都被视为字符串的一个构成部分, 都可以在屏幕上原样显示 15. ( T ) 计算机程序的基本组成是 : 指示计算机如何去解决某一问题的一组指令 16. ( T ) 计算机程序的执行过程实际上是对程序所表达的数据进行处理的过程 17. ( T ) 目前程序设计的理念已经从 面向过程的程序设计 向 面向对象的程序设计 方面转变 18. ( T ) 任何一个计算机程序都可以用机器语言 汇编语言和高级语言来编写 19. ( T ) 有人曾提出 : 计算机程序 = 算法 + 数据结构 20. ( T ) 在程序设计中提到的算法就是 解决问题的方法和步骤 21. ( T ) 在程序设计中提到的数据结构就是 程序处理的对象的表示方法 22. ( T ) 计算机程序的算法就是解决 做什么 和 怎么做 的问题 23. ( T ) 结构化程序设计的基本理念是 : 将一个较大的问题细分成若干个较小问题的组合 24. ( T )C 程序的编译是从程序的第一行开始, 到程序的最后一行结束 25. ( F )C 程序的编译是从主函数的第一行开始, 到主函数的最后一行结束 26. ( F )C 程序的执行是从程序的第一行开始, 一直到程序的最后一行结束 27. ( T )C 程序的执行是从主函数的第一行开始, 一直到主函数的最后一行结束 28. ( T ) 设 x t 均为 int 型变量, 则执行语句 "x = 10;t = x && x > 10;" 后,t 的值为 0 29. ( T ) 若 a 和 b 类型相同, 在计算了赋值表达式 a=b 后 b 中的值将放入 a 中, 而 b 中的值不变 30. ( T ) 在 C 程序中,% 是只能用于整数运算的运算符 31. ( T ) 在 C 语言中, 逻辑 真 等价于不等于 0 的数 32. ( F )C 语言中字符型 整型 实型都能用八进制表示
33. (F) 在 VC 语言中,5 种基本数据类型的存储空间长度的排列顺序为 :char<int<long int <float<double 34. ( T ) 变量的三要素是 : 变量名 变量类型 变量的值 三 多选题 1. 目前程序设计采用的基本方法有 : A. 面向过程的程序设计 B. 面向对象的程序设计 C. 面向问题的程序设计 D. 面向机器的程序设计 ( 知识点 : 结构化程序设计的概念 ; 难度系数 :1; B ) 第 4 章顺序结构 一 选择题 1 下面程序的输出是 :( ) int k=11; printf("k=%d,k=%o,k=%x\n",k,k,k); A) k=11,k=12,k=13 B) k=11,k=13,k=13 C) k=11,k=013,k=oxb D) k=11,k=13,k=b 2 以下合法的 C 语言赋值语句是 :( ) A)a=b=58 B)k=int(a+b) ; C)a=58,b=58 D)-- i; 3 以下程序的输出结果是 :( ) int x=10,y=3; printf( %d\n,y=x/y); A)0 B)1 C)3 D) 不确定 4 若变量已正确说明为 int 类型, 要给 a,b,c 输入数据, 以下正确的输入语句是 :( ) A)read (a,b,c); C)scanf( %D%D%D,%a,%b,%c); 5 执行下面程序段后,c3 中的值是 :( ) int c1=1, c2=2, c3; c3=c1/c2; A)0 B)1/2 C)0.5 D)1 6 若执行以下程序段, 其输出结果是 :( ) int a=0, b=0, c=0; c=(a-=a-5), (a=b,b+3) ; printf( %d, %d, %d\n, a,b,c); B)scanf( %d%d%d,a,b,c); D)scanf( %d%d%d,&a,&b,&b); A)0,0,0 B)0,0,5 C)5,0,5 D)-10,0,-10
7 以下程序段的输出是:( ) float a=57.666; printf( *%2.2f*\n, a); A)*57* B)*58* C)*57.66* D)*57.67* 8 若有以下定义和语句:( ) int a=5,b b=a++; 此处 b 的值是 :( ) A) 7 B) 6 C) 5 D) 4 9 若有以下定义和语句:( ) char c1='b',c2='e'; printf("%d,%c\n",c2-c1,c2-'a'+'a') 则输出结果是 :( ) A) 2,M B) 3,E C) 2,e D) 输出结果不确定 10 以下程序的输出结果是:( ) int x=10,y=10; printf("%d%d\n",x--,--y); A) 10 10 B) 9 9 C) 9 10 D) 10 9 11 在 C 语言中, 如果下面的变量都是 int 类型, 则输出结果是 :( ) sum=pad=5; pad=sum++,pad++,++pad; printf("%d\n",pad); A) 7 B) 6 C) 5 D) 4 12 以下程序的输出结果:( ) #include<stdio.h> int i=010,j=10; printf("%d,%d\n",++i,j--); A) 11,10 B) 9,10 C) 010,9 D) 10,9 13 在 C 语言中,short 类型数据的范围是 -32768~32767, 下面程序段的输出结果是 :( ) short i =65536; printf("%d\n",i); A) 65536 B) 0 C) 1 D) 超出取值范围, 无输出结果
14 已知字符 A 的 ASCII 码为十进制的 65, 下面程序的输出是 :( ) char ch1,ch2; ch1='a'+'5'-'3'; ch2='a'+'6'-'3'; printf("%d,%c\n",ch1,ch2); A) 67,D B) B,C C) C,D D) 不确定的值 15 若有定义和语句: char s; s="abcd"; printf("%d\n",s); 则结果是 :( ) A) 输出 97 B) 输出 a C) 输出 adcb D) 编译不能通过 16 若有定义:int x,y; char a,b,c; 并有以下输入数据 ( 此处 <CR> 代表换行, 代表空格 ): 1 2 <CR> A B C<CR> 则能给 x 赋整数 1, 给 y 赋数 2, 给 a 赋字符 A, 给 b 赋字符 B, 给 c 赋字符 C 的正确程序段是 :( ) A) scanf("x=%d y=%d",&x,&y); a=getchar(); c=getchar(); B) scanf("%d%d",&x,&y); a=getchar(); b=getchar(); c=getchar(); C) scanf("%d%d%c%c%c",&x,&y,&a,&b,&c); D) scanf("%d%d%c%c%c%c%c%c",&x,&y,&a,&a,&b,&b,&c,&c); 17 两次运行下面的程序, 如果从键盘上分别输入 6 和 4, 则输出结果是 :( ) int x; scanf("%d",&x); if (x++>5) printf("%d",x) else printf("%d\n",x--); A) 7 和 5 B) 6 和 3 C) 7 和 4 D) 6 和 4 18 若执行下面的程序从键盘输入 3 和 4, 则输出是 :( ) int a,b,s; scanf("%d%d",&a,&b); s=a; if (a<b) s=b; s=s*s; printf("%d\n",s);
A) 14 B) 16 C) 18 D) 20 19 设 i 是 int 型变量,f 是 float 型变量, 用下面的语句给这两个变量输入值 scanf("i=%d,f=%f",&i,&f); 为了把 100 和 765.12 分别赋给 i 和 f, 则正确的输入为 :( ) A) 100< 空格 >765.12< 回车 > B) i=100,f=765.12< 回车 > C) 100< 回车 >765.12< 回车 > D) x=100< 回车 >,y=765.12< 回车 > 20 以下程序的输出结果是 :( ) #include<stdio.h> int n; printf("%d\n",n); A) -1 B) 0 C) 1 D) 不确定 二 判断题 1.( F ) 在 C 语言中, 实型数据在内存都中占 4 个字节 2.( F ) 在 C 语言中, 参加算术 (+,-,*,/,%) 运算的数据可以是任何类型的数据 3.( F ) 若有定义和语句 :int a;char c;scanf("%d,%c",&a,&c); 当通过键盘输入 : 10, A 之后, 则变量 a 中存放的是 10, 变量 c 中存放的是 A 4.( F )C 语言中, 变量名只能是小写字母表示, 符号常量名可用大写表示 5.( F ) 在 C 语言中, 变量可以不要定义, 直接使用 6.( T ) 一个 C 语言程序总是从主函数开始执行的 7.( F ) 注释语句必须用 /* 和 */ 括起来, 且只能位于某一语句的后面 8.( F ) a 和 a 均是占用 1 个字节的内存空间的数据 三 多选题 1. 以下所列语句中, 不合法的语句是 :( ) A a=1,b=2 B ++a; C a=a+1=5; D y= (int) a; E a=b=c=10; CD 2. 下列描述正确的是 :( ) A. putchar 函数的作用是向屏幕输出一个字符 B. putchar 函数能在屏幕上输出控制字符 C. putchar(c) 函数中,c 只能是字符型变量, 不能是整型变量 D. putchar 函数能在屏幕上输出转义字符 E.putchar 函数的使用需要包含 stdio.h 头文件BDE 3. 下列描述正确的是 :( ) A. getchar 函数只能接收一个字符 B. getchar 函数得到的字符可以赋给一个字符变量 C. getchar 函数得到的字符可以赋给一个整型变量 D. getchar 函数得到的字符可以作为表达式的一部分 E.getchar 函数是编程者自定义的函数BCD 4. printf 函数中, 关于格式字符描述正确的是 :( )
A. 格式字符 o 表示以八进制无符号形式输出整数 B. 格式字符 u 表示以无符号十进制形式输出整数 C. 格式字符 x 表示以无符号十六进制形式输出整数 D. 格式字符 f 表示以实数形式输出单 双精度数 E. 格式字符 e 表示以浮点数形式输出单 双精度数BCDE 5. 假设 int x,y,z; 若从键盘给 x y z 输入数据, 下列不正确的输入语句是 :( ) A.input x y z; B.scanf("%d%d%d",&x,&y,&z); C.scanf("%d%d%d",x,y,z); D.read("%d%d%d",&x,&y,&z); E.scanf("%d%d%d,&x,&y,&z"); CDE 6. 假设 float x,y,z;, 并通过 scanf("%f%f%f ",&a,&b,&c); 对 a 赋于 10.0,b 赋予 22.0,c 赋予 33.0 的值, 下面正确的输入形式是 :( )( 注 : 符号 代表空格 ) A 10< 回车 >22< 回车 > 33< 回车 > B 10.0< 回车 >22.0< 回车 >33.0< 回车 > C 10.0,22.0,33.0< 回车 > D 10.0 22.0 33.0< 回车 > E 10 22 33< 回车 > BDE 7. 若有 int a,c;char b; 并通过 scanf("%f%c%f ",&a,&b,&c); 对 a 赋于整数 10,b 赋 予字符 M,c 赋予整数 33 的值, 下面正确的输入形式是 :( )( 注 : 符号 代表空格 ) A 10< 回车 >M< 回车 > 33< 回车 > B 10M33< 回车 > C 10 M 33< 回车 > D 10M< 回车 >33< 回车 > E 10M < 回车 >33< 回车 > DE 8. 若有 char ch;, 下面可以对变量 c 正确赋值的语句是 :( ) A.ch = A ; B.getchar(ch); C.ch = getchar(); D.scanf( %c,&ch); E.printf( %c,ch= B ); CDE 9. 下面属于转义符的有 :( ) A. \t B. \n C. %d D. \376 E. \x20 BDE 10. 若 a 为整型变量, 则下列表达式的值为 0 的是 ( ), A.a % a B.a!= a C.3/4 D.3 && 0 E.a = 0 BCDE 第 5 6 章选择与循环结构
一 选择题 1. 有以下程序 main( ) int i; for ( i=0; i<3; i++ ) switch ( i ) case 1 : printf("%d ", i); case 2 : printf("%d ", i); 执行后输出结果是 :( ) default : printf("%d ", i); A)011122 B)012 C)012020 D)120 2. 有以下程序 int i=1, j=1, k=2; if ( (j++ k++) && i++) printf("%d,%d,%d\n", i, j, k); 执行后输出结果是 :( ) A)1,1,2 B)2,2,1 C)2,2,2 D)2,2,3 3. 有以下程序 int a=5,b=4,c=3,d=2; if (a>b>c) printf("%d\n", d); else if ( (c-1 >= d) ==1) else printf("%d\n", d+1); printf("%d\n", d+2); 执行后输出结果是 :( ) A)2 B)3 C)4 D) 编译时有错, 无结果 4. 有以下程序 int i=0,s=0; do if (i%2) i++; continue; i++; s += i; while( i<7 ); printf("%d\n", s);
执行后输出结果是 :( ) A)16 B)12 C)28 D)21 5. 以下程序的输出结果是 :( ) int a=5,b=4,c=6,d; printf("%d\n",d=a>b?(a>c?a:c):(b)); A) 5 B) 4 C) 6 D) 不确定 6. 以下程序中,while 循环的循环次数是 :( ) int i=0; while(i<10) if(i<1) continue; if(i==5) break; i++; A) 1 B) 10 C) 6 D) 死循环, 不能确定次数 7. 以下程序的输出结果是 :( ) main( ) int a=0,i; for(i=1;i<5;i++) switch(i) case 0: case 3: a+=2; case 1: case 2: a+=3; default: a+=5; printf("%d\n",a); A) 31 B) 13 C) 10 D) 20 8. 以下程序的输出结果是 :( ) int a=4,b=5,c=0,d; d=!a &&!b!c; printf("%d\n",d); A) 1 B) 0 C) 非 0 的数 D) -1 9. 以下程序的输出结果是 :( )
#include int i=0,a=0; while(i<20) for( ; ; ) if((i%10)==0) break; else i--; i+=11; a+=i; printh("%d\n",a); A) 21 B) 32 C) 33 D) 11 10. 阅读以下程序 :( ) int x; scanf("%d",&x); if(x--<5) printf("%d"x); else printf("%d"x++); 程序运行后, 如果从键盘上输人 5, 则输出结果是 :( ) A)3 B) 4 C) 5 D) 6 11. 假定 w x y z m 均为 int 型变量, 有如下程序段 : w=1; x=2; y=3; z=4; m=(w<x)?w : x; m=(m<y)?m : y; m=(m<z)?m: z; 则该程序运行后,m 的值是 :( ) A) 4 B) 3 C) 2 D) 1 12. 以下程序的输出结果是 :( ) int a, b; for(a=1, b=1; a<=100; a++) if(b>=10) break; if (b%3==1) b+=3; continue; printf("%d\n",a); A) 101 B) 6 C) 5 D) 4 13. 若执行以下程序时从键盘上输入 9, 则输出结果是 :( ) int n; scanf ("%d",&n);
if(n++<10) printf ("%d\n",n); else printf("%d\n",n--); A) 11 B) 10 C) 9 D) 8 14. 有以下程序段 int k=0 while(k=1) k++; 则 while 循环执行的次数是 :( ) A) 无限次 B) 有语法错, 不能执行 C) 一次也不执行 D) 执行 1 次 15. 以下程序执行后 sum 的值是 :( ) int i, sum; for(i=1;i<6;i++) sum+=i; printf("%d\n",sum); A)15 B)14 C) 不确定 D)0 16. 有以下程序段 int x=3 do printf ("%d",x -=2); while (!(--x)); 其输出结果是 :( ) A) 1 B) 3 0 C) 1-2 D) 死循环 17. 若变量 c 为 char 类型, 能正确判断出 c 为小写字母的表达式是 :( ) A) 'a'<=c<= 'z' B) (c>= 'a') (c<= 'z') C) ('a'<=c)and ('z'>=c) D) (c>= 'a')&&(c<= 'z') 18. 以下程序的输出结果是 :( ) float x=0.5; char z='a'; printf("%d\n", (x>1) && (z<'z') ); A) 0 B) 1 C) 2 D) 3 19. 以下程序的输出结果是 :( )
int x=10,y=10,i; for(i=0;x>8;y=i ) printf( %d %d, x--,y); A)10 1 9 2 B)9 8 7 6 C)10 9 9 0 D)10 10 9 0 20. 以下程序的输出结果是 :( ) int i; for(i=1;i<=6;i++) if(i%2) printf( # ); continue; printf( * ); printf( \n ); A)#*#*# B)##### C)***** D)*#*#* 21. 以下程序的输出结果是 :( ) int i; for(i='a';i<='i';i++) printf( %c, i+32); printf( \n ); A) 编译不通过, 无输出 B) aceg C)acegi D)abcdefghi 22. 以下程序输出结果是 :( ) main () int m=5; if (m>5) printf ( %d\n, m); else printf ( %d\n, m--); A )7 B )6 C)5 D)4 23. 运行以下程序后, 如果从键盘上输入 china# 回车, 则输出结果为 :( ) #include <stdio.h> int v1=0,v2=0; char ch ; while ((ch=getchar())!='#') switch (ch ) case 'a':
case 'h': default:v1++; case '0':v2++; printf( %d,%d\n, v1,v2); A) 2,0 B)5,0 C) 5,5 D)2,5 24. 设有如下定义 : int a=1,b=2,c=3,d=4,m=2,n=2; 则执行表达式 :(m=a>b)&&(n=c>d) 后,n 的值为 :( ) A)1 B)2 C)3 D)0 25. 以下程序的输出结果是 :( ) int i,j,x=0; for (i=0;i<2;i++) x++; for(j=0;j<3;j++) if (j%2) continue; x++; x++; printf( x=%d\n, x); A)x=4 B)x=8 C)x=6 D)x=12 26. 设 x 和 y 均为 int 型变量, 则执行以下的循环后,y 值为 :( ) for(y=1,x=1;y<=50;y++) if(x==10)) break; if (x%2==1) x+=5; continue; x-=3; A)2 B)4 C)6 D)8 27. 假定 a 和 b 为 int 型变量, 则执行以下语句后 b 的值为 :( ) a=1;b=10; do b-=a; a++; while (b--<0);
A)9 B)-2 C)-1 D)8 28. 设 j 为 int 型变量, 则下面 for 循环语句的执行结果是 :( ) for (j=10;j>3;j--) if(j%3) j--; --j;--j; printf( %d, j); A)6 3 B)7 4 C)6 2 D)7 3 29. 有以下程序 int x, i; for(i=1;i<=50;i++) x=i; if(x%2==0) x++; if(x%3==0) x++; if(x%7==0) x++; printf("%d ",i); 输出结果是 :( ) A)28 B)27 C)42 D)26 30. 假定所有变量均已正确说明, 下列程序段运行后 x 的值是 :( ) a=b=c=0;x=35; if(!a) x--; else if(b) ; if(c) x=3; else x=4; A)34 B)4 C)35 D)3 31. 执行表达式 k = ( 10>12? 15 :6>5? 8 :9 ) 后, 变量 k 的值为 :( ) A. 9 B. 8 C. 15 D. 1 32. 以下程序运行后, 如果从键盘上输人 5, 则输出结果是 :( ) main( )
int x; scanf("%d",&x); if(x--<5) printf("%d",x); else printf("%d",x++); A 3 B 4 C 5 D 6 33. 以下程序段的输出结果是 :( ) int k, j, s ; for(k=2;k<6;k++,k++) s=1; for (j=k;j<6;j++) s+=j; printf( %d\n,s); A)9 B)1 C)11 D)10 34. 以下程序段的输出是 :( ) int i,j,m=0; for (i=1;i<=15;i+=4) for (j=3;j<=19;j+=4) m++; printf( %d\n,m); A)12 B)15 C)20 D)25 35. 以下程序段的输出结果是 :( ) int i, sum; for(i=1;i<6;i++) sum+=sum; printf( %d\n,sum); A)15 B)14 C) 不确定 D)0 36. 下面程序的输出是 :( ) int x=3,y=6,a=0; while (x++!=(y-=1)) a++; if (y<x) break; printf("x=%d,y=%d,a=%d\n",x,y,a); A) x=4,y=4,a=1 B) x=5,y=5,a=1 C) x=5,y=4,a=3 D) x=5,y=4,a=1
37. 定义如下变量 :int n=10; 则下列循环的输出结果是 :( ) while (n>7) n--; printf("%3d",n); A) 10 9 8 B) 9 8 7 C) 10 9 8 7 D) 9 8 7 6 38. 以下程序段的输出结果是 :( ) int x=3; do printf("%3d",x-=2; while (!(--x)); A) 1 B) 3 0 C) 1-2 D) 死循环 39. 执行下面的程序后,a 的值为 :( ) int a,b; for (a=1,b=1;a<100;a++) if (b>=20) break; if (b%3==1) b+=3; continue; b-=5; A) 7 B) 8 C) 9 D) 10 40. 读程序 : int num=0; while (num<=2) num++; printf("%3d",num); 上面程序的输出结果是 :( ) A) 1 B) 2 2 C) 1 2 3 D) 1 2 3 4 41. 以下循环体的执行次数是 :( ) int i,j; for(i=0,j=1;i<=j+1;i+=2,j--) printf("%d \n",i); A) 3 B) 2 C) 1 D) 0
42. 在 C 语言的循环语句 for,while,do-while 语句中, 用于直接中断最内层循环的语句是 :( ) A) switch B) continue C) break D) if 二 判断题 : 1. ( F ) 用 1 作 while 循环的判断条件, 则循环一次也不执行 2. ( F )for 循环表达式的括号内的 3 个表达式均不可以省略 3. ( T ) 语句 while(!e); 中的条件!E 等价于 E==0 4. ( T ) 语句 while(e); 中的条件 E 等价于 E!=0 5. ( F ) 若有 for( ; ; ), 是指循环体执行 0 次 6. ( F ) 程序有死循环的时候, 上机编译不能通过 7. ( T ) 强制终止死循环可以使用 CTRL+BREAK 组合键 8. ( F ) 执行 for(i=0;i<3;i++); 后 I 的值为 2 9. ( F ) 执行 for(i=0,j=0;i<2;i++);j=j+1; 后 j 的值为 1 10. ( T ) 所有类型的循环都可以进行嵌套使用 11. ( T ) 利用 break 语句可以提前终止循环的执行 12. ( F ) 利用 continue 语句可以提前终止循环的执行 13. ( F )break 语句和 continue 语句不可以同时出现在同一个循环体内 14. ( F )switch 语句中, 每一个 case 的冒号后面都必须至少跟有一条语句 15. ( F ) 关于 if 语句中, 条件表达式只能是关系表达式或逻辑表达式三 多选题 1 关于 if 语句, 下列叙述正确的是 :( ) A.if 语句中, 条件表达式只能是关系表达式或逻辑表达式 B.if 语句中, 条件表达式的括号不可以省略 C.else 子句不能作为一个独立的语句单独使用, 必须是 if 语句的一部分 D.if 和 else 后面可以包含多个操作语句, 此时要用一对大括号把这多个语句对括起来成为一个复合语句 CD 2 以下 4 条语句, 没有语法错误的是 () A.if (a>b) m =a; B.if (a); C.if ((a=b)>=0) m=a; D.if ((a=b;)>=0) m=a; BC 3 如果不加花括号表示 else 与 if 的配对关系, 则 else 与 if 的匹配方法, 不正确的是 A.else 与它上面最远的 if 配对 B.else 与它上面最近的 if 配对 C.else 与离它最近的 if 配对 D.else 与它上面最近的且没有和其他 else 配对的 if 配对BC 4 关于条件运算符的叙述正确的是 A. 条件运算符的优先级别比关系运算符和算术运算符都低 B. 条件运算符是 C 语言中惟一的一个三目运算符 C. 条件运算符的结合方向是 自右至左 D. 条件运算符可以替代任何 if 语句的功能BC 5 关于 switch 语句叙述正确的是 A. 语句中,case 的冒号后面允许没有语句 B.switch 语句中, 每一个 case 的冒号后面都允许跟有多条语句
C. 在与 switch 语句配套的 case 语句中所使用的表达式可以是变量或常量 D.switch 语句中, 可以没有 default 语句 BD 6 在计数循环 for( 表达式 1; 表达式 2; 表达式 3) 中, 可以省略的表达式是 :( ) A. 表达式 1 B. 表达式 2 C. 表达式 3 D. 三个表达式都可以 E. 一个都不能少BCD 7 下列语句段是死循环的是 ( ) A.n=100; while(n) n=n%100+1; C.for(;;); E.x=0; do x++; BCE while(x>=0); B.s=33; while(s++%2+s%2) s++; D.for(i=1;;) if(--i)break; 第 7 章 数组 一 选择题 1 若有以下说明语句 : int a[12]=1,2,3,4,5,6,7,8,9,10,11,12; char c= a,d,g; 则数值为 4 的表达式是 :( ) A a[g-c] B a[4] C a[ d - c ] D a[ d -c] 2 假设 int 型变量占两个字节的存储单元, 若有定义 : int x[10]=0,2,4; 则数组 x 在内存中所占字节数为 :( ) A 3 B 6 C 10 D 20 3 下列合法的数组定义是 :( ) A int a[]= string ; C char a= string ; 4 若给出以下定义 : char x[]= abcdefg ; B int a[5]=0,1,2,3,4,5; D char a[]=0,1,2,3,4,5; char y[]= a, b, c, d, e, f, g ; 则正确的叙述为 :( ) A 数组 x 和数组 y 等价 C 数组 x 的长度大于数组 y 的长度 5 下面程序段的输出结果是 :( ) int j; int x[3][3]=1,2,3,4,5,6,7,8,9; for (j=0;j<3;j++) printf( %d,x[j][2-j]); B 数组 x 和数组 y 的长度相同 D 数组 y 的长度大于数组 x 的长度 A 1 5 9 B 1 4 7 C 3 5 7 D 3 6 9
6 下列程序运行后的输出结果是:( ) int n[3],t,j,k; for(t=0;t<3;t++) n[t]=0; k=2; for(t=0;t<k;t++) for(j=0;j<3;j++) n[j]=n[t]+1; printf( %d\n,n[1]); A 2 B 1 C 0 D 3 7 有以下程序 int p[7]=11,13,14,15,16,17,18, i=0,k=0; while(i<7 && p[i]%2) k =k+ p[i]; i++; printf("%d\n", k); 执行后输出结果是 :( ) A 58 B 56 C 45 D 24 8 以下能正确定义数组并正确赋初值的语句是:( ) A int N=5,b[N][N]; B int a[1][2]=1,3; C int c[2][]= 1,2,3,4; D int d[3][2]=1,2,3,4; 9 有以下程序 int m[][3]=1,4,7,2,5,8,3,6,9; int i,j,k=2; for(i=0; i<3; i++) printf("%d ",m[k][i]); 执行后输出结果是 :( ) A 4 5 6 B 2 5 8 C 3 6 9 D 7 8 9 10 以下能正确定义一维数组的选项是:( ) A int num[]; B int num[0..100]; C) #define N 100 D) int N=100; int num[n]; int num[n]; 11 下列选项中正确的语句组是:( ) A char s[8]; s="beijing"; B char *s; s="beijing"; C char s[8]; s="beijing"; D char *s; s="beijing";
12 有以下程序段 int a[10]=1,2,3,4,5,6,7,8,9,10,*p=&a[3],b; b=p[5]; b 中的值是 :( ) A 5 B 6 C 8 D 9 13 有以下程序 main( ) char a[]="abcdefg",b[10]="abcdefg"; printf("%d %d\n",sizeof(a),sizeof(b)); 执行后输出结果是 :( ) A 7 7 B 8 8 C 8 10 D 10 10 14 有以下程序的输出结果是:( ) void swap1(int c[]) int t; t=c[0];c[0]=c[1];c[1]=t; void swap2(int c0,int c1) int t; t=c0;c0=c1;c1=t; main( ) int a[2]=3,5,b[2]=3,5; swap(a); swap2(b[0],b[1]); printf("%d %d %d %d\n",a[0],a[1],b[0],b[1]); A 5 3 5 3 B 5 3 3 5 C 3 5 3 5 D 3 5 5 3 15 有以下程序 int f(int b[][4]) int i,j,s=0; for(j=0;j<4;j++) i=j; if(i>2) i=3-j; s+=b[i][j]; return s; main( ) int a[4][4]=1,2,3,4,0,2,4,5,3,6,9,12,3,2,1,0; printf("%d\n",f(a)); 执行后的输出结果是 :( ) A 12 B 11 C 18 D 16
16 有以下程序 void sort(int a[],int n) in t i,j,t; for(i=0;i<n-1;i+=2) for(j=i+2;j<n;j+=2) if(a[i]<a[j]) t=a[i];a[i]=a[j];a[j]=t; int aa[10]=1,2,3,4,5,6,7,8,9,10,i; sort(aa,10); for(i=0;i<10;i++) printf("%d",aa[i]); printf("\n"); 其输出结果是 :( ) A 1,2,3,4,5,6,7,8,9,10, B 10,9,8,7,6,5,4,3,2,1, C 9,2,7,4,5,6,3,8,1,10, D 1,10,3,8,5,6,7,4,9,2, 17 有以下程序 void f(int a[],int i,int j) int t; if(i<j) t=a[i]; a[i]=a[j];a[j]=t; f(a,i+1,j-1); main( ) int i,aa[5]=1,2,3,4,5; f(aa,0,4); for(i=0;i<5;i++) printf("%d,",aa[i]); printf("\n"); 执行后输出结果是 :( ) A 5,4,3,2,1, B 5,2,3,4,1, C 1,2,3,4,5, D 1,2,3,4,5, 18 以下程序的输出结果是 :( ) char cf[3][5]="aaaa","bbb","cc"; printf("\"%s\"\n",ch[1]); A "AAAA" B "BBB" C "BBBCC" D "CC" 19 以下程序的输出结果是 :( )
int b[3][3]=0,1,2,0,1,2,0,1,2,i,j,t=1; for(i=0;i<3;i++) for(j=i;j<=i;j++) t=t+b[i][b[j][j]]; printf("%d\n",t); A 3 B 4 C 1 D 9 20 有以下程序 int aa[4][4]=1,2,3,4,5,6,7,8,3,9,10,2,4,2,9,6; int i,s=0; for(i=0;i<4;i++) s+=aa[i][1]; printf("%d\n",s); 程序运行后的输出结果是 :( ) A 11 B 19 C 13 D 20 21 若有以下定义语句: char s[10],s= abcd ;printf( %s\n,s); 则运行结果是 :( ) A 输出 abcd B 输出 a C 输出 ab cd D 编译不通过 22 不能把字符串 Hello! 赋给数组 b 的语句是 :( ) A char b[10]= H, e, l, l, o,! ; B char b[10];b= Hello! ; C char b[10]; strcpy(b, Hello! ); D char b[10]= Hello! ; 23 若有以下程序段: char str[]= ab\n\012\\\ ; printf( %d,strlen(str)); 该程序段的输出结果是 :( ) A 3 B 4 C 6 D 12 24 函数调用 strcat(strcpy(str1,str2),str3) 的功能是 _:( ) A 将串 str1 复制到串 str2 中后在连接到串 str3 之后 B 将串 str1 连接到串 str2 之后再复制到串 str3 之后 C 将串 str2 复制到串 str1 中后再将串 str3 连接到串 str1 之后 D 将串 str2 连接到串 str1 中后再将串 str1 复制到串 str3 中 25 下列程序的输出结果是:( ) char ch[7]= 65ab21 ; int j,s=0; for(j=0;ch[j])>= 0 &&ch[j]<= 9 ;j+=2) s=10*s+ch[j]- 0 ; printf( %d\n,s);
A 12ba56 B 66521 C 6 D 62 26 设已定义 char s[]= \ Name\\Address\ \n ;, 则字符串 s 所占的字节数是 :( ) A 19 B 18 C 15 D 14 27 设已定义 char c[8]= Tianjin 和 int j, 则下面的输出函数调用中错误的是 :( ) A printf( %s,c); C puts(c); B for(j=0;j<8;j++) printf( %c,c[j]); D for(j=0;j<8;j++) puts(c[j]); 28 设已定义 char a[10] 和 int j, 则下面输入函数调用中错误的是 :( ) A scanf( %s,a); C gets(a); B for(j=0;j<9;j++) scanf( %c,a[j]); D for(j=0;j<9;j++) scanf( %c,&a[j]); 29 设已定义 char x[8] 和 int j, 为了给该数组赋值, 下面语句中正确的是 :( ) A x[8]= Turbo C ; C x[]= Turbo C ; 30 有如下程序, int n[5]=0,0,0,j,k=2; for(j=0;j<k:j++) n[j]=n[j]+1; printf( %d\n,n[k]); 该程序的输出结果是 :( ) B x= Turbo C ; D for(j=0;j<7;j++) x[i]=getchar(); A 不确定的值 B 2 C 1 D 0 31. 在 C 语言中, 一维数组的定义方式为 : 类型说明符数组名 ( ) A.[ 常量表达式 ] B.[ 整型表达式 ] C.[ 整型常量 ] 或 [ 整型表达式 ] D.[ 整型常量 ] 32. 若有说明 :int a[10];, 则对 a 数组元素的正确引用是 :( ) A.a[10] B.a[3.5] C.a(5) D.a[10-10] 33. 在 C 语言中, 引用数组元素时, 其数组下标的数据类型允许是 :( ) A. 字符常量 B. 浮点型常量 C. 整型常量或整型表达式 D. 任何类型的表达式 34. 下列数组定义 初始化或赋值语句中, 正确的是 :( ) A.int x[5]=1,2,3,4,5,6; B.int n=8; int score[n]; C.int a[8]; a[8]=100; D.int x[]=1,2,3,4,5,6; 35. 合法的数组说明语句是 :( ) A.int a[]= string ; B.char a[]=0,1,2,3,4,5; C.char a = string ; D.int a[5]=0,1,2,3,4,5; 36. 已知 int a[][3]=1,2,3,4,5,6,7;, 则数组 a 的第一维的大小是 :( ) A.2 B.3 C.4 D. 无确定值
37. 若有说明 :int a[3][4];, 则对 a 数组元素的非法引用是 :( ) A.a[0][2*1] B.a[1][3] C.a[4-2][0] D.a[0][4] 38. 已有定义 :char a[]="xyz",b[]='x','y','z';, 以下叙述中正确的是 :( ) A. 数组 a 和数组 b 的长度相同 B.a 数组长度小于 b 数组长度 C.a 数组长度大于 b 数组长度 D. 数组 a 和数组 b 等价 39. 对两个数组 a 和 b 进行如下初始化 : char a[]= ABCDEF ; char b[]= A, B, C, D, E, F ; 则以下叙述正确的是 :( ) A. 数组 a 与数组 b 完全相同 B. 数组 a 与数组 b 长度相同 C. 数组 a 与数组 b 中都存放字符串 D. 数组 a 比数组 b 长度长 40. 有下面的程序段 : char a[3],b[]= China ; a=b; printf( %s,a); A. 运行后将输出 China B. 运行后将输出 Ch C. 运行后将输出 Chi D. 编译出错 41. 下面程序的运行结果是 :( ) char c[5]= a, b, \0, c, \0 ; printf( %s,c); A.ab B.abc C.ab\0 D.ab\0c\0 42. 设有数组定义 :char array[]= china ;, 则数组 array 所占的空间为 :( ) A.4 个字节 B.5 个字节 C.6 个字节 D.7 个字节 43. 判断字符串 s1 是否大于字符串 s2, 应当使用 :( ) A.if(s1>s2) B.if(strcmp(s1,s2)) C.if(strcmp(s2,s1)>0) D.if(strcmp(s1,s2)>0) 44. 若有说明 :int a[][4]=0,0;, 则下面不正确的叙述是 :( ) A. 数组 a 的每个元素都可得到初值 0 B. 二维数组 a 的第一维大小为 1 C. 因为二维数组 a 中初值的个数不能被第二维大小的值整除, 则第一维的大小等于所得商数再 加 1, 故数组 a 的行数为 1 D. 只有元素 a[0][0] 和 a[0][1] 可得到初值 0, 其余元素均得不到初值 45. 下列语句中, 不正确的是 :( ) A.char str[5]="hello"; B.char str[]='h','e','l','l','o','\0'; C.char str[5]="hi"; D.char str[100]="";
46. 下面错误的初始化语句是 :( ) A.char str[]="hello"; B.char str[100]="hello"; C.char str[]='h','e','l','l','o'; D.char str[]='hello'; 47. 定义了一维 int 型数组 a[10] 后, 下面错误的引用是 :( ) A.a[0]=1; B.a[10]=2; C.a[0]=5*2; D.a[1]=a[2]*a[0]; 48. 下面的二维数组初始化语句中, 错误的是 :( ) A.float b[2][2]=0.1,0.2,0.3,0.4; B.int a[][2]=1,2,3,4; C.int a[2][]= 1,2,3,4; D.float a[2][2]=0; 49. 引用数组元素时, 数组下标可以是 :( ) A. 整型常量 B. 整型变量 C. 整型表达式 D. 以上均可 50. 定义了 int 型二维数组 a[6][7] 后, 数组元素 a[3][4] 前的数组元素个数为 :( ) A.24 B.25 C.18 D.17 51. strlen("a\0b\0c") 的结果为 :( ) A.0 B.1 C.2 D.3 52. 下面程序的运行结果是 :( ) int a[][3]=1,2,3,4,5,6; printf("%d",a[1][1]); A.3 B.4 C.5 D.6 53. 下面程序的运行结果是 :( ) char s1[20]="good!"; char s2[15]="ab"; printf("%d",strlen(strcpy(s1,s2))); A.20 B.15 C.5 D.2 54. 下面程序的运行结果是 :( )
char s1[20]="abcdef"; int i=0; while(s1[i++]!='\0') printf("%c", s1[i++]); A.ABCDEF B.BDF C.ABCDE D.BCDE 55. 下面程序的运行结果是 :( ) int n[2]=0,i,j,k=2; for(i=0;i<k;i++) for(j=0;j<k;j++) n[j]=n[i]+1; printf("%d\n",n[k]); A. 不确定的值 B.3 C.2 D.1 56. 下面程序的运行结果是 :( ) int x[]=22,33,44,55,66,77,88; int k,y=0; for (k=1;k<=4;k++) if (x[k]%2==1) y++; printf("%d",y); A.0 B.1 C.2 D.3 57. 下面程序的运行结果是 :( ) int a[3][3]=1,2,3,4,5,6,i,j,s=0; for(i=1;i<3;i++) for(j=0;j<i;j++) s+=a[i][j]; printf("%d",s); A.14 B.19 C.20 D.21 58. 下面程序的运行结果是 :( ) char ch[7]= "12ab56"; int i,s=0; for(i=0;ch[i]>='0'&&ch[i]<='9';i+=2) s=10*s+ch[i]-'0'; printf("%d",s);
A.1 B.1256 C.12ab56 D.l2 59. 下面程序的运行结果是 :( ) char s[]="ab1c2d4e"; int i; i=0; while(s[i]!='\0') if(s[i]>='a'&&s[i]<='z') printf("%c",s[i]); i++; A.ab B.ab1c2d4e C.abcde D.a 60. 下面程序的运行结果是 :( ) int i=0,n=0; char s[10]="298h01"; for(i=0;s[i]!='\0';i++) if(s[i]<='9'&&s[i]>='0') n=n*10+(s[i]-'0'); else break; printf("%d\n",n); A.298h01 B.29801 C.01 D.298 二 判断题 : 1. ( F ) 在程序中可以对数值数组中的数据进行整体使用 2. ( T ) 如果 strcmp(s1,s2) 的返回值为一个负数, 则表明字符串 s1 一定小于字符串 s2 3. ( F ) 字符数组的输出不能一次性的整体输出 4. ( T ) 用 scanf 函数输入的字符串不可以带空格 5. ( T ) 用 gets 函数输入的字符串可以带空格 6. ( F ) 实现两个字符串的复制可以使用 str1=str2; 语句 7. ( T ) 使用 strcpy 函数可以实现两个字符串的复制 8. ( T ) 使用 strcat 函数可以实现两个字符串的连接 9. ( F ) 使用 strlen 函数可以求出一个字符串的实际长度 ( 包含 \0 字符 ) 10. ( F ) 如有定义 char a[]= student ; 则数组 a 的长度为 7 11. ( F ) 如有定义 char a[20]; 则可以通过 a= I am a boy ; 给 a 赋值 12. ( T ) 如有定义 int a[2][3]; 则数组 a 的最后一个元素为 a[1][2] 13. ( T ) 如有定义 int a[3][4]=0; 则数组 a 的所有元素初值均为 0 14. ( F )C 语言中数组名实质上是数组的首地址, 是一个变量地址, 可对其进行赋值 15. ( F ) 构成数组的各个元素可以有不同的数据类型
16. ( F ) 若有说明 :int a[10];, 则可以 a[10] 引用数组 a 的第 10 个元素 17. ( T ) 引用数组元素时, 其数组下标的数据类型允许的是 : 整型常量或整型表达式 18. ( T ) 若有 int a[10]=6,7,8,9,10;, 则是将 5 个初值依次赋给 a[0] 至 a[4] 19. ( T ) 一个一维数组, 它的每一个元素也是类型相同的一维数组时, 便构成二维数组 20. ( T ) 在 C 语言中, 允许用字符串来直接初始化字符数组 21. ( F ) 字符数组的输出不能一次性的整体输出 22. ( F ) 使用 strcat 函数可以实现两个字符串的复制 三 多选题 1 以下关于数组的描述中, 正确的有 :( ) 在定义数组时, 有时可以将该数组的维数省略 数组名实质上是数组的首地址, 是一个变量地址, 可对其进行赋值 构成数组的各个元素可以有不同的数据类型 有定义 :int a[3]; 则定义了 a[0] a[1] a[2] 三个数组元素 在程序中可以对数值数组中的数据进行整体使用D 2 以下关于数组的描述中, 错误的有 :( ) 引用数组元素时, 其数组下标的数据类型允许的是 : 整型常量或整型表达式 可以通过数组名来整体引用一个数组 在程序中可以对数值数组中的数据进行整体使用 若有说明 :int a[10];, 则可以 a[10] 引用数组 a 的第 9 个元素 若有说明 :int a[10];, 则可以 a[10] 引用数组 a 的第 10 个元素CDE 3 以下关于数组的描述中, 错误的有 :( ) 可以通过如下语句来完成对一个数组的输入 :int a[10]; scanf("%d",a); 可以通过如下语句来完成对一个数组的输入 :int a[10]; scanf("%d",&a); 若有 int a[10]=6,7,8,9,10;, 则是将 5 个初值依次赋给 a[0] 至 a[4] 数组元素可以像普通变量一样使用 int a[9]; 则数组 a 的下标范围是 1-9 BE 4 以下关于数组的描述中, 正确的有 :( ) 数组名实质上是数组的首地址, 是一个常量, 不能对其赋值 在定义数组时, 有时可以将该数组的维数省略 一个一维数组, 它的每一个元素也是类型相同的一维数组时, 便构成二维数组 如有定义 int a[3][4]=0; 则数组 a 的所有元素初值均为 0 可以通过数组名来整体引用一个数组BCD 5 以下关于数组的描述中, 错误的有 :( ) 如有定义 int a[2][3]; 则数组 a 的最后一个元素为 a[1][2] 一个一维数组, 它的每一个元素也是类型相同的一维数组时, 便构成二维数组 若有说明 :static int a[3][3]; 那么数组 a 中每个元素初值为 0 在定义二维数组时, 可以将该数组的两个维数全部省略 如有定义 char a[20]; 则可以通过 a="i am a boy"; 给 a 赋值E 6 若有说明 :int a[][4]=0,0;, 则下面正确的叙述有 :( ) 数组 a 的每个元素都可得到初值 0 二维数组 a 的第一维大小为 1 因为二维数组 a 中初值的个数不能被第二维大小的值整除, 则第一维的大小等于所得商数再加 1,
故数组 a 的行数为 1 只有元素 a[0][0] 和 a[0][1] 可得到初值 0, 其余元素均得不到初值 只有元素 a[1][1] 和 a[1][2] 可得到初值 0, 其余元素均得不到初值BC 7 以下关于数组的描述中, 正确的有 :( ) 若有定义 char a[]="hello";, 则数组 a 的长度为 6 有定义 char a[3]; 则定义了 a[1] a[2] a[3] 三个数组元素 构成字符数组的各个元素必须是字符类型的数据 可以通过数组名来整体引用一个数组 设有数组定义 char array [ ]="China"; 则数组 array 所占的空间为 5 个字节C 8 以下关于数组的描述中, 正确的有 :( ) 在 C 语言中, 允许用字符串来直接初始化字符数组 若有定义 char a[20];, 则可以通过 a="i am a boy"; 给 a 赋值 若有 char a[10]=1,2,3;, 则是将 3 个初值依次赋给 a[1] 至 a[3] 构成字符数组的各个元素必须是字符类型的数据 数组名实质上是数组的首地址, 是一个常量, 不能对其赋值DE 9 以下关于数组的描述中, 错误的有 :( ) 字符数组的输出不能一次性的整体输出 若有 char a[10]=1,2,3;, 则是将 3 个初值依次赋给 a[0] 至 a[2] 构成字符数组的各个元素可以是不同数据类型的元素 构成字符数组的各个元素必须是字符类型的数据 若有定义 char b[]="hello";, 则数组 b 的长度为 6 C 10 下列语句中, 正确的有 :( ) char str[5]="hello"; char str[]='h','e','l','l','o','\0'; char str[5]="hi"; char str[100]=""; char str[3]="this"; CD 11 函数调用 strcat(strcpy(str1,str2),str3) 的功能, 以下说法错误的有 :( ) 将串 str1 复制到串 str2 中后在连接到串 str3 之后 将串 str1 连接到串 str2 之后再复制到串 str3 之后 将串 str2 复制到串 str1 中后再将串 str3 连接到串 str1 之后 将串 str2 连接到串 str1 中后再将串 str1 复制到串 str3 中 将串 str2 连接到串 str1 中后再将串 str3 复制到串 str1 中BDE 12 以下关于数组的描述中, 正确的有 :( ) 在定义数组时, 有时可以将该数组的维数省略数组元素可以像普通变量一样使用若有 int a[10]=6,7,8,9,10;, 则是将 5 个初值依次赋给 a[0] 至 a[4] 如有定义 char a[]="student"; 则数组 a 的长度为 7 若有定义 double x[3][5]; 则 x 数组中行下标的下限为 0, 列小标的上限为 4 BCE 13 定义了一维 int 型数组 a[10] 后, 下面正确的引用有 :( )
a[0]=1; a[10]=2; a[0]=5*2; a[1]=a[2]*a[0]; a[2]=a[1]+a[0]; CDE 第 8 章函数 一 选择题 1. 若调用一个函数, 且此函数中没有 RERUrn 语句, 则关于该函数正确的说法是 :( ) A. 没有返回值 B. 返回若干个系统默认值 C. 能返回一个用户所希望的函数值 D. 返回一个不确定的值 2. 在 c 语言中以下不正确的说法是 :( ) A. 实参可以是常量 变量 或表达式 B. 形参可以是常量 变量或表达式 C. 实参可以为任意类型 D. 形参应与其对应的实参类型一致 3. 以下程序有语法性错误, 有关错误原因的正确说法是 :( ) int G=5,k; void prt_char(); k=prt_char(g); A. 语句 void prt_char(); 有错, 它是函数调用语句, 不能用 void 说明 B. 变量名不能使用大写字母 C. 函数说明和函数调用语句之间有矛盾 D. 函数名不能使用下划线 4. 以下正确的说法是 :( ) A. 函数的定义可以嵌套, 但函数的调用不可以嵌套 B. 函数的定义不可以嵌套, 但函数的调用可嵌套 C. 函数的定义和调用均不可以嵌套 D. 函数的定义和调用均可以嵌套 5. 若使用一个数组名作函数实参, 则以下正确的说法是 :( ) A. 必须在主调函数中说明此数组的大小 B. 实参数组类型与形参数组类型可以不匹配 C. 在被调用函数中, 不需要考虑形参数组的大小
D. 实参数组名与形参数组名必须一致 6. 在一个函数内部定义的变量是 :( ) A 简单变量 B 局部变量 C 全局变量 D 标准变量 7. 若已定义的函数有返回值, 则以下关于该函数调用的叙述中错误的是 :( ) A) 函数调用可以作为独立的语句存在 B) 函数调用可以作为一个函数的实参 C) 函数调用可以出现在表达式中 D) 函数调用可以作为一个函数的形参 8. 已定义以下函数 fun(int*p) return *p; 该函数的返回值是 :( ) A) 不确定的值 B) 形参 p 中存放的值 C) 形参 p 所指存储单元中的值 D) 形参 p 的地址值 9. 以下所列的各函数首部中, 正确的是 :( ) A void play(var :Integer,var b:integer) B void play(int a,b) C void play(int a,int b) D Sub play(a as integer,b as integer) 10. 当调用函数时, 实参是一个数组名, 则向函数传送的是 :( ) A 数组的长度 B 数组的首地址 C 数组每一个元素的地址 D 数组每个元素中的值 11. 在调用函数时, 如果实参是简单变量, 它与对应形参之间的数据传递方式是 :( ) A 地址传递 B 单向值传递 C 由实参传给形参, 再由形参传回实参 D 传递方式由用户指定 12. 以下函数值的类型是 :( ) fun ( float x ) float y; y= 3*x-4; return y; A int B 不确定 C void D float 13. 下列函数的功能是 :( ) int fun1(chat* x) char *y=x; while(*y++); return(y-x-1);
A) 求字符串的长度 B 比较两个字符串的大小 C 将字符串 X 复制到字符串 Y D 将字符串 X 连接到字符串 Y 后面 14. 下面程序的输出结果是 :( ) void prty(int * x) printf("%d\n",++*x); int a=25; prtv(&a); A 23 B 24 C 25 D 26 15. 以下对 C 语言函数的有关描述中, 正确的是 :( ) A 只能把实参的值传送给形参, 形参的值不能传送给实参 B C 函数既可以嵌套定义又可以递归调用 C 函数必须有返回值, 否则不能使用函数 D C 程序中所有函数都可以嵌套调用 16. 以下叙述中不正确的是 :( ) A) 在 C 中, 函数体中定义的动态变量可以赋初值, 每调用一次, 赋一次初值. B 在 C 中, 函数体中定义的静态变量可以赋初值, 每调用一次, 赋一次初值. C 在 C 中, 局部变量的隐含类别是自动存储类别. D) 在 C 中, 在调用函数时, 实在参数和对应形参在类型上只需赋值兼容. 17. 以下叙述中不正确的是 :( ) A) 在不同的函数中可以使用相同名字的变量 B) 函数中的形式参数是局部变量 C) 在一个函数内定义的变量只在本函数范围内有效 D) 在一个函数内的复合语句中定义的变量在本函数范围内有效 18. 有以下程序 void fun (int a,int b,int c) a=456; b=567; c=678; int x=10, y=20,z=30; fun (x,y,z); printf("%d,/%d,%d\n",x,y,z); 输出结果是 :( ) A 30,20,10 B 10,20,30 C 456,567,678 D 678,567,456 19. 有以下程序 ( ) int fun(int x,int y,int *cp,int *dp) *cp=x+y; *dp=x-y; int a, b, c, d; a=30; b=50; fun(a,b,&c,&d);
printf("%d,%d\n", c, d); 输出结果是 :( ) A 50,30 B 30,J50 C 80,-20 D 80,20 20. 下列程序执行后的输出结果是 ( ) void func(int *a,int b[]) b[0]=*a+6; int a,b[5]; a=0; b[0]=3; func(&a,b); printf( %d \n,b[0]); A 6 B 7 C 8 D 9 21. 一个完整的可运行的 C 源程序中,( ) A 可以有一个或多个函数 B 必须有且仅有一个主函数 C 可以没有主函数 D 必须有主函数和其他函数 22. 下述函数定义形式正确的是 ( ) A int f(int x; int y) B int f(int x,y) C int f(int x, int y) D int f(x,y: int) 23. 关于函数参数, 说法正确的是 ( ) A 实参与其对应的形参各自占用独立的内存单元 B 实参与其对应的形参共同占用一个内存单元 C 只有当实参和形参同名时才占用同一个内存单元 D 形参是虚拟的, 不占用内存单元 24. 一个函数的返回值由 ( ) 确定 A return 语句中的表达式 B 调用函数的类型 C 系统默认的类型 D 被调用函数的类型 25. 以下叙述中正确的是 ( ) A C 语言程序总是从第一个定义的函数开始执行 B 在 C 语言程序中, 要调用的函数必须在 函数中定义 C C 语言程序总是从 函数开始执行 D C 语言程序中的 函数必须放在程序的开始部分 26. 以下函数 fff(float x) printf( %d\n,x*x);
的类型是 ( ) A 与参数 x 的类型相同 B void 类型 C int 类型 D 无法确定 27. 以下对 C 语言函数的描述中, 正确的是 ( ) A C 程序由一个或一个以上的函数组成 B C 函数既可以嵌套定义又可以递归调用 C 函数必须有返回值, 否则不能使用函数 D C 程序中调用关系的所有函数必须放在同一个程序文件中 28. 以下叙述中不正确的是 ( ) A 在 C 语言中, 调用函数时, 只能把实参的值传送给形参, 形参的值不能传送给实参 B 在 C 的函数中, 最好使用全局变量 C 在 C 语言中, 形式参数只是局限于所在函数 D 在 C 语言中, 函数名的存储类别为外部 29. 在一个源文件中定义的外部变量的作用域为 ( ) A 本文件的全部范围 B 本程序的全部范围 C 本函数的全部范围 D 定义该变量的位置开始至本文件结束 30. 有以下函数调用语句 : func((exp1,exp2),(exp3,exp4,exp5)); 其中含有的实参个数和是 ( ) A 1 B 2 C 4 D 5 31. C 语言中形参的默认存储类别是 ( ) A 自动 (auto) B 静态 (static) C 寄存器 (register) D 外部 (extern) 32. 以下正确的函数形式是 ( ) A double fun(int x,int y) z=x+y; return z; B fun(int x,y) int z; return z; C fun(x,y) int x,y; double z; z=x+y; return z; D double fun(int x,int y) double z; z=x+y; return z; 33. 在一个源程序文件中定义的全局变量的有效范围为 ( ) A 一个 C 程序的所有源程序文件 B 该源程序文件的全部范围 C 从定义处开始到该源程序文件结束 D 函数内全部范围
34. 下列函数中, 能够从键盘上获得一个字符数据的函数是 ( ) A puts( ) B putchar( ) C getchar( ) D gets( ) 35. 以下程序的输出结果是 ( ) fun(int a,int b,int c) c=a+b; int c; fun(2,3,c); printf( %d\n,c); A 2 B 3 C 5 D 无定值 36. 分析以下程序的运行结果 ( ) func(int a,int b) int temp=a; a=b; b=temp; int x,y; x=10; y=20; func(x,y); printf(( %d,%d\n,x,y); A 10,20 B 10,10 C 20,10 D 20,20 37. 下面程序的输出是 ( ) fun(int x) static int a=3; a+=x; return(a); int k=2,m=1,n; n=fun(k); n=fun(m); printf( %d,n);
A 3 B 4 C 6 D 9 38. 以下程序输出的结果是 ( ) int func(int a,int b) return(a+b); int x=2,y=5,z=8,r; r=func(func(x,y),z); printf( %d\n,r); A 12 B 13 C 14 D 15 39. 以下程序的输出结果是 ( ) int a,b void fun() a=100; b=200; int a=5,b =7; fun(); printf( %d%d \n,a,b); A 100200 B 57 C 200100 D 75 40. 以下程序的输出结果是 ( ) int x=3; int i; for(i=1;i<x;i++) incre(); incre() static int x=1; x*=x+1; printf( %d,x); A 33 B 22 C 26 D 25
二 判断题 1 ( F ) 函数定义 void max(int a,int b) 表示该函数的返回值不确定 2 ( T ) 在 C 语言中, 函数体中变量的隐含存储类别是自动变量 auto 3 ( F )return 语句作为函数的出口, 在一个函数体内只能有一个 4 ( T ) 在 C 程序中, 函数不能嵌套定义, 但可以嵌套调用 5 ( F ) C 语言的源程序中必须包含库函数 6 ( F ) 在 C 程序中, 函数调用不能出现在表达式语句中 7 ( F ) 在 C 函数中, 形参可以是变量 常量或表达式 8 ( F ) 在主函数 main( ) 中定义的变量都可以在其它被调函数中直接使用 9 ( T ) 在 C 语言中, 一个函数一般由两个部分组成, 它们是函数说明和函数体 10 ( F )C 语言程序中的 main( ) 函数必须放在程序的开始部分 11 ( F ) 若定义的函数没有参数, 则函数名后的圆括号可以省略 12 ( T ) 函数的函数体可以是空语句 13 ( T ) 函数的实参和形参可以是相同的名字 14 ( T ) 函数调用中, 形参与实参的类型和个数必须保持一致 15 ( F )C 语言中函数返回值的类型由 return 语句中的表达式的类型决定 16 ( T ) 外部类型的变量只能定义一次, 但可在不同地方声明多次 17 ( F ) 外部类型的变量作用范围大, 编程中应多用外部变量 三 多选题 1. 以下叙述中正确的有 ( ) 一个 C 语言程序有且仅有一个 main 函数 C 语言程序中,main 函数是没有参数的 一个函数通过其他函数间接的调用了自身, 这种情况也是一种递归调用 main 函数是由系统调用的 若要通过函数参数带回多个返回值, 则应使用按地址传送的参数结合方式 CDE 2. 下面叙述中, 正确的有 ( ) 函数的定义不能嵌套, 但函数调用可以嵌套 为了提高可读性, 编写程序时应该适当使用注释 变量定义时若省去了存储类型, 系统将默认其为静态型变量 函数中定义的局部变量的作用域在函数内部 函数必须有返回值, 否则不能使用函数 BD 3. 以下不正确的说法有 ( ) 定义函数时, 形参的类型说明可以放在函数体内 return 后边的值不能为表达式 函数返回值的类型可能会与函数的计算结果类型不一致 在不同的函数中可以使用相同名字的变量 如果形参与实参的类型顺序不一致, 以实参顺序为准 BE 4. 以下叙述中, 正确的描述是有 ( ) 函数之内定义的变量称为内部变量, 内部变量是全局变量 在一个函数中既可以使用本函数中的局部变量, 又可以使用外部变量 外部变量定义和外部变量说明的含义不同 外部变量与局部变量的作用范围不同
在 C 的函数中, 最好使用全局变量CD 5. 以下正确的说法有 ( ) C 语言程序的基本组成单位是函数函数必须要有返回值一个函数的类型为 void, 在定义时, 可以省略 void 函数声明是一条 C 语句 return 语句只能返回一个值DE 6. 以下叙述中正确的有 ( ) 调用函数时, 只能把实参的值传送给形参, 形参的值不能传送给实参函数的实参可以是常量 变量和表达式形式参数只是局限于所在函数函数定义时的函数首部不是语句, 后面不能跟分号函数名的存储类别为外部BCDE 7. 以下对 C 语言函数的有关描述中, 正确的有 ( ) 调用函数时, 实参与形参应该数量相同, 类型一致函数可以嵌套定义函数必须有返回值, 否则不能正确使用程序中有调用关系的所有函数必须放在同一个源程序文件中 C 程序由一个或一个以上的函数组成E 8. 以下对 C 语言函数的有关描述中, 正确的有 ( ) 在 C 程序中, 函数调用不能出现在表达式语句中在 C 语言中, 一个函数一般由两个部分组成, 它们是函数说明和函数体函数的实参和形参可以是相同的名字在 中定义的变量都可以在其它被调函数中直接使用外部类型的变量只能定义一次, 但可在不同地方声明多次CE 9. 一个数据类型为 void 的函数在被调用后, 下列错误的描述有 ( ) A 函数没有返回值 B 函数可以返回一个系统默认值 C 函数返回值由用户临时决定 D 函数可以返回一个不确定的值CD 10. 下列函数中, 能够输出字符数据的函数有 ( ) A puts( ) B printf( ) C scanf( ) D putchar( ) E put( ) BD 第 9 章 编译预处理 一 选择题 1 若有宏定义 #define PI =3.14159, 且在程序中有语句 s +PI; 其中宏名 PI 代替的是 :( ) A PI 的值 B 3.14159 C =3.14159 D 宏定义错误, 编译通不过
2 设有以下宏定义:#define N 3 #define Y(n) ((N+1)*n) 执行语句 z=2*(n+y(5+1)); 后,z 的值为 :( ) A 出错 B 42 C 48 D 54 3 以下说法正确的是:( ) A #define 和 printf 都是 C 语句 B #define 是 C 语句, 而 printf 不是 C printf 是 C 语句, 但 #define 不是 D #define 和 printf 都不是 C 语句 4 编译预处理命令以 结尾 A ; B. C \ D 回车 5 用 C 语言编写的程序是一种 能运行的程序 A 只需要经过编译就 B 只需要经过连接就 C 需要经过编译和连接才 D 不需要作任何处理就 6 以下叙述中正确的是( ) A 用 #include 包含的头文件的后缀不可以是.a B 若一些源程序中包含某个头文件, 当该头文件有错时, 只需对该头文件进行修改, 包含此头文件的所有源程序不必重新进行编译 C 宏命令行可以看做是一行 C 语句 D C 编译中的预处理是在编译之前进行的 7 下面是对宏定义的描述, 不正确的是 ( ) A 宏不存在类型问题, 宏名无类型, 它的参数也无类型 B 宏替换不占用运行时间 C 宏替换时先求出实参表达式的值, 然后代入形参运算求值 D 其实, 宏替换只不过是字符替代而已 8 以下正确的描述为( ) A 每个 C 语言程序必须在开头使用预处理命令 #include <stdio.h> B 预处理命令必须位于 C 源程序的首部 C 在 C 语言中预处理命令都以 # 开头 D C 语言的预处理命令只能实现宏定义和条件编译的功能 9 下列选项中不会引起二义性的宏定义是( ) A #define POWER(x) x*x B #define POWER(x) (x)*(x) C #define POWER(x) (x*x) D #define POWER(x) ((x)*(x)) 10 以下程序的输出结果是( ) #define f(x) x*x #include <stdio.h>
int a=6,b=2,c; c=f(a)/f(b); printf( %d\n,c); A 9 B 6 C 36 D 18 11 以下程序运行后, 输出结果是 ( ) #define PT 5.5 #defme S(x) PT*x*x #include <stdio.h> int a=1,b=2; printf( %4.1f\n,S(a+b)); A 49.5 B 9.5 C 22.0 D 45.0 12 下列程序执行后的输出结果是( ) #define MA(x) x*(x-1) #include <stdio.h> int a=1,b=2; printf( %d\n,ma(1+a+b)); A 6 B 8 C 10 D 12 13 以下程序的输出结果为( ) #include <stdio.h> #define SQR(x) x*x int a,k=3; a=++sqr(k+1); printf( %d\n,a); A 6 B l0 C 8 D 9 14 对下面程序段, 正确的判断是 ( ) #define A 3 #define B(a) ((A+1)*a)... x=3*(a+b(7)); A 程序错误, 不许嵌套宏定义 B x=93 C x=21 D 程序错误, 宏定义不许有参数.
15 以下程序的输出结果为( ) #include <stdio.h> #define F(y) 3.84+y #define PRINT(a) PR(a);putchar( \n ) int x=2; PRINT(F(3)*x); A 8 B 9 C 10 D 11 二 判断题 1 ( F ) 预处理命令行必须以 # 开头, 且最后要用分号结尾 2 ( T ) 宏命令的处理占用编译时间, 而不占用运行时间 三 多选题 1 下面是对宏定义的描述, 正确的有 ( ) A 宏不存在类型问题, 宏名无类型, 它的参数也无类型 B 宏替换不占用运行时间 C 宏替换时先求出实参表达式的值, 然后代入形参运算求值 D 预处理命令行必须以 # 开头, 且最后要用分号结尾 E 宏命令的处理占用编译时间, 而不占用运行时间BE 2 以下叙述中不正确的是 ( ) A 用 #include 包含的头文件的后缀不可以是.a B 宏不存在类型问题, 宏名无类型, 它的参数也无类型 C 宏命令行可以看做是一行 C 语句 D C 编译中的预处理是在编译之前进行的 E 在 C 语言中预处理命令都以 # 开头C 第 10 章 指针 一 选择题 1 有以下程序 void fun(char *a, char *b) a=b; (*a)++; char c1='a',c2='a',*p1,*p2; p1=&c1; p2=&c2; fun(p1,p2); printf("%c%c\n",c1,c2); 程序运行后的输出结果是 :( ) A)Ab B)aa C)Aa D)Bb
2 下列选项中正确的语句组是 :( ) A)char s[8]; s="beijing"; C)char s[8]; s="beijing"; 3 已定义以下函数 fun(int *p) return *p; B)char *s; s="beijing"; D)char *s; s="beijing"; 该函数的返回值是 :( ) A) 不确定的值 B) 形参 p 中存放的值 C) 形参 p 所指存储单元中的值 D) 形参 p 的地址值 4 若有定义 :int *p[3];, 则以下叙述中正确的是 :( ) A) 定义了一个类型为 int 的指针变量 p, 该变量具有三个指针 B) 定义了一个指针数组 p, 该数组含有三个元素, 每个元素都是基类型为 int 的指针 C) 定义了一个名为 *p 的整型数组, 该数组含有三个 int 类型元素 D) 定义了一个可指向一维数组的指针变量 p, 所指一维数组应具有三个 int 类型元素 5 已定义以下函数 fun(char *p2, char *p1) while((*p2=*p1)!='\0') p1++;p2++; 函数的功能是 :( ) A) 将 p1 所指字符串复制到 p2 所指内存空间 B) 将 p1 所指字符串的地址赋给指针 p2 C) 对 p1 和 p2 两个指针所指字符串进行比较 D) 检查 p1 和 p2 两个指针所指字符串中是否有 '\0' 6 有以下程序 : int p[7]=11,13,14,15,16,17,18,i=0,k=0; while(i<7&&*(p+i)%2) k=k+*(p+i); i++; printf("%d\n",k); 执行后输出的结果是 :( ) A) 58 B) 56 C) 45 D) 24 7 若有如下定义 char a[10],*p=a, 则对 a 数组中元素的不正确的引用是 :( ) A)*&a[5] B)a+2 C)*(p+5) D)*(a+5) 8 有以下程序 int *f(int *x,int *y) if(*x<*y)
return x; else return y; int a=7,b=8,*p,*q,*r; p=&a; q=&b; r=f(p,q); printf("%d,%d,%d\n",*p,*q,*r); 执行后输出结果是 :( ) A) 7,8,8 B) 7,8,7 C) 8,7,7 D) 8,7,8 9 有以下程序 char *s[]="one","two","three",*p; p=s[1]; printf("%c,%s\n",*(p+1),s[0]); 执行后输出结果是 :( ) A) n,two B) t,one C) w,one D) o,two 10 有以下程序 int x[8]=8,7,6,5,0,0, *s; s=x+3; printf("%d\n",s[2]); 执行后输出结果是 :( ) A) 随机值 B) 0 C) 5 D) 6 11 以下函数的功能是 : 通过键盘输入数据, 为数组中的所有元素赋值 #define N 10 void arrin(int x[n]) int i=0; while(i<n) scanf("%d", ); 在下划线处应填入的是 :( ) A) x+i B) &x[i+1] C) x+(i++) D) &x[++i] 12 有以下程序 char *s="\n123\\"; printf("%d,%d\n",strlen(s),sizeof(s));
执行后输出结果是 :( ) A) 5,4 B) 5,6 C) 6,7 D) 7,8 13 阅读以下函数 fun(char *sl,char *s2) int i=0; while( sl[i]==s2[i] && s2[i]!='\0') i++; return( sl[i]=='\0' && s2[i]=='\0' ); 此函数的功能是 :( ) A) 将 s2 所指字符串赋给 s1 B) 比较 s1 和 s2 所指字符串的大小, 若 s1 比 s2 的大, 函数值为 1, 否则函数值为 0 C) 比较 s1 和 s2 所指字符串是否相等, 若相等, 函数值为 1, 否则函数值为 0 D) 比较 s1 和 s2 所指字符串的长度, 若 s1 比 s2 的长, 函数值为 1, 否则函数值为 0 14 有以下程序 char str[ ]="xyz",*ps=str; while(*ps) ps++; for(ps--;ps-str>=0;ps--) puts(ps); 执行后输出结果是 :( ) A) yz B) z C) z D) x xyz yz yz xy xyz xyz 15 有以下程序 void fun(int *a,int i,int j) int t; if (i<j) t=a[i];a[i]=a[j];a[j]=t; fun(a,++i,--j); int a[]=1,2,3,4,5,6,i; fun(a,0,5); for(i=0;i<6;i++) rintf("%d",a[i]); 执行后输出结果是 :( ) A) 6 5 4 3 2 1 B) 4 3 2 1 5 6 C) 4 5 6 1 2 3 D) 1 2 3 4 5 6 16 下列程序的输出结果是 :( )
char a[10]=9,8,7,6,5,4,3,2,1,0,*p=a+5; printf("%d",*--p); A) 非法 B)a[4] 的地址 C)5 D)3 17 下列程序的运行结果是 :( ) void fun(int *a, int *b) int *k; k=a; a=b; b=k; int a=3, b=6, *x=&a, *y=&b; fun(x,y); printf("%d %d", a, b); A) 6 3 B) 3 6 C) 0 0 D) 编译出错 18 下面程序的输出结果是 :( ) int a[ ]=1,2,3,4,5,6,7,8,9,0,,*p; p=a; printf("%d\n",*p+9); A) 0 B) 1 C) 10 D) 9 19 以下程序的输出结果是 :( ) int i, x[3][3]=1,2,3,4,5,6,7,8,9; for(i=0;i<3;i++) printf("%d,",x[i][2-i]); A) 1,5,9 B) 1,4,7 C) 3,5,7 D)3,6,9 20 以下程序的输出结果是 :( ) int a[3][3]= 1,2,3,4,5,6,i,j,s=0; for(i=1;i<3;i++) for(j=0;j<=i;j++) s+=a[i][j]; printf("%d\n",s); A) 18 B) 19 C) 20 D)21
21 若有说明 :int i, j=2,*p=&i;, 则能完成 i=j 赋值功能的语句是 :( ) A) i = *p; B) *p = *&j; C) i = &j; D) i = **p; 22 以下定义语句中, 错误的是 :( ) A) int a[]=1,2; B) char *a[3]; C) char s[10]="test"; D) int n=5,a[n]; 23 以下程序的输出结果是 :( ) char cchar(char ch) if(ch>='a'&&ch<='z') ch=ch-'a'+'a'; return ch; char s[]="abc+abc=defdef",*p=s; while(*p) *p=cchar(*p); p++; printf("%s\n",s); A) abc+abc=defdef B) abc+abc=defdef C) abcaabcdefdef D) abcabcdefdef 24 以下程序段的输出结果是 :( ) char s[]="\\141\141abc\t"; printf ("%d\n",strlen(s)); A) 9 B) 12 C) 13 D) 14 25 以下程序调用 findmax 函数返回数组中的最大值 findmax(int *a,int n) int *p,*s; for(p=a,s=a; p-a<n; p++) if ( ) s=p; return(*s); int x[5]=12,21,13,6,18; printf("%d\n",findmax(x,5)); 在下划线处应填入的是 :( ) A) p>s B) *p>*s C) a[p]>a[s] D) p-a>p-s
26 以下程序的输出结果是 :( ) char cf[3][5]="aaaa","bbb","cc"; printf("\"%s\"\n",ch[1]); A) "AAAA" B) "BBB" C) "BBBCC" D) "CC" 27 以下不能正确进行字符串赋初值的语句是 :( ) A) char str[5]="good!"; B) char str[]="good!"; C) char *str="good!"; D) char str[5]='g','o','o','d'; 28 以下程序的输出结果是 :( ) f(int *b, int m, int n) int i,s=0; for(i=m;i<n;i=i+2) s=s+*(b+i); return s; int x,a[]=1,2,3,4,5,6,7,8,9; x=f(a,3,7); printf("%d\n",x); A) 10 B)18 C) 8 D) 15 29 以下程序的输出结果是 :( ) #include <stdio.h> #include <string.h> char b1[8]="abcdefg",b2[8],*pb=b1+3; while (--pb>=b1) strcpy(b2,pb); printf("%d\n",strlen(b2)); A) 8 B) 3 C) 1 D) 7 30 若有说明 :int n=2,*p=&n,*q=p;, 则以下非法的赋值语句是 :( ) A) p=q; B) *p=*q; C) n=*q; D) p=n; 31 有以下程序 void fun(char *c,intd) *c=*c+1;d=d+1;
printf("%c,%c,",*c,d); char a='a',b='a'; fun(&b,a); printf("%c,%c\n",a,b); 程序运行后的输出结果是 :( ) A) B,a,B,a B) a,b,a,b C) A,b,A,b D) b,b,a,b 32 以下程序中函数 sort 的功能是对 a 所指数组中的数据进行由大到小的排序, void sort(int a[],int n) int i,j,t; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(a[i]<a[j]) t=a[i];a[i]=a[j];a[j]=t; int aa[10]=1,2,3,4,5,6,7,8,9,10,i; sort(&aa[3],5); for(i=0;i<10;i++) printf("%d,",aa[i]); printf("\n"); 程序运行后的输出结果是 :( ) A) 1,2,3,4,5,6,7,8,9,10, B) 10,9,8,7,6,5,4,3,2,1, C) 1,2,3,8,7,6,5,4,9,10, D) 1,2,10,9,8,7,6,5,4,3, 33 有以下程序 char a[]='a','b','c','d','e','f','g','h','\0'; int i,j; i=sizeof(a); j=strlen(a); printf("%d,%d\n",i,j); 程序运行后的输出结果是 :( ) A) 9,9 B) 8,9 C) 1,8 D) 9,8 34 以下程序中的函数 reverse 的功能是将 a 所指数组中的内容进行逆置 void reverse(int a[],int n) int i,t; for(i=0;i<n/2;i++) t=a[i];a[i]=a[n-1-i];a[n-1-i]=t; int b[10]=1,2,3,4,5,6,7,8,9,10; int i,s=0;
reverse(b,8); for(i=6;i<10;i++) s+=b[i]; printf("%d\n",s); 程序运行后的输出结果是 :( ) A) 22 B) 10 C) 34 D) 30 35 有以下程序 int aa[4][4]=1,2,3,4,5,6,7,8,3,9,10,2,4,2,9,6; int i,s=0; for(i=0;i<4;i++) s+=aa[i][1]; printf("%d\n",s); 程序运行后的输出结果是 :( ) A) 11 B) 19 C) 13 D) 20 36 有以下程序 #include <string.h> char *p="abcde\0fghjik\0"; printf("%d\n",strlen(p)); 程序运行后的输出结果是 :( ) A) 12 B) 15 C) 6 D) 5 37 有以下程序 void ss(char *s,char t) while(*s) if(*s==t) *s=t-'a'+'a'; s++; char str1[100]="abcddfefdbd",c='d'; ss(str1, C); printf("%s\n",str1); 程序运行后的输出结果是 :( ) A) ABCDDEFEDBD B) abcddfefdbd C) abcaafefaba D) Abcddfefdbd 38. 变量的指针, 其含义是指该变量的. a) 值 b) 地址 c) 名 d) 一个标志
39. 若有语句 int *point,a=4; 和 point=&a; 下面均代表地址的一组选项是. a)a,point,*&a b)&*a,&a,*point c)*&point,*point,&a d)&a,&*point,point 40. 若有说明 ;int *p,m=5,n; 以下正确的程序段的是. a)p=&n; b)p=&n; scanf("%d",&p); scanf("%d",*p); c)scanf("%d",&n); d)p=&n; *p=n; *p=m; 答案 : D 41. 下面程序段的运行结果是. char *s="abcde"; s+=2;printf("%d",s); a)cde b) 字符 'c' c) 字符 'c' 的地址 d) 无确定的输出结果 42. 设 p1 和 p2 是指向同一个字符串的指针变量,c 为字符变量, 则以下不能正确 执行的赋值语句是. a)c=*p1+*p2; b)p2=c c)p1=p2 d)c=*p1*(*p2); 43. 以下正确的程序段是. a)char str[20]; scanf("%s", str); c)char str[20]; scanf("%s",&str[2]); b)char *p; scanf("%s",p); d)char str[20],*p=str; scanf("%s",p[2]); 44. 若有说明语句 char a[]="it is mine"; char *p="it is mine"; 则以下不正确的叙述是. a)a+1 表示的是字符 t 的地址 b)p 指向另外的字符串时, 字符串的长度不受限制 c)p 变量中存放的地址值可以改变 d)a 中只能存放 10 个字符 45. 下面程序的运行结果是. #include <stdio.h> #include <string.h>
char *s1="abdeg"; char *s2="abdeg"; s1+=2;s2+=2; printf("%d\n",strcmp(s1,s2)); a) 正数 b) 负数 c) 零 d) 不确定的值 答案 : B 46. 下面程序的运行结果是. #include <stdio.h> #include <string.h> fun(char *w,int n) char t,*s1,*s2; s1=w;s2=w+n-1; while(s1<s2)t=*s1++;*s1=*s2--;*s2=t; char *p; p="1234567"; fun(p,strlen(p)); puts(p); a)7654321 b)1714171 c)1711717 d)7177171 47. 若有以下定义, 则对 a 数组元素的正确引用是. int a[5],*p=a; a)*&a[5] b)a+2 c)*(p+5) d)*(a+2) 48. 若有定义 :int a[2][3], 则对 a 数组的第 i 行 j 列元素地址的正确引用为 a)*(a[i]+j) b)(a+i) c)*(a+j) d)a[i]+j 49. 若有以下定义, 则 p+5 表示. int a[10],*p=a; a) 元素 a[5] 的地址 b) 元素 a[5] 的值 c) 元素 a[6] 的地址 d) 元素 a[6] 的值 50. 以下程序的输出结果是. #include <stdio.h> void fun(int x); int int x = 3; fun(x);
printf( x = %d\n, x); void fun(int x) x = 5; A) 3 B) 5 C) 8 D) 2 51. 以下程序的输出结果是. #include <stdio.h> void fun(int *p); int int x = 3; fun(&x); printf( x = %d\n, x); void fun(int *p) *p = 5; A) 3 B) 5 C) 8 D) 2 52. 以下 count 函数的功能是统计 substr 在母串 str 中出现的次数 int count(char *str,char *substr) int i,j,k,num=0; for(i=0; 1 ;i++) for( 2,k=0;substr[k]==str[j];k++,j++) if(substr[ 3 ]== \0 ) num++;break; return num; 1 A) str[i]==substr[i] B) str[i]!= \0 C) str[i]== \0 D) str[i]>substr[i] 2 A) j=i+1 B) j=i C) j=i+10 D) j=1 3 A) k B) k++ C) k+1 D) ++k 53. 以下 Delblank 函数的功能是删除字符串 s 中的所有空格 ( 包括 Tab 回车符和换行符 ) void Delblank(char *s)
int i,t; char c[80]; for(i=0,t=0; 1 ;i++) if(!isspace( 2 ))c[t++]=s[i]; c[t]= \0 ; strcpy(s,c); 1 A) s[i] B)!s[i] C) s[i]= \0 D) s[i]== \0 2 A) s+i B) *c[i] C) *(s+i)= \0 D) *(s+i) 54. 以下 conj 函数的功能是将两个字符串 s 和 t 连接起来 char *conj(char *s,char *t) char *p=s; while(*s) 1 ; while(*t) *s= 2 ;s++;t++; *s= \0 ; 3 ; 1 A) s-- B) s++ C) s D) *s 2 A) *t B) t C) t-- D) *t++ 3 A) return s B) return t C) return p D) return p-t 55. 下列程序的输出结果是 #include <stdio.h> int **k,*a,b=100;a=&b; k=&a;printf( %d\n,**k); A) 运行出错 B) 100 C) a 的地址 D) b 的地址 56. 下列程序的输出结果是 #include <stdio.h> fun(int *a,int *b) int *w;*a=*a+*a;*w=*a; *a=*b; *b=*w; int x=9,y=5,*px=&x,*py=&y;fun(px,py);printf( %d, %d\n,x,y); A) 出错 B) 18, 5 C) 5, 9 D) 5, 18 57. 若定义了以下函数 : void f( ) p=(double *)malloc(10*sizeof(double));
p 是该函数的形参, 要求通过 p 把动态分配存储单元的地址传回主调函数, 则形参 p 的正确定义应当 是 A) double *p B) float **p C) double **p D) float *p 二 判断题 1.(F) 指针变量里存放的是地址值, 因此指针变量只能是 int 型的 2.(T) 在 C 语言中, 所谓指针型数据, 即指该数据是一个地址 3.(T) 有一个一维数组 a[10], 那么 a 与 &a[0] 等价 4.(F) 如有说明 :int b[10], *p = b; 表明在使用时 b 与 p 就完全等价了 5.(T) 数组中的每一个元素相当于一个变量 若要让一个指针变量指向它, 必须用 & 数组元素 的方法 向该指针变量赋值 6.(F) 有如下程序段 :int i, j = 2, k, *p = &i;k = *p + j; 这里出现的两个 * 号, 含义是一样的 7.(F) 在 C 语言中, 每一个变量在内存里占用的单元数都是相同的 8.(T) 通过指针变量, 就能间接地得到它所指向的变量的内容 9.(T) 说明语句 :int *p, p1, p2; 只说明了一个能指向 int 型变量的指针 10.(F) 有说明 :int *p; 且 p 指向地址为 1500 的内存单元, 那么经过操作 p++; 后,p 将指向 1501 的 内存单元 11.(F) 数组元素可以是不同数据类型的 12.(F) 如果初值表中的初值个数少于数组长度, 那么 C 语言编译程序会自动把剩余的元素初始化为初值 表中的最后一个值 13. 主调函数把单个数组元素传递给修改该元素值的被调函数时, 主调函数就能够得到修改后的值 (F) 14.(T) 设 p 是指向数组 a 的指针变量, 则 a[i] 和 p[i] 等价 15.(T) 一个变量的指针就是该变量的地址 16.(F) 若定义 int **p; 则程序中调用 *p 时, 它代表的是 p 的地址 17.(F) 若指针占用的内存大小为 2Byte, 则指向它的二重指针占用内存大小为 4Byte. 18.(F) 带参 main 函数中的形参的值可以在程序中得到 19.(F)main(argc,argv) 中的参数 argv 的定义格式为 char argv[] 20.(F)int **p; 表示定义一个 *p 指针变量 21.(F) 在 C 语言中允许将一个整数赋给指针变量 22.(F) 一个指针变量加 1 表示将该指针变量的原值 ( 地址 ) 加 1 23.(F)int *p(); 表示定义一个指向函数的指针变量 p 24.(F) 当函数实参中使用指针变量时, 形参变量也必须使用指针变量 25.(F)*p++ 等价于 (*p)++ 26.(F) 使用指针技术, 可以通过修改形参变量的值达到修改实参变量的值的目的 27.(F) 因为用字符数组和字符指针变量都能实现字符串的存储和运算, 因此它们二者是完全等价的 28.(T) 对指向函数的指针变量, 像 p+n p++ p- - 等运算是无意义的 29.(T)main(int argc,char *argv[]) 中的参数 argc 表示命令行只参数的个数 30.(T) 在 int a[3][4]; 中 a+i 和 *(a+i) 的含义是不一样的 31.(F)char *p[10]; 定义了一个指向字符数组的指针变量 32.(F) 将指向函数的指针作为函数的参数, 虽然可以提高效率, 但是容易造成混乱, 所以不符合结构化程 序设计的原则 33.(F) 数组名实际上是此数组的首地址, 所以数组名相当于一个指针变量 34.(F) 若定义数组 a[2][3], 则 a+1 和 *(a+1) 完全等价 35.(T) 函数的形参为一个数组, 则调用此函数时将数组名作为对应的实参
一 单选题 1. 下列关于结构的说法错误的是 :( ) A: 结构是由用户自定义的一种数据类型 B: 结构中可设定若干个不同数据类型的成员 第 11 章结构与联合 C: 结构中成员的数据类型可以是另一个已定义的结构 D: 在定义结构时, 可以对成员进行初始化 2. 以下关于结构体的叙述中, 错误的是 :( ) A: 结构体是一种可由用户构造的数据类型 B: 结构体中的成员可以具有不同的数据类型 C: 结构体中的成员不可以与结构体变量同名 D: 结构体中的成员可以是数组 3. 以下结构体类型说明及结构体变量 a,b 的定义中, 正确的是 :( ) A:struct ss B:struct ss char flag; char flag; float x; float x; ; ; ss a,b; C:struct struct ss a,b; D:struct char flag; char flag; float x; float x; ss;; ss; ss a,b; struct ss a,b; 4. 设有以下说明语句 : struct stu int a; float b; stutype; 则下面的叙述不正确的是 :( ) A:struct 是结构体类型的关键字 B:struct stu 是用户定义的结构体类型名 C:stutype 是用户定义的结构体类型名 D:a 和 b 都是结构体成员名 5. 在 16 位 IBM-PC 机上使用 C 语言时, 若有如下定义 : struct data long i; char ch; double f; b; 则结构变量 b 占用内存的字节数是 :( )
A:4 B:8 C:12 D: 13 6. 下面程序的运行结果是 :( ) main( ) struct cmplx int x; int y; c[2]=1,3,2,7; printf("%d",c[0].y/c[0].x*c[1].x); A:0 B:1 C:3 D:6 7. 若有以下说明和语句, 则对 pup 中 sex 域的正确引用方式是 :( ) struct pupil char name[20]; int sex; pup,*p; p=&pup; A:p.pup.sex B:p->pup.sex C:(*p).pup.sex D:(*p).sex 8. 当定义一个结构体变量时系统分配给它的内存是 :( ) A: 各成员所需内存量的总和 B: 成员中占内存量最大者所需的容量 C: 结构中第一个成员所需内存量 D: 结构中最后一个成员所需内存量 9. 若有以下说明和语句, 则下面表达式中值为 1002 的是 :( ) struct student int age; int num; ; struct student stu[3]= 1001,20,1002,19,1003,21 ; struct student *p; p=stu; A:(p++)->num B:(p++)->age C:(*p).num D:(*++p).age 10. 当说明一个共用体变量时, 系统分配给它的内存是 :( ) A: 各成员所需内存量的总和 B: 共用体中第一个成员所需内存量 C: 成员中占内存量最大者所需的内存量 D: 共用体中最后一个成员所需内存量 11. 以下对 C 语言中共用体类型数据的叙述正确的是 :( ) A: 可以对共用体变量名直接赋值 B: 一个共用体变量中可以同时存放所有成员
C: 一个共用体变量中不能同时存放其所有成员 D: 共用体类型定义中不能出现结构体类型的成员 12. 若有以下定义和语句 : union data int i; char c; float f; a; 则以下语句正确的是 :( ) A:a=5 B:printf("%d\n",a.i); C:a=2,'a',1.2; D:n=a 13. 下面程序运行后的输出结果应为 :( ) #include "stdio.h" main( ) union int a[2]; long b; char c[4]; s; s.a[0]=0x39; s.a[1]=0x38; printf("%c",s.c[0]); A;39 B:9 C:38 D:8 14. 根据以下定义, 能输出字母 M 的语句是 struct person char name[9];int age;; struct person class[10]= John,17, Paul,19, Mary,18, Adam,16,; A.printf( %c\n,class[3].name); B.printf( %c\n,class[3].name[1]); C.printf( %c\n,class[2].name[1]); D.printf( %c\n,class[2].name[0]); 15. 对整个结构能够进行的操作是 A) 对结构进行赋值 B) 对结构进行存取 C) 对结构进行减法运算 D) 对结构体做加法 16. 下列对结构类型的描述错误的是 A) 结构体变量可以有不同类型的成员
B) 结构体变量所占内存空间一定等于各个分量所占内存空间之和 C) 结构体变量既可以做函数参数, 又可以从函数中返回 D) 结构体变量的成员既可以读又可以写 第 12 章文 件 一 单选题 1. 利用 C 语言的文件操作, 可以把数据永久保存在 :( ) A. 磁盘 B. 内存 C. 屏幕 D. 键盘 2. 若有程序片段 FILE *fp; fp=fopen( a.txt, r ); 则以下说法中正确的是 :( ) A.fp 指向磁盘文件 a.txt 的地址 B.fp 指向磁盘文件 a.txt 所对应的 FILE 结构 C. 如果 fp 不为 NULL, 表示文件打开失败 D. 可以利用 fp 指针对文件 a.txt 进行写操作 3.fopen 函数的作用是 :( ) A. 将文件的内容读入内存 B. 读出文件的大小 C. 建立与文件关联的 FILE 结构体变量并返回该结构体变量的地址 D. 向文件写数据 9.fclose 函数的作用是 :( ) A. 删除文件 B. 删除文件中的数据 C. 释放与该文件相关联的 FILE 结构体变量 D. 清空文件缓冲区 4. 已知 fp 是一个指向已打开文件的指针,ch 是一个字符型变量, 则 ch=fgetc(fp) 的作用是 :( ) A. 获取键盘输入的字符, 并赋值给 ch B. 获取 fp 所指向的文件的第一个字节的内容, 并赋值给 ch C. 获取 fp 所指向的文件的当前文件位置指针所指向的一个字节的内容, 并赋值给 ch D. 将 ch 的值输出到 fp 所指向的文件中 5 以下可作为函数 fopen 中第一个参数的正确格式是 A)c:user\text.txt C) c:\user\text.txt B)c:\user\text.txt D) c:\\user\\text.txt 6 若执行 fopen 函数时发生错误, 则函数的返回值是 A) 地址值 B)0 C)1 D)EOF 7 若要用 fopen 函数打开一个新的二进制文件, 该文件要求既能读也能写, 则打开方式字符串应是 A) ab+ B) wb+ C) rb+ D) ab 8 若以 a+ 方式打开一个已存在的文件, 则以下叙述正确的是