c语言程序设计精品课件试题(编辑修改稿)内容摘要:

则以下语句正确的是。 A) a=5; B) a={2,39。 a39。 ,}; C) printf(%d\n,a); D) n=a; 【 】已知: struct sk { int a; int age; }date,*p; 如果要使指针 p 指向 data 中的成员 a,正确的赋值语句是 ____。 A) p = (struct sk *)amp。 ; B) p = (struct sk *); C) p = amp。 ; D) *p = ; 【 】已知 enum week {sun,mon,tue,wed,thu,fri,sat}day;则正确的赋值语句是 ____。 A) sun=0; C) san=day; D) sun=mon; D) day=sun; 【 】已知 enum color {red,yellow=2,blue,white,black}ren;执行下述语句的输出结果是 ____。 printf(%d,ren=white); A) 0 B) 1 C) 3 D) 4 【 】已知 enum name{zhao=1,qian,sun,li}man;执行下述程序段后的输出是 ____。 man=0; switch(man) { case 0: printf(People\n); case 1: printf(Man\n); case 2: printf(Woman\n); default: printf(Error\n); } A) People B) Man C) Woman D)Error 【 】下述关于枚举类型名的定义中,正确的是 ____。 A) enem a={ one,two,three }; B) enem a { one=9,two=1,three }; C) enem a={one,two,three}; D) enem a {one,two,three}; 13 【 】C语言中标准输入文件 stdin 是指。 A) 键盘 B) 显示器 C) 鼠标 D) 硬盘 【 】要打开一个已存在的非空文件 file用于修改,选择正确的语句____。 A) fp=fopen(file, r); B) fp=fopen(file, a+); C) fp=fopen(file, w); D) fp=fopen(39。 file, r+); 【 】当顺利执行了文件关闭操作时, fclose 函数的返回值是。 A) 1 B) TRUE C) 0 D) 1 【 】 fscanf 函数的正确调用形式是。 A) fscanf (文件指针 , 格式字符串 , 输出列表 ); B) fscanf (格式字符串 , 输出列表 , 文件指针 ); C) fscanf (格式字符串 , 文件指针 , 输出列表 ); D) fscanf (文件指针 , 格式字符串 , 输入列表 ); 【 】使用 fgetc 函数,则打开文件的方式必须是。 A) 只写 B) 追加 C) 读或读 /写 D) 参考答案 B 和 C 都正确 【 】已知宏定义 define N 3 define Y(n) ((N+1)*n) 执行语句 z=2*(N+Y(5+1));后,变量 z 的值是 ____。 A) 42 B) 48 C) 52 D) 出错 【 】已知宏定义 define SQ(x) x*x,执行语句 printf(%d,10/SQ(3));后的输出结果是 ____。 A) 1 B) 3 C) 9 D) 10 【 】已知宏定义如下: define PR printf define NL \n define D %d define D1 DNL 若程序中的语句是 PR(D1,a);经预处理后展开为 ____。 A) printf(%d\n,a); B) printf(%d\n,a); C) printf(%d\n, a); D) 原语句错误 14 【单项选择题参考答案】 【 】答案 : A 注释: int 是 C 语言的关键字 【 】答案 : B 【 】答案: A 【 】答案: B 注释: include 是预处理命令; scanf 是函数名; type 不是 C 语言的关键字。 【 】答案: D 【 】答案: D 【 】答案: A 【 】答案: A 注释: int 型表示整数的范围是 32768~ 32767。 【 】答案: D 注释:整型常量 1 在计算机中表示为补码 1111 1111 1111 1111,用十六进制显示这个数时,最左边的 1 不会被解释为符号位,而是与右边其它位共同转换为十六进制数。 【 】答案: B 注释:长整型数 32768 在计算机内的表示是 1000 0000 0000 0000,以一般整型进行输出时,此数恰是 32768 的补码。 【 】答案: C 注释:长整型数 65539 在计算机内的表示是 0001 0000 0000 0000 0011,以一般整型进行输出时,仅将右侧 16 位二进制数转换为十进制数。 【 】答案: A 注释: C 语言中, int 型的负数是采用补码表示的。 【 】答案: D 【 】答案: C 注释:变量 c 是字符型,可用字符常量为它赋值。 字符常量必须用单引号括起来,所以 B 是错误的;在单引号或双引号内的反斜线 39。 \39。 用于表示转义字符, A 选项在无引号时使用反斜线是错误的; C 选项单引号内出现反斜线表示 它与后面的数字组成一个转义字符;单引号只允许括起一个字符, D 选项在单引号内出现 4 个字符,是错误的。 【 】答案: C 【 】答案: D 注释:空字符和空格符是不同的两个字符,空格符的 ASCII 码值是 32,空字符的 ASCII 值是 0。 【 】答案: A 【 】答案: B 【 】答案: A 【 】答案: C 【 】答案: B 注释:单纯从 C 语言语法来说,选项 B、 C 都是正确的,但是选项 C 中第一个运算的两个对象都是整型常数,其结果也是整型数 0,最后的运算结果也就是 0 了。 【 】答案: C 【 】答案: A 注释:将条件表达式增加一个括号,此式变为 ab?a:(cd?c:d),它的运算顺序就清楚了。 由于条件运算符的结合性是从右向左,所以括号可以省略。 它的运算顺序是先算出右边的条件表达 15 式 cd?c:d的值,然后求条件表达式 ab?a:3 的值。 【 】答案: C 【 】答案: B 【 】答案: B 注释:当通过一个运算对象即可决定逻辑运算 amp。 amp。 的结果时,则对另一个运算对象不做处理。 【 】答案: D 【 】答案: B 注释:数组元素在内存中按行排列,此数组的前 3 个 元素的值分别是 1,表达式中虽然数组下标的写法似乎每行有 3 个元素,和定义时的 3 行 2 列不一致,但是 C 语言引用数组元素时是根据数组的首地址和给出的下标进行运算决定元素的地址。 题中表达式引用了数组前 3 个元素。 【 】答案 : A 【 】答案: D 【 】答案: B 【 】答案: B 【 】答案: B 【 】答案: A 【 】答案: C 【 】答案: C 【 】答案: C 【 】答案: D 【 】答案: D 【 】答案: C 】答案: D 注释: scanf 函数返回值是输入数据的个数, printf 函数的返回值是输出的字符个数。 【 】答案: D 【 】答案: C 注释:在 C 语言中, 经常用一个变量来作为逻辑表达式,其含义就是:当变量的值不为 0 时关系成立。 【 】答案: D 注释: break 语句仅可跳出 switch 语句,不会跳出 while 循环,这是一个死循环。 【 】答案: A 【 】答案: C 【 】答案: C 【 】答案: D 注释:当除数 y 为 0 时,程序发生溢出错误。 【 】答案: C 【 】答案: A 【 】答 案: C 【 】答案: C 注释:答案 C 的赋值号左侧是数组 s 的首地址,是一个常量,赋值号右侧是一个字符串常量,不可能将一个字符串常量赋给一个地址常量。 【 】答案: D 注释: D 选项缺少字符串结束标志。 【 】答案: C 16 注释:此处函数形参是一个指针变量,接受实参的地址,而不是一个数组。 【 】答案: A 【 】答案: D 注释:这里首先要明确一些基本概念。 在 C 语言中,程序与文件是不同的概念,一个程序可以由一个文件组成,也可以由多个文件组成;一个文件中又可以包含多个函数;函数是构成 C 程序的 基本单位。 变量的作用域因变量的存储类型不同而不同。 auto 和 register 类型的变量的作用域是说明变量的当前函数;外部变量的作用域是整个程序,即外部变量的作用域可以跨越多个文件;内部静态变量(定义在一个函数内部的 static 型的变量)的作用域是当前函数,外部静态变量(定义在函数外面的 static 型的变量)的作用域是当前文件,即可以跨越同一文件中的不同函数。 【 】答案: A 【 】答案: A 注释:它和参数 a 一样,数据类型说明被省略,按照 C 语言的规定,在这种情况下,表示它们是 int 型。 【 】答案: C 注释:函数 swapa 是值传递,函数的执行结果不能返回;函数 swapb 中变量 temp 不是指针变量,所以它不能接受地址量,用指针变量 x 为它赋值是不对的;函数 swap 中虽然指针变量交换了地址,即它们的指向的目标变量进行了交换,但是目标变量并没有行值的交换。 【 】答案: B 【 】答案: D 【 】答案: D 注释:主调函数中 b=0,在执行 fun1 函数里的除法时发生溢出错误。 【 】答案: B 【 】答案: C 【 】答案: D 注释:在答案 D 中,正确的函数调用应当是: printf(%d, *y)。 【 】答案: C 注释:要注意与说明语句 int (*p)[ ]; 的区别。 说明语句 int (*p)[ ]; 说明的是一个指向数组的指针。 【 】答案: C 注释:题干中由于 *和 p被小括号括起,所以 p 应被解释为一个指针,而后的下标运算符 []说明所指向的对象是一个有 4 个 int 型元素的一维数组;如果是 int (*p)(),则是指向函数的指针。 对于 int *p[4],则根据运算符的优先级,先考虑 p和 []运算符的关系,所以它就是一个指针数组了。 【 】答案: B 注释:选 项 B 有两处错误,一是数组名是常量,不能出现的赋值好的左侧,二是指针变量只能和整数做加,不能和作为地址常量的数组名相加。 【 】答案: D 注释: s 作为数组名是地址常量,而 s++是 s=s+1, C 语言不允许对常量进行赋值。 【 】答案: C 【 】答案: C 注释: a 是二维数组名, a+1 中的 1 不是 1 个字节,而是数组的 一行 ,即 10 个字节,所以 a+1是第二个字符串的首地址, A 选项正确。 在 C 编译系统中对二维数组名可这样理解 (注意,这里仅是理解 ): a 指向一个一维数组,故 (a+1)是指向 a[1]的, *(a+1)就是取 a[1]的值,它保存第二个字符串 ShangHai的首地址,所以选项 B 也正确。 *a 是第一个字符串的首地址,加 1 是第一个字符串中第二个字符的地址,选项 C 的输出是 beiJing。 选项 D 中的 amp。 a[1][0]是对第二个字符 17 串的第一个字符做取地址运算,得到该地址就是字符串 ShangHai的首地址。 注意,对于二维数组来说,做一次 *或 []运算的结果仍是地址量,做两次才是取数值。 【 】答案: A 注释: p 是一个一级指针,选项 B 中对它进行了两次 *运算是错误的。 ptr 是一个指向一维数组的指针,它所指 向的数组有三个元素,对于这样一个指针,对它进行两次 **运算才能取出地址单元中所存的数据, C 选项中 *ptr 表示数组第一行的首地址,该地址是一维数组的地址, +3 表示加上三个它所指向的数据类型的长度,所以 (*ptr+1)+2 是数组中数值 4 的地址。 根据以上分析,选项 D 对 ptr 进行了两次地址操作( *和 []),所以结果应是数据,但是它加 1 后指向数组第二行,根据后面 []中 2 它的地址增加两个一维数组的长度,就指向数组的最后一行,再做 *运算就是数10,即 a[3][0]。 【 】答案: A 【 】答案: B B 【 】答案: D 【 】答案: B 【 】答案: D 注释:答案 D 是另一种交换两个变量值的算法。 【 】答案: B 【 】答案: C 注释:使用 C 对 p进行赋值,则 pnext 是 a[0]的地址,引用其成员 n 再做前增 1 运算,结果就是 2。 【 】答案: B 【 】答案: D 【 】答案: A 【 】答案: C 注释:联合变量 temp的成员是占。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。