C语言综合应用期试题及答案_第1页
C语言综合应用期试题及答案_第2页
C语言综合应用期试题及答案_第3页
C语言综合应用期试题及答案_第4页
C语言综合应用期试题及答案_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

C语言综合应用期试题及答案考试时间:______分钟总分:______分姓名:______一、单项选择题(本大题共20小题,每小题1.5分,共30分)1.在C语言中,下列关于字符型数据与整型数据关系的描述中,正确的是A.字符型数据与整型数据的长度相同B.字符型数据不能参与数值运算C.字符型数据在内存中以ASCII码形式存储D.字符型数据就是整型数据2.若有定义:inta=10,b=20,*p1=&a,*p2=&b;则执行语句*p1=*p2;后,a的值为A.10B.20C.编译错误D.随机值3.下列关于函数的描述中,错误的是A.C程序从main函数开始执行B.函数定义不能嵌套C.函数调用必须先声明D.实参和形参的个数必须相等4.若有定义:intx[3][4];则下列引用错误的是A.x[0][0]B.x[2][3]C.x[3][1]D.x[1][0]5.下列程序的输出结果是```c#include<stdio.h>intmain(){inta=5;switch(a){case1:printf("One");case2:printf("Two");default:printf("Other");}return0;}```A.OtherB.TwoOtherC.OneTwoOtherD.编译错误6.下列变量定义中,合法的是A.int_2a;B.inta-b;C.inta1;D.intchar;7.若有定义:charstr[]="Hello";则sizeof(str)的值是A.5B.6C.10D.118.下列关于指针的描述中,正确的是A.指针变量可以指向任何类型的变量B.空指针的值可以是0C.一个指针变量只能指向一种类型的变量D.指针运算只对数组有效9.执行以下代码后,i的值是```cinti=0;while(i<10){if(i%2==0)i++;elsecontinue;i++;}```A.5B.10C.11D.1210.下列关于结构体(struct)的描述中,错误的是A.结构体变量可以赋值B.结构体变量不能相互赋值C.结构体变量可以作为函数参数D.结构体变量可以进行比较11.若有定义:inta=10,*p=&a;则表达式p-&a的结果是A.2B.1C.0D.编译错误12.下列预处理命令中,用于定义宏的是A.#includeB.#defineC.#ifdefD.#undef13.在文件操作中,以追加方式打开文件的模式是A."r"B."w"C."a"D."r+"14.若有定义:intarr[5]={1,2,3,4,5};则arr[4]的值是A.1B.2C.4D.515.下列代码的输出结果是```c#include<stdio.h>intmain(){inti=3;printf("%d,%d",i++,++i);return0;}```A.3,4B.4,4C.4,5D.3,516.函数调用func((x,y),(x,y+1));中,实参的个数是A.1B.2C.3D.417.下列关于数组的描述中,正确的是A.数组名是一个常量,可以重新赋值B.C语言允许定义空数组C.数组元素在内存中是连续存放的D.字符数组一定以'\0'结尾18.若有定义:inta[3][3]={{1,2,3},{4,5,6},{7,8,9}};则*(a+1)+1对应的数组元素是A.a[1][1]B.a[1][2]C.a[2][1]D.a[2][2]19.以下关于递归函数的描述中,错误的是A.递归函数必须有终止条件B.递归函数在调用过程中会不断复制自身C.递归函数可以简化某些复杂问题的求解D.递归函数的效率通常低于循环20.若要将文件指针fp移动到文件开头,应使用的函数是A.rewind(fp)B.fseek(fp,0,SEEK_SET)C.ftell(fp)D.fgetc(fp)二、多项选择题(本大题共5小题,每小题2分,共10分。每小题有多个正确答案,多选、少选、错选均不得分)21.下列关于break语句的描述中,正确的是A.break语句可以用于switch语句中跳出循环B.break语句只能用于循环语句中C.break语句可以跳出switch语句D.break语句可以跳出多层循环22.下列哪些是合法的指针定义?A.int*p;B.int*p[3];C.int(*p)[3];D.intp;23.下列关于结构体的描述中,正确的有A.结构体类型可以用来定义变量B.结构体变量之间可以整体赋值C.结构体变量的大小是其所有成员大小的简单相加D.结构体成员可以是任意数据类型24.下列关于文件的描述中,正确的有A.文件打开后必须关闭B.文本文件和二进制文件在内存中的存储形式不同C.feof函数可以用来判断文件是否结束D.fopen函数打开文件失败时返回NULL25.若有定义:inta=5,b=6;则下列表达式的值为0的是A.a&&bB.a||bC.!aD.a==b三、填空题(本大题共10小题,每小题2分,共20分)26.若有定义:inta=3,b=4,c=5;则表达式a*b-c的值是______。27.若有定义:inta[10];则a[9]代表数组中的第______个元素。28.若有定义:int*p;p=(int*)malloc(sizeof(int));则释放该内存空间的函数是______。29.在C语言中,字符串常量在内存中存储时,系统会自动在末尾添加一个______字符。30.若有定义:intx=10;int*p1=&x;intp2=&p1;则表达式p2的值是______。31.函数intfunc(inta,intb){returna+b;}中,参数a和b是______参数。32.若有定义:struct{intnum;charname[20];}stu;则访问成员num的语句是______。33.以下程序的输出结果是______。```c#include<stdio.h>intmain(){inti;for(i=1;i<=5;i++)if(i%2==0)continue;printf("*");return0;}```34.若有定义:charstr[]="HelloWorld";则strlen(str)的值是______。35.在预处理命令#defineMAX(a,b)((a)>(b)?(a):(b))中,MAX(3,5)的值是______。四、程序阅读题(本大题共4小题,每小题5分,共20分)36.阅读以下程序,写出输出结果。```c#include<stdio.h>voidswap(int*x,int*y){intt=*x;*x=*y;*y=t;}intmain(){inta=10,b=20;swap(&a,&b);printf("%d,%d",a,b);return0;}```37.阅读以下程序,写出输出结果。```c#include<stdio.h>intfunc(intn){if(n==1||n==2)return1;returnfunc(n-1)+func(n-2);}intmain(){printf("%d",func(5));return0;}```38.阅读以下程序,写出输出结果。```c#include<stdio.h>intmain(){inti,j;for(i=1;i<=3;i++){for(j=1;j<=i;j++){printf("%d",j);}printf("\n");}return0;}```39.阅读以下程序,写出输出结果。```c#include<stdio.h>intmain(){charstr[]="Programming";inti=0;while(str[i]){if(str[i]>='a'&&str[i]<='z')str[i]=str[i]-32;i++;}printf("%s",str);return0;}```五、综合编程题(本大题共3小题,每小题10分,共30分)40.编写一个函数,实现统计字符串中数字字符的个数。要求在main函数中输入一个字符串,调用函数统计,并输出结果。41.编写一个函数`intmax(intarr[],intn)`,用于求数组中最大元素的值。要求在main函数中定义一个包含10个整数的数组,输入数据后调用该函数,并输出最大值。42.定义一个结构体`structStudent`,包含学号(num)、姓名(name)、成绩(score)三个成员。编写程序,定义一个包含5个学生的结构体数组,从键盘输入5个学生的信息,然后计算并输出所有学生的平均分及最高分学生的信息。试卷答案一、单项选择题1.C*解析:字符型数据在内存中是以ASCII码的形式存储的,本质上是一个整数,可以参与数值运算。2.B*解析:`*p1=*p2;`表示将指针`p2`所指向的变量`b`的值赋值给指针`p1`所指向的变量`a`。执行后`a`的值变为20,`b`不变。3.B*解析:在C语言中,函数定义不能嵌套,即不能在一个函数内部定义另一个函数。但函数调用可以嵌套,函数声明可以在调用前或调用后进行。4.C*解析:`intx[3][4];`定义了一个3行4列的二维数组。行下标范围是0~2,列下标范围是0~3。`x[3][1]`的行下标3越界,因此是错误的引用。5.A*解析:`switch`语句中,`break`语句用于跳出当前的`switch`语句块。当`a=5`时,不匹配`case1`和`case2`,直接执行`default`,输出"Other"后遇到`return0`程序结束,不会继续执行后面的`case2`。注意`switch`中没有`continue`语句。6.C*解析:C语言标识符不能以数字开头,不能包含空格,不能使用关键字。`inta1`是合法的;`int_2a`以数字开头不合法;`inta-b`包含减号不合法;`intchar;``char`是关键字不合法。7.B*解析:字符数组`str`包含5个字符'H','e','l','l','o',系统自动在末尾添加一个结束符`\0`。`sizeof`计算的是分配的内存大小,即6字节。8.B,C,D*解析:`int*p`是定义一个指向整型的指针变量,可以指向任意整型变量(A错);`int*p[3]`是指针数组;`int(*p)[3]`是数组指针;`intp`是二级指针。A选项错误是因为虽然可以指向整型,但在定义时必须明确指向整型,不能指向任何类型。9.死循环*解析:当`i=0`时,`i%2==0`成立,执行`i++`,`i`变为1,然后`continue`跳过后面的`i++`。当`i=1`时,`i%2!=0`,执行`continue`,同样跳过`i++`。因此`i`始终为1,永远无法满足`i<10`结束循环的条件。10.B*解析:C语言允许结构体变量之间进行整体赋值(A正确)。结构体变量不能直接进行大小比较(D错误,需逐成员比较)。结构体变量的大小是其所有成员大小加上填充字节的总和(C错误)。结构体成员可以是任意类型(A正确)。11.C*解析:`p`指向变量`a`,`&a`是变量`a`的地址。两个指针指向同一个地址,相减结果为0。12.B*解析:`#define`是宏定义命令;`#include`是文件包含;`#ifdef`和`#undef`是条件编译命令。13.C*解析:`"r"`以只读方式打开;`"w"`以写入方式打开(会覆盖原有内容);`"a"`以追加方式打开,不会覆盖原有内容;`"r+"`以读写方式打开。14.D*解析:数组下标从0开始。`arr[0]`是1,`arr[4]`是第5个元素,值为5。15.A*解析:`i++`是后置递增,表达式使用旧值3,然后`i`变为4;`++i`是前置递增,表达式使用新值4。因此输出`3,4`。16.B*解析:函数参数是逗号表达式`(x,y)`和`(x,y+1)`。逗号表达式的值是最后一个表达式的值,即`y`和`y+1`。因此传递给函数的参数是`y`和`y+1`,共2个参数。17.C,D*解析:数组名是一个常量指针(A错误),不能重新赋值;C语言标准中数组大小必须为常量(B错误,指标准C),但C99支持变长数组,不过通常考试指标准C,空数组定义不合法;数组元素在内存中是连续存放的(C正确);字符数组一定以`\0`结尾(D正确)。18.A*解析:`a`是数组名,代表首行地址。`a+1`是第二行地址。`*(a+1)`是第二行(即数组元素`a[1]`)的首地址。`+1`是第二行第二个元素的地址。``二次解引用后指向该元素,即`a[1][1]`。19.B*解析:递归函数必须有一个明确的终止条件(A正确)。递归调用是调用函数本身,不是复制代码(B错误)。递归可以简化复杂问题(C正确)。递归效率通常低于循环(D正确)。20.A,B*解析:`rewind(fp)`将文件指针移到文件开头;`fseek(fp,0,SEEK_SET)`也可以将指针移到文件开头(SEEK_SET表示文件开头);`ftell(fp)`获取当前位置;`fgetc(fp)`获取一个字符。二、多项选择题21.A,C*解析:`break`语句可以跳出switch语句(A正确);`break`也可以用于switch语句中跳出循环(C正确,指跳出switch)。`break`不能跳出多层循环(D错误)。`break`只能用于循环语句或switch语句中(B错误)。22.A,B,C,D*解析:这四种定义都是合法的指针定义。`int*p`是一级指针;`int*p[3]`是指针数组;`int(*p)[3]`是数组指针;`intp`是二级指针。23.A,C,D*解析:结构体变量可以相互赋值(A正确);结构体变量的大小是其所有成员大小加上内存对齐后的总和(C正确);结构体成员可以是任意数据类型(D正确)。24.A,B,C,D*解析:文件打开后必须关闭(A正确);文本文件和二进制文件在内存中存储形式不同(B正确);`feof`函数用于判断文件是否结束(C正确);`fopen`打开失败返回NULL(D正确)。25.C,D*解析:`5&&6`结果为真(1);`5||6`结果为真(1);`!5`结果为假(0);`5==6`结果为假(0)。三、填空题26.7*解析:优先级`*`高于`-`,计算`3*4=12`,再计算`12-5=7`。27.10*解析:数组下标从0开始,`a[0]`到`a[9]`共10个元素。28.free(p)*解析:使用`malloc`动态分配的内存必须使用`free`函数释放。29.\0*解析:C语言规定字符串常量以空字符`\0`作为结束标志。30.10*解析:`p2`指向`p1`,`*p2`是`p1`,`p2`是`*p1`即变量`a`的值。31.值*解析:该函数定义的是值传递参数。32.stu.num*解析:结构体变量成员访问使用点号`.`运算符。33.无输出*解析:循环中`i`为奇数时`continue`跳过`printf`;`i`为偶数时`continue`也跳过`printf`。整个循环过程`printf`都没有被调用。34.10*解析:"HelloWorld"包含10个字符,不包含结束符`\0`。35.5*解析:宏展开为`((3)>(5)?(3):(5))`,比较3和5,取5。四、程序阅读题36.20,10*解析:`swap(&a,&b)`函数通过指针交换了`a`和`b`的值。主函数中`a`变为20,`b`变为10。37.5*解析:这是一个斐波那契数列递归函数。`f(5)=f(4)+f(3)`,`f(4)=3,f(3)=2`,结果为5。38.12123*解析:外层循环控制行数`i`,内层循环控制每行打印的列数`j`。*

温馨提示

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

评论

0/150

提交评论