《程序设计基础-C语言》(高教版第二版)期末复习卷(十)

| 2份
| 12页
| 68人阅读
| 0人下载

内容正文:

《程序设计基础- C语言》高等教育出版社 期末复习卷(八) 考试时间:90分钟 满分:100分 姓名 班级 学号 1、 单项选择题(本题共20小题,每题3分,共60分) 1、以下关于C语言指针的说法,正确的是( ) A. 指针变量可以直接存储数值 B. 指针变量的类型必须与指向的变量类型一致 C. 指针变量的大小与指向的变量类型有关 D. 空指针指向的是地址为0的内存单元,可直接访问 【答案】B 【解析】A中指针变量存储的是变量的地址,而非直接存储数值;C中指针变量大小仅与操作系统位数有关,与指向类型无关;D中空指针指向地址0的内存单元,该单元不可直接访问,否则会报错;B正确,指针类型需与指向变量类型一致,保证内存访问正确。 2、若int a=12, b=5;,则表达式a / b * 1.0的结果类型是( ) A. int B. float C. double D. 不确定 【答案】C 【解析】a/b执行整数除法结果为2,随后与1.0(double型)运算,int型会隐式转换为double型,最终结果为double型(2.0)。 3、下列标识符中,符合C语言命名规则的是( ) A. 123abc B. abc#123 C. _abc123 D. int_abc 【答案】C 【解析】合法标识符由字母、下划线、数字组成,首字符不能为数字,且不能是关键字。A以数字开头,B含特殊字符#,D中int是关键字,均不合法;C以下划线开头,后续跟字母和数字,符合规则。 4、执行语句int x=8; x += x % 3;后,x的值是( ) A. 8 B. 9 C. 10 D. 11 【答案】C 【解析】x%3结果为2,x += 2等价于x = 8 + 2 = 10。 5、以下函数中,用于从键盘读取单个字符的是( ) A. putchar() B. getchar() C. gets() D. fputs() 【答案】B 【解析】getchar()专门用于读取单个字符;putchar()是输出单个字符函数,gets()读取字符串,fputs()向文件写入字符串。故B正确。 6、定义int arr[][3] = {{1,2}, {3,4,5}, {6}};,则该二维数组的行数是( ) A. 2 B. 3 C. 4 D. 不确定 【答案】B 【解析】二维数组定义时,行下标可省略,编译器通过初始化的“行花括号”个数推算行数。该数组有3组行花括号,因此行数为3。 7、已知int x=5, y=3;,执行表达式x < y ? x++ : y++的结果是( ) A. 3 B. 4 C. 5 D. 6 【答案】A 【解析】x < y(5<3)为假,执行y++,y++是先使用后自减,因此表达式结果为y的原始值3,执行后y变为4。 8、执行以下代码,输出结果是( ) int i=0, j=0; for(i=1; i<=2; i++) { for(j=1; j<=i; j++) { printf("%d", j); } printf(" "); } A. 1 12 B. 1 2 C. 12 12 D. 1 11 【答案】A 【解析】外层循环i=1时,内层循环j=1(输出1),换行;i=2时,内层循环j=1、j=2(输出12),换行。最终输出为1换行、12换行。 9、C语言中,字符串" 123"的长度(不含结束符)是( ) A. 3 B. 4 C. 5 D. 6 【答案】B 【解析】" "是单个转义字符(换行符),后续跟1、2、3三个字符,共4个字符,因此字符串长度为4。 10、若int *p, arr[5] = {1,2,3,4,5}; p=arr;,则*(p+2)的值是( ) A. 2 B. 3 C. 4 D. arr[2]的地址 【答案】B 【解析】p指向数组arr的首元素(arr[0]),p+2表示偏移2个int型单元,指向arr[2],*(p+2)是对该地址的解引用,得到arr[2]的值3。 11、以下关于函数递归的说法,错误的是( ) A. 递归函数必须有明确的终止条件 B. 递归调用会产生函数调用栈 C. 递归函数的执行效率通常比循环低 D. 递归函数不能有参数传递 【答案】D 【解析】递归函数可以有参数传递,通过参数传递控制递归的终止和逻辑执行(如求阶乘的递归函数,参数为待求阶乘的整数);A、B、C均为正确说法,D错误。 12、执行以下代码,输出结果是( ) char str[] = "C Language"; printf("%d", strlen(str)); A. 10 B. 11 C. 12 D. 13 【答案】A 【解析】strlen函数统计字符串有效字符个数(不含结束符'\0')。"C Language"包含1个'C'、1个空格、8个字母,共10个有效字符,因此长度为10。 13、执行以下代码,sum的最终值是( ) int sum=0, i=0; do { sum += i; i++; } while(i<=3); A. 3 B. 6 C. 10 D. 15 【答案】B 【解析】do-while循环执行4次:i=0时sum=0,i=1;i=1时sum=1,i=2;i=2时sum=3,i=3;i=3时sum=6,i=4,此时i>3循环结束。sum=0+1+2+3=6。 14、已知int a=7, b=2;,下列选项中结果为1的逻辑表达式是( ) A. a % b == 0 B. !(a > b) C. (a / b) && 0 D. (a + b) || 0 【答案】D 【解析】A中7%2=1≠0,结果为0;B中a>b为真,!真为0;(a / b) && 0,C结果为0;D中(a+b)=9≠0,逻辑或运算只要有一个为真结果就为1,故D正确。 15、以下关于字符串处理函数的说法,正确的是( ) A. strcpy函数用于拼接两个字符串 B. strcat函数用于复制字符串 C. strlen函数返回字符串的字节数,含结束符 D. strcmp函数用于比较两个字符串的大小 【答案】D 【解析】A中strcpy是字符串复制函数,B中strcat是字符串拼接函数,C中strlen返回字符串有效字符个数(不含结束符);D正确,strcmp通过ASCII码值比较字符串大小,返回正数、0、负数分别表示前者大、相等、前者小。 16、以下关于switch语句的说法,正确的是( ) A. case后的值可以是变量 B. switch的表达式可以是实型 C. default语句必须放在所有case之后 D. case后的值必须是常量表达式 【答案】D 【解析】A中case后的值必须是常量,不能是变量;B中switch表达式只能是整型或字符型,不能是实型;C中default语句可放在case之前或之后(放在之前需加break,否则会穿透);D正确,case后必须是常量表达式。 17、要以只读方式打开二进制文件,应使用的fopen模式是( ) A. "r" B. "rb" C. "r+" D. "rb+" 【答案】B 【解析】二进制文件操作需加'b';"rb"是二进制只读模式;"r"是文本只读模式,"r+"是文本读写模式,"rb+"是二进制读写模式。故B正确。 18、执行以下代码,输出结果是( ) int x=3; if(x>5) printf("%d", x); else if(x>2) printf("%d", x+1); else printf("%d", x-1); A. 3 B. 4 C. 2 D. 无输出 【答案】B 【解析】x=3,x>5为假;x>2为真,执行printf("%d", x+1),输出4。 19、以下关于函数参数的说法,正确的是( ) A. 函数的形参在函数调用结束后仍占用内存 B. 函数的实参必须是变量 C. 函数的形参是局部变量 D. 函数调用时,实参和形参的个数可以不匹配 【答案】C 【解析】A中形参在函数调用结束后释放内存;B中实参可以是常量、变量或表达式;D中实参和形参个数必须匹配,否则编译错误;C正确,形参仅在函数内部有效,属于局部变量。 20、以下关于数组和指针的关系,错误的是( ) A. 数组名可以赋值给同类型的指针变量 B. 指针变量可以通过自增自减操作遍历数组 C. arr[i]等价于*(arr+i) D. 数组名可以直接自增 【答案】D 【解析】数组名是指针常量,其值不可修改,因此不能直接自增(arr++会报错);A、B、C均为正确说法,D错误。 二、 填空题(本题共10小题,每题2分,共20分) 1. C语言中,多行注释的开始符号是__________,单行注释的作用范围是__________。 【答案】/* 从//开始到本行结束 2. 定义int a=25, b=4;,表达式(a + b) % (a - b)的结果是__________。 【答案】1 3. for循环的基本格式是:for(__________; __________; __________) { 循环体 } 【答案】初始化表达式 循环条件表达式 增量/减量表达式 4. 若指针变量p指向int型数组arr的首元素,则访问数组第3个元素(下标为2)的表达式是__________或__________。 【答案】arr[2] *(p+2) 5. 已知int m=6, n=9;,表达式m > n ? m-3 : n+2的结果是__________。 【答案】11 6. 执行以下代码,输出的字符个数是__________。 char str[] = "ab c"; printf("%s", str); 【答案】4 7. 函数声明的作用是__________,其基本格式与函数定义的__________部分一致。 【答案】告知编译器函数的基本信息(返回值类型、函数名、参数类型) ; 函数头 8. 已知int x=3, y=5;,逻辑表达式(x==3) && !(y>4)的结果是__________。 【答案】0 9. 定义一个长度为5的字符数组,并用字符串"hello"初始化,语句是__________,该数组在内存中占用的字节数是__________。 【答案】char arr[5] = "hello";(或char arr[] = "hello";) ; 6(含结束符'\0') 10. 若要将指针变量p初始化为空指针,正确的语句是__________。 【答案】int *p = NULL;(或int *p = 0;) 三、 应用题(共20分) 编写一个C语言程序,实现以下功能(如图所示): 1. 定义一个一维整型数组,长度为10; 2. 通过键盘输入10个整型数据存入数组; 3. 编写函数查找数组中是否存在指定的目标值(目标值从键盘输入),若存在,返回其第一次出现的下标;若不存在,返回-1; 4. 输出数组中的所有元素,以及目标值的查找结果(存在则输出下标,不存在则提示“目标值不存在”)。 【答案】 #include <stdio.h> // 查找目标值在数组中第一次出现的下标,不存在返回-1 int findTarget(int arr[], int len, int target) { for(int i = 0; i < len; i++) { if(arr[i] == target) { // 找到目标值,返回当前下标 return i; } } return -1; // 遍历完数组未找到,返回-1 } // 输出数组所有元素 void printArray(int arr[], int len) { printf("数组元素:"); for(int i = 0; i < len; i++) { printf("%d\t", arr[i]); } printf(" "); } int main() { int arr[10]; // 定义长度为10的整型数组 int len = sizeof(arr) / sizeof(arr[0]); // 计算数组长度 int target, index; // 从键盘输入10个整型数据 printf("请输入10个整型数据: "); for(int i = 0; i < len; i++) { scanf("%d", &arr[i]); } // 输入目标值 printf("请输入要查找的目标值: "); scanf("%d", &target); // 输出数组元素 printArray(arr, len); // 调用查找函数 index = findTarget(arr, len, target); // 输出查找结果 if(index != -1) { printf("目标值%d存在,第一次出现的下标为:%d ", target, index); } else { printf("目标值%d不存在 ", target); } return 0; } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $ 《程序设计基础- C语言》高等教育出版社 期末复习卷(八) 考试时间:90分钟 满分:100分 姓名 班级 学号 1、 单项选择题(本题共20小题,每题3分,共60分) 1、以下关于C语言指针的说法,正确的是( ) A. 指针变量可以直接存储数值 B. 指针变量的类型必须与指向的变量类型一致 C. 指针变量的大小与指向的变量类型有关 D. 空指针指向的是地址为0的内存单元,可直接访问 2、若int a=12, b=5;,则表达式a / b * 1.0的结果类型是( ) A. int B. float C. double D. 不确定 3、下列标识符中,符合C语言命名规则的是( ) A. 123abc B. abc#123 C. _abc123 D. int_abc 4、执行语句int x=8; x += x % 3;后,x的值是( ) A. 8 B. 9 C. 10 D. 11 5、以下函数中,用于从键盘读取单个字符的是( ) A. putchar() B. getchar() C. gets() D. fputs() 6、定义int arr[][3] = {{1,2}, {3,4,5}, {6}};,则该二维数组的行数是( ) A. 2 B. 3 C. 4 D. 不确定 7、已知int x=5, y=3;,执行表达式x < y ? x++ : y++的结果是( ) A. 3 B. 4 C. 5 D. 6 8、执行以下代码,输出结果是( ) int i=0, j=0; for(i=1; i<=2; i++) { for(j=1; j<=i; j++) { printf("%d", j); } printf(" "); } A. 1 12 B. 1 2 C. 12 12 D. 1 11 9、C语言中,字符串" 123"的长度(不含结束符)是( ) A. 3 B. 4 C. 5 D. 6 10、若int *p, arr[5] = {1,2,3,4,5}; p=arr;,则*(p+2)的值是( ) A. 2 B. 3 C. 4 D. arr[2]的地址 11、以下关于函数递归的说法,错误的是( ) A. 递归函数必须有明确的终止条件 B. 递归调用会产生函数调用栈 C. 递归函数的执行效率通常比循环低 D. 递归函数不能有参数传递 12、执行以下代码,输出结果是( ) char str[] = "C Language"; printf("%d", strlen(str)); A. 10 B. 11 C. 12 D. 13 13、执行以下代码,sum的最终值是( ) int sum=0, i=0; do { sum += i; i++; } while(i<=3); A. 3 B. 6 C. 10 D. 15 14、已知int a=7, b=2;,下列选项中结果为1的逻辑表达式是( ) A. a % b == 0 B. !(a > b) C. (a / b) && 0 D. (a + b) || 0 15、以下关于字符串处理函数的说法,正确的是( ) A. strcpy函数用于拼接两个字符串 B. strcat函数用于复制字符串 C. strlen函数返回字符串的字节数,含结束符 D. strcmp函数用于比较两个字符串的大小 16、以下关于switch语句的说法,正确的是( ) A. case后的值可以是变量 B. switch的表达式可以是实型 C. default语句必须放在所有case之后 D. case后的值必须是常量表达式 17、要以只读方式打开二进制文件,应使用的fopen模式是( ) A. "r" B. "rb" C. "r+" D. "rb+" 18、执行以下代码,输出结果是( ) int x=3; if(x>5) printf("%d", x); else if(x>2) printf("%d", x+1); else printf("%d", x-1); A. 3 B. 4 C. 2 D. 无输出 19、以下关于函数参数的说法,正确的是( ) A. 函数的形参在函数调用结束后仍占用内存 B. 函数的实参必须是变量 C. 函数的形参是局部变量 D. 函数调用时,实参和形参的个数可以不匹配 20、以下关于数组和指针的关系,错误的是( ) A. 数组名可以赋值给同类型的指针变量 B. 指针变量可以通过自增自减操作遍历数组 C. arr[i]等价于*(arr+i) D. 数组名可以直接自增 二、 填空题(本题共10小题,每题2分,共20分) 1. C语言中,多行注释的开始符号是__________,单行注释的作用范围是__________。 2. 定义int a=25, b=4;,表达式(a + b) % (a - b)的结果是__________。 3. for循环的基本格式是:for(__________; __________; __________) { 循环体 } 4. 若指针变量p指向int型数组arr的首元素,则访问数组第3个元素(下标为2)的表达式是__________或__________。 5. 已知int m=6, n=9;,表达式m > n ? m-3 : n+2的结果是__________。 6. 执行以下代码,输出的字符个数是__________。 char str[] = "ab c"; printf("%s", str); 7. 函数声明的作用是__________,其基本格式与函数定义的__________部分一致。 8. 已知int x=3, y=5;,逻辑表达式(x==3) && !(y>4)的结果是__________。 9. 定义一个长度为5的字符数组,并用字符串"hello"初始化,语句是__________,该数组在内存中占用的字节数是__________。 10. 若要将指针变量p初始化为空指针,正确的语句是__________。 三、 应用题(共20分) 编写一个C语言程序,实现以下功能(如图所示): 1. 定义一个一维整型数组,长度为10; 2. 通过键盘输入10个整型数据存入数组; 3. 编写函数查找数组中是否存在指定的目标值(目标值从键盘输入),若存在,返回其第一次出现的下标;若不存在,返回-1; 4. 输出数组中的所有元素,以及目标值的查找结果(存在则输出下标,不存在则提示“目标值不存在”)。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $

资源预览图

《程序设计基础-C语言》(高教版第二版)期末复习卷(十)-第1页
1
《程序设计基础-C语言》(高教版第二版)期末复习卷(十)-第2页
2

由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。