C语言试题,二级C语言试题.doc
如有侵权,请联系网站删除,仅供学习与交流C语言试题,二级C语言试题【精品文档】第 9 页二级C语言程序设计模拟试题(一)一、单项选择题。(每小题1分,共20分)1、一个C语言程序是由( B )组成。A) 一个函数 B) 一个或若干个函数C) 一个过程 D) 一个过程或若干个过程知识点:C语言程序的结构2、C语言用( D )表示逻辑真值。A) true B) T C) 整型值0 D) 非0整型值知识点:数据类型3、如果程序中有#include "文件名" 则意味着( A )。A) 将"文件名"所指的那个文件的全部内容,在此命令行出现的这一点上,插入源程序B) 指定标准输入输出C) 宏定义一个函数D) 条件编译说明知识点:编译预处理4、为一个结构体变量分配存储空间时,其所占容量为( B )。A) 结构体中第一个成员所占容量 B) 结构体中所有成员所占容量C) 结构体中所有成员中所占容量最大者 D) 结构体中最后一个成员所占容量知识点:结构体5、如果int *px,*py;则可用temp=*px;*px=*py;*py=temp实现*px和*py的交换。其中temp应该说明为( A )。A) int temp B) int &temp C) int *temp D) int *temp知识点:指针6、于合法的c语言长整型常量是( A )。A) 12L B) 6887273 C) 5E12 D) (long)6887273知识点:数据类型7、下列程序输出正确的是( A )。main() int a=-1,b=1,c; c=(a+<=0)&&!(b-<=0); printf(“%d,%d,%d”,a,b,c);A) 0,0,1 B) -1,1,1 C) 0,0,0 D) 0,1,0知识点:逻辑运算符8、已知E的ASCII码是69,则执行printf(“%c”,D-8+5);的结果是( B )。A) 66 B) A C) B D) E知识点:数据类型与自动转换9、段名访问的方式是( A )A) 结构名.位段名 B) 位段名 C) 结构名 D) *&位段名知识点:位段10、有字符数组a,则正确的输入语句是( C )。A) gets('a'); B) scanf(" %c",a); C) scanf(" %s",a); D) gets(" a");知识点:字符数组11、如果程序中有static char c;则编译时会对其自动设置初始值为( C )A) 'n' B) "n" C) 0 D) '0'知识点:存储类型与静态变量12、如果程序中有语句FILE fp;fp=fopen("abc.txt","w");则程序准备做( C )。A) 对文件读写操作 B) 对文件读操作 C) 对文件写操作 D) 对文件不操作13、如果有#define f(x,y) x+y及int a=2,b=3;则执行printf("%d",f(a,b)*f(a,b)后的值为( C )。A) 36 B) 25 C) 11 D) 1314、在下面的说明中,( D )是指向函数的指针。A)int *p; B)int (*p); C) *p();D)(*p)();15、如果在C程序中有main(int argc,char *argv),那么( D )是指命令行中的参数个数。A)argvB)argvC)argc,argvD)argc16、下列程序运行的结果是( B )。#include <stdio.h>main() unsigned a,b,x; a=0x255; b=a<<4 x=(b)&0xffA) 0x55 B) 0xaf C) 0x50 D) 0xda17、下面程序中选择正确答案( C )main() int k=0; while (printf(“*”) k+; if (k<3) break;A) 其中循环控制表达式与0等价 B) 其中循环控制表达式与0等价C) 其中循环控制表达式与1等价 D) 其中循环控制表达式不合法18、用文件包含形式的预处理时,当#include后面的文件名用尖括号括起,寻找被包含文件的方式为( B )A) 先在源程序所在目录搜索,再按系统设定的标准方式搜索B) 直接按系统设定的标准方式搜索C) 仅仅搜索当前目录D) 仅仅搜索源程序所在目录19、设有如下函数定义int f(char *s) char *p=s; while (*p) p+; return (p-s);如果用printf (“%d”,f(“abcdef”); 调用该函数,则输出结果为( B )。A) 0 B) 6 C) 7 D) 奇怪字符20、程序段 ( C )int x=-1;do x=x*x; (!x);A) 是死循环 B) 循环执行2次 C) 循环执行1次 D) 不合法二、不定项选择题。(每小题1分,共10分,错选、漏选均不得分)1、存储类型为static 的静态变量的正确描述有( ABE )。A) 静态变量有外部静态变量和内部静态变量之分。B) 静态变量的数据类型如果是整型,则其缺省初值由编译系统赋为0。C) 内部静态变量不能赋初值。D) 所谓全局变量就是指静态变量。E) 外部静态变量只在本文件中可见。2、下列哪些运算符的优先级相同且运算次序从左到右( AC )。A) () -> B) + - C) < >= D) && | E) & |3、在C语言中,下面哪些描述是正确的( BDE )。A) 在switch(c)语句中,c 可以是任意表达式。B) else if 语句可以转化为switch语句。C) 大小写没有区别。D) goto语句必须与“转向标号”配合使用。E) C语言提供函数的递归调用机制。4、如有说明structint day;int month;int year; d,*pd;则下列哪些引用是正确的( ABC )。A) pd->year B) (*pd) .year C) d.year D) *pd.year E) *(pd->year)5、在C语言中,系统指定的标准设备文件有(BCD )。A) fopen B) stdin C) stdout D) stderr E) fclose6、C语言中要求所用到的变量作强制性定义,其目的是( ACE )A) 变量被指定类型后便于分配内存单元 B) 确定变量的数量C) 保证程序中正确地使用变量 D) 保证变量不同名E) 根据变量的类型便于确定运算的合法性7、结构化程序是由( ADE )组成的。A) 顺序结构 B) 模块结构 C) 树型结构D) 选择结构 E) 循环结构8、下列程序中,若输入的命令行为:file1 china computer ,则输出的结果为( B )。#include <stdio.h>main(int argc, char * argv) while (-argc>0) printf(“%s”,*+argv);A) file1 B) china C) china computer D) language 9、下面( ACDE )是位段特性的正确描述。A) 位段空间的分配,不受机器的限制一律从左到右B) 可以定义位段数组 C) 位段的长度不能大于存储单元的长度D) 位段可以用整数格式输出 E) 位段的长度可以为010、函数返回值的正确描述是( ACE )。A) 函数的返回值是通过函数中的return语句获得 B) 有多少个return语句就有多少个返回值C) 在定义函数时,对函数值的说明类型与return语句表达式的类型应一致D) 如果函数值的类型与return中表达式的类型不一致时,以表达式(应该以函数类型为准)为准E) 当函数中没有return语句时,返回的是一个不确定的值三、判断分析题(如正确选;如错误选。每小题1分,共10分)1、使用typedef可以自定义一种新的数据类型。(X)2、结构(struct)和联合(uion)类型实质上是相同的。 ( X )3、可以用顺序、分支、循环三种结构构造任何算法。()4、如有int a=2,b=4,c=8;则表达式(a>b) && c>a) | (c>b)的值为真。()5、求n!既可以用递归的方式,也可以用递推的方式。()6、在C语言中,程序main()int ptr ;*ptr=100;printf("%d",*ptr);是正确的。(X)7、C语言的编译系统对宏命令的处理是在源程序编译阶段进行的。(X)8、C语言中的输入输出操作是通过专门的输入输出语句实现的。(X)9、C语言可以处理的文件类型是文本文件和二进制文件。()10、若定义 int *p;则程序中调用*p时,它代表p的地址。(X)四、填空题。(每空2分,共20分)1、构成递归的两个组成部分是递归方式和 递归结束 条件。2、ANSI C提供了一个测试文件是否在结尾的状态函数feof ( pf ),当文件结束时feof函数的值为 非零整数 。3、下面是输出链表head的函数print。#include <stdio.h>struct stud long num; float score; struct stud *next;void print(struct stud *head) struct stud *p; p=head; if(head!=NULL) do printf("%ld%5.1fn",p->num,p->score); _ p=p->next _; while(p!=NULL);4、下面函数能找出字串s所包含的子串sub第1次出现的位置,请完善此程序填空。search(s,sub)_ char *s,*sub;_ _ int i,j,k; for(i=0;si!=0;i+) for(j=i,k=0;_ sj!='0'&&subk!='0'_&&sj= =subk;j+,k+); if(subk= =0) return(i); return(-1);5、算满足不等式1+1/2+1/3+1/4+.+1/n>limit所需调和级数的项数.其中limit是提出的要满足的要求,而所求的是项数n,请完善此程序填空。#include <stdio.h>main() int termcount=0; float sum,limit; sum=0.0; printf(“limit=?”); scanf(“%f”,&limit); do termcount+=1; sum+=1.0/termcount; while (_ sum< limit _); printf(“n=%dtsum=%fn”,termcount,sum);6、有已排好序(升序)的字符串a ,下面的程序是将字符串s中的每个字符按升序的规律插入到a中。请完善程序。#include <stdio.h>#include <string.h>void main() char a20="abcdefwxy" char s="english" int i,j,k; for(k=0;sk!='0'k+) j=0; while(sk>=aj&&aj!='0') j+; for(i=strlen(a);i>=j;i-) _ai = ai-1_; aj=sk; puts(a);7、函数fac的作用是用来求整数n1和整数n2的最大公约数,并返回该值,请完善程序。int fac (int n1,int n2) int t,x,y; if(n1>n2) t=n1;n1=n2;n2=t; x=n1;y=n2; while(_y_) t=x%y;x=y;y=t; return(x);8、以下函数的功能是删除字符串s中的所有数字字符。请填空。viod dele(char *s) int n=0,i; for(i=0;si;i+) if( si>=0 && si>=9 ) sn+=si; sn= 0 ;五、阅读程序,写出运行结果。(每小题4分,共20分)1、下列程序执行后其输出结果是:#include <stdio.h>fun3(int x) static int a=3; a+=x; return(a);void main() int k=2,n; n=fun3(k); n+=fun3(k); printf("%dn",n);程序的运行结果为:(5+7)=122、下列程序执行后其输出结果是:#include <stdio.h>union ee int a; int b; *p,s4;void main() int n=1,i; for(i=0;i<4;i+) si.a=n; si.b=si.a+1; n+=2; p=&s0; printf("%d,",p->a);printf("%d",+p->a);程序的运行结果为:(共用体)2,33、下列程序执行后其输出结果是:#include <stdio.h>void fun(int n,int *s) int f1,f2=1; if(n=1) *s=1; else fun(n-1,&f1); *s=f1+f2;void main() int x; fun(6,&x); printf("%dn",x);程序的运行结果为:(递归调用)64、写出下面程序执行的结果:int *fun(int *p) static int a=0; return p+a+;main() int *fun(int *p); int a10=0,1,2,3,4,5,6,7,8,*p; p=fun(a+1); p=fun(p+2); printf(“%d”,*p); 程序的运行结果为:45、写出下面程序执行的结果:#include <stdio.h>main() char c;int i,k; k=0; for(i=0;i<4;i+) while(1) c=getchar(); if (c>0&&c<=9) break; k=k*10+c-0; printf(“k=%dn”,k);程序的意思是:从用户的输入字符串中提出前四个数字组成一个新串并输出。输入:1a2s3d4f输出:1234六、编程序。(每小题10分,共20分)1、编程将一个数组中的值,按逆序重新存放,例如原来是8,6,5,4,1,要求改为1,4,5,6,8。答:main()int a = 8,6,5,4,1,i,j,t;for( i=0; i<4; i+)for(j=i+1; j<5; j+)if(ai>aj) t=ai; ai=aj; aj=t;for( i=0; i<5; i+)printf("%5d",ai);2、编写函数insert(f,str1,str2)其功能是按f指定的位置,在字符串str1中插入str2。答:#include "string.h"void insert(int f, char *str1, char *str2)char str50;strcpy(str,str1+f);strcpy(str1+f,str2);strcat(str1,str);void main()char str150 = "abcdef"char str250 = "xyz"insert(2,str1,str2);puts(str1);