1、装订线 江汉艺术职业学院《C语言程序设计实验》 2023-2024学年第一学期期末试卷 院(系)_______ 班级_______ 学号_______ 姓名_______ 题号 一 二 三 四 总分 得分 批阅人 一、单选题(本大题共15个小题,每小题1分,共15分.在每小题给出的四个选项中,只有一项是符合题目要求的.) 1、C 语言中,若有定义 enum days {MON, TUE, WED, THU, FRI, SAT, SUN}; ,那么 enum
2、days today = TUE; 之后,执行 today++; , today 的值会变成多少?( ) A. WED B. 不确定 C. 运行时错误 D. 以上都不对 2、在 C 语言中,关于动态内存分配,使用 malloc 函数分配了一块内存,使用完毕后,应该使用以下哪个函数释放?( ) A. free B. delete C. release D. 不需要释放 3、以下能正确计算 1 + 2 + 3 +... + 100 的程序段是( ) A. int i, sum = 0; for (i = 1; i <= 100; i++) su
3、m += i; B. int i = 0, sum = 0; while (i <= 100) { sum += i; i++; } C. int i = 1, sum = 0; do { sum += i; i++; } while (i <= 100); D. 以上都正确 4、在 C 语言中,宏定义和函数调用有一些区别。假设定义了宏 #define SQUARE(x) ((x) * (x)) 和函数 int square(int x) { return x * x; } ,以下关于它们的描述,哪一项是不准确的?( ) A. 宏定义在编译时进行替换,函数调用在运行时执行
4、 B. 宏定义不进行类型检查,函数调用会进行类型检查 C. 宏定义的参数没有副作用,函数调用的参数可能有副作用 D. 对于频繁调用且代码简短的操作,宏定义可能比函数调用更高效 5、C 语言中,若有函数定义 int func(int a, int b) { return a + b; } ,以下关于函数调用的描述,正确的是:( ) A. 调用该函数时,实参和形参的类型必须完全一致 B. 函数的返回值可以不被接收 C. 可以通过 func(a = 1, b = 2); 的方式进行调用 D. 函数调用时,参数传递都是值传递 6、在 C 语言中,以下关于字符指针和字符
5、数组的区别,假设有以下定义: char *str1 = "Hello"; char str2[] = "World"; ,正确的是:( ) A. str1 和 str2 都可以通过指针修改其内容 B. str1 的内容可以修改, str2 的内容不能修改 C. str1 和 str2 的内存分配方式相同 D. str1 和 str2 的长度计算方式相同 7、假设在 C 语言中有如下代码段 int a = 5; int *p = &a; ,以下关于指针运算的描述,正确的是:( ) A. p + 1 指向的是下一个整数的地址 B. 对指针进
6、行乘法运算(如 p * 2 )是合法的 C. 可以直接将两个指针相加(如 p + p ) D. 指针的减法运算(如 p1 - p2 )结果的单位是字节 8、在 C 语言中,若要按照特定格式读取文件中的数据,以下哪个函数是适用的?( ) A. fscanf() B. fread() C. fgets() D. getc() 9、在 C 语言中,设有以下代码段 float f = 3.14; int n = (int)f; ,那么 n 的值是多少?( ) A. 3 B. 3.14 C. 4 D. 不确定 10、以下 C 语言代码段的输出结果
7、是什么?int a = 7, b = 3; printf("%d", a % b);( ) A. 1 B. 2 C. 0 D. 程序报错 11、C 语言中的存储类型 extern 用于声明外部变量或函数。假设在一个源文件中定义了 int globalVar = 10; ,在另一个源文件中要使用这个变量,以下关于 extern 的描述,哪一项是不正确的?( ) A. 在另一个源文件中使用 extern int globalVar; 声明后就可以使用 globalVar B. extern 声明的变量不能在当前源文件中进行初始化 C. 多个源文件中可以
8、使用 extern 声明同一个外部变量 D. extern 只能用于变量的声明,不能用于函数的声明 12、C 语言中,对于宏定义 #define PI 3.14 ,以下描述正确的是:( ) A. 在程序中使用 PI 时会进行语法检查 B. 宏定义可以实现类似于函数的功能,有返回值 C. 宏定义在编译时会进行文本替换 D. 宏定义中的参数不能是表达式 13、在 C 语言中,位运算可以对二进制位进行操作。假设定义了一个整数 int num = 5; (二进制表示为 0101 ),以下关于位运算的描述,哪一项是不正确的?( ) A. num << 1
9、会将 num 的二进制位向左移动一位,结果为 10 (二进制 1010 ) B. num & 3 (二进制 0011 )进行按位与运算,结果为 1 (二进制 0001 ) C. 位运算的速度比普通的算术运算慢 D. 可以使用位运算来设置或清除某些位 14、C 语言中的预处理器指令 #define 常用于定义常量和宏。假设有如下定义: #define PI 3.14 和 #define AREA(r) PI * r * r ,在程序中使用 float area = AREA(5); ,以下关于宏的描述,正确的是:( ) A. 宏在编译时会进行值的替换,所以
10、AREA(5) 会被替换为 3.14 * 5 * 5 B. 宏的参数传递是值传递,不会产生副作用 C. 宏定义中的表达式会自动进行类型转换,无需担心数据类型不匹配 D. 宏比函数的执行效率低,因为宏需要在编译时进行更多的处理 15、若有定义:int a=7; float x=2.5, y=4.7; 则表达式 x + a%3*(int)(x + y)%2/4 的值是( ) A. 2.500000 B. 2.750000 C. 3.500000 D. 0.000000 二、判断题(本大题共15小题,每小题2分,共30分.有多个选项是符合题目要求的.) 1、对于
11、C 语言中的字符串函数 strspn ,它可以计算字符串开头连续匹配指定字符集的字符个数。( ) 2、在 C 语言中,当函数的参数是数组时,在函数内部无法通过 sizeof 运算符获取数组的实际长度,需要额外传递数组长度作为参数。( ) 3、在 C 语言中,使用 fwrite 函数向文件写入数据时,需要注意数据的类型和大小,以确保正确写入。( ) 4、在 C 语言中,结构体是一种可以将不同类型的数据组合在一起的数据类型,结构体变量的成员可以是基本数据类型、数组、指针甚至是其他结构体。( ) 5、 int a[10]; ,使用 memcpy(a, b, sizeof(
12、a)); 可以将另一个数组 b 的内容复制到数组 a 中。( ) 6、在 C 语言中,使用 static 关键字声明的局部变量在不同的函数调用之间是独立的。( ) 7、C 语言中的 dup2 函数用于将一个文件描述符复制到另一个指定的描述符。( ) 8、在 C 语言中,使用指针可以实现对函数返回值的修改。( ) 9、C 语言中的函数可以没有返回值,也可以没有参数,甚至可以同时既没有返回值也没有参数。( ) 10、C 语言中的 strchr 函数用于在字符串中查找指定字符第一次出现的位置。( ) 11、对于 char str1[20], str2[
13、20]; ,使用 strncpy(str1, str2, 5); 进行字符串复制时,最多复制 5 个字符,如果 str2 的长度小于 5 ,则以 '\0' 结束。( ) 12、在 C 语言中, exec 系列函数用于在新进程中执行新的程序。( ) 13、C 语言中的结构体可以嵌套定义,即一个结构体中可以包含另一个结构体类型的成员变量。( ) 14、若有 int a[10]; int *p = a; ,通过 p 可以像使用数组名 a 一样访问数组元素。( ) 15、C 语言中,对于指针变量 int *ptr1, *ptr2; ,执行 ptr
14、1 = ptr2; 后, ptr1 和 ptr2 指向的是同一块内存地址,对其中一个指针所指向的内容进行修改,会影响另一个指针的读取结果。( ) 三、编程题(本大题共5个小题,共25分) 1、(本题5分)创建一个 C 语言程序,输入一个字符串,将其中的字母按照字母表顺序重新排列后输出。 2、(本题5分)编写一个 C 语言程序,实现一个简单的航班预订管理系统,支持航班查询、座位预订和订单管理。 3、(本题5分)设计一个 C 语言程序,输入一个字符串,将其中的所有字符按照 ASCII 码值从小到大的顺序重新排列并输出。
15、 4、(本题5分)设计一个 C 程序,输入一个整数 n,计算并输出 n 的阶乘。 5、(本题5分)设计一个 C 语言程序,用户输入一个包含若干个整数的数组,程序找出其中所有相邻元素之和最大的位置,并输出该位置的索引。 四、论述题(本大题共3个小题,共30分) 1、(本题10分)论述 C 语言中如何使用位运算来进行高效的操作,例如设置、清除和检测位,以及位运算在节省内存和提高性能方面的应用,举例说明。 2、(本题10分)论述 C 语言中函数的参数传递方式(值传递和指针传递)的区别,以及在什么情况下应该选择哪种方式。 3、(本题10分)详细论述 C 语言中如何使用指针实现链表的冒泡排序优化操作。 第6页,共6页






