C语言程序设计期末考试复习题一、选择题1.在每个C程序中都必须包含有这样一个函数,该函数的函数名为A。A.mainB.MAINC.nameD.function2.在以下关于C语言的注释的叙述中,不正确的是C。A.注释可用/*、*/形式表示,也可用//形式表示B.编译器在编译一个程序时,将跳过注释,不对其进行处理C.编译器在编译一个程序时,可发现注释中的单词拼写错误D.程序中注释的多少不会影响所生成的可执行文件的长度3.以下叙述不正确的是C。A.在C程序中,严格区分大小写字母B.一个C源程序有且仅有一个main函数C.在C程序中,注释只能位于一条语句的后面D.一个C程序总是从main函数开始执行4.下列合法的标识符为DA.abde+B.#KDJFC.67KDJD.DK3_5.关于字符串和字符的关系正确的是CA.“A”与’A’是相同的B.字符串是常量,字符是变量C.“A”与’A’是不同的D.“A”与“A”是相同的6.下面关于语句的说法正确的是BA.下面这两段程序的执行效果是一致的B.空语句是只有一个分号的语句,它其实什么也不干C.语句的构成不一定需要分号D.语句的书写对程序的运行不起作用,因此可以随便写都可以7.以下各标识符中,合法的用户标识符组为D。if(xy){z=x;s=z*z;}else{z=y;s=1/(z*z);}if(xy)z=x;s=z*z;elsez=y;s=1/(z*z);A.PAd,P#d,b-b,abc,_0123,ssipedB.cin,a10,CPP,float,del_word,signedC.void,max,hiy,fr,list,*jerD.a,temp,_isw,INT,keep,wind8.字符串“\”EOF=-\61\””的长度是B。A.8B.9C.12D.非法字符串9.数学式xsin在C程序中对应的不正确的表达式为B。A.sqrt(sin(x)0?sin(x):-sin(x))B.sqrt(fabs(sinx))C.sqrt(sqrt(sinx*sinx))D.fabs(sqrt(sin(x)))10.下列A是C语言的有效标识符?A._No1B.No.1C.12345D.int11.以下叙述中正确的是(B)。A.a是实型变量,C允许进行以下赋值a=10,因此可以这样说:实型变量中允许存放整型值。B.在赋值表达式中,赋值号右边既可以是变量也可以是任意表达式。C.执行语句a=b;后,在内存中a和b变量中原有的值都将被改变。D.已有a=3,b=5。当执行了表达式a=b,b=a之后,可使a中的值为5,b中的值为3。12.构成C语言源程序的基本单位是(D)。A.子程序B.过程C.文本D.函数13.以下叙述正确的是(D)。A.do_while语句构成的循环不能用其它语句构成的循环来代替。B.do_while语句构成的循环只能用break语句退出。C.用do_while语句构成循环时,当while后的表达式为非零时结束循环。D.用do_while语句构成循环时,当在while后的表达式为零时结束循环。14.以下能正确进行字符串赋值的是(A)。A.chars[5]={‘a’,’e’,’i’,’o’,’u’};B.char*s;s=“good!”;C.chars[5]=“good!”;D.chars[5];s=“good”;15.以下函数调用语句中,含有的实参个数是(D)。A.1B.2C.4D.5func((exp1,exp2),(exp3,exp4,exp5));16.若已定义:inta[]={0,1,2,3,4,5,6,7,8,9},*p=a,i;其中0≤i≤9,则对a数组元素的引用不正确的是(D)。A.a[p-a]B.*(&a[i])C.p[i]D.*(*(a+i))17.对于for(表达式1;表达式2;表达式3)语句,下列说法不正确的是(D)。A.表达式1只能执行一次B.表达式1、表达式2、表达式3都可以缺省C.缺省表达式2时循环执行无限次D.只有循环次数确定的情况下才能用for循环18.对于函数的形参数和实参数,下列说法正确的是(C)。A.函数调用时,实参数和形参数之间相互进行值传递B.实参数个数和形参数的个数可以不相等C.形参只能是变量D.实参只能是变量19.下列说法正确的是(C)。A.指针变量专门用来存放另外一个变量的地址B.定义指针时,其类型为整型C.可以把一个整数直接赋给指针变量D.指针与指针变量是同一概念20.对于输入语句scanf(“%d%c”,&a,&x);为了使a=10,x=’A’,正确的输入格式是(C)。A.10AB.10,AC.10AD.10;A21.以下叙述中正确的是(B)。A.a是实型变量,C允许进行以下赋值a=10,因此可以这样说:实型变量中允许存放整型值。B.在赋值表达式中,赋值号右边既可以是变量也可以是任意表达式。C.执行语句a=b;后,在内存中a和b变量中原有的值都将被改变。D.已有a=3,b=5。当执行了表达式a=b,b=a之后,可使a中的值为5,b中的值为3。22.构成C语言源程序的基本单位是(D)。A.子程序B.过程C.文本D.函数23.以下叙述正确的是(D)。A.do_while语句构成的循环不能用其它语句构成的循环来代替。B.do_while语句构成的循环只能用break语句退出。C.用do_while语句构成循环时,当while后的表达式为非零时结束循环。D.用do_while语句构成循环时,当在while后的表达式为零时结束循环。24.以下能正确进行字符串赋值的是(B)。A.chars[5]={‘a’,’e’,’i’,’o’,’u’};B.char*s;s=“good!”;C.chars[5]=“good!”;D.chars[5];s=“good”;25.以下函数调用语句中,含有的实参个数是(B)。A.1B.2C.4D.5func((exp1,exp2),(exp3,exp4,exp5));26.若已定义:inta[]={0,1,2,3,4,5,6,7,8,9},*p=a,i;其中0≤i≤9,则对a数组元素的引用不正确的是(D)。A.a[p-a]B.*(&a[i])C.p[i]D.*(*(a+i))27.对于for(表达式1;表达式2;表达式3)语句,下列说法不正确的是(D)。A.表达式1只能执行一次B.表达式1、表达式2、表达式3都可以缺省C.缺省表达式2时循环执行无限次D.只有循环次数确定的情况下才能用for循环28.对于函数的形参数和实参数,下列说法正确的是(C)。A.函数调用时,实参数和形参数之间相互进行值传递B.实参数个数和形参数的个数可以不相等C.形参只能是变量D.实参只能是变量29.下列说法正确的是(C)。A.指针变量专门用来存放另外一个变量的地址B.定义指针时,其类型为整型C.可以把一个整数直接赋给指针变量D.指针与指针变量是同一概念30.对于输入语句scanf(“%d%c”,&a,&x);为了使a=10,x=’A’,正确的输入格式是(C)。A.10AB.10,AC.10AD.10;A二、填空题1.C语言程序由函数组成,其中每一个程序必须含有一个main函数。2.一个算法应包含有限的操作步骤,这是指算法的有穷性。3.以下程序段执行后z的值是。intx,y,z;x=1;y=2;z=1/y*x;4.请填入一个整数使以下程序段输出10个整数。for(i=0;i=9;printf(“%d\n”,i+=2));5.静态型变量在函数调用结束后不消失而继续保留原值,而且只能被初始化一次。6.以下程序段给数组所有元素输入数据,请补充完整。main(){inta[10],i=0;while(i10)scanf(“%d”,&a[i]);}7.函数直接或间接调用其本身称为函数的递归调用。8.C语言的变量分全局变量和局部变量,在函数外定义的变量是全局变量。9.为表示关系x≥y≥z,应使用的C语言表达式是(x=y)&&(y=z)。10.C语言的函数一般由两部分组成,分别是声明部分和执行部分。11.以下程序段给数组所有元素输入数据,请补充完整。main(){inta[10],i=0;while(i10)scanf(“%d”,);}12.函数直接或间接调用其本身称为函数的递归调用。13.C语言的变量分全局变量和局部变量,在函数外定义的变量是全局变量。14.为表示关系x≥y≥z,应使用的C语言表达式是(x=y)&&(y=z)。15.C语言的函数一般由两部分组成,分别是声明部分和执行部分。三、程序改错题1.以下程序代码是求n!。#includestdio.hmain(){inti,s,n;scanf(“%d”,n);-scanf(“%d”,&n);for(s=0,i=1;i=n;i++)-for(s=1,i=1;i=n;i++)s*=i;printf(“%d\n”,s);}2.以下程序是求整型数组中的最大值。#includestdio.hmain(){inta[10]={4,6,78,45,2,1,0,8,12,24},max,i;for(max=a[0],i=1;i=10;i++)-for(max=a[0],i=1;i=9;i++)if(a[i]max)-if(a[i]max)max=a[i];printf(“max=%d\n”,max);}3.以下程序实现的功能是:交换主函数中的变量a和b的值。#includestdio.hvoidfun(int*p1,int*p2){int*p3;-p3p3=p1;p1=p2;p2=p3;}-p3=*p1;*p1=*p2;*p2=p3;}main(){inta=10,b=5;fun(&a,&b);printf(“a=%d,b=%d\n”,a,b);}}-}4.以下程序是判断x是否是素数,若是就输出“YES”,否则输出“NO”。#includestdio.hmain(){intx,flag,i;scanf(“%d”,x);-scanf(%d,&x);for(flag=1,i=1;i=x-1;i++)-for(flag=1,i=2;i=x-1;i++)if(x/i==0){flag=0;break;}-if(x%i==0){flag=0;break;}if(flag==1)printf(“YES”);elseprintf(“NO”);}5.下列程序是采用折半查找算法在a数组中查找x,若找到x则显示“成功”,否则显示“失败”。#includestdio.hmain(){inta[15]={100,89,80,76,64,56,45,41,32,30,24,22,15,10,6};inti,j,mid,x;scanf(“%d”,&x);i=0;j=14;while(i=14){mid=(i+j)/2;if(a[mid]==x)break;elseif(a[mid]x)j=mid-1;-i=mid+1;elsei=mid+1;}-elsej=mid-1;}if(ij)printf(“查找失败\n”);elseprintf(“查找成功\n”);}6.以下程序的功能是将一个矩阵转置。#includestdio.hmain(){inta[4][4]={4,3,2,1,8,7,6,5,12,11,10,9,13,14,15,16},i,j,k;for(i=0;i=3;i++)for(j=0;j=3;j++)-for(j=i;j=3;j++){k=a[i][j];a[i][j]=a[j][i];a[j][i]=k;}加}7.以下程序是判断x是否是素数,若是就输出“YES”,否则输出“NO”。#includestdio.hmain(){intx,flag,i;scanf(“%d”,x);for(flag=1,i=1;i=x-1;i++)if(x/i==0){flag=0;break;}if(flag==1)printf(“YE