C语言考前复习---副本.doc

C语言考前复习---副本.doc

ID:61995370

大小:347.00 KB

页数:50页

时间:2021-04-09

上传者:笑似︶ㄣ無奈
C语言考前复习---副本.doc_第1页
C语言考前复习---副本.doc_第2页
C语言考前复习---副本.doc_第3页
C语言考前复习---副本.doc_第4页
C语言考前复习---副本.doc_第5页
资源描述:

《C语言考前复习---副本.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

基础知识(数据类型、输入输出、表达式)1)程序结构是三种:顺序结构、选择结构(分支结构)、循环结构。2)读程序都要从main()入口,然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择),有且只有一个main函数。3)计算机的数据在电脑中保存是以二进制的形式.数据存放的位置就是他的地址.3、每个C语言程序中main函数是有且只有一个。5、算法:可以没有输入,但是一定要有输出。7、逗号运算符的级别最低,赋值的级别倒数第二。1、C语言编写的程序称为源程序,又称为编译单位。2、C语言书写格式是自由的,每行可以写多个语句,可以写多行。3、一个C语言程序有且只有一个main函数,是程序运行的起点。常量数字常量普通数字:1,35,2.7指数形式:2.45e-2等价于2.45*10-2注意e大小写皆可,e前面的数字不能省,就算是1也不能省,后面的数字一定要是整数长整型,单精度浮点型:3235L,32.5F分别表示3235是长整型数据,32.5是单精度浮点型左,若不写上L,F则表示3235是整型,32.5是双精度浮点型,L,F大小写皆可字符常量普通字符常量:用单引号把一个字符括起来,如’A’,’@’转义字符常量:一对单引号括起来并以“”开头的字符序列,如’ ’(回车)、’123’(8进制123对应的字符),’x23’(16进制23对应的字符)字符串常量用一对双引号把一个字符序列括起来,如“ABCef”,系统存放字符串常量,每个字符分配一个字节,各字符所占字节紧邻,并且字符串末尾会给再开一个字节里面放一个’’做为结束标志。符号常量定义格式#define符号常量名符号常量值,如#defineN20则定义了符号常量N,其值为20,注意符号常量名和符号常量值之间是用空格隔开,而不是写上=号,#define和符号常量名之间也有空格的。命名规则以数字,字母,下划线这三类字符组成,但只能以字母或下划线开头,而不能也数字开头,另外不能将关键字做为标识符。1、标识符:合法的要求是由字母,数字,下划线组成。有其它元素就错了。并且第一个必须为字母或则是下划线。第一个为数字就错了2、标识符分为关键字、预定义标识符、用户标识符。关键字:不可以作为用户标识符号。maindefinescanfprintf都不是关键字。迷惑你的地方If是可以做为用户标识符。因为If中的第一个字母大写了,所以不是关键字。预定义标识符:背诵definescanfprintfinclude。记住预定义标识符可以做为用户标识符。类型名 int整型,long长整型:用于存放整数,只是数值范围不同float单精度浮点型double双精度浮点型:用于存放实数,数值范围,精度不同char字符型:用于存放字符1)C语言只有八、十、十六进制,没有二进制。但是运行时候,所有的进制都要转换成二进制来进行处理。(考过两次)a、C语言中的八进制规定要以0开头。018的数值是非法的,八进制是没有8的,逢8进1。b、C语言中的十六进制规定要以0x开头。2)小数的合法写法:C语言小数点两边有一个是零的话,可以不用写。1.0在C语言中可写成1.0.1在C语言中可以写成.1。3)实型数据的合法形式:a、2.333e-1就是合法的,且数据是2.333×10-1。b、考试口诀:e前e后必有数,e后必为整数。请结合书上的例子。4)整型一般是4个字节,字符型是1个字节,双精度一般是8个字节:  longintx;表示x是长整型。unsignedintx;表示x是无符号整型。变量赋值,初始化自增自减运算变量++,++变量,变量--,--变量使变量的值自增1或自减1等价于变量=变量+1变量=变量-1++,--放于变量前后效果的区别:当自增自减运算做为表达式的一部分时,++,--放在变量前面是先自增自减再使用变量的值,放在变量后面则是先使用变量的值,再自增自减。如x=3;printf(“%d”,++x);则相当于执行了++x;printf(“%d”,x);这样的操作所以打印出4再如x=3;printf(“%d”,x++);则相当于执行了printf(“%d”,x);x++;这样的操作,则打印出3,当然最后x的值还是4。表达式运算符和运算对象一个运算符都有若干个运算对象,如+必然要跟两个运算对象才能进行加法运算:3+5。C语言里称需要跟n个运算对象的运算符为n元运算符。一元运算符有:!,(类型名)二元运算符有:+,-,*,/,%(求余),=,+=,-=,*=,/=,%=,<,>,<=,>=,==(等于),!=(不等于),&&(且),||(或)多元运算符有:,运算符的优先级和结合性优先级:同一个运算对象左右两边若同时有两个运算符,则这两个运算符优先级高的先进行运算。结合性:若同一个运算对象左右两边的两个运算符优先级相同,则根据结合性判断先进行哪个运算,自左自右结合性的先算左边的运算符,自右自左的先算右边的运算符。各运算符的优先级和结合性见P365附录C强制类型转换格式:(类型名)表达式 。将后跟的表达式的值的数据类型转换为与圆括号内的类型名一致的类型。注意类型名一定要用()括起来。算术表达式算术运算符:+,-,*,/,%(求余)由算术运算符加上运算对象构成算术表达式,如3+3*6-9/2值:跟我们小学时学的一样,就是表达式的计算结果整数除以整数结果取整数部分,故1/3得到的值是05%3结果为2,想想小学除法,求余得到的是余数不是商。赋值表达式赋值运算符:=,+=,-=,*=,/=,%=赋值表达式:变量=表达式,如x=3+6,x+=6-9,x+=x*=3+4注意等号左边只能是变量复合赋值运算符的运算:以/=为例:x/=表达式等价于x=x/(表达式)值:=号左边的变量最终的值关系表达式关系运算符:<,>,<=,>=,==(等于),!=(不等于)由关系运算符加上运算对象构成关系表达式,如3>=4,2==a值:满足相应运算符所指定的关系的值为1,否则为0逻辑表达式逻辑运算符:&&(且),||(或),!(非)由逻辑运算符加上运算对象构成逻辑表达式,如3&&4,x||!y值:满足相应运算符所指定的关系的值为1,否则为0进行||或运算时,若||左边的表达式值为1,则不再对右边的表达式进行运算。进行&&且运算时,若&&左边的表达式值为0,则不再对右边的表达式进行运算。1、算术表达式:+,-,*,/,%考试一定要注意:“/”两边都是整型的话,结果就是一个整型。3/2的结果就是1.“/”如果有一边是小数,那么结果就是小数。3/2.0的结果就是0.5“%”符号请一定要注意是余数,考试最容易算成了除号。)%符号两边要求是整数。不是整数就错了。[注意!!!]2、赋值表达式:表达式数值是最左边的数值,a=b=5;该表达式为5,常量不可以赋值。1、intx=y=10:错啦,定义时,不可以连续赋值。2、intx,y;x=y=10;对滴,定义完成后,可以连续赋值。3、赋值的左边只能是一个变量。4、intx=7.7;对滴,x就是75、floaty=7;对滴,x就是7.03、复合的赋值表达式:inta=2;a*=2+3;运行完成后,a的值是12。一定要注意,首先要在2+3的上面打上括号。变成(2+3)再运算。4、自加表达式:自加、自减表达式:假设a=5,++a(是为6),a++(为5);运行的机理:++a 是先把变量的数值加上1,然后把得到的数值放到变量a中,然后再用这个++a表达式的数值为6,而a++是先用该表达式的数值为5,然后再把a的数值加上1为6,再放到变量a中。进行了++a和a++后在下面的程序中再用到a的话都是变量a中的6了。考试口诀:++在前先加后用,++在后先用后加。5、逗号表达式:优先级别最低。表达式的数值逗号最右边的那个表达式的数值。(2,3,4)的表达式的数值就是4。z=(2,3,4)(整个是赋值表达式)这个时候z的值为4。1)字符数据的合法形式::'1'是字符占一个字节,"1"是字符串占两个字节(含有一个结束符号)。 '0'的ASCII数值表示为48,'a'的ASCII数值是97,'A'的ASCII数值是65。一般考试表示单个字符错误的形式:'65'"1"  字符是可以进行算术运算的,记住: '0'-0=48大写字母和小写字母转换的方法: 'A'+32='a'相互之间一般是相差32。2)转义字符:转义字符分为一般转义字符、八进制转义字符、十六进制转义字符。一般转义字符:背诵、 、’、”、\。八进制转义字符:‘141’是合法的,前导的0是不能写的。十六进制转义字符:’x6d’才是合法的,前导的0不能写,并且x是小写。3、字符型和整数是近亲:两个具有很大的相似之处  chara=65; printf(“%c”,a);得到的输出结果:aprintf(“%d”,a); 得到的输出结果:65输入输出函数scanf(“格式控制串”,变量地址表列);如scanf(“%d%c%d”,&a,&ch,&b);scanf(“%4f”,&x);注意:格式控制串可控制截取用户输入的前几个字符给变量,但不能控制输入几位小数给变量,如不能写成scanf(“%4.2f”,&x);第二个参数给的是地址,即要么是&+变量名或数组元素名的形式,要么就是一个数组名或指针变量名,如int*p,a;p=&a;scanf(“%d”,p);考试时注意看题目给你写好的scanf的格式若其格式控制串内各格式符用“,”隔开如scanf(“%d,%c,%d”,&a,&ch,&b);那输入时也要用逗号隔开,如此例输入时应:3,+,5若是这种格式scanf(“%d%d”,&a,&b);则输入时应:35;若是这种格式scanf(“%d%c%d”,&a,&ch,&b);则输入时应3+5,若写成3+5则a=3,ch=‘’(空格),b=任意值(自己上机运行看看结果)printf(“格式控制串”,输出项表列);如floatx=7.5;printf(“%8.2f”,x);此处的意思是将x打印出来,且占8列,保留两位小数。自己上机运行看看效果。常用格式符汇总: %d:输入输出整型数据,%ld:输入输出长整型数据%c:输入输出字符型数据%f:输出单(双)精度浮点型数据,输入单精度型数据。%lf:输入双精度型数据%s:输入输出一个字符串,用printf输出字符串时,输出项书写时可为字符串常量,或字符数组名。如printf(“%s”,”hello”);或charstr[10]=”hello”;printf(“%s”,str);%u:输入输出无符号整型,%o:输入输出八进制数,%x:输入输出十六进制数getchar();函数调用后返回用户输入的一个字符,故需再定义一个变量来存放这个字符,即使用时应charc;c=getchar();意思就是接收用户输入的一个字符,并将其赋值给变量c。putchar(字符常量或字符变量名);如charc=’A’;putchar(c);或putchar(‘A’);都会向屏幕输出字符A。1、使用printf和scanf函数时,要在最前面加上#include“stdio.h”2、printf可以只有一个参数,也可以有两个参数。(选择题考过一次)3、printf(“第一部分”,第二部分);把第二部分的变量、表达式、常量以第一部分的形式展现出来!4、printf(“a=%d,b=%d”,12,34)printf(“a=%d, b=%d”,12,34)那么输出的结果就是:a=12,b=345、intx=017;一定要弄清楚为什么是这个结果!过程很重要printf(“%d”,x);15printf(“%o”,x);17printf(“%#o”,x);017printf(“%x”,x);11printf(“%#x”,x);0x116、intx=12,y=34;注意这种题型charz=‘a’;printf(“%d”,x,y);一个格式说明,两个输出变量,后面的y不输出printf(“%c”,z);结果为:12a7、一定要背诵的格式说明表示内容格式说明表示内容%d整型int%c字符char%ld长整型longint%s字符串%f浮点型float%o八进制%lfdouble%#o带前导的八进制%%输出一个百分号%x十六进制%5d%#x带前导的十六进制举例说明:printf(“%2d”,123);第二部分有三位,大于指定的两位,原样输出123printf(“%5d”,123);第二部分有三位,小于指定的五位,左边补两个空格123printf(“%10f”,1.25);小数要求补足6位的,没有六位的补0,。结果为1.250000printf(“%5.3f”,125);小数三位,整个五位,结果为1.250(小数点算一位) printf(“%3.1f”,1.25);小数一位,整个三位,结果为1.3(要进行四舍五入)第三节数据输入1、scanf(“a=%d,b=%d”,&a,&b)考试超级重点!一定要记住是以第一部分的格式在终端输入数据。考试核心为:一模一样。在黑色屏幕上面输入的为a=12,b=34才可以把12和34正确给a和b。有一点不同也不行。2、scanf(“%d,%d”,x,y);这种写法绝对错误,scanf的第二个部分一定要是地址!scanf(“%d,%d”,&x,&y);注意写成这样才可以!3、特别注意指针在scanf的考察例如:intx=2;int*p=&x;scanf(“%d”,x);错误scanf(“%d”,p);正确scanf(“%d”,&p);错误scanf(“%d”,*p)错误4、指定输入的长度(考试重点)终端输入:1234567scanf(“%2d%4d%d”,&x,&y,&z);x为12,y为3456,z为7终端输入:1234567由于1和2中间有空格,所以只有1位给xscanf(“%2d%4d%d”,&x,&y,&z);x为1,y为2345,z为675、字符和整型是近亲:intx=97;printf(“%d”,x);结果为97printf(“%c”,x);结果为a6、输入时候字符和整数的区别(考试超级重点)scanf(“%d”,&x);这个时候输入1,特别注意表示的是整数1scanf(“%c”,&x);这个时候输入1,特别注意表示的是字符‘1’ASCII为整数48。补充说明:1)scanf函数的格式考察:注意该函数的第二个部分是&a这样的地址,不是a;scanf(“%d%d%*d%d”,&a,&b,&c);跳过输入的第三个数据。2)putchar,getchar函数的考查:chara=getchar()是没有参数的,从键盘得到你输入的一个字符给变量a。putchar(‘y’)把字符y输出到屏幕中。1.以下不是C语言的特点的是()。A、语言简洁紧凑B、能够编制出功能复杂的程序C、C语言可以直接对硬件操作D、C语言移植性好2.下列字符序列中,不可用作C语言标识符的是()。A.abc123B.no.1C._123_D._ok5.下列符号中,不属于转义字符的是()。A.\B.xAAC.tD.6.不属于C语言关键字的是()。A.intB.breakC.whileD.character 7.是C语言提供的合法关键字的是()。A.FloatB.signedC.integerD.Char8.以下不能定义为用户标示符的是()。A.scanfB.VoidC._3com_D.int9.一个C程序是由()。A.一个主程序和若干子程序组成B.一个或多个函数组成C.若干过程组成D.若干子程序组成10.C语言程序的基本单位是()。A.程序行B.语句C.函数D.字符12.以下说法中正确的是()。A.C语言程序总是从第一个定义的函数开始执行B.在C语言程序中,要调用的函数必须在main()函数中定义C.C语言程序总是从main()函数开始执行D.C语言程序中的main()函数必须放在程序的开始部分13.C编译程序是()。A.C程序的机器语言版本B.一组机器语言指令C.将C源程序编译成目标程序D.由制造厂家提供的一套应用软件14.以下选项中,合法的用户标识符是()。A.longB._2abcC.3dmaxD.A.dat15.以下选项中,合法的实型常数是()。A.5E2.0B.E-3C..2E0D.1.3E16.已知大写字母A的ASCII码值是65,小写字母a的ASCII码是97,则用八进制表示的字符常量’101’是()。A.字符AB.字符aC.字符cD.非法的常量21.与数学式子对应的C语言表达式是()。A.9*x^n/(2*x-1)B.9*x**n/(2*x-1)C.9*pow(x,n)*(1/(2*x-1))D.9*pow(n,x)/(2*x-1)26.在C语言中,要求运算数必须是整型的运算符是()。A./B.++C.*=D.%27.若有说明语句:chars=’72’;则变量s()。A.包含一个字符B.包含两个字符C.包含三个字符D.说明不合法,s的值不确定28.若有定义:intm=7;floatx=2.5,y=4.7;则表达式x+m%3*(int)(x+y)%2/4的值是()。A.2.500000B.2.750000C.3.500000D.0.00000029.在C语言中,char型数据在内存中的存储形式是()。A.补码B.反码C.原码D.ASCII码 39.putchar函数可以向终端输出一个()。A.整型变量表达式值。B.字符串C.实型变量值。D.字符或字符型变量值。40.以下程序段的输出结果是()。inta=12345;printf(”%2d ”,a);A.12B.34C.12345D.提示出错、无结果41.若x和y均定义为int型,z定义为double型,以下不合法的scanf()函数调用语句为()。A.scanf(”%d%lx,%le”,&x,&y,&z);B.scanf(”%2d*%d%lf”,&x,&y,&z);C.scanf(”%x%*d%o”,&x,&y);D.scanf(”%x%o%6.2f”,&x,&y,&z);45.已有定义inta=-2;和输出语句:printf(”%8lx”,a);以下正确的叙述是()。A.整型变量的输出格式符只有%d一种B.%x是格式符的一种,它可以适用于任何一种类型的数据C.%x是格式符D.%8lx不是错误的格式符,其中数字8规定了输出字段的宽度52.以下程序的输出结果是()。(注:└┘代表空格)#include”stdio.h”main(){printf(” string1=%15s*”,”programming”);printf(” string2=%-5s*”,”boy”);printf(”string3=%2s*”,”girl”);}A.string1=programming└┘└┘└┘└┘*B.string1=└┘└┘└┘└┘programming*string2=boy*string2=boy└┘└┘*string3=gi*string3=gi*C.string1=programming└┘└┘└┘└┘*D.string1=└┘└┘└┘└┘programming*string2=└┘└┘boy*string3=girl*string2=boy└┘└┘*string3=girl*2.结构化设计中的三种基本结构是________、_______、________。3.C语言源程序文件的后缀是________,经过编译后生成文件的后缀是________,经过链接后生成文件的后缀是________。5.一个函数由两部分组成,它们是_______、_______。6.函数体一般包括_______、_______。7.C语言是通过_______来进行输入和输出的。8.以下程序的执行结果________。#include”stdio.h”main(){shorti=-1,j=1;printf(”dec:%d,oct:%o,hex:%x,unsigned:%u ”,i,i,i,i);printf(”dec:%d,oct:%o,hex:%x,unsigned:%u ”,j,j,j,j);}7.a=12,n=5,表达式a%=(n%=2)值是。 8.有一个输入函数scanf("%d",k);则不能使float类型变量k得到正确数值的原因是和。9.putchar()函数可以向终端输出一个。10.已有定义inti,j;floatx;为将-10赋给i,12赋给j,410.34赋给x,则对应以下scanf()函数调用语句的数据输入形式是。scanf("%o%x%e",&i,&j,&x);11.pirntf()函数中用到格式符%5s,其中数字5表示输出的字符串占5列,如果字符串长度大于5,则。12.使用getchar()和putchar()函数必须在源程序中加。9.写出下面程序的运行结果。main(){inti,j,m,n;i=5;j=6;m=++i;n=--j;printf("%d,%d,%d,%d",i,j,m,n);}5.在C语言中,书写八进制数时必须加前缀;书写十六进制数时必须加前缀。6.在微机上,int型、short型、long型、float型和double型数据一般在内存中分别占字节、字节、字节、字节和字节。7.设有下列运算符:<<、+、++、&&、>=,其中优先级最高的是,优先级最低的是。选择结构C语言的语句表达式语句:由表达式末尾加上分号构成。函数调用语句:由函数调用表达式加上分号构成。空语句:;选择结构语句:if语句switch语句循环语句:for语句while语句dowhile语句复合语句:用花括号{}将以上任意语句括起来构成一条复合语句。C程序的基本结构voidmain(){声明部分:用来定义变量和声明自定义函数的原型,需以“;”结尾,如intx;执行语句部分:第六点里介绍的各种语句,如x=3;printf(“%d”,x);}C语言中是用非0表示逻辑真的,用0表示逻辑假的。C语言有构造类型,没有逻辑类型。关系运算符号:注意<=的写法,==和=的区别!(考试重点)if只管后面一个语句,要管多个,请用大括号!1)关系表达式:a、表达式的数值只能为1(表示为真),或0(表示假)。如9>8这个关系表达式是真的,所以9>8这个表达式的数值就是1。如7<6这个关系表达式是假的,所以7<6这个表达式的数值就是02)逻辑表达式:核心:表达式的数值只能为1(表示为真),或0(表示假)。 a)共有&&||!三种逻辑运算符号。b)!>&&>||优先的级别。c)注意短路现象。考试比较喜欢考到。详细请见书上例子,一定要会做例1和例2d)表示x小于0大于10的方法。0c)printf(“ok!”);多选一的if语句if(a==t)printf(“a”);elseif(b==t)printf(“b”);elseif(c==t)printf(“c”);elsepritnf(“d”);通过习题,要熟悉以上几种if语句!经典考题:结合上面四种if语句题型做题,答错了,请自行了断!预备,开始!inta=1,b=0;if(!a)b++;elseif(a==0)if(a)b+=2;elseb+=3;请问b的值是多少?如果没有看懂题目,你千万不要自行了断,这样看得懂不会做的人才会有理由的活着。正确的是b为3。inta=1,b=0;if(!a)b++;是假的不执行elseif(a==0)是假的执行if(a)b+=2;属于elseif的嵌套if语句,不执行。elseb+=3;if-else-if语句没有一个正确的,就执行else的语句!4)条件表达式: 表达式1?表达式2:表达式3a、考试口诀:真前假后。b、注意是当表达式1的数值是非0时,才采用表达式2的数值做为整个运算结果,当表达式1的数值为0时,就用表达式3的数值做为整个的结果。c、inta=1,b=2,c=3,d=4,e=5;k=a>b?c:d>e?d:e;求k的数值时多少?答案为san5)switch语句:a)执行的流程一定要弄懂!上课时候详细的过程讲了,请自己一定弄懂! b)注意有break和没有break的差别,没有break时候,只要有一个case匹配了,剩下的都要执行,有break则是直接跳出了switch语句c)switch只可以和break一起用,不可以和continue用。d)switch(x)x:是整型常量,字符型常量,枚举型数据。{case1:….不可以是变量。case2:….}if语句的三种结构单边:if(表达式)语句双边:if(表达式)语句1else语句2多层(重点掌握):if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3…else语句nswitch语句switch(表达式){case表达式1:语句case表达式2:语句…case表达式n:语句default:语句}2.设a=5,b=6,c=7,d=8,m=2,n=2,则执行(m=a>b)&&(n=c>d)后n的值为()。A.1B.2C.3D.43.设x、y和z都是int类型变量,且x=3,y=4,z=5,则下面的表达式中,值为0的表达式为()。A.’x’&&’y’B.x<=yC.x||y+z&&y-zD.!((x=’a’)&(s<=’z’)C.(s>=’a’)&&(s<=’z’)D.(’a’<=s)and(’z’>=s)11.若希望当x的值为奇数时,表达式的值为“真”,x的值为偶数时,表达式的值为“假”。则以下不能满足要求的表达式是()。A.x%2==1B.!(x%2==0)C.!(x%2)D.x%225.假定等级和分数有以下对应关系:等级:A分数:85——100等级:B分数:60——84等级:C分数:60以下对于等级grade输出相应的分数区间,能够完成该功能的程序段是()。A.switch(grade){case’A’:printf(”85——100 ”);case’B’:printf(”60——84 ”);case’C’:printf(”<60 ”);default:printf(”gradeiserror! ”);}B.switch(grade){case’A’:printf(”85——100 ”);break;case’B’:printf(”60——84 ”);case’C’:printf(”<60 ”);default:printf(”gradeiserror! ”);}C.switch(grade){case’A’:printf(”85——100 ”);break;case’B’:printf(”60——84 ”);break;case’C’:printf(”<60 ”);default:printf(”gradeiserror! ”);}D.switch(grade){case’C’:printf(”<60 ”);break;case’B’:printf(”60——84 ”); break;default:printf(”gradeiserror! ”);break;case’A’:printf(”85——100 ”);}26.有如下程序,写出该执行结果()。#include”stdio.h”main(){floatx=2.0,y;if(x<0.0)y=0.0;elseif(x<10.0)y=1.0/x;elsey=1.0;printf(”%f ”,y);}A.0.000000B.0.250000C.0.500000D.1.00000030.有以下程序,程序运行后的输出结果是()。#include”stdio.h”main(){inta=15,b=21,m=0;switch(a%3){case0:m++;break;case1:m++;switch(b%2){default:m++;case0:m++;break;}}printf(”%d ”,m);}A.1B.2C.3D.41.若从键盘输入58,则输出结果是________。#include”stdio.h”main(){inta;scanf(”%d”,&a);if(a>50)printf(”%d”,a);if(a>40)printf(”%d”,a);if(a>30)printf(”%d”,a);}2.设intx=9,y=8;表达式x==y+1的结果是________。3.定义intx,y;执行y=(x=1,++x,x+2);后,y的值是________。 7.以下程序的运行结果是________。#include”stdio.h”main(){inta,b,c,s,w,t;s=w=t=0;a=-1;b=3;c=3;if(c>0)s=a+b;if(a<=0){if(b>0)if(c<=0)w=a-b;}elseif(c>0)w=a-b;elset=c;printf(”%d%d%d”,s,w,t);}10.下面程序根据以下函数关系,对输入的每个x值,计算出y值。请在【】内填空。xy2=’a’&&ch<=’z’)【2】;printf(”theconvertedletteris:%c ”,ch);}15.以下程序是对从键盘输入的任何三个整数,求出其中的最小值。请在【】内填入正确内容。#include”stdio.h”main(){inta,b,c,min;printf(”pleaseinputthreenumbers:”); scanf(”%d%d%d”,&a,&b,&c);if(【1】)min=b;elsemin=a;if(min>c)【2】;printf(”min=%d ”,min);}20.以下程序完成两个数的四则运算。请在【】内填入正确内容。#include”stdio.h”main(){floatx,y;charoperator;printf(”pleaseinputtheexpression:”);scanf(”%f%c%f”,&x,&operator,&y);switch(【1】){case’+’:printf(”%g%c%g=%g ”,x,operator,y,x+y);【2】;case’-’:printf(”%g%c%g=%g ”,x,operator,y,x-y);break;case’*’:printf(”%g%c%g=%g ”,x,operator,y,x*y);break;case’/’:if(y==0.0)printf(”除零错误! ”);elseprintf(”%g%c%g=%g ”,x,operator,y,x/y);break;【3】:printf(”表达式存在错误! ”);}}20.以下程序的运行结果是().main(){intm=5;if(m++>5)printf(“%d ”,m);elseprintf(“%d ”,m--);}A)4B)5C)6D)77.以下程序的输出结果是。main(){intx=1,i=1;for(;x<50;i++){if(x>=10)break;if(x%2!=1) {x+=3;continue;}x-=1;}printf("x=%d,i=%d ",x,i);}循环控制for循环语句for(表达式1;表达式2;表达式3)循环体语句语句执行过程:计算表达式1判断表达式2的值是否为0,若为0,语句执行结束,若不为0,进入步骤3while(表达式)循环体语句执行过程:判断表达式的值是否为非0,若是进入步骤2,否则结束语句执行。执行循环体语句,重新回到步骤1。do循环体语句while(表达式);执行过程:执行循环体语句,进入步骤2判断表达式的值是否为非0,若是重新回到步骤1,否则结束语句执行。1)三种循环结构:a)for();while();do-while()三种。b)for循环当中必须是两个分号,千万不要忘记。c)写程序的时候一定要注意,循环一定要有结束的条件,否则成了死循环。d)do-while()循环的最后一个while();的分号一定不能够丢。(当心上机改错),do-while循环是至少执行一次循环。2)break和continue的差别记忆方法:break:是打破的意思,(破了整个循环)所以看见break就退出整个一层循环。continue:是继续的意思,(继续循环运算),但是要结束本次循环,就是循环体内剩下的语句不再执行,跳到循环开始,然后判断循环条件,进行新一轮的循环。3)嵌套循环就是有循环里面还有循环,这种比较复杂,要一层一层一步一步耐心的计算,一般记住两层是处理二维数组的。4)while((c=getchar())!=’ ’)和while(c=getchar()!=’ ’)的差别先看a=3!=2和(a=3)!=2的区别:(!=号的级别高于=号所以第一个先计算3!=2)第一个a的数值是得到的1;第二个a的数值是3。考试注意点:括号在这里的重要性。5)每行输出五个的写法:for(i=0;i<=100;i++){printf(“%d”,i); if((i+1)%5==0)printf(“ ”);如果i是从1开始的话,就是if(i%5==0)printf(“ ”);}6)如何整除一个数:i%5==0表示整除5I%2==0表示整除2,同时表示是偶数!8)for只管后面一个语句:inti=3;for(i=3;i<6;i++):printf(“#”):请问最终打印几个#号?答案为一个!9)不停的输入,直到输入#停止输入!while((x=getchar())!=’#’)3.当执行以下程序段时。x=-1;do{x=x*x;}while(!x);A.循环体将执行一次      B.循环体将执行两次C.循环体将执行无数多次    D.系统将提示有语法错误4.执行以下程序后输出的结果是()。main(){inty=10;do{y--;}while(--y);printf("%d ",y--);}A.-1    B.1    C.8    D.05.下面程序的输出结果是()。main(){intx=3,y=6,a=0;while(x++!=(y-=1)){a+=1;if(y100)break;}B.for(;;);C.intk=1000;do{++k;}while(k>=10000);D.ints=36;while(s);--s;12.若输入B,以下程序的运行结果为()。main(){chargrade;scanf("%c",&grade);switch(grade){case'A':printf(">=85.");case'B':case'C':printf(">=60.");case'D':printf("<60.");default:printf("error.");}}A.>=85.B.>=60.C.>=60.<60.error.D.error.30.下列程序段的输出结果为()。main(){intx=3;do{printf("%3d",x-=2);}while(!(--x));}A.1B.30C.1-2D.死循环2.若输入字母C,程序输出结果为【1】;若输入字符*,程序将【2】。#includemain(){charc1,c2;c1=getchar();while(c1<97||c1>122)c1=getchar();c2=c1-32;printf("%c,%c ",c1,c2);}6.以下程序运行的结果________。main(){intx=2,y,z;x*=3+1;printf("%d,",x++);x+=y=z=5; printf("%d,",x);x=y==z;printf("%d ",x);}7.以下程序运行的结果________。#include#includemain(){inti,k,m,n=0;for(m=1;m<=10;m+=2){if(n%10==0)printf(" ");k=sqrt(m);for(i=2;i<=k;i++)if(m%i==0)break;if(i>k){printf("%2d",m);n++;}}}8.如果输入‘1’,‘2’,‘3’,‘4’,程序运行输出的是________。#includemain(){charc;inti,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=%d ",k);}9.运行以下程序后,如果从键盘上输入china#<回车>,则输出结果为________。#includemain(){intv1=0,v2=0;charch;while((ch=getchar())!='#')switch(ch){case'a':case'h':default:v1++;case'0':v2++; }printf("%d,%d ",v1,v2);}10.程序运行结果是_________。#includemain(){inti;for(i=1;i+1;i++){if(i>4){printf("%dt",i++);break;}printf("%dt",i++);}}11.以下程序运行的结果是_________。#includemain(){inta,b;for(a=1,b=1;a<=100;a++){if(b>=20)break;if(b%3==1){b+=3;continue;}b-=5;}printf("%d ",a);}13.程序运行的结果是________。main(){intn=0;while(n++<=1)printf("%dt",n);printf("%d ",n);}14.此程序运行时,输入qwert?程序的运行结果是_________。#includemain(){charc;while((c=getchar())!='?')putchar(++c);}18.鸡问题:100元钱买100只鸡,公鸡一只5元钱,母鸡一只3元钱,小鸡一元钱三只,求100元钱能买公鸡、母鸡、小鸡各多少只?#includemain(){intcocks,hens,chicks; cocks=0;while(cocks<=19){hens=0;while(hens<=33){chicks=100.0-cocks-hens;if(5.0*cocks+3.0*hens+chicks/3.0==100.0)printf("%d,%d,%d ",cocks,hens,chicks);【1】;}【2】;}}20.下列程序计算平均成绩并统计90分及以上人数。main(){intn,m;floatgrade,average;average=n=m=【1】;while(【2】){scanf("%f",&grade);if(grade<0)break;n++;average+=grade;if(grade<90)【3】;m++;}if(n)printf("%.2f%d ",average/n,m);}21.下列程序计算Fibonacci数列:1,1,2,3,5,8,13……的前40项。main(){intI;longf1,f2;【1】;for(I=0;I<20;I++){printf("%12ld%12ld",f1,f2);if(I%2)printf(" ");f1+=f2;【2】;}}22.下列程序判断一个数是否为素数。#include#includemain(){intI,k,m;scanf("%d",&m); k=sqrt(【1】);for(I=2;I<=k;I++)if(m%I==0)【2】;if(【3】)printf("%dyes ",m);elseprintf("%dno ",m);}24.从键盘上输入两个整数m和n,求其最大公约数。main(){inta,b,num1,num2,temp;scanf("%d,%d",&num1,&num2);if(【1】){temp=num1;num1=num2;num2=temp;}a=num1;b=num2;while(b!=0){temp=【2】;a=b;b=temp;}printf("%d,%d",a,num1*num2/a);}11.以下程序的输出结果是。main(){inti,j;for(i=0;i<5;i++){for(j=1;j<10;j++)if(j==6)break;if(i<3)continue;if(i>3)break;}printf("i=%d,j=%d ",i,j);}15.以下程序段中内嵌循环共被执行的次数为:()for(i=5;i;i--)for(j=0;j<4;j++){…}A.20B.24C.25数组数组:存放的类型是一致的。多个数组元素的地址是连续的。1、一维数组的初始化:inta[5]={1,2,3,4,5};合法 inta[5]={1,2,3,};合法inta[]={1,2,3,4,5};合法,常考,后面决定前面的大小!inta[5]={1,2,3,4,5,6};不合法,赋值的个数多余数组的个数了2、一维数组的定义;inta[5];注意这个地方有一个重要考点,定义时数组的个数不是变量一定是常量。inta[5]合法,最正常的数组inta[1+1]合法,个数是常量2,是个算术表达式inta[1/2+4]合法,同样是算术表达式intx=5,inta[x];不合法,因为个数是x,是个变量,非法的,defineP5inta[P]合法,define后的的P是符号常量,只是长得像变量3、二维数组的初始化inta[2][3]={1,2,3,4,5,6};合法,很标准的二维的赋值。inta[2][3]={1,2,3,4,5,};合法,后面一个默认为0。inta[2][3]={{1,2,3,}{4,5,6}};合法,每行三个。inta[2][3]={{1,2,}{3,4,5}};合法,第一行最后一个默认为0。inta[2][3]={1,2,3,4,5,6,7};不合法,赋值的个数多余数组的个数了。inta[][3]={1,2,3,4,5,6};不合法,不可以缺省行的个数。inta[2][]={1,2,3,4,5,6};合法,可以缺省列的个数。补充:1)一维数组的重要概念:对a[10]这个数组的讨论。1、a表示数组名,是第一个元素的地址,也就是元素a[0]的地址。(等价于&a)2、a是地址常量,所以只要出现a++,或者是a=a+2赋值的都是错误的。3、a是一维数组名,所以它是列指针,也就是说a+1是跳一列。 对a[3][3]的讨论。1、a表示数组名,是第一个元素的地址,也就是元素a[0][0]的地址。2、a是地址常量,所以只要出现a++,或者是a=a+2赋值的都是错误的。3、a是二维数组名,所以它是行指针,也就是说a+1是跳一行。4、a[0]、a[1]、a[2]也都是地址常量,不可以对它进行赋值操作,同时它们都是列指针,a[0]+1,a[1]+1,a[2]+1都是跳一列。5、注意a和a[0]、a[1]、a[2]是不同的,它们的基类型是不同的。前者是一行元素,后三者是一列元素。2)二维数组做题目的技巧:如果有a[3][3]={1,2,3,4,5,6,7,8,9}这样的题目。步骤一:把他们写成:      第一列 第二列 第三列  a[0]à 1  2  3->第一行a[1]à4  5  6 —>第二行a[2]à7  8  9 ->第三行步骤二:这样作题目间很简单:    *(a[0]+1)我们就知道是第一行的第一个元素往后面跳一列,那么这里就是a[0][1]元素,所以是1。*(a[1]+2)我们就知道是第二行的第一个元素往后面跳二列。那么这里就是a[1][2]元素,所以是6。 一定记住:只要是二维数组的题目,一定是写成如上的格式,再去做题目,这样会比较简单。3)数组的初始化,一维和二维的,一维可以不写,二维第二个一定要写inta[]={1,2}合法。inta[][4]={2,3,4}合法。但inta[4][]={2,3,4}非法。4)二维数组中的行指针inta[1][2];其中a现在就是一个行指针,a+1跳一行数组元素。搭配(*)p[2]指针a[0],a[1]现在就是一个列指针。a[0]+1跳一个数组元素。搭配*p[2]指针数组使用5)还有记住:a[2]变成*(a+2)a[2][3]变成*(a+2)[3]再可以变成*(*(a+2)+3)strlen(字符数组名或字符指针变量);字符串测长函数charstr[20]=”helloworld!”;intlen;len=strlen(str);得出的结果是len的值为12strcat(字符串1的地址,字符串2的地址);将字符串2的内容连接到字符串1的尾部。charstr1[20]=”ABC”,str2[20]=”xyz”;strcat(str1,str2);则程序运行的结果是str1内存放的字符串变为ABCxyz,当然str2存放的字符串还是xyz。strcmp(字符串1的地址,字符串2的地址);比较串1和串2哪个比较大。比较大小的依据是,两个字符串从左往右相应位置上第一个不相等的字符ASCII码值之差。strcpy(字符串1的地址,字符串2的地址);将字符串2的内容复制到字符串1内。charstr1[20]=”ABC”,str2[20]=”xyz”;2.以下对一维整型数组a的正确说明是()。A.inta(10);B.intn=10,a[n];C.intn;D.#defineSIZE10scanf("%d",&n);inta[SIZE];inta[n];3.在C语言中,引用数组元素时,其数组下标的数据类型允许是()。A.整型常量B.整型表达式C.整型常量或整型表达式D.任何类型的表达式8.以下程序段给数组所有的元素输入数据,请选择正确答案填入()。#includemain(){inta[10],i=0;while(i<10)scanf("%d",________);┇ }A.a+(i++)B.&a[i+1]C.a+iD.&a[++i]10.以下程序的输出结果是()main(){inti,a[10];for(i=9;i>=0;i--)a[i]=10-i;printf("%d%d%d",a[2],a[5],a[8]);}A.258B.741C.852D.36911.以下程序运行后,输出结果是()。main(){intn[5]={0,0,0},i,k=2;for(i=0;i=1);for(j=i-1;j>=0;j--)printf("%d",a[j]);printf(" ");}A.10000B.10010C.00110D.1010013.以下程序运行后,输出结果是()。main(){inta[10],a1[]={1,3,6,9,10},a2[]={2,4,7,8,15},i=0,j=0,k;for(k=0;k<4;k++)if(a1[i]2][!1]D.a[2][0]18.若有定义:intb[3][4]={0};则下述正确的是()。A.此定义语句不正确B.没有元素可得初值0C.数组b中各元素均为0D.数组b中各元素可得初值但值不一定为020.若有以下的定义:intt[5][4];能正确引用t数组的表达式是()。A.t[2][4]B.t[5][0]C.t[0][0]D.t[0,0]21.在定义intm[][3]={1,2,3,4,5,6};后,m[1][0]的值是()。A.4B.1C.2D.522.在定义intn[5][6]后第10个元素是()。A.n[2][5]B.n[2][4]C.n[1][3]D.n[1][4] 23.若二维数组c有m列,则计算任一元素c[i][j]在数组中的位置的公式为()。(假设c[0][0]位于数组的第一个位置)A.i*m+jB.j*m+iC.i*m+j-1D.i*m+j+124.若有以下定义语句,则表达式“x[1][1]*x[2][2]”的值是()。floatx[3][3]={{1.0,2.0,3.0},{4.0,5.0,6.0}};A.0.0B.4.0C.5.0D.6.027.有以下程序main(){inta[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;for(i=1;i<3;i++)for(j=0;j<=i;j++)s+=a[i][j];printf("%d ",s);}该程序的输出结果是()。A.18B.19C.20D.2128.若定义如下变量和数组:inti;intx[3][3]={1,2,3,4,5,6,7,8,9};则下面语句的输出结果是()。for(i=0;i<3;i++)printf("%d",x[i][2-i]);A.159B.147C.357D.36929.下述对C语言字符数组的描述中错误的是()。A.字符数组可以存放字符串B.字符数组中的字符串可以整体输入、输出C.可以在赋值语句中通过赋值运算符"="对字符数组整体赋值D.不可以用关系运算符对字符数组中的字符串进行比较31.不能把字符串:Hello!赋给数组b的语句是()。A.charstr[10]={'H','e','l','l','o','!'};B.charstr[10];str="Hello!";C.charstr[10];strcpy(str,"Hello!");D.charstr[10]="Hello!";32.合法的数组定义是()。A.inta[]="string";B.inta[5]={0,1,2,3,4,5};C.ints="string";D.chara[]={0,1,2,3,4,5};38.运行下面的程序,如果从键盘上输入:123<空格>456<空格>789<回车>,输出结果是()。A.123,456,789B.1,456,789C.1,23,456,789D.1,23,456main(){chars[100];intc,i;scanf("%c",&c);scanf("%d",&i);scanf("%s",s);printf("%c,%d,%s ",c,i,s);} 39.运行下面的程序,如果从键盘上输入:ab<回车>c<回车>def<回车>则输出结果为()。A.aB.aC.abD.abcdefbbcccdddef#include#defineN6main(){charc[N];inti=0;for(;i=0.0&&n<1000){sum+=【1】;x[n]=【2】;n++;scanf("%f",&a);}ave=【3】;printf("Output: ");printf("ave=%f ",ave);for(i=0;ia[j])【3】;temp=a[i];a[i]=a[min];a[min]=temp;}for(i=0;imain(){inta[3][3]={1,2,3,4,5,6,7,8,9},i,s1=0,s2=1;for(i=0;i<=2;i++){s1=s1+a[i][i]; s2=s2*a[i][i];};printf("s1=%d,s2=%d",s1,s2);}12.以下程序完成功能是:计算两个3*4阶矩阵相加,并打印出结果。请填空。#includemain(){inta[3][4]={{3,-2,1,2},{0,1,3,-2},{3,1,0,4}};intb[3][4]={{-2,3,0,-1},{1,0,-2,3},{-2,0,1,-3}};inti,j,c[3][4];for(i=0;i<3;i++)for(j=0;j<4;j++)________;for(i=0;i<3;i++){for(j=0;j<4;j++)printf("%d",c[i][j]);printf(" ");}}18.从键盘输入由5个字符组成的单词,判断此单词是不是hello,并显示结果。#includemain(){staticcharstr[]={‘h’,’e’,’l’,’l’,’o’};charstr1[5];【1】;for(i=0;i<5;i++)【2】;flag=0;for(i=0;i<5;i++)if【3】{flag=1;break;}if(flag)printf("thiswordisnothello");elseprintf("thiswordishello");}23.以下程序功能是:统计从终端输入的字符中每个大写字母的个数。用#号作为输入结束标志,请填空。#include#includemain(){intnum[26],i;charc;for(i=0;i<26;i++)num[i]=0;while(【1】!='#')/*统计从终端输入的大写字母个数*/if(isupper(c))num[c-65]+=1; for(i=0;i<26;i++)/*输出大写字母和该字母的个数*/if(num[i])printf("%c:%d ",i【2】,num[i]);}3.下面程序的功能是输出数组s中最大元素的下标,请填空。main(){intk,p;ints[]={1,-9,7,2,-10,3};for(p=0,k=p;p<6;p++)if(s[p]>s[k])printf("%d ",k);}5.下面程序求方阵的主对角线元素乘积,请填空。#includemain(){inta[5][5],i,j,ss;printf("inputdata:");for(i=0;i<5;i++)for(j=0;j<5;j++)scanf("%d",&a[i][j]);ss=;for(i=0;i<5;i++)ss=;printf("ss=%d ",ss);}6.以下程序求任意10个实数的最大值和最小值。#includemain(){inti;floata[10],max,min;for(i=0;i<10;i++)scanf("%f",&a[i]);max=min=a[0];for(i=1;i<10;i++){if(maxa[i]);}printf("最大值=%f ",max);printf("最小值=%f ",min);}函数1.以下正确的函数定义形式是:()a)doublefun(intx,inty)b)doublefun(intx;inty)c)doublefun(intx,inty);d)doublefun(intx,y);5.已有以下数组定义和f函数调用语句,则在f函数的说明中,对形参数组array的错误定义方式是:()a)f(intarray[][6]) b)f(intarray[3][])c)f(intarray[][4])d)f(intarray[2][5])7.若使用一维数组名作函数实参,则以下正确的说法是:()a) 必须在主调函数中说明此数组的大小b)实参数组类型与形参数组类型可以不匹配c)在被调函数中,不需要考虑形参数组的大小d) 实参数组名与形参数组名必须一致9.若有以下程序:#includevoidnum(){externintx,y;inta=15,b=10;x=a-b;y=a+b;}intx,y;main(){inta=7,b=5;x=a+b;y=a-b;num();printf(“%d,%d ”,x,y);}程序的正确运行结果是:()a)12,2b)不确定c)5,25d)1,1212.C语言规定,函数返回值的类型是:()a)return语句中的表达式类型所决定b)调用该函数时的主调函数类型所决定c)调用该函数时系统临时决定d)在定义该函数时所指定的函数类型所决1.以下程序的输出结果是__________。main(){inti=2,x=5,j=7;fun(j,6);printf(“i=%d;j=%d;x=%d ”,i,j,x);}fun(inti,intj){intx=7;printf(“i=%d;j=%d;x=%d ”,i,j,x);}2.以下程序的输出结果是__________。 main(){increment();increment();increment();}increment(){intx=0;x+=1;printf(“%d”,x);}4.若输入一个整数10,以下程序的输出结果是__________。main(){inta,e[10],c,i=0;printf(“输入一整数 ”);scanf(“%d”,&a);while(a!=0){c=sub(a);a=a/2;e[i]=c;i++;}for(;i>0;i--)printf(“%d”,e[i-1]);}sub(inta){intc;c=a%2;returnc;}5.以下程序的功能是计算下面函数的值。请填空。#include#includefloatf();main(){floatx,y,z,sum;printf(“ inputx,y,z: ”);scanf(“%f%f%f”,&x,&y,&z);sum=【1】;printf(“sum=%f ”,sum);} floatf(floata,floatb,floatc){floatvalue;value=【2】;return(value);}6.函数f中的形参a为一个10×10的二维数组,n的值为5,以下程序段的运行结果是__________。f(inta[10][10],intn){inti,j,k;j=n/2+1;a[1][j]=1;i=1;for(k=2;k<=n*n;k++){i=i-1;j=j+1;if((i<1)&&(j>n)){i=i+2;j=j-1;}else{if(i<1)i=n;if(j>n)j=1;}if(a[i][j]==0)a[i][j]=k;else{i=i+2;j=j-1;a[i][j]=k;}}}5.C语言规定,函数返回值的类型是由()。A.return语句中的表达式类型所决定B.调用该函数时的主调函数类型所决定C.调用该函数时系统临时决定D.定义函数时所指定的函数类型所决定6.在C语言程序中,以下正确的描述是()。A.函数可以嵌套定义,但不可以嵌套调用B.函数的定义和调用均可以嵌套C.函数不可以嵌套定义,但可以嵌套调用D.函数的定义和调用均不可以嵌套7.若用数组名作为函数调用的实参,传递给形参的是()。A.数组的首地址B.数组第一个元素的值C.数组中全部元素的值D.数组元素的个数8.如果在一个函数中的复合语句中定义了一个变量,以下关于该变量正确的说法是()。A.只在该复合语句中有效B.在该函数中有效C.在本程序范围内均有效D.为非法变量10.以下程序的正确运行结果是()。#includemain(){intk=4,m=1,p;p=func(k,m);printf("%d,",p);p=func(k,m);printf("%d ",p);}func(inta,intb){staticintm=0,i=2;i+=m+1;m=i+a+b;return(m);} A.8,17B.8,16C.8,20D.8,814.下面的程序执行后输出的结果是()。f(inta){intb=0;staticintc=3;b++;c++;return(a+b+c);}main(){inta=2,i;for(i=0;i<3;i++)printf("%d",f(a));}A.789B.7911C.71013D.7772.定义函数时,在函数头中除有函数名称外,还应有、和等信息。3.必须对函数才能确立函数可实现的功能,只有对函数才能实现函数的功能。4.C语言中,函数的调用有、和三种方式。5.C语言中,每个变量都有作用域和生存期,变量的作用域是,变量的生存期是。6.对函数或变量的是告诉系统此程序段要用到在其后面才定义的函数或变量,使函数或变量的作用域得以扩展。15.下面程序for循环执行次,程序的运行结果是。#include#defineM3#defineFMNM+Mmain(){inti,n=0;for(i=0;i18.下列语句中错误的是()。A.#definePI=3.1415926B.#include"math.h"C.if(2);D.for(;;)if(1)break;13.设有定义如下:#defineF(N)2*N,则表达式F(2+3)的值是。指针指针变量的本质是用来放地址,而一般的变量是放数值的。inta[10];p=&a[3];*p得到的是a[3]的值。若p++;此时p存放的是a[4]的地址&a[4];*p得到的就是a[4]的值。或p--;此时p存放的是a[2]的地址&a[2],*p得到的就是a[2]的值。inta[3][4];定义了一个二维数组,该二维数组第0行的地址为a,第1行的地址为a+1,第2行的地址为a+2,想从行的地址得到元素的地址,需在行地址前加上指针运算符“*”,即*a就是第0行首个元素的地址即a[0][0]的地址,而a[0][2]的地址就是在a[0][0]的地址基础上加上位移量2,即*a+2,然后想得到a[0][2]这个元素的值呢就再加上一个指针运算符“*”,即*(*a+2),类似地,想得到a[2][2]这个元素的值呢就是*(*(a+2)+2)1、int*p中*p和p的差别:简单说*p是数值,p是地址!*p可以当做变量来用;*的作用是取后面地址p里面的数值p是当作地址来使用。可以用在scanf函数中:scanf(“%d”,p);2、*p++和(*p)++的之间的差别:改错题目中很重要!考试超级重点*p++是地址会变化。口诀:取当前值,然后再移动地址!(*p)++是数值会要变化。口诀:取当前值,然后再使数值增加1。例题:int*p,a[]={1,3,5,7,9};p=a;请问*p++和(*p)++的数值分别为多少?*p++:这个本身的数值为1。由于是地址会增加一,所以指针指向数值3了。(*p)++这个本身的数值为1。由于有个++表示数值会增加,指针不移动,但数值1由于自加了一次变成了2。3、二级指针:*p:一级指针:存放变量的地址。**q:二级指针:存放一级指针的地址。常考题目:intx=7;int*p=&x,**q=p;问你:*p为多少?*q为多少?**q为多少?7p7再问你:**q=&x的写法可以吗?不可以,因为二级指针只能存放一级指针的地址。4、三名主义:(考试的重点)数组名:表示第一个元素的地址。数组名不可以自加,他是地址常量名。(考了很多次) 函数名:表示该函数的入口地址。字符串常量名:表示第一个字符的地址。5、移动指针(经常加入到考试中其他题目综合考试)char*s=“meikanshu”while(*s){printf(“%c”,*s);s++;}这个s首先会指向第一个字母m然后通过循环会一次打印出一个字符,s++是地址移动,打印了一个字母后,就会移动到下一个字母!6、指针变量两种初始化(一定要看懂)方法一:inta=2,*p=&a;(定义的同时初始化)方法二:inta=2,*p; (定义之后初始化)    p=&a;7、传数值和传地址(每年必考好多题目)voidfun(inta,intb)voidfun(int*a,int*b){intt;{intt;t=a;a=b;b=t;t=*a;*a=*b;*b=t;}}main()main(){intx=1,y=3,{intx=1,y=3,fun(x,y);fun(&x,&y)printf(“%d,%d”,x,y);printf(“%d,%d”,x,y);}}这个题目答案是1和3。这个题目的答案就是3和1。传数值,fun是用变量接受,所以fun中传地址,fun用指针接受!这个时候fun的交换不会影响到main中的x和y。中的交换,就会影响到main中的x和y。传数值,形参的变化不会影响实参。传地址形参的变化绝大多数会影响到实参!1、变量的指针,其含义是指变量的()A)值B)地址C)名D)一个标志2、若有以下定义:intx[10],*pt=x;则对x数组元素的正确引用是()A)*&x[10]B)*(x+3)C)*(pt+10)D)pt+38、下面程序的输出结果是()main(){inta=25,*p;p=&a;printf("%d ",++*p);}A)23B)24C)25D)2615、有以下程序main(){charstr[]="xyz",*ps=str;while(*ps)ps++;for(ps--;ps-str>=0;ps--)puts(ps);}执行后输出结果是() A)yz<回车>xyzB)z<回车>yzC)z<回车>yz<回车>xyzD)x<回车>xy<回车>xyz16、下面程序的输出结果是()main(){inta[]={2,4,6,8,10};inty=1,x,*p;p=&a[1];for(x=0;x<3;x++)y+=*(p+x);printf("%d ",y);}A)17B)18C)19D)2019、若有以下定义:inta[2][3]={2,4,6,8,10,12};则以下描述正确的是()A)*(a+1)为元素a[1][0]的指针B)a[1]+1为元素a[1][1]的指针C)*(a+1)+2为元素a[1][2]的指针D)*a[1]+2的值是1220、以下程序的运行结果是()#defineNULL0main(){inta[]={1,2,3,4,5,6,7,8,9,10,11,12};int*p=a+5,*q=NULL;*q=*(p+5);printf("%d%d ",*p,*q);}A)运行后报错B)66C)611D)5526、若有定义:int*p[3];,则以下叙述中正确的是()A)定义了一个基类型为int的指针变量p,该变量具有三个指针B)定义了一个指针数组p,该数组含有三个元素,每个元素都是基类型为int的指针C)定义了一个名为*p的整型数组,该数组含有三个int类型元素D)定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素2、下面程序的输出是。main(){inta[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};int(*p)[4]=a,i,j,k=0;for(i=0;i<3;i++)for(j=0;j<2;j++)k=k+*(*(p+i)+j);printf("%d ",k);}6、下面程序的输出是。main(){char*p1,*p2,str[50]="ABCDEFG";p1="abcd";p2="efgh"; strcpy(str+1,p2+1);strcpy(str+3,p1+3);printf("%s",str);}8、执行下列程序段后,*(ptr+5)的值为。charstr[]="Hello";char*ptr;ptr=str;3、以下程序的功能是:利用指针指向三个整型变量,并通过指针运算找出三个数中的最大值,输出到屏幕上,请填空:main(){intx,y,z,max,*px,*py,*pz,*pmax;scanf(“%d%d%d”,&x,&y,&z);px=&x; py=&y; pz=&z; pmax=&max;  *pmax=x    ;if(*pmax<*py)*pmax=*py;if(*pmax<*pz)*pmax=*pz;printf(“max=%d ”,max);}7、以下函数把b字符串连接到a字符串的后面,并返回a中新字符串的长度。请填空。Strcen(chara[],charb[]){intnum=0,n=0;while(*(a+num)!=)num++;while(b[n]){*(a+num)=b[n];num++;;} return(num);}2.以下程序中调用scanf()函数给变量a输入数值的方法是错误的,错误原因是()。main(){int*p,*q,a,b;p=&a;printf("inputa:");scanf("%d",*p);┆}A.*p表示的是指针变量p的地址B.*p表示的是变量a的值,而不是变量a的地址C.*p表示的是指针变量p的值D.*p只能用来说明p是一个指针变量5.以下程序运行结果是()。sub(intx,inty,int*z){*z=y-x;}main(){inta,b,c;sub(10,5,&a);sub(7,a,&b);sub(a,b,&c); printf("%4d,%4d,%4d ",a,b,c);}A.5,2,3B.-5,-12,-7C.-5,-12,-17D.5,-2,-76.下面程序段的运行结果是()。char*s="abcde";s+=2;printf("%d",s);A.cdeB.字符'c'C.字符'c'的地址D.无确定的输出结果7.若有以下定义,则对a数组元素地址的正确引用是()。inta[5],*p=a;A.*&a[5]B.a+2C.*(p+5)D.*(a+2)8.若有以下定义,则对a数组元素地址的正确引用是()。inta[5],*p=a;A.p+5B.*a+1C.&a+1D.&a[0]9.若有以下定义,则p+5表示()。inta[10],*p=a;A.元素a[5]的地址B.元素a[5]的值C.元素a[6]的地址D.元素a[6]的值13.下面程序的运行结果是()。#include"stdlib.h"fun(int**a,intp[2][3]){**a=p[1][1];}main(){intx[2][3]={2,4,6,8,10,12},*p;p=(int*)malloc(sizeof(int));fun(&p,x);printf("%d ",*p);}A.10B.12C.6D.815.设有以下定义,则下列能够正确表示数组元素a[1][2]的表达式是()。inta[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};int(*prt)[3]=a,*p=a[0];A.*((*prt+1)[2])B.*(*(p+5))C.(*prt+1)+2D.*(*(a+1)+2)16.下列程序的输出结果是()。main(){inta[5]={2,4,6,8,10},*p,**k;p=a;k=&p;printf("%d",*(p++));printf("%d ",**k);}A.44B.22C.24D.4 1.指针运算符&和*分别称为和运算。6.若有说明语句inta[3]={1,3,5},*p=a;则*++p,*p++,*p+1的值分别是。结构体结构体类型的定义及变量的定义struct结构体名{类型成员1;类型成员2;……类型成员n;}变量名;structstudent{charname[10];longnum;intscore[4];}st1;定义类型时同时定义变量structstudentst2;定义类型后,用类型名定义变量还有一种struct{charname[10];longnum;intscore[4];}st3;不给类型名,直接定义变量结构体变量所占字节数:各成员各占字节数之和,如以上st1,st2,st3的字节数皆为10+4+2*4=22结构体成员的访问结构体变量名.成员名如st1.name[2]通过指针访问:structstudent*st;st=&st1;(*st).num或st->num共用体变量所占字节数:各成员所占字节数的最大值,如上d1,d2,d3所占字节数皆为4.(单精度浮点型变量所占字节数最多为4).共用体成员的访问共用体变量名.成员名如d1.f通过指针访问:unionstudent*d;d=&d1;(*d).num或d->num枚举类型枚举类型的定义:enum枚举名{枚举元素名1,枚举元素名2,…,枚举元素名n};枚举元素的值:默认值分别为0、1、…、n-1。枚举元素的值也可在定义时重指定,对于没有指定值的元素,按顺序加1如enumweekday{sun=7,mon=1,tue,wend,thur,fri,sat};则sun值为7,mon值为1,tue值为2,wend值为3,thur值为4,fri值为5,sat值为63、有以下说明和定义语句structstudent {intage;charnum[8];};structstudentstu[3]={{20,"200401"},{21,"200402"},{19,"200403"}};structstudent*p=stu;以下选项中引用结构体变量成员的表达式错误的是______。A)(p++)->numB)p->numC)(*p).numD)stu[3].age4、设有如下枚举类型定义enumlanguage{Basic=3,Assembly=6,Ada=100,COBOL,Fortran};枚举量Fortran的值为______。A)4B)7C)102D)1035、以下叙述中错误的是_________。A)可以通过typedef增加新的类型B)可以用typedef将已存在的类型用一个新的名字来代表C)用typedef定义新的类型名后,原有类型名仍有效D)用typedef可以为各种类型起别名,但不能为变量起别名12、设有以下语句:structst{intn;structst*next;};staticstructsta[3]={5,&a[1],7,&a[2],9,''},*p;p=&a[0];则表达式   的值是6。A)p++->nB)p->n++C)(*p).n++D)++p->n4、若有以下说明和定义语句,则变量w在内存中所占的字节数是。unionaa{floatx,y;charc[6];};structst{unionaav;floatw[5];doubleave;}w;5、设有以下结构类型说明和变量定义,则变量a在内存所占字节数是_。Structstud{charnum[6];ints[4];doubleave;}a,*p;7、有以程序typedefstruct{charname[9];charsex;floatscore[2];}STU;voidf(STUa){STUb={“Zhao”,’m’,85.0,90.0};inti;strcpy(a.name,b.name);a.sex=b.sex;for(i=0;i<2;i++)a.score[i]=b.score[i];}main(){STUc={“Qian”,’p’,95.0,92.0};f(c);printf(“%s,%c,%2.0f,%2.0f ”,c.name,c.sex,c.score[0],c.score[1]); }程序的运行结果是10、有以下程序:structSTU{charname[10];intnum;floatTotalScore;};voidf(structSTU*p){structSTUs[2]={{"SunDan",20044,550},{"Penghua",20045,537}},*q=s;++p;++q;*p=*q;}main(){structSTUs[3]={{"YangSan",20041,703},{"LiSiGuo",20042,580}};f(s);printf("%s%d%3.0f ",s[1].name,s[1].num,s[1].TotalScore);}程序运行后的输出结果是。文件1、系统的标准输入文件是指()。A)键盘B)显示器C)软盘D)硬盘2、以下可作为函数fopen中第一个参数的正确格式是()。A)c:usertext.txtB)c:uSertext.txtC)“c:usertext.txt”D)“c:\user\text.txt"3、若执行fopen函数时发生错误,则函数的返回值是()。A)地址值B)0C)1D)EOF4、若要用fopen函数打开一个新的二进制文件,该文件要既能读也能写,则文件方式字符串应是()。A)“ab+”B)“wb+”C)“rb+”D)“abll”5、若以“a+”方式打开一个已存在的文件,则以下叙述正确的是()。A)文件打开时,原有文件内容不被删除,位置指针移到文件末尾,可作添加和读操作B)文件打开时,原有文件内容不被删除,位置指针移到文件开头,可作重写和读操作C)文件打开时,原有文件内容被删除,只可作写操作D)以上各种说法皆不正确6、当顺利执行了文件关闭操作时,fclose函数的返回值是()。A)-1B)TUREC)0D)17、已知函数的调用形式:fread(buffer,size,count,fp);其中buffer代表的是()。A)一个整型变量,代表要读入的数据项总数B)一个文件指针,指向要读的文件C)一个指针,指向要读入数据的存放地址D)一个存储区,存放要读的数据项9、fscanf函数的正确调用形式是_。A)fscanf(fp,格式字符串,输出表列);B)fscanf(格式字符串,输出表,fp); C)fscanf(格式字符串,文件指针,输出表列);D)fscanf(文件指针,格式字符串,输入表列);10、fwrite函数的一般调用形式是_。A)fwrite(buffer,count,size,fp);B)fwrite(fp,size,count,buffer);C)fwrite(fp,count,size,buffer);D)fwrite(buffer,size,count,fp);11、fgetc函数的作用是从指定文件读入一个字符,该文件的打开方式必须是__。A)只写B)追加C)读或读写D)答案B和C都正确12、若调用fputc函数输出字符成功,则其返回值是__。A)EOFB)lC)0D)输出的字符14、阅读以下程序及对程序功能的描述,其中正确的描述是()。#includemain(){FILE*in,*out;charch,infile[10],outfile[10];printf(“Entertheinfilename: ”);scanf(“%s”,infile);printf(“Entertheoutfilename: ”);scanf("%s",outfile);if((in=fopen(infile,”r"))==NULL){printf(“cannotopeninfile ”);exit(0);}if((out=fopen(outfile,“W”))==NULL){printf(”cannotopenoutfile ”);exit(0);}while(!feof(in))fputc(fgetc(in),out);fclose(in);fclose(out);}A)程序完成将磁盘文件的信息在屏幕上显示的功能B)程序完成将两个磁盘文件合二为一的功能C)程序完成将一个磁盘文件复制到另一个磁盘文件中D)程序完成将两个磁盘文件合并且在屏幕上输出16、函数调用语句:fseek(fp-20L,2);的含义是____.A)将文件位置指针移到距离文件头20个字节处B)将文件位置指针从当前位置向后移动20个字节C)将文件位置指针从文件末尾处向后退20个字节D)将文件位置指针移到离当前位置20个字节处 19、函数rewind的作用是_。A)使位置指针重新返回文件的开头B)将位置指针指向文件中所要求的特定位置C)使位置指针指向文件的末尾D)使位置指针自动移至下一个字符位置20、函数ftell(fp)的作用是__。A)得到流式文件中的当前位置B)移动流式文件的位置指针C)初始化流式文件的位置指针D)以上答案均正确21、下面程序实现人员登录。即每当从键盘接收一个姓名,便在文件“member.dat”中进行查找。若此姓名已存在,则显示相应信息;若文件中没有该姓名,则将其存入文件(若文件‘member.dat”不存在,应在磁盘上建立一个新文件)。当输入姓名按<回车>键或处理过程中出现错误时程序结束。请从下面对应的一组选项中选出正确的内容填入[]。#incltidemain(){FILE*fp;intflag;charname[20],data[20];if((fp=fopen(“member.dat”,【1】))==NULL){printf(“Openfileerror ”);exit(O);}do{printf(”Entername:”);【2】;if(strlen(name)==0)break;strcat(natne,“ ”);rewind(fp);flag=1;while(flag&&((fgets(data,30,fp)!=NULL)))if(strcmp(data,name)==0)flag=0;if(flag)fputs(narne,fp);elseprintf(“tThisnamehasbeenexisted! ”);}while(【3】);/*读写正确就循环。*/fclose(fp);}【1】A)“w”B)“w+”C)“r+”D)“a+”【2】A)fgets(name)B)gets(name) C)scanf(name)D)getc(name)【3】A)ferror(fp)==0B)ferror(fp)==lC)ferror(fP)!=0D)!(ferror(fp)==0)22、在执行fopen函数时,ferror函数的初值是()。A)TUREB)-1C)1D)023、以下read函数的调用形式中,参数类型正确的是()。A)read(intfd,char*buf,intcount)B)read(int*buf,intfd,intcount)C)read(intfd,intcount,char*buf)D)read(intcount,char*buf,intfd)24、函数lseek用来移动文件的位置指针,其调用形式是()。A)lseek(位移方向,位移量,文件号);B)lseek(文件号,位移量,起始点);C)lseek(文件号,起始点,位移量);D)lseek(文件号,位移方向,位移量);练习题2.下列四个叙述中,错误的是()。A.一个C源程序必须有且只能有一个主函数B.一个C源程序可以含一个或多个子函数C.在C源程序中注释说明必须位于语句之后D.C源程序的基本结构是函数4.C语言提供的合法的数据类型关键字是_________A.DoubleB.shortC.integerD.Char5.设x为int型变量,则执行语句x=10;x+=x-=x-x;后,x的值为()。A.10B.20C.40D.306.以下程序的输出结果是________#include#includemain(){inta=1,b=4,c=2;floatx=10.5,y=4.0,z;z=(a+b)/c+sqrt((double)y)*1.2/c+x;printf(“%f ”,z);}A.14.000000B.15.400000C.13.700000D.14.90000010.printf函数中用到格式符“%5s”,如果输出的字符串长度大于5,则输出方式是()。A.从左起输出该字符串,右补空格B.按原字符串长从左向右全部输出C.右对齐输出该字符串,左补空格D.输出错误信息12.若定义intx;floaty;且执行scanf("%3d,%f",&x,&y);语句时,从第一列开始输入数据12345,678<回车>,则x的值为()。A.12345B.123C.45D.345 14.运行以下程序段的运行结果是()。intx=1,y=2,z=3,a=-1;if(x<=y)a=0;elseif(z>y)a=1;printf("%d%d%d%d ",x,y,z,a);A.1231B.1230C.123-1D.编译时报语法错误,不能执行17.下面的程序()main(){intx=3;do{printf(“%d ”,x-=2);}while(!(-x));}A.输出的是1B.输出的是1和-2C.输出的是3和0D.是死循环18.C语句中下列()语句可实现循环结构设计A.continueB.switchC.forD.break19.运行下面程序段的输出结果是()。intn,a,s=0,p=1,i;n=2;a=2;for(i=1;i<=n;++i){p=p*a;s+=p;}printf(“ s(%d,%d)=%d",a,i,s);A.s(2,2)=6B.s(2,3)=6C.s(1,2)=6D.s(2,2)=521.运行下面程序段的输出结果是()。staticinta[7]={1,3,5};printf("%d ",a[3]);A.0B.5C.3D.不确定数22.若有说明charc[]="China";则对该数组元素的正确引用是()。A.c[3+4]B.c(2)C.c[1*3]D.c{5}23.若要用下面的程序片段使指针变量p,指向一个存储整型变量的动态存储单元:int*p;即p=malloc(sizeof(int));则应填入A.intB.int*C.(*int)D.(int*)27.定义联合数据类型union{inta;intb;intc;intd; }x;执行语句x.a=2;x.b=3;x.c=4;x.d=5;后,x.b的值为()。A.2B.3C.4D.528.定义以下结构体类型structs{inta;floatf;};语句printf("%d",sizeof(structs))的输出结果为()。A.2B.3C.4D.630.程序中定义以下宏#definew2#defineL4+w若定义intval;且令val=L*L,则变量val的值为()。A.12B.14C.20D.3632.有以下程序:#includemain(){intc;while((c=gether())!=’ ’){switch(c-‘2’){case0:case1:putchar(c+4);case2:putchar(c+4);break;case3:putchar(c+3);default:putchar(c+2);break}}printf(“ ”);}从第一列开始输入以下数据,代表一个回车符.2473程序的输出结果是__________A.668977B.668966C.66778777D.668876637【程序】#includemain(){intx=1,i=1;for(;x<50;i++){if(x>10)break;if(x%2!=0){x+=3;continue;}x-=1;}printf("%d ",x);输出为【37】printf("%d ",i);输出为【38】}【37】A.10B.12C.11D.14 【38】A.8B.9C.10D.738.下面程序从一个二进制文件中读入结构体数据,并把结构体数据显示在终端屏幕上,请选择正确的答案填入程序空白处。#includemain(){structdatarec{chars;inta;floatc;}r;FILE*fp;if((fp=fopen("file.dat","rb"))==NULL){printf("Can'topeninputfile ");exit(0);}while(【39】){【40】;printf("%c,%d,%f ",r.s,r.a,r.c);}fclose(fp);}1、阅读下面程序,写出结果f(a)inta;{autointb=0;staticintc=6;b+=1;c+=1;return(a+b+c);}main(){inta=2,i;for(i=0;i<3;i++)printf(“%3d”,f(a));}2、阅读下面程序,写出结果swap(int*a,int*b){int*t;t=a,a=b,b=t;printf(“%d,%d ”,*a,*b);}main(){inta=3,b=5;swap(&a,&b);printf(“%d,%d ”,a,b);}

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭