C语言考试综合题

上传人:时间****91 文档编号:153328060 上传时间:2022-09-18 格式:DOC 页数:57 大小:173KB
返回 下载 相关 举报
C语言考试综合题_第1页
第1页 / 共57页
C语言考试综合题_第2页
第2页 / 共57页
C语言考试综合题_第3页
第3页 / 共57页
点击查看更多>>
资源描述
一、单选题1、有以下程序#define N 20 fun(int a,int n,int m) int i,j; for(i=m;i=n;i-) ai+1=ai; main() int i,aN=1,2,3,4,5,6,7,8,9,10; fun(a,2,9); for(i=0;i5;i+) printf(%d,ai); 程序运行后的输出结果是_。 A:10234 B:12344 C:12334 D:12234答案:C评析:本题考查的是循环的嵌套。本题函数fun的作用是将指定的数组元素(从下标n到下标m)向后移一位。由函数调用fun(a,2,9);可知,函数fun用于将a2到a9的各元素依次向后移一位,移完后,a数组中各元素的值分别为1,2,3,3,4,5,6,7,8,9,10,故输出的前5个数组元素为12334。故本题答案为C。等级:1 难度:1 区分度:1出题人:文本导入 修改人: 审核人: 创建时间:-06-25 最后修改时间: 知识点:没有定义2、有以下程序#define P 3 void F(int x)return(P*x*x); main() printf(%dn,F(3+5);程序运行后的输出结果是_。 A:192 B:29 C:25 D:编译出错答案:D评析:本题考查的是宏定义。return语句用于从被调函数带回一个函数值。void关键字表示无类型,即不需要从被调函数中带回函数值,所以不需要return语句,故编译时出错。故本题答案为D。等级:1 难度:1 区分度:1出题人:文本导入 修改人: 审核人: 创建时间:-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数的类型和返回值、宏定义3、有以下程序int fun1(double a)return a*=a;int fun2(double x,double y) double a=0,b=0;a=fun1(x);b=fun1(y); return(int)(a+b);main()double w;w=fun2(1.1,2.0);程序执行后变量w中的值是_。 A:5.21 B:5 C:5.0 D:0.0答案:C评析:本题考查的是数值类型的定义与强制转换。本题在进行调用函数fun2()时,又对函数fun1()进行了调用,由于函数fun1()定义为整型,所以第一次调用fun1()时返回的值为1,然后再将1赋值给a,此时由于a为double型,则系统自动类型转换,将1转换成了1.000000赋值给了变量a,以此类推,得b的值为4.000000,然后通过return(int)(a+b);将a+b的值强制转换为int型5返回给主函数,此时又由w的类型为double,所以返回的整型值5又被转换为double型。故输出结果为5.0。故本题答案为C。等级:1 难度:1 区分度:1出题人:文本导入 修改人: 审核人: 创建时间:-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数、不同类型数据间的转换与运算4、若有以下函数首部int fun(double x10, int *n)则下面针对此函数的函数声明语句中正确的是_。 A:int fun(double x, int *n); B:int fun(double, int ); C:int fun(double *x, int n); D:int fun(double *, int *);答案:D评析:本题考查的是函数的声明。 函数声明可以照写已定义的函数的首部,再加一个分号就成为了对函数的声明,在函数声明中也可以不写形参名,而只写形参的类型,但要保证与函数首部写法上的一致,即函数类型、函数名、参数个数、参数类型和参数顺序相同。字符数组可用指针来表示,所以选项D正确。故本题答案为D。等级:1 难度:1 区分度:1出题人:文本导入 修改人: 审核人: 创建时间:-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数的定义方法、指针5、有以下程序void f(int n,int *r) int r1=0;if(n%3=0) r1=n/3;else if(n%5=0) r1=n/5;else f(-n,&r1);*r=r1;main() int m=7,r;f(m,&r); printf(%dn,r);程序运行后的输出结果是_。 A:2 B:1 C:3 D:0答案:A评析:本题考查的是指针作为函数的参数和函数的调用。题目中定义了一个指针变量r作为形参的f()函数。在主函数main()中定义了两个变量m和r,同时给m赋初值7,执行f(m,&r);语句,调用f()函数并将m的初值7传递给形参n,将r的地址传给形参指针变量r。f()函数中通过指针r将最后的值返回。首先执行if语句中的条件:n%3=0,7%3=1条件为假,执行第一个else下的语句,同样不满足条件,再执行第二个else下的语句,n自行减一,n=6,再执行if语句,满足条件,r1=2,把r1的值2赋给指针变量r所指向的存储单元,即为主函数r的值,输出结果为2。故本题答案选A。等级:1 难度:1 区分度:1出题人:文本导入 修改人: 审核人: 创建时间:-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/用指针作函数参数6、有以下程序#include #include void fun( char s10,int n) char t; int i,j;for(i=0;in-1;i+)for(j=i+1;jsj0) t=si0;si0=sj0;sj0=t;main() char ss510=bcc,bbcc,xy,aaaacc,aabcc;fun(ss,5); printf(%s,%sn,ss0,ss4);程序的运行结果是_。 A:xy,aaaacc B:aaaacc,xy C:xcc,aabcc D:acc,xabcc答案:D评析:本题的考查点是循环嵌套。函数fun的功能是对数组中的每个字符串的第一个字符按由小到大的顺序排序,最终输出数组的第一个和第五个的字符串。比较各字符串的首字符可知,字符a最小,字符x最大,所以输出的ss0的值为acc,ss4的值为xabcc。故本题答案为D。等级:1 难度:1 区分度:1出题人:文本导入 修改人: 审核人: 创建时间:-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/循环的嵌套7、有以下程序void f(int *x,int *y) int t; t=*x;*x=*y;*y=t; main() int a8=1,2,3,4,5,6,7,8,i,*p,*q; p=a;q=&a7; while(pq)f(p,q);p+;q-;for(i=0;i8;i+) printf(%d,ai);程序运行后的输出结果是_。 A:8,2,3,4,5,6,7,1, B:5,6,7,8,1,2,3,4, C:1,2,3,4,5,6,7,8, D:8,7,6,5,4,3,2,1,答案:D评析:本题考查的是函数的调用。本程序中函数f的作用是交换指针变量x和y所指向的存储单元的值。在主函数中,能过p=a;q=&a7;将指针变量p指向了数组的第一个元素,指针变量q指向了数组的最后一个元素。通过f(p,q)调用函数f进行对称的数组元素的交换。当while循环4次(即p=q)后,a数组中各元素的值分别为87654321,所以程序输出的结果为8,7,6,5,4,3,2,1,。故本题答案为D。等级:1 难度:1 区分度:1出题人:文本导入 修改人: 审核人: 创建时间:-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数的正确调用,嵌套调用,递归调用8、已定义以下函数fun(char *p2, char *p1)while(*p2=*p1)!=0)p1+;p2+; 函数的功能是_。 A:将p1所指字符串复制到p2所指内存空间 B:将p1所指字符串的地址赋给指针p2 C:对p1和p2两个指针所指字符串进行比较 D:检查p1和p2两个指针所指字符串中是否有0答案:A评析:本题的考查点是函数。while(*p2=*p1)!=0表示将p1所指向的值赋给*p2,即将p1所指字符串复制到p2所指内存空间。在这里*P2=*p1是赋值操作,而不是比较是否相等,比较应当为双等号=。所以B,C,D都不对。故本题答案为A。等级:1 难度:1 区分度:1出题人:文本导入 修改人: 审核人: 创建时间:-06-25 最后修改时间: 知识点:没有定义9、以下程序中函数f的功能是将n个字符串,按由大到小的顺序进行排序。#include void f(char p10,int n) char t20; int i,j;for(i=0;in-1;i+)for (j=i+1;jn;j+)if(strcmp(pi,pj)0) strcpy(t,pi);strcpy(pi,pj);strcpy(pj,t);main() char p10=abc,aabdfg,abbd,dcdbe,cd;int i;f(p,5); printf(%dn,strlen(p0);程序运行后的输出结果是_。 A:6 B:4 C:5 D:3答案:C评析:本题的考查点是比较字符串的大小。比较字符串的大小是从字符串的第一个字母开始比较,如果第一个字母相同则比较第二个字母,以此类推,直至字符串结束,结合本题可知,比较后的字符串数组为:p0=dcdbep1=cdp2=abcp3=abbdp4=aabdfg所以,strlen(p0)=5。故本题答案为C。等级:1 难度:1 区分度:1出题人:文本导入 修改人: 审核人: 创建时间:-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/FOR循环结构10、以下程序中的函数reverse的功能是将a所指数组中的内容进行逆置。void reverse(int a,int n) int i,t;for(i=0;in/2;i+)t=ai;ai=an-1-i;an-1-i=t;main() int b10=1,2,3,4,5,6,7,8,9,10; int i,s=0;reverse(b,8);for(i=6;i=A&ch=Z) ch=ch-A+a;return ch;main() char s=ABC+abc=defDEF,*p=s;while(*p) *p=cchar(*p);p+;printf(%sn,s); A:abc+ABC=DEFdef B:abc+abc=defdef C:abcABCDEFdef D:abcabcdefdef答案:B评析:本题中cchar函数的作用是:如果参数ch是大写字母,则将它转换成小写的,而对大写字母以外的字符不起作用。所以答案应该是B。等级:1 难度:1 区分度:1出题人:文本导入 修改人: 审核人: 创建时间:-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数的正确调用,循环、指针13、设有以下函数;f(int a) int b=0;static int c=3;b+;c+;return(a+b+c);如果在下面的程序中调用该函数,则输出结果是_。main() int a=2, i;for(i=0;i3;i+) printf(%dn,f(a);A) B) C) D)7 7 7 78 9 10 79 11 13 7 A:A) B:B) C:C) D:D)答案:A评析:本题考查的是C语言的静态数据类型。静态数据类型的变量的值在退出了函数时依然存放在内存中,且只初始化一次。本题答案为A。等级:1 难度:1 区分度:1出题人:文本导入 修改人: 审核人: 创建时间:-06-25 最后修改时间: 知识点:没有定义14、下列程序的运行结果是_。void fun(int *a,int *b) int *k;k=a;a=b;b=k;main() int a=3,b=6,*x=&a,*y=&b;fun(x,y);printf(%d %d,a,b); A:6 3 B:3 6 C:编译出错 D:0 0答案:B评析:本题中主函数里的x、y,fun函数里的a,b,k,这些都是指针,fun函数中只是将a,b这两个指针交换了位置,而并没有改变主函数中变量a,b的值。本题答案为B。等级:1 难度:1 区分度:1出题人:文本导入 修改人: 审核人: 创建时间:-06-25 最后修改时间: 知识点:没有定义15、有以下程序main() int a3=1,2,3,4,5,0,(*pa)3,i;pa=a;for(i=0;i3;i+)if(i2) pa1i=pa1i-1;else pa1i=1;printf(%dn,a01+a11+a12);执行后输出结果是_。 A:7 B:6 C:8 D:无确定值答案:A评析:本题的考查点是二维数组和指针数组的应用。在所给的程序中,pa指向二维数组首地址a,接着执行下面的for循环,当i=0或i=1时,数组元素 pa1i的值减1,当 i=2时,数组元素pa1i的值为1,此时得到新的二维数组a3=1,2,3,3,4,1,最终打印结果就是2+4+1=7。故本题答案为A。等级:1 难度:1 区分度:1出题人:文本导入 修改人: 审核人: 创建时间:-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/FOR循环结构、2级指针16、有以下程序main()char str10=China,Beijing,*p=str;printf(%sn,p+10);程序运行后的输出结果是_。 A:China B:Bejing C:ng D:ing答案:B评析:此题考的是指向数组元素的指针变量。本题首先要知道,C语言中二维数组元素排列的顺序是按行存放,即在内存中先顺序存放第一行的元素,再存放第二行的元素。此题二维数组str0前5个元素为C,h,i,n,a,0,第6个元素为0,后4个元素为空字符。紧接着内存单元存放的内容即从str10到str19为B,e,i,j,i,n,g,0,第八个元素为0,后两个元素为空字符,执行*p=str后,指针p就指向了二维数组str的首地址,所以p+10就指向了从首地址依次向后的第11个存储单元即字符B的地址,所以输出Beijing,故答案为B。如果此题将*p=str改为(*p)10=str;则p+10指的就是str的第10行,如果此时要想输出Beijing,则必需将p+10改为p+1,因为(*p)10中的p是行指针,它是指向包含10个元素的一维数组,那么p+1就是加的一行了;而本题的p+1只是移动一个位置,因为此题的p只是一个指针变量。故本题答案为B。等级:1 难度:1 区分度:1出题人:文本导入 修改人: 审核人: 创建时间:-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/指向数组元素的指针变量17、有以下程序段int a10=1,2,3,4,5,6,7,8,9,10,*p=&a3,b;b=p5;b中的值是_。 A:5 B:6 C:8 D:9答案:D评析:int *p中p为指向整型数据的指针变量,*p为指针变量p所指向的变量。指针变量中只能存放地址(指针),本题中p存放的是a3的地址,即p指向数组4,5,6,7,8,9,10,b=p5=9。故本题答案为D。等级:1 难度:1 区分度:1出题人:文本导入 修改人: 审核人: 创建时间:-06-25 最后修改时间: 知识点:没有定义18、若有以下说明和语句int c45,(*p)5;p=c;能够正确引用c数组元素的是_。 A:p+1 B:*(p+3) C:*(p+1)+3 D:*(p0+2)答案:D评析:本题考查的是数组元素的引用。如果定义一个指针指向二维数组的一行,则可以移动到下一行,这就是行指针。行指针的定义格式为:存储类型 数据类型(*指针)n 这里的n是一个整数,表示所指向的二维数组的列数。(*p)5中p是指向一个包含5个元素的一维数组,p的值就是该一维数组的首地址。所以当用行指针访问二维数组时,行指针每增加1,就移动一行,即指向二维数组的下一行,例如此题中的p+i将指向数组的第i行。即选项A所指的意思是指向数组c的第1行,并不是引用c数组的元素;B答案中p+3是指向数组元素的第3行,*(p+3)是指第三行第零个元素的地址;选项C由对选项A,选项B的解释可知,它指的是第一行第3列元素的地址;选项D中p0+2是指第0行第2列元素的地址,再加个*就表示第0行第2列的元素,即c02。故本题答案为D。等级:1 难度:1 区分度:1出题人:文本导入 修改人: 审核人: 创建时间:-06-25 最后修改时间: 知识点:没有定义19、若要用下面的程序片段使指针变量p指向一个存储整型变量的动态存储单元int *p;p= _ malloc(sizeof(int) );则应填入_。 A:int B:int * C:(*int) D:(int*) 答案:D评析:本题的考查点是强制类型转换。不论p是指向什么类型的指针变量,都可以通过强制类型转换的方法使之类型一致,强制类型转换的格式为(数据类型 *)。故本题答案为D。等级:1 难度:1 区分度:1出题人:文本导入 修改人: 审核人: 创建时间:-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/不同类型数据间的转换与运算、指针20、若有以下说明和语句,请选出哪个是对c数组元素的正确引用_。int c45,(*cp)5;cp=c; A:cp+1 B:*(cp+3) C:*(cp+1)+3 D:*(*cp+2) 答案:D评析:本题的考查点是数组元素的引用。cp=c这个语句是将数组c的首地址赋给了指针数组cp的第一个数组元素。选项A,cp+1是指将数组c的首地址加1,不是对数组元素的引用;选项B,*(cp+3)是地址等于数组c的首地址加3的那个内存单元的内容,不是对数组元素的引用;选项C,*(cp+1)+3是地址等于数组c的首地址加1的那个内存单元中存放的值加3,不是对数组元素的引用。故本题答案为D。等级:1 难度:1 区分度:1出题人:文本导入 修改人: 审核人: 创建时间:-06-25 最后修改时间: 知识点:没有定义21、设有以下语句,其中不是对a数组元素的正确引用的是:_(其中0i10)int a10=0,1,2,3,4,5,6,7,8,9,*p=a; A:ap-a B:*(&ai) C:pi D:*(*(a+i) ) 答案:D评析:本题的考查点是通过指针引用数组元素。观察程序可知,a实际上就是数组a的首地址,所以*(a+i)表示的就是数组a中的第i个元素的值,进而,我们可以知道 *(*(a+i) ) 必然不是对a数组元素的正确引用。故本题答案为D。等级:1 难度:1 区分度:1出题人:文本导入 修改人: 审核人: 创建时间:-06-25 最后修改时间: 知识点:没有定义22、下面程序main()int a10=1,2,3,4,5,6,7,8,9,10,*p=a;printf(%dn,*(p+2) );的输出是_。 A:3 B:4 C:1 D:2 答案:A评析:本题的考查点是通过指针引用数组元素。*p=a语句是使指针p指向数组a的第一个数组元素,因此*(p+2)即是数组a的第3个元素的值,即a2。故本题答案为A。等级:1 难度:1 区分度:1出题人:文本导入 修改人: 审核人: 创建时间:-06-25 最后修改时间: 知识点:没有定义23、下面程序void prtv(int *x) printf(%dn,+*x);main() int a=25;prtv(&a);的输出是_。 A:23 B:24 C:25 D:26 答案:D评析:本题的考查点是指针变量作为函数参数。观察程序,可以发现,函数prtv()的作用是将地址等于x的内存单元中值加1,因为我们在主函数中是将变量a的地址作为实参传递给了prtv()函数,所以,函数prtv()将地址等于变量a的地址的那个内存单元中值加一,打印结果自然就是25+1=26了。故本题答案为D。等级:1 难度:1 区分度:1出题人:文本导入 修改人: 审核人: 创建时间:-06-25 最后修改时间: 知识点:没有定义24、下面函数int fun1(char*x) char *y=x;while(*y+);return(y-x-1);的功能是_。 A:求字符串的长度 B:比较两个字符串的大小 C:将字符串x复制到字符串y
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!