版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言的基本构成和#include“stdio.h”{inta,b,sum;/*定义变量 /*把整数10赋值给变量a*/ /*把整数20赋值给变量b*/sum=a+b;/*把两数之和赋值给变量sum*/printf(“a=%d,b=%d,sum=%d\n”,a,b,sum);/*输出计算结果}(1).C程序由函数组成,一个程序必须且只能有一个主函数(main()),C程序总是从主函数开始执行,(2定义函数时函数名后必须有一对小括号,函数体必须放在一对花括号内,在函数体中,函数体有a,,m给它们赋值。例如:int是错误的,而it正确。“/”“*/(6).C语言程序书写格式自由,语句可以从任一列开始书写,一行内可以写多个语句。但是惯,是程序便于阅读。标识符只能由字母、数字和下划线组成标识符的第一个字符必须是字母或下划标识符的大小写字母是有区别的,如abc和ABC是两个完全不同的标识符(3)符的分类预定义标识符C语言中它也有特定的含义。预定义标识符可以用位“用户表标识用户标识符:由用户根据需要定义的标识符被成为用户标识符。用户标示符用来给变量、函数、数组或者指针等命名。C型常数、字符常量、字符串常量。小数部分:基数乘取整,顺二进制转为八、十六进规则:三(四)合一,按序相拼(整数部分,从右向左取,小数部分从左向右取,位数不足补零,1字节=8字长:指CPU能同时处理的二进制位数CPU的型号而定。如:16位微机的字长就是16位或B:表示字节,字节是表示容量的最小单位。位(bit:是计算机中信息表示的最小单位(直接转换为二进制即可如:50000000000000101二字节能存放的最大数是0111111111111111对带符号数,最是符号位,用0表示正,用1表示负忽略负号,求出原码将原码按位取反(0、1互换如:取-5的补码。000000000000010111111111111110101111111111111011将补码转换成相应的整数的步骤将补码按位取反加1将步骤1得到的二进制数转换成十进制数,然后加上负号即可。1000000000000000按位取反加01111111111111111000000000000000=转换成十进制:1×215=加负号:-几个特殊的带符号整数--无符号整数:只有正整数,没有负整数,最不表示符号位,每一位均参与转换带符号整无符号整--例2-12:若有:inta=-1;unsignedb=65535;则 -2-14:若有unsignedb=65536;b的值是:0 按照带符号数转为十进制1unsignedb=655536;而b属于无符号整型,在内存中只占两字节,所以只能包括16位类所占位所占字节类所占位所占字节2unsigned44unsigned444unsigned28标准C没有具体要求规定各类型数据所占内存的字节数以这次考试标准viusalc++6.0为实型数据(浮点数3.31.实型常小数形式:由数字和小数点组成,必须有小数点,小数点的某一侧可以没有数字。如:.23,123.876,123.指数形式:用“e”或“E”后接一个整数,表示以10为底的幂数注意:“e”或“E”之前之后必须有数字,且之后的数字必须是整数。他们和前后的数字之间不能2-15:下列合法的常量是(A.- 例2-16:下列合法的实型常量是 (A) (C) (D) (E) 3.32.实型变单精度型float占4字节双精度型double8字节长双精度longdouble16字节(较少用算术运算符及其表达式 %(%两边必须是整型数据。12.0%3表达式是错误的求余()例如:17%3结果是:217%-3结果是:2,-17%3结果是:-2,-17%-3结果是:-强制类型转强制类型表达式(类型名)表达注意:类型名(表达式)这种形式是C++的强制类型表达方式5.1.赋值运算符格式:变量名=表达 4=3是的表达式 a+(b=3)都是合法的表达 a=(b=10)/(c=2)都是合法的表达实型数据赋给整型变量时,小数部分被舍去,整型数据赋给实型变量时,系统自动将整型数据转换为实型数据。例如:floata;int表达式a=10%3的值是书本:5.2.复合赋值运算符及其表达式:+=- 例如:a+=3相当于a=a+3,a/=b+4相当a/=(b+4)例:若a=12,则执行表达式a+=a-=a+a后a的值是多少? /*a的值是12*/a+=a-=24/*a的值是12*/a+=a=a-24/*a的值是12*/a+=a=-12/*a的值是12*/ /*a的值是-12*/a=a+(-12)/*a的值是-12*/ /*a的值是-24*/5.3. -如:6++(a+b)--都是错误的。当它们用于变量名前时,表达式的值为变量的值加一或减一。当位于变量名后时,表达式的值为变量原来的值。不论位于变量名前还是变量名后,只要进行了自增、自减运算,变量的值都会在原来的基础上加1或减。如:a=3a++表达式的值是3运算之后变量的值是4a=3则++a表达式的值是4之后变量的值是4a=3a--表达式的值是3之后变量的值是2a=3--a表达式的值是2之后变量的值是口诀j=i++;这个表达式是 后增值。即:先把i的初始值给变量j,然后i再自加1j=++i;这歌表达式是先增值后。即:i先自加1,然后再将我们自加后的值赋值给变量j。但是记住它们是一起执行的,就是说:例如j=i++先后增值实际上是一起执行的,它们之不存在先后关系,我们只是位了好记才用到了上面的方法。老师在上课的时候先不要说,但是必须知道。=iji和上面j=++,=++i的方法是一样。5.4逗号运算符及其表达格式:表达式1,表达式2,…,表达式注意:1.逗号表达式的值是整个逗号表达式中最后一个表达式的值求值顺序是从左到右依次求解例如:a=(3,b=1)的值是1运算结束后a的值是1b的值是1二.相关试1.20084月相关试以下叙述中正确的以下选项中不合法的标识符printB)FORC)&a以下选项中不属于字符常量的A) B) D)A)x=y*5=x+zB)int(15.8%5)x=y+z+5,++y填空(7)设变量已正确定义为整型,则表达式n=i=2,++i,i++的值为【72.2007年9月相关(11)C语言源程序名的后缀 B)y-m-3)以下选项B)y-m-3)以下选项中,合法的一组C语言数值常量 B) .5e--(14)以下叙述中正确的A)C语言程序将从源程序中第一个函数开始执C)C语言规定必须用main作为主函数名,程序将从此开始执行,在此结束D)main可作为用户标识符,用以命名任意一个函数作为主函数以下关于long、int和short类型数据占用内存大小的叙述中正确的A)均占4个字 B)根据数据的大小来决定所占内存的字节由用户自己定 D)由C语言编译系统决若变量均已正确定义并赋值,以下合法的C语言赋值语句 3.2007年4月相关下列叙述中错误的是(DA)计算机不能直接执行用C语言编写的源程B)C程序经C编译程序编译后,生成后缀为.obj的文件是一个二进制文件C)后缀为.obj的文件,经连接程序生成后缀为.exe的文件是一个二进制文件D)后缀为.obj和.exe的二进制文件都可以直接运行按照C语言规定的用户标识符命名规则,不能出现在标识符中的是(BA)大写字母B)连接符C)数字字符D)下划以下叙述中错误的是(CA)C语言是一种结构化程序设计对于一个正常运行的C程序,以下叙述中正确的是程序的执行总是从main函数开始,在main函数结程序的执行总是从程序的第一个函数开始,在main函数程序的执行总是从main函数开始,在程序的最后一个函数中结程序的执行总是从程序的第一个函数开始,在程序的最后一个函数中(19)有以下程序,其中%u表示按无符号整数输出(B{unsignedintx=0xFFFF; /*x的初值为十六进*/}/*注意:x是占两个字节*/A)- 所占分考核几专家点C语句分0-简单识字符输出函数1-难度适中,重点字符输入函数1-难度适中,重点格式输入函数3-难度适中,重点理解重点掌格式输出函数3-难度适中,重点理解重点掌语C语句共分为5类控制语函数调用语句printf“this isacstatement表达式语每一个合法的表达式后加上分号()就构成了表达式语句语句和表达式的区别表达式有唯一确定的值,而语句没有值赋值语i=1,j=2是逗号表达式i=1;j=2;是两条赋值语句i++i--;++i;--i;都是赋值语句等价于i=i+1;或i=i-1;空语句:只有一个单独的分号构成的语句。如:;就是一条空语句复合语句:用一对{}将若干语句括起来构成一条复合语输入输出语在使用库函数时必须先用预编译命令#include<头文件名>或#include“头文件名”将相应的头文件如printf()函:printf“功能:按格式控制指定的格式输出数据如:pinf“=%,+=%d3,+输出结果是(1)d格%d:按实际长度输出十进制整%md:输出占m列,若小于m列,左边补空格,若大于m列,按实际输出%-md:输出占m列,若小于m列,右边补空格,若大于m列,按实际输出输出结果 输出结果(2)u格%u:以无符号十进制形式输出整数printf(“%u”,-1);65535(3)o格printf(“%d,%o”,-1,-1);-1,177777xX格%x或%X以无符号十六进制形式输出整数。不输出前导符0x0X,小写对小写,大写对大写。-注:若要输出十六进制和八进制的前导符,则要用%#o和%#x、%#Xc格%c用来输出一个字符,不输出单引号定界符。%c和%d可以相互转换 printf(“%c,%d”,100,100);s格用来输出一个字符串,不输出双引号和字符串结束符%s:输出字符串的有效字符printf(“%s”,”china\0yunnan”);%ms:输出占m列,若小于m列,左边补空格,大于m列,按实际输出swfc,swfc,swfc%m.ns:输出占m列,只输出字符串的左n个字符到m列的右端f格式:按小数形式输出实型数据%f:默认输出6位小%m.nf:输出占m列,其中有n位小数。若超过m列,确保n位小数后按实际输出。注意四舍五入如:printf(“%7.3f,%- e格以指数形式输出一个实数。小数点前只有一位非零数,5位小数,3位指数。234000e+002,1.234500e-g格自动在%f和%e中选择较短的一种输出,对于小数部分不输出无意义的0。 %%表示输出一个%如除了x,e,g大小写均可外,其它都只能小写。如:pinf(“%d1.23);/出错*/scanf()函:scanf“如:anf(“%3d%2d&,&);若输入则:a的值是:386b的值是:30ab的值是:3 则:ch的值是:’3’b的值是%*md:表示跳过m列不读。则:a的值b的值是:原来的值若要给a赋值5,b赋值10,正确的输入是:a=5,b=10若要让a,b,c分别得到1,2,3,正确的输入是:1*,2#,3<回车空格可以是多个。但是,%c格式除外。如若想让a的值为5,b的值为10。确的输入是5空格10<回车>5<回车10<回车5格格10<回车(6)多个%c格式之间没有其它字符,仍然不能用回车或空格来分隔。若输入:a空格b空格c<回车a的值是’a’,b的值是空格,c的值是’b’()如:inta;anf(“%f&a出错*/普通字符原样输入,原样输出对于%d格式,指定宽度小于输出宽度,原样输出%#o,%#x,%#X表示要输出八进制的前导符数字0,和十六进制的前导符0x,0X%x,%X格式,小写对小写,大写对大%*md:表示跳过相应的输入项注意进制间的转换,以及无符号数和带符号数之间的转换scanf()函数中,给double类型变量输入数据时,应该使用%lf类型说明符,而输出时,可以1.2008年4月试题分charch;intk;ch='a';k=12;printf("%c,%d,",ch,ch,k);已知字符a的ASCll十进制代码为97,则执行上述程序段后输出结果2.2007年9月试题 a,b,c,*p=&c;之后,接着执行以下选项中的语句,则能正确执行的语句 有以下程序 scanf("%2d%f%s",&j,&y,name);当执行上述程序段,从键盘上输入 7777abc后,y的值 填空(6)执行以下程序时输 <CR>,则输出结果是【6】 }3.2007年4月试题设变量均已正确定义,若要通过scan(“%d%c%d%c”,&a1,&c1,&a2,&c2);语句为变量a1空格字符)(D) D)10X〈回车〉 填空(6)执行以下程序后的输出结果是 {int }第三章择结构所占分考核几专家点关系运算符及优先次0-简单识关系表达0-简单,属重点识记知识逻辑运算符及优1-简单识逻辑表达1-简单,属重点识记知识if语句的几种形1-简单识if语句的嵌1-难度适中,重点条件运算0-难度适中,重点switch语2-简单,重点掌握重点理语句标0-偏难,不是重1-简单识二.教学内逻辑真(非零值 假(零关系运算符及其表达 关系运算符优先级别低于算术运算符,高于赋值运算符(< 如:a>b+c等价于a>(b+c)a==b<c等价于a==(b<c)a=b<c等价于a=(b<c)4==4表达式的值为4=4表达式不合关系表达式的值只有10,其中1表示“真0表示逻辑运算符及其表达&&逻辑“与||逻辑“或逻辑“非”优先级别&&》||运算规则例如:3>4结果是:03&&4结果!3&&4结果是:00||3结果是:1注意:在求解逻辑与()表达式时,若&运算符左边表达式的值为(假,则不再进行&右边表达式的运算,且将整个&表达式的值定为0;在求解逻辑或()表达式时,若左边表达式的值为非0值(真,则不再进行右边表达式的运算,且将整个逻辑表达式的值定为(真。if语句格式 语句1; 语句1;语句称为:全 单if后的表达式必须用()括起,else后没有表达式ifelse都只能控制紧跟它的一条语句,若要控制多条语句,必须用一对{}括起构成一条复2.2执行方式2.21if语句的执行方式:首先判断表达式的值是否为“真若“真则执行语句部分达式的值为“假则“跳过”语句部分执行if语句后面的其它语句果表达式的值为则执行else语句后面的语句。{intif(m++>5)elseprintf(“m=%d”,m--}{intif(++m>5)printf(“m=%d”,m);elseprintf(“m=%d\n”,m--);printf“m=%d”,m);}2.3if语句的嵌if(表达式if(表达式2)语句1; 语句2;if(表达式3)语句3; 语句else总是与前面最近的且未配对的if语句配对,组成一对if-elseif(表达式if(表达式2)语句1;if(表达式3)语句2; 语句else语句有的同学会把它误以为和第一个if配对,但是实际的情况是和第if语句配对,if(表达式if(表达式2)语句1;if(表达式3)语句2; 语句{ints,t,a,b;if(a>0)s=s+1;if(a>b)t=s+1;elseif(a==b)t=s;elset=2*s;}若运行时输入 10回车,则程序的执行结果是{ints,t,a,b;if(a>0){s=s+1;if(a>b)t=s+1;}elseif(a==b)t=s;elset=2*s;}若运行时输入 10回车,则输出结果是{inta=4,b=3,c=5,t=0;if(a<b)t=a;a=b;b=t;if(a<c)t=a;a=c;c=t;printf(“%d%d}{inta=4,b=3,c=5,t=0;if(a<b){t=a;a=b;b=t;}if(a<c)printf(“%d%d}联想交换的思想:若要交换a和b的值,通常的做法是条件运算符格式:表达式1?表达式2:表达式3执行方式:先求“表达式1”的值,若其值为“真求出“表达式2”的值作为整个条件表达式的值;若其值为求出“表达式3”的值作为整个表达式的值。相当于注意:表达式1、2、3的值不要求具有相同的类型,最后结果的类型为表达式2、3中较高类型的一种。如:(x=6)>(y=5)?1:1.5表达式的值是1.0而不是1。switch语switch(表达式{case 常量表达式2:语句… 常量表达式n:语句n;break; }switch、case、default、break都是关键字。花括号里面的语句叫做switch语句体。Switch语句体中可以没break语句default部分。Switch语句的圆括号中表达式的值必须是整型或是字符型,不能为实型。case后的表达式可执行Switch语句时,首先计算Switch后圆括号的表达式的值,然后将这个值与语句体中case如果没有任何一个常量表达式的值与之相等,则执行default后的语句块。在执行的时候如break语句,则跳switch语句。如果执行完一casedefault语句块后没有遇到break,则继续顺序往下执行,知道遇到break语句或者语句体被执行完毕default最多只能有一个,通常出现在switch语句的最后部分,但也可以出现在case之间或所有的case之前。四.试题分1.20084月试题分析(17)已知字母的代码值为6,若变量k为ha型,以下不能正确判断出k中的值为大写字母的表达式是A)kk>='A'&&kk<='Z'B)!(kk>='A'||kk<='Z')C)(kk+32)>='a'&&(kk+32)<='z'D)isalpha(kk)&&(kk<91)A)(c==2)||(c==4)||(c==6)B)(c>=2&&c<=6)||(c!=3)||(c!=5)C)(c>=2&&c<=6)&&!(c%2)D)(c>=2&&c<=6)&&(c%2!=1)inta=3,b=5,c=7;if(a>b)a=b;c=a;if(c!=a)c=b;其输出结果A)程序段有语法错B)3,5,3C)3,5,5#include<stdio.h>{intx=1,y=0,a=0,b=0;{case{case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}}A)a=1,b=0B)a=2,b=2C)a=1,b=1D)a=2,b=12.2007年9月试有以下计算y
(xx(xx若程序前面已在命令行中包含math.h文件,不能够正确计算上述公式的程序段A)if(x>=0) B)elsey=sqrt(-x); if(x<0)y=sqrt(-x);C)if(x>=0)y=sqrt(x); D)y=sqrt(x>=0?x:-x);if(x<0)y=sqrt(-设有条件表达式:(EXP)?i++:j- ,则以下表达式中与(EXP)完全等价的 c;,程序前面已在命令行中包含ctype.h文件。不能用于判断c中的字符是 C)'A'<=c&&c D)c<=('z'-32)&&('a'-32)<=以下程序的功能是:输出a、b、c三个变量中的最小值。请填空#includemain( t1=a<b? 【7】;t2=ct1?【8】printf("%d\n",t2}3.20074设变量xy均已正确定义并赋值,以下if语句中,在编译时将产生错误信息的是(C C)if(x>y)x-- D)if(y<0){;}elsey++; elsex++;以下选项中,当x为大于1的奇数时,值为0的表达式( 以下叙述中正确的是(Cbreak语句只能用于switch语句体continue语句的作用是:使程序的执行流程跳出包含它的所有循break语句只能用在循环体内和switch语句在循环体内使用break语句和continue语句的作用相有以下程序({intk=5,n=0; case3:n+=1;break;case2:case4:n+=2;k--}}程序运行后的输出结果 所占分考核几专家点while语2-所占分考核几专家点while语2-重点理解重点掌do...while语2-重点理解重点掌for语5-重点理解重点掌循环嵌4-重点理解重点掌循环比0-简单识break语2-难度适中,重点continue语2-难度适中,重点二.教学while格式 while(表达式{
循环体语}whileC语言的关键字其值为“真(非0)则执行循环体语句,否则跳出while循环。while语句也只能控制紧跟它的一条语句。若需要控制多条语句,必须用{}括起,构成一条复作。如:le(表达式;/是循环体,它是一条空语句*/例如:分析下列程序的输出结果执行过程计算圆括号中表达式的值。若为非0则执行循环体语句,若为0则跳出循环执行完循环体语句后重复过程(1{inti=1,sum=0;}}这是学习C语言基础循环的最好的练习,老师让学生练习的时候可以把i控制在10以内,让学生知d0-while格式 循环while(表达式doC语言的关键字,需要和while一起搭配使用其值为“真(非0)则执行循环体语句,否则跳出while循环。while语句也只能控制紧跟它的一条语句。若需要控制多条语句,必须用{}括起,构成一条复作。如:d{;}ile(表达式;/*是循环体,它是一条空语句*/由于do-while循环结构整个语法上也是C语言语句此最后的分号必不可它同样表示语句执行过程执行循环体语句计算圆括号中表达式的值。若为非0则重复(1,否则跳出循环forforC语言的关键字值;表达2的作用是控制循环;表达3的作用是赋值。for语句也只能控制紧跟它的一条语句。若需要控制多条语句,必须用{}括起,构成一条复合3.5执行过程计算表达式计算表达式2,若其值为非0,转步骤(3;若其值为0则转步骤(执行一次for循环体计算表达式3,转步骤(2结束循环,执行for语句后面的语句{inti,j;}for(i=1;;i++)/*表达式2的值始终为真,这是死循环breakcontinuebreak语句用于结束循环或switchcontinue语句用于结束本次循环,跳过循环中continue后尚未执行的语句,继续进行下一次循环条注意:break语句只能控制直接包含它的switch结构或循环。continue语句只能控制直接包含它的循环。1:main{inti,s1=0,s2=0,s3=0;{casecase2:s2++;break;case3:s3++;contiune;}}把1~100之间能被4整除的数输出(老师一定要学生这中方法{inti;{if(i%4!=0)continue;}}三.试题1.20084#include<stdio.h>{intfor(;x>0;x--{if(x%3){printf(“%d,”,x--);continue;}}}A)7,4,2B)8,7,5,2C)9,7,6,4D)8,5,4,2以下不构成无限循环的语句或者语句组A)n=0;B)n=0;do{++n;}while(n<=0);while(1){n++;}C)n=10;D)for(n=0,i=1;;i++)#includestdio.h>{intfor(i=0;i<12;i++)for(i=1;i<5;i++)printf(“%d”,c[i]);}程序的运行结果A)1234B)2344C)4332D)112#includestdio.h>voidfun(int*s,intnl,int{inti,j,t;i=nl;j=n2;}{intfun(a,0,3);fun(a,4,9);}程序运行的结果 #include<stdio.h>#includestring.h>voidfun(char*s[],int{char*t;inti,j;if(strlen(s[i])>strlen(s[j]))}{charfun(ss,5);}程序的运行结果A)xy,aaaaccB)aaaacc,xyC)bcc,aabcc(35)有以下程#includevoidfun(char*a,char{while(*a==’*’)a++;while(*b=*a){b++;a++;}}{char*s=”****a*b****”,t[80];fun(s,t);puts(t);}程序的运行结果A)*****a*bB)a*bC)a*b****D)若有定义:intk;,以下程序段的输出结果是【8for(k=2;k<6;k++,k++)printf(“##%d”,k);{int{p[i]=&x[2*i+1];printf(“%d”,p[i][0]);}}2.20079若变量已正确定义,有以下程序 printf("%d,",i); while(i++);其输出结果 D)程序进入无限循 printf("%d",--}程序的运行结果 i,j,m=55;for(j=3;j<=i;j++) printf("%d\n",m);}程序的运行结果 (34)有以下程 *a, n/*fun函数的功能是将a所指数组元素从大到小 t,i,for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)if t=a[i];a[i]=a[j]; } fun(c+4,for(i=0;i<10;i++) printf("%d,",c[i]);}程序的运行结果 以下程序的输出结果是9#include n=12345, printf("%d", }for(s=1.0,k=1;k<=n;k++) printf("s=%f\n\n",s);请填空,使下面程序段的功能与之完全s=1.0; 【10】) s=s+1.0/(k*(k+1));【11】; printf("s=%f\n\n",s);以下程序的输出结果是12 for(i='a';i<'f';i++,i++) printf("%c",i-'a'+'A');}3.20074月试题分以下叙述中正确的是(Cbreak语句只能用于switch语句体continue语句的作用是:使程序的执行流程跳出包含它的所有循break语句只能用在循环体内和switch语句在循环体内使用break语句和continue语句的作用相有以下程序({intk=5,n=0; case3:n+=1;break;case2:case4:n+=2;k--}}程序运行后的输出结果 有以下程{inti,j;{for(j=i;j<4;j++)printf(“%d*%d=%d}}程序运行后的输出结果是( 1*1=11*2=2 B)1*1=11*2=22*2=4C)D) 3*2=6}(7)当执行以下程序时,输 <回车>,则其中while循环体将执 次#include<stdio.h>{charWhil(ch=gtchar()=’’)}
第五章字符型数 位运字符常字符常量:用一对单引号括起的一个字符例如:’A’,’a’,’6’是合法的字符型常量”a”,’ab’,A,512’都是不合法的字符型常量转义字符常量:必须以一个反斜杠“\”开头.常见的转义字符见表5-1\n:回车换行\t:横向跳格\v:竖向\b:退 \r:回 \f:换\\: \ddd:ddd表示最多可以有三位8进制数\xhh:hh表示最多可以有二位16进制数注意:三位8进制数不一定以0开头,只要是0~7之间的数字即可。例:下列字符常量中合法的是() 例:下列字符常量中合法的是( D.’”’ 字符型变关键字:char,字符型变量在内存中占1字节。例:chara=’5’;‘a’字符的ASCII码值是‘A’字符的ASCII码值是65(大写字母加上32后就变成了与其相对应的小写字母。数字’0’~’9’对应的ASCII码值是48~57格式:putchar(字符 功能:输出一个字符,但不输出单引号。其中“字符”可以合法的字符型或整型数据。它会自动将整型数据转换为相应的字符输出。putchar‘a;a printf(“%c”,’a’);puthar(6;Ah=‘g;pthar(;charch=‘g’;printf(“%c”,ch);输出功能:接收一个从键盘输入的字符注意:1.它可以接收从键盘上输入的任何字符,包括回车符、空格符等a,b;a=getcha(;b=getchar(;若输入:1<回车>则变量a的值为字符1量b的值为符scanf函数输入数据:在进行字符数据输入的时候,空格符、回车、横向跳格都是合法有效的字位运算(详细的见52页1.2008年试(13)以下选项中不属于字符常量的A) B) D)charch;intk;ch='a';k=12;printf("%c,%d,",ch,ch,k);已知字符a的ASCll十进制代码为97,则执行上述程序段后输出结果C)a,97,12k=12D)a,97,k=12已知字母的代码值为6,若变量k为ha型,以下不能正确判断出k中的值为大写字母的表达式是A)kk>='A'&&kk<='Z'C)(kk+32)>='a'&&(kk+32)<='z' A)a^bB)a|bC)a&b2.20079已有定义 否为大写字母的表达式 C)'A'<=c&&c D)c<=('z'-32)&&('a'-32)<=已知字符'A'的ASCII代码值是65,字符变量c1的值是'A',c2的值是'D'。执行语句printf("%d%d",c1,c2-2);后,输出结果 for(i='a';i<'f';i++,i++) printf("%c",i-'a'+'A');}3.20074(25)以下合法的字符型常量是( 转换为对应小写字母的语句是()A)c=(c- C)c=c- D)c=(‘A’+c)%26-当执行以下程序时,输 <回车>,则其中while循环体将执 次#include<stdio.h>{charWhil(ch=gtchar()=’’)}第六章函一.教学重点、所占分考核几专家点1-简单,重点识记知识函数的定0-简单,重点识记知识形参和实参及函数调2-难度适中,重点理解重点掌函数调用的一般形式和调用2-偏难,重点掌握重点理函数的说明及其0-简单识函数的嵌套调1-偏难,重点掌握重点理函数的递归调1-偏难,重点掌握重点理二.教学函数的定义
函数是C程序的基本单位函数返回值的类型名函数名(类型名 形参名1,类型名 形参名{}一个C程序可以由一个或多个源程序文件组成个源程序文件可以由一个或多个函数组成。程序>>函函数返回值的类型名缺省时,返回值类型默int型,而不是没有返回值。若没有返回值的时候应该为void.main。户标识符。在同一函数内形式参数必须是唯一的。如果函数不带形式参数,则形式参数列表可以省略。函数体部分的一对花括号必不可少函数之间的关系是相互平行、独立的,不是相互隶属的函数不能嵌套定义,不能在一个函数体内定义另一个函数函数可以相用,但不能调用main()函数函数的分类从形式分 从用户使用的角度:用户自定义函数:doubleadd(inta,intb){函数体函数的定义的数名(类型名参1,类型名参2,…)/*函数首部{函数体intmin(intx,int intmin({函数体 int/*现代方式 {函数体}/*传统方式floatfun(intx,int float intx;int 以上函数的定义是合法的intfun(int{ intfun(intx;int{… intfun(intx,y)inty; int{int…}intfun(x,y)intx,y,z;{…以上函数的定义均是的形参只有在该函数被调用时才占内存单元,即该变量才可用;函数调用结束时形参所占的内存单元被释放,即不可用。实参和形参的数据类型应该对应相同。否则,必须将函数的定义放在函数调用之前或在调用之前对函数作原型。voidsum(intx,inty)//函数定义,x,y是被调用函数的参数,我们叫它形{}main({sum(3,5);//函数调用,这里的3和5是调用函数的参数,我们叫为实}/*类型对应不相同函数的返回值即函数值return语句的格式retrun表达式;或return表达式功能:将表达式的值作为函数值返回给主调函数,并结束本函数的执行函数值应return语句返回,一个函数中可以有return语句,只要执行其中任何一return语句,该函数立即结束执行,并将该retrun后表达式的值返回。例如:intmax(inta,intb){ returna; return}函数值的类型保持与函数定义时所指定的类型相同,而与retrun后表达式的值的类型无关。若定义函数时不指定函数的类型,则默认是int。max(floata,float intmax(floata,float{return {return(void例如:voidfun(inta){}调用格式:函数名(实参无参调用格式:函数名()带参调用格式:函数名(实参列表调用函数时,函数名必须一致。函数名是唯一区别函数的标志实参和形参的类型匹配,个数一致,形式上一一对应一般情况下,函数应该先定义后调用voidswap(inta,intb)/*函数定义{a=a+b;b=a-b;a=a-}{inta=2,b=5;}格式:函数类型函数名(形参类型1,形参类型 函数类型函数名(形参类型1形参名1,形参类型2形参名2对上例中的swap函数作原型的格式:voidvoidswap(inta,intb);voidswap(intx,inty);若被调函数定义在主调函数之前时,可以不作原型。若被调函数定义在主调函数之后,则在用前应作原型voidswap(inta,intb)/*函数定义{inta=2,b=5;}{intvoidswap(int,int);/*原型*/}voidswap(inta,intb)/*函数定义如果在程序文件的开始就对函数作外部原型,则在各主调函数中不必再作原型。例:voidswap(int,int);/*外部原型申明*/{intx=1,y=2;}voidswap(inta,int补充:若果形参中有数组,则作原型时数组的中括号不能省略例如:floatfn(douleb 可以用以下方式原型floatfun(double[]);floatfun(doublea[]);而以下的方式是错误的floatfun(double函数的嵌套调用和递归调嵌套调用:在一个函数内调用另一个函递归调用:在一个函数内直接或间接调用它本身。若在函数A内直接调用函数A称为直接递归。若函数A调用函数B,函数B又调用函数A则称为间接递归调用。longfun(int{if(k==1||k==2)returnelsereturnfun(k-1)+fun(k-}{intn;}intfunc(inta,int{return}{intx=2,y=5,z=8,r;}C函数参数之间的数据传递仅仅通过实参向形参的单向数值传递“。数据只能从实参向形参单向传递到目前为止,函数之多能返回一个值。就是return回来的值。voidswap(inta1,intb1)/*函数定义 voidswap(int*a3,int int int int intswap(a,b);/*函数调用 swap(&a2,&b2);/*函数调用 地值变2a5b用地址表来讲解这些问题比较好三.试题1.20084#includestdio.h>intf(intx){intif(x==0||x==1)return(3);return}{intz=f(3);}程序的运行结果A)0B)9C)6voidfun(int{if(x/2>0)printf(“%d}{fun(3);2.20079月试题分(25)若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的函数的实参和其对应的形参共占同 单形参只是形式上的存在,不占用具 单同名的实参和形参占同 单函数的形参和实参分别占用不同 单(27)以下叙述中错误的可以给指针变量赋一个整数作为地址当在程序的开头包含头文件stdio.h时,可以给指针变量赋3.20074以下程序的运行结果 intvoidfun(int{m+=k;k+=m;printf(“m=%d\n k=%d”,m,k++);}{intfun(i++);printf(“i=%d}第七章指一.教学重点、所占分考核几专家点指针变量的定义2-简单识指针变量作为函数参2-简单,重点掌指向数组元素的3-难度适中,重点掌握重点理用数组名作为函数参2-难度适中,重点指向数组的指3-偏难,重点理返回指针值的函1-简单,重点掌二.教学内存中的每一个字节都有一个唯一的编号,这个编号就是该字节的地址inta=15,b=20;变量的地址:是对应单元的首地址(起始地址。那么a的地址就是2001,b的地址是指针:变量的地址就是该变量的”指针”,(指针就是地址,地址就是指针)指针变量:用于存放变量地址的变量称为指针变量指针变量的定格式:类型名*指针变量名;如:int*p; inta,*q;例1:int*p,a=20;例2:int*p=20;/*出错*/inta=20,*p=a;/*出错,指针变量只能用于存放地址值指向指针变量的定义格式:类型名**指向指针变量名如:int**q;例:int*p,**q,a=5;/*我们定义了一个int型的指针变量、int型的指向指针变量和一个型的变量指针变量的赋值int*p, 或int int intp=&,q&p;/*须知道指针变量只能存取变量的地址或是和它相同类型指针的值指向指针只能存取指针变量的地址。学生在学习的时候一定要让他们知道变量间的赋值必须是相同类型的才可以真确的赋值成功。*/给指针变量赋“空值NULL是在stdio.h头文件中的预定义符,因此在使用NULL时,应该在程序前面写上:#includeNULL的代码值是0,所以等价:p=0;或注意:当p指向NULL时候,p并不是指向地址为0的单元,而是具有一个确定的值“空, 对指针的操3.1单int那么a=*p,a++等价与(*p)++。这里*p意味着取指针变量指向变量的内容指针变量定义中的“*”和间接运算符“*”有本质的区别。当定义一个指针变量的时候,“*”是说明一个变量是指针变量,而“*”作为间接运算符的时候意味着取指针变量所指向变量的内容。间接运算符必须出现在运算对象的左边,运算对象可以是地址或存放了地址的指针变量第八章一.教学重点、难所占分考核几专家点一维数组的定义及1-简单,重点掌一维数组的初始1-简单,重点掌二维数组的定义及3-偏难,重点掌握重点理二维数组的初始1-简单,重点掌通过赋初值定义二维数1-偏难,重点理二.教学讲一维数组的定义和一维数组的定格式:类型名组名[常量表达式];例如:inta[8];数组名属于用户标识符,必须满足用户标识符名规则。如:intdo[float3om[1];charchara-b[5];定义数组时,方括号必不可少,方括号中的表达式不能含有变量,且表达式的值必须是大于0正整如:inta[5.3];inta[-4];inta[n];inta[0];{intN=5;inta[N];}都是的定#defineM5inta[M];同一数组元素在内存中所占的空间是依次连续的,每个数组只能有一个下标,数组下标是从开始,到数组长度减4结束。例如:inta[5]; 格式:数组名[下标表达式如:doublea[10];/*定义数组intb=a[4];/* 数组元素a[4]*/intb=a[2*2];/* 数组中的元素其实就是一个变量,占一个单元。如数组b中的变量就是int型的变量数组元素时,下标表达式的值的上限为定义是常量表达式减一,下限为0.在时保证下标数组是一个构造类型是集合的概念,因此不能整体数组里面的所用元素企图简单地通数组名b体代表其中的4个it类型的变量是不行。注意:不能对数组进行整体,只能单独其元素intintb[10]=a;/*错误的intb[10]=a[10];/*错误的,没有元素a[10]*/floata[10],b[10];b=a;/*错误,a代表整个数组,不能整体*/在定义一维数组的同时可以将各元素的初值依次放在一对{}中赋给数组例如:inta[10,2,,4,,6,,8,,10};inta[5]=1,2,3,4,5;inta[5]={1;2;3;4;5};错{(即数组长度数,则将初值依次赋给前面的元素,而未得到初值的元素自动赋零。例如:inta[5]={1,2,3,4,5,6};inta[5]={1,2,3};intint可以通过赋初值来定义数组的大小。此时数组的长度可以省略。若定义时,未赋初值,则长度绝不能省略。例如:inta[1,2,3,4};数组的长度是4。inta[];是的。只能在定义时可以用{}例如:inta[4;a={1,2,3;或a[4]={1,2,3,4};是的int本节习题下列一维数组定义中正确的是 intinta[inta(; intintintinta[5];inta[5];int{intn=5;intintint二维数二维数组的定格式:类型名数组名[常量表达式1][常量表达式例如:int在内存中的存放(依次连续格式:数组名[下标表达式1][下标表达式例如:inta[3][4];intb[3][4]=a;/*是的inta[3][4]={0},intb,n=2;执行上述语句后,问b的值是多少数组元素时,下标可以是C语言中任何合法的表达式,且可以含有变量。intintb=a[10.5%5][2];/*错误二维数组初始直接赋inta[2][0]的值是多少?9[2][]={,0,,0,;/按行赋int[3][]={1,,},{,5,}{7,,9}};inta[3][4]={{1,2,3,4},{5,6,7,8,9},{10,11,12,13}};int[3][]={1,,3,},{,6,,8,},{1,1,1,13}{1,};intint以上定义均是的义时未赋初值,则各维的长度均不能省略。例如:inta[inta[][3];或inta[3][];都是的。main({intinti,j,s=0;}输出结果是三.试题分1.20084月考试试题分以下错误的定义语句A)intB)intC)intx[4][]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};D)intx[][3]={1,2,3,4};(26)若有定义:inta[2][3];,以下选项中对a数组元素正确的A)a[2][!1]B)a[2][3]C)a[0][3]D)a[1>2][#includestdio.h>{intfor(i=0;i<12;i++)for(i=1;i<5;i++)printf(“%d”,c[i]);}程序的运行结果A)1234B)2344C)4332D)1122.20079月试题分(31)若有定义语句 a[3][6];,按在内存中的存放顺序,a数组的第10个元素 3.20074月试题分(13)设有定义语句:inta[][3]={{0},{1},{2}};,则数组元素a[1][2](14)执行以下程序的输出结18 printf("%d }所占分考核几专家点指向数组元素的3-所占分考核几专家点指向数组元素的3-难度适中,重点掌握重点理用数组名作为函数参2-难度适中,重点指向数组的指3-偏难,重点理二级指针及指针1-偏难,重点掌握重点理二.教学讲(1在C语言中数组是占用一串连续的单元数组中每个元素都可以看作一个变量,因此个数组元素都有一个地址。那么:int指针p的基类型是int,数组a的各个元素也是int类型的。我们用p=&a[0],将指针pa[0]。由于数组元素在内存中是连续的,因此我们可以通过移动指针p来数组中的每一个元素。(2)C语言规定数组名代表数组在内存中的起始地址,即可a表示a的首地址。p=a是让指针p指向数组a的起始地址。(3)a是一个地址常量它指向a数组的首地址因此我们不能对a进行重新赋值如:a=&I,a++通过指针一维数组元(1)通过指针数组元int int 指针变量p指向数组元素a[0], 指针变量p指向数组元素a[0], 来变量a[0]。如:*p=10;是 来变量a[0]。如:*p=10;是对指针的空间赋值,即a[0]=10变成了10.(2)通过数组的首地址数组元int由于a组的首地址,我们把a当作一个指针常量。因此*a等价于*(a+1)等价于a[0]。a等价于&a[0(3)用带下标的指针变量一维数组元intp[0]来表示a[0],p[1]来表示对数组元素a[i]等价的方法a[i];p[i];*(a+i);若指针变量P指向了一维数组a的首地址,即:inta[10int则有下面的等价关系a+i等价于p+i,都是&a[i]*(a+i)等价于*(p+i)都与a[i]相a[i]等价于p++、++p、p+=1、p=p+1作用都是让p指向下一个元素。p--、--p、p-=1、p=p-1作用都是让指向前一个元素*p++与*(p++)等价,都是得到p当前所指向的元素的值,并让p指向下一个元素。*p--与*(p--)等价,都是得到p当前所指向的元素的值*++p与*(++p)等价,都是先让p指向下一个元素,再取出重指向的元素。*--p与*(--p)等价,都是先让p指向前一个元素,再取出重新指向的元(7)(*p)++、++(*p)、++*p的作用都是让p当前所指的元素值增加1。(*p)--、--(*p)、--*p的作用都是让p当前所指的元素值减小1。指向数组的指针和指针变int列指针:加1跳过一个元素的指针(如:一维数组名行指针:加1跳过一行的指(如:二维数组名对列指针进行一次指针(下标)例如:inta[5,2,,4,5*=a;则a[3]等价于p[3]等价于*(p+3),都得到元素a[3]的值4对行指针进行一次指针(下标)运算得到的列指针(即元素的地址,而不是元素。若要通过行指针元素,必须进行两次指针运算或下标运算。若a是一个二维数组,则有a+i是行指针,指向行号为i的一整行*(a+i)和a[i]等价都是一个列指针向的是元素示行号为i的最前面元素的地址a[i][0]*(a+i)+ja[i]+j等价,即&a[i][j]*(*(a+i)+j*(a[i]+j]float则对a数组元素的是 指向数组元素的指针变指指例如:intint则所指元常用于取二维数组a元素地址的方式:&a[i][j]、a[i]+j、m它是一个行指针,对它加1要跳过m个元而指向一维数组的指针变量是一个列指针。对它加1跳过1个元素。基类型(*指针变量名定义后该指针变量与具有m列的二维数组名具有相同的性质,即该指针变量可以指向一个具有m列的二维数组通过该指针变量名二维数组元素时方式与通过二维数组名的方式一样。int[5][];int(*p)[7];此时p[0][0]a[0][0]对p[4][3]a[4][3]对charchar(*r)[80];例1.请分析r[0][0]和r[2][3]分别对应的元素 2.若有intt[3][2];能正确表示t数组元素地址的表达式是( 定义格式类型名*数组名[常量表达式inta[10];普通数组int*a[10];指针int(*a)[10];指向由10个元素组成的一维数组的指针变int*a)();指向函数的指针变量int*a()返回指针值的函数{…指针数组的每一个元素都是指针类型,即它的每一个元素相当于一个指针变量{charintfor(i=0;i<3;i++)for(i=0;i<3;i++)}有下列语floatinta; inta[10];int int三.试题分1.20084月试题分{int{p[i]=&x[2*i+1];printf(“%d”,p[i][0]);}}{inta[5]={2,4,6,8,10},p=a;p++;}2.20079月试题分(31)若有定义语句 a[3][6];,按在内存中的存放顺序,a数组的第10个元素 若有定义语句 a[2][3],*p[3];,则以下语句中正确的 有以下程 *a, n/*fun函数的功能是将a所指数组元素从大到小 t,i,for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《焊接检验员培训》课件
- 《icu患者镇静管理》课件
- 安徽省2017年中考道德与法治真题试卷(含答案)
- 辽宁省沈阳市第一二六中学教育集团2024-2025学年八年级上学期期中考试数学试卷(无答案)
- 2024年新高一英语初升高衔接《动词时态、语态和主谓一致》含答案解析
- 心脏活动报道课件
- 《变革管理余世维》课件
- 《GIS的数据结构》课件
- 热离子管市场发展现状调查及供需格局分析预测报告
- 电缆接头产业深度调研及未来发展现状趋势
- 2022版18项医疗核心制度
- 铜陵有色金属集团股份有限公司冬瓜山铜矿废水处理设施升级改造项目环评报告
- 工程伦理学案例分析报告
- 医院安全风险辨识清单
- (完整版)书籍装帧设计
- 六年级数学辅差作业
- 水稳底基层、基层试验段总结
- 高中统编语文教材总体框架及主要特点
- 社区便民生活服务O2O平台功能需求说明书
- 英语学科教学常用专业词汇
- 潼关县太洲矿业有限责任公司蒿岔峪甘斜凹西坡金矿矿山地质环境保护与土地复垦方案
评论
0/150
提交评论