2016湖北专升本c 试题及答案_第1页
2016湖北专升本c 试题及答案_第2页
2016湖北专升本c 试题及答案_第3页
2016湖北专升本c 试题及答案_第4页
2016湖北专升本c 试题及答案_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2016湖北专升本c试题及答案一、选择题(30分,每题2分)1.下列选项中,不属于C语言基本数据类型的是()A.intB.floatC.charD.string2.在C语言中,正确的标识符是()A.2abcB._abcC.a+bD.if3.下列运算符中,优先级最高的是()A.+B.C.=D.>4.C语言中,字符串"Hello"占用的字节数是()A.5B.6C.7D.85.下列关于指针的说法中,错误的是()A.指针是一种特殊的变量B.指针可以指向任何数据类型C.指针可以进行算术运算D.指针不能赋值为NULL6.在C语言中,用于定义结构体的关键字是()A.structB.unionC.enumD.typedef7.下列循环语句中,至少执行一次循环体的是()A.for循环B.while循环C.do-while循环D.以上都不是8.在C语言中,文件操作函数fopen()的第一个参数表示()A.文件指针B.文件名C.打开方式D.缓冲区大小9.下列函数声明中,正确的是()A.intfunction(inta,b);B.intfunction(inta,intb);C.intfunction(a,b);D.intfunction(inta,);10.在C语言中,动态分配内存的函数是()A.malloc()B.free()C.realloc()D.calloc()11.下列关于数组的说法中,正确的是()A.数组大小可以在程序运行时改变B.数组元素可以是不同的数据类型C.数组名是一个常量指针D.数组可以不初始化直接使用12.在C语言中,用于跳出循环的语句是()A.breakB.continueC.returnD.exit()13.下列关于函数的说法中,错误的是()A.函数可以没有返回值B.函数可以有多个返回值C.函数可以递归调用D.函数可以嵌套定义14.在C语言中,用于标准输入的函数是()A.printf()B.scanf()C.puts()D.getchar()15.下列关于C语言预处理指令的说法中,正确的是()A.include指令必须放在程序开头B.define指令可以放在程序的任何位置C.if指令必须与endif配对使用D.ifndef指令用于定义宏二、填空题(20分,每空2分)1.在C语言中,用于表示逻辑"真"的值是______。2.表达式3+45的值是______。3.在C语言中,用于声明一个整型数组的语句是______。4.函数调用时,参数传递的方式有值传递和______两种。5.在C语言中,用于表示文件结束的宏是______。6.表达式sizeof(int)的值通常是______(假设int占4字节)。7.在C语言中,用于声明一个指向整型的指针变量的语句是______。8.在C语言中,用于声明一个函数指针的语句是______。9.在C语言中,用于声明一个返回指针的函数的语句是______。10.在C语言中,用于声明一个二维字符数组的语句是______。三、判断题(10分,每题1分)1.C语言是一种面向对象的程序设计语言。()2.在C语言中,switch语句中的case标签必须是常量表达式。()3.在C语言中,break语句只能用于循环语句和switch语句。()4.在C语言中,数组名可以作为函数的参数传递。()5.在C语言中,函数可以返回一个数组。()6.在C语言中,指针可以进行加减运算,但不能进行乘除运算。()7.在C语言中,结构体和联合体的主要区别在于结构体的所有成员同时存在,而联合体的成员共享同一内存空间。()8.在C语言中,文件指针指向文件的当前位置。()9.在C语言中,递归函数必须有一个终止条件。()10.在C语言中,宏定义在预处理阶段进行替换,不进行类型检查。()四、简答题(20分,每题5分)1.简述C语言中指针和数组的区别与联系。2.简述C语言中函数递归调用的优缺点。3.简述C语言中结构体和联合体的区别。4.简述C语言中预处理指令的作用和常用指令。五、程序阅读题(20分,每题10分)1.阅读以下代码,写出程序的输出结果:```cinclude<stdio.h>intmain(){inta=5,b=10;intp=&a,q=&b;inttemp;temp=p;p=q;q=temp;printf("a=%d,b=%d\n",a,b);printf("p=%d,q=%d\n",p,q);return0;}```2.阅读以下代码,写出程序的输出结果:```cinclude<stdio.h>voidfunction(inta,intb){inttemp=a;a=b;b=temp;}intmain(){intx=3,y=5;function(&x,&y);printf("x=%d,y=%d\n",x,y);return0;}```六、编程题(40分)1.编写一个函数,实现将一个字符串中的所有小写字母转换为大写字母。(10分)2.编写一个函数,实现计算一个整数的阶乘。(10分)3.编写一个函数,实现判断一个整数是否为素数。(10分)4.编写一个程序,实现从键盘输入10个整数,找出其中的最大值和最小值,并输出它们的位置。(10分)答案:一、选择题(30分,每题2分)1.D解析:string不是C语言的基本数据类型。C语言的基本数据类型包括整型(int)、浮点型(float,double)、字符型(char)等。字符串是通过字符数组来表示的。2.B解析:C语言标识符的命名规则是:由字母、数字和下划线组成,且第一个字符必须是字母或下划线,不能是数字。选项A以数字开头,不合法;选项C包含运算符,不合法;选项D是C语言的关键字,不能用作标识符。3.B解析:在C语言中,运算符的优先级从高到低大致为:括号、算术运算符(、/、%优先于+、-)、关系运算符、逻辑运算符、赋值运算符。因此,的优先级最高。4.B解析:在C语言中,字符串以'\0'作为结束标志,因此"Hello"包含5个字符和一个结束符,共占用6个字节。5.D解析:指针可以赋值为NULL,表示指针不指向任何有效的内存地址。NULL是一个宏定义,通常值为0。6.A解析:在C语言中,使用struct关键字来定义结构体。union用于定义联合体,enum用于定义枚举类型,typedef用于类型重命名。7.C解析:在C语言的三种循环结构中,do-while循环是先执行循环体,再判断条件,因此至少执行一次循环体;for循环和while循环都是先判断条件,再决定是否执行循环体。8.B解析:fopen()函数的第一个参数是文件名,第二个参数是打开方式。例如:FILEfp=fopen("example.txt","r");9.B解析:函数声明时,每个参数都必须单独指定类型。选项A中b没有指定类型;选项C和D中参数类型声明不完整。10.A解析:在C语言中,malloc()函数用于动态分配内存,返回一个指向分配内存的指针。free()用于释放内存,realloc()用于重新分配内存,calloc()用于分配并初始化内存。11.C解析:数组名是一个常量指针,指向数组的第一个元素;数组大小在定义时确定,不能在运行时改变;数组元素必须是相同的数据类型;数组未初始化时,元素值不确定。12.A解析:break语句用于跳出循环或switch语句;continue语句用于跳过本次循环的剩余部分;return语句用于从函数返回;exit()函数用于终止程序。13.B解析:在C语言中,函数只能有一个返回值,但可以通过指针或结构体等方式返回多个值;函数可以没有返回值(返回类型为void);函数可以递归调用;函数不能嵌套定义(但可以嵌套声明)。14.B解析:scanf()函数用于从标准输入读取数据;printf()用于格式化输出;puts()用于输出字符串并自动换行;getchar()用于读取单个字符。15.C解析:include指令可以放在程序的任何位置,但通常放在开头;define指令通常放在程序开头;if指令必须与endif或else配对使用;ifndef指令用于条件包含,防止重复包含。二、填空题(20分,每空2分)1.1解析:在C语言中,逻辑"真"用1表示,"假"用0表示。非0值被视为真,0被视为假。2.23解析:根据运算符优先级,先计算45=20,然后3+20=23。3.intarray[size];解析:在C语言中,声明整型数组的语法是:类型数组名[大小]。例如:intarr[10];4.地址传递解析:在C语言中,参数传递有值传递和地址传递两种方式。值传递是传递参数的值,地址传递是传递参数的地址(通常通过指针实现)。5.EOF解析:EOF是一个宏定义,表示文件结束,通常值为-1。6.4解析:sizeof运算符返回类型或变量的大小(以字节为单位)。在大多数系统中,int类型占4字节。7.intp;解析:声明指向整型的指针变量的语法是:类型指针名;。例如:intptr;8.int(func_ptr)(int);解析:声明函数指针的语法是:返回类型(指针名)(参数列表);。例如:int(fp)(int);9.intfunction(int);解析:声明返回指针的函数的语法是:返回类型函数名(参数列表);。例如:intgetArray(intsize);10.chararray[rows][cols];解析:声明二维字符数组的语法是:类型数组名[行数][列数]。例如:charstr[10][20];三、判断题(10分,每题1分)1.错误解析:C语言是一种面向过程的程序设计语言,不是面向对象的。面向对象的程序设计语言有C++、Java等。2.正确解析:在C语言的switch语句中,case标签必须是常量表达式,不能是变量。3.正确解析:break语句只能用于循环语句和switch语句,不能用于其他语句块。4.正确解析:在C语言中,数组名可以作为函数的参数传递,实际上传递的是数组的首地址。5.错误解析:在C语言中,函数不能直接返回一个数组,但可以返回指向数组的指针。6.正确解析:指针可以进行加减运算(指向同一数组的元素),但不能进行乘除运算。7.正确解析:结构体的所有成员同时存在,占用连续的内存空间;联合体的成员共享同一内存空间,同一时间只有一个成员有效。8.正确解析:文件指针指向文件的当前位置,用于指示下一次读写操作的位置。9.正确解析:递归函数必须有一个终止条件,否则会导致无限递归,最终导致栈溢出。10.正确解析:宏定义在预处理阶段进行简单的文本替换,不进行类型检查,这是宏的主要缺点之一。四、简答题(20分,每题5分)1.指针和数组的区别与联系:区别:-指针是一个变量,用于存储内存地址;数组是相同类型元素的集合,占用连续的内存空间。-指针可以指向不同的内存地址;数组名是常量,不能被赋值。-指针可以进行算术运算(如p++),数组名不能进行算术运算。联系:-数组名是指向数组第一个元素的指针常量。-可以通过指针来访问数组元素,如(arr+i)等同于arr[i]。-可以使用指针遍历数组。2.函数递归调用的优缺点:优点:-代码简洁:递归可以将复杂问题分解为简单问题的重复,使代码更简洁、易读。-解决特定问题:某些问题(如树的遍历、汉诺塔问题等)用递归解决更自然、更高效。缺点:-性能开销:递归调用需要额外的栈空间来保存调用状态,可能导致栈溢出。-效率问题:递归可能导致重复计算,效率低于迭代(但可以通过记忆化等技术优化)。-调试困难:递归程序通常难以调试和理解。3.结构体和联合体的区别:-内存占用:结构体成员各自占用独立的内存空间,结构体大小为所有成员大小之和;联合体成员共享同一内存空间,联合体大小为最大成员的大小。-数据存储:结构体可以同时存储所有成员的值;联合体同一时间只能存储一个成员的值,修改一个成员会影响其他成员。-使用场景:结构体用于描述具有多个属性的对象;联合体用于表示在不同情况下使用不同类型数据的场景。4.C语言预处理指令的作用和常用指令:作用:-在编译前对源代码进行文本处理,如宏替换、文件包含、条件编译等。-提高代码的可移植性和可维护性。常用指令:-include:包含其他文件的内容。-define:定义宏或常量。-if,ifdef,ifndef,else,elif,endif:条件编译。-undef:取消已定义的宏。-pragma:提供特定的编译器指令。五、程序阅读题(20分,每题10分)1.程序输出结果:```a=5,b=10p=10,q=5```解析:程序首先定义了两个整型变量a和b,并初始化为5和10。然后定义了两个指针p和q,分别指向a和b。接下来,通过临时指针temp交换了p和q的指向。最后,输出a和b的值(没有被修改,仍为5和10),以及p和q的值(因为指针指向已交换,所以输出10和5)。2.程序输出结果:```x=5,y=3```解析:程序定义了两个整型变量x和y,并初始化为3和5。然后调用function函数,传递x和y的地址。在function函数中,通过指针交换了x和y的值。因此,函数调用后,x的值变为5,y的值变为3。六、编程题(40分)1.编写一个函数,实现将一个字符串中的所有小写字母转换为大写字母。(10分)```cinclude<stdio.h>include<ctype.h>voidtoUpperCase(charstr){inti=0;while(str[i]!='\0'){if(str[i]>='a'&&str[i]<='z'){str[i]=str[i]-32;}i++;}}intmain(){charstr[100];printf("请输入一个字符串:");fgets(str,sizeof(str),stdin);toUpperCase(str);printf("转换后的字符串:%s\n",str);return0;}```2.编写一个函数,实现计算一个整数的阶乘。(10分)```cinclude<stdio.h>longfactorial(intn){if(n==0||n==1){return1;}else{returnnfactorial(n-1);}}intmain(){intnum;printf("请输入一个正整数:");scanf("%d",&num);if(num<0){printf("错误:请输入正整数。\n");}else{printf("%d的阶乘是:%ld\n",num,factorial(num));}return0;}```3.编写一个函数,实现判断一个整数是否为素数。(10分)```cinclude<stdio.h>include<stdbool.h>include<math.h>boolisPrime(intnum){if(num<=1){returnfalse;}if(num==2){returntrue;}if(num%2==0){returnfalse;}for(inti=3;i<=sqrt(num);i+=2){if(num%i==0){returnfalse;}}returntrue;}intmain(){intnum;printf(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论