第一章基础知识1、c语言支持三种数制,下列哪个数制不支持?A)十进制B)八进制C)二进制D)十六进制【答案】:选择C。计算机可以识别的是二进制数,八进制和十六进制的提出是为了“压缩”二进制,所以本质上八进制和十六进制一样,故而两者要么都选,要么都不选。熟悉c语言的人都知道,十进制数可以在c程序中直接使用而二进制则不可以。二进制是机器可以识别的码,在c语言中不可以直接被识别。第二章c语言的组成结构及数据1、下列标识符在c语言中属于合法的用户自定义的标识符?A)a_12B)a12C)3mD)doE)aa.txtF)c#bh【答案】c语言中允许的合法的用户标识符只有数字、字母、下划线,且必须以字母或者下划线开始,不能使用系统预定于的关键字作为标识符。因此,C、D、E、F均不正确。2、在c语言中下列常量的写法正确的是?A)①、-32767②、023f③、0x123dfh分析:①:正确。是一个十进制整型常量的正确表示法。②:错误。以“0”开头的是八进制数,在其表示的数中只能出现0~7这七种符号。正确的写法为:023.③:错误。以0x开头的是十六进制数,在其表示的数中只能出现0~9和A~F这十六种符号,正确的写法为:0x123df。B)①、123.46②、123.③、.456④、0.456分析:以上均是c语言中实型数据的一种正确表示—小数形式。小数形式定义:由数字和小数点组成。C)①:123.4E4②、5.4E0.5③、4E④、1.23e-5⑤:3E2分析:②、③不正确,其余全部正确。考查实型数据的指数表示形式。指数形式应注意:一、字母E或e之前之后必须有数字,且后必须是整数。二、字母E或e的前后及各数字之间不能有空格。C)①、”abbchkdl”②、”a”③、””④、’’⑤、’\n’⑥、’\’分析:④、⑥不正确,其余全部正确。考查字符型常量和字符串常量的表示方法。字符型常量应注意:一、有一对单引号括一个字符。二、转移字符常量,必须以一个反斜杠”\”开头。字符串常量应注意:一、用一对双引号括起来若干个字符。3、若inta,b;,则表达式a=3,b=1,b=a+b;的值为4,此时a=3,b=4。分析:逗号表达式的形式为:表达式1,表达式2,………,表达式n。功能:逗号表达式的值就是表达式n的值,求值顺序是从左至右依次求解。令注:可以编写如下程序对题目结果进行验证。#includestdio.hvoidmain(){inta,b;printf(%d\n,(a=3,b=1,b=a+b));printf(a=%d,b=%d\n,a,b);}//程序2-1.cpp运行结果,如下图所示:4、若floatx=123.456,y=0.6;求解下列表达式的值。1)、(int)x=123,(int)(x)=123。2)、(int)x+y=123.600000,(int)(x+y)=124。分析:此题考查了强制类型转换以及不同类型的数据在做算术运算时最终结果如何得到。(int)x:表示对浮点型x进行强制类型转化为整型。(int)x+y:表示将x强制类型转换成整型后,再与浮点型数据y进行相加运算。由于浮点型数据高于整型,故而整个表达式的结果为浮点型数据且与y保留一样位数的小数。令注,可以编写如下程序对题目进行验证。#includestdio.hvoidmain(){floatx=123.456,y=0.6;printf(%d\n,(int)x);printf(%d\n,(int)(x));printf(%f\n,(int)x+y);printf(%d\n,(int)(x+y));}//程序2-2.cpp运行结果,如下图所示:5、求下列表达式的值。1)、17%3=2。2)、17%-3=2。3)、-17%3=-2。4)、-17%-3=-2。分析:求余表达式的求解过程:先忽略负号不计求出余数,再将所得余数的符号定成与被除数相同的符号即可。编写如下程序对题目进行验证:#includestdio.hvoidmain(){printf(17%%3=%d\n,17%3);printf(17%%-3=%d\n,17%-3);printf(-17%%3=%d\n,-17%3);printf(17%%-3=%d\n,-17%-3);}//程序2-3.cpp程序运行结果如下图所示:注意:求余(%)运算符两侧的操作数应均为整数。C语言中,凡是表达式都有一个确定的值。6、下面程序的输出结果为9,6.#includestdio.hvoidmain(){intk=3,w;w=(k++)+(k++)+(k++);printf(%d%d\n,w,k);}第三章顺序结构顺序结构程序设计示例:编写一个求某同学的3门课程的平均成绩程序。程序如下:#includestdio.hvoidmain(){inta,b,c;floataverage;a=87;b=69;c=95;average=(a+b+c)/3;printf(该同学3门课程的平均成绩为:);printf(%f\n,average);}//程序3-1.cpp程序运行结果,如下图所示:以上就是一个顺序结构程序的示例。1、若chara,b;a=getchar();b=getchar();当进行如下输入时,分别求a,b的值。1)、输入:fg回车,则a=f,b=g。2)、输入:f,h回车,则a=f,b=,。3)、输入:f回车回车,则a=f,b=回车。分析:此题考查了getchar()函数的使用,该函数的输入可以是键盘上的任意字符。第五章循环结构1、编写一个由goto和if语句组合使用的循环语句的程序,实现1+2+3……+100。编写的程序如下:#includestdio.hvoidmain(){inti,sum;i=0;sum=0;LP:sum=sum+i;//此时LP为标号i=i+1;if(i=100)gotoLP;//转向LP标号所在的行printf(sun=1+2+3+....+100=%d\n,sum);}//程序5-1.cpp程序运行结果如下图所示:2、如果x=3,求如下程序的输出结果1-2。doprintf(%d\t,x-=2);while(!(--x));分析:根据“直到型循环”的特点,依次判断程序每走一步的变量x的值。令注:可以编写如下程序验证题目:#includestdio.hvoidmain(){intx=3;doprintf(%d\t,x-=2);while(!(--x));}//5-2.cpp程序运行的结果如下图所示:3、求如下程序循环体的语句被执行的次数5。inti=0;intx,y;for(x=0,y=0;y!=250||x4;x++){y+=50;}分析:此题考查了逻辑运算符“||”为“假”时的条件,即其左右两侧的表达式同时为假时,整个表达式才是“假”。可以编写如下程序对题目进行验证:#includestdio.hvoidmain(){inti=0;intx,y;for(x=0,y=0;y!=250||x4;x++){i++;y+=50;}printf(循环的次数为%d\n,i);}//程序5-3.cpp4、求如下程序的输出结果。intx=3,y=6,a=0;while(x++!=(y-=1)){a+=1;if(yx)break;}分析:注意x++与x=x+1以及++x等这些表达式求值的结果。例如x=3时,表达式x++的结果为3,表达式x=x+1的结果为4,表达式++x的结果为4.可以编写如下程序对题目进行验证:#includestdio.hvoidmain(){intx=3,y=6,a=0;while(x++!=(y-=1)){a+=1;if(yx)break;}printf(x=%d,y=%d,a=%d\n,x,y,a);}//程序5-4.cpp5、求如下程序的输出结果1。intm=7,n=9;while(m!=n){while(mn)m-=n;while(nm)n-=m;}printf(m=%d\n,m);分析:本题主要了while()循环的循环结束条件。可以编写如下程序对题目进行验证:#includestdio.hvoidmain(){intm=7,n=9;while(m!=n){while(mn)m-=n;while(nm)n-=m;}printf(m=%d\n,m);}//程序5-5.cpp6、设计一个求1000以内的“完数”的程序。(提示:完数:一个数恰好等于它的因子之和)#includestdio.hvoidmain(){inti,a,m;for(i=1;i1000;i++){for(m=0,a=1;a=i/2;a++){if(!(i%a))m=m+a;}if(m==i)printf(%4d\n,i);}}运行结果如下图所示:7、设计一个程序求100~499之间的所有水仙花数。提示,水仙花数:各位数字的立方和恰好等于该数字本身。#includestdio.h#includemath.hvoidmain(){inti,j,k,m,n;for(i=1;i=4;i++){for(j=0;j=9;j++){for(k=0;k=9;k++){/*m=i*100+j*10+k;n=i*i*i+j*j*j+k*k*k;*/m=i*100+j*10+k;n=pow(i,3)+pow(j,3)+pow(k,3);if(m==n)printf(%3d\n,m);}}}}第六章数组一、选择题1、若有数组定义:chararray[]=”china”;则数组array所占的空间为()A、4个字节B、5个字节C、6个字节D、7个字节答案:C2、以下程序的输出结果是()main(){charstr[12]={‘a’,’b’,’d’,’c’,t’,’h’};printf(“%d\n”,strlen(str));}A、6B、7C、11D、12答案:A函数strlen()计算的是字符的实际有效长度即不包含自负结束标志位’\0’。3、下述对C语言字符数组的描述中错误的是()A、字符数组可以存放字符串。B、字符数组中的字符串可以整体输入和输出。C、可以在赋值语句中用赋值运算符“=”对字符数组整体赋值。D、不可以用关系运算符对字符数组中的字符串进行比较。答案:C4、若有定义:intarray[8];。则以下表达式中不能代表数组array[1]的地址的是()A、&array[0]+1B、&array[1]C、&array[0]++D、array+1答案:C注意:地址常量不能进行自增或者自减运算。5、不合法的main函数命令行参数表示形式是()A、main(inta,char*c[])B、main(intarc,char**arv)C、main(intargc,char*argv)D、main(intargv,char*argc[])答案:Cmain函数的第一个形参是一个整型变量,第二个形参是一个指针数组,其元素指向字符型数据。6、有定义语句:chars[10];若要从终端给s输入5个字符,错误的输入语句是()A、gets(&s[0]);B、scanf(“%s”,s+1);C、gets(s);D、scanf(“%s”,s[1]);答案:Dscanf()函数的输入列表参数为变量的“地址”;7、下列对数组的定义正确的是()A、inta[1.5];B、inta[-10];C、intN=9;inta[N];D、inta[0];E、#defineN10Inta[N];答案:E定义数组时,方括号内的表达式必须为大于零的正整数。二、填空题1、C程序在执行的过程中,不检查数组下标是否越界。2、下面程序段的运行结果是编译出错。main(){chars[6];s=abcd;printf(\%s\\n);}3、下面程序段的运行结果是“abcd”。#includestdio.hvoidmain(){chars[6]=abcd;printf(\%s\\n,s