版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
武昌理工学院计算机二级C语言培训教案第一章 C语言的基础知识一、对C语言的初步认识通过讲解以下这个简单的C程序例子,让学生对C程序有个大致了解。main(){inta,b,c;a=10;b=20;c=a+b;printf("%d",c);}注:(1)C程序中有且仅有一个main函数,程序从main函数开始执行,并且在main函数中结束。(2)用“{}”括起来的部分称为“函数体”,“{”和“}”必须成对出现,表示开始和结束。(3)main()函数的格式:main(){函数体}(4)变量先定义,后使用。(5)printf为C语言的屏幕输出函数,注意写法。(6)书写程序时应遵循的规则:语句中的不同单词至少且必须加一个空格以示间隔,若已有明显的间隔符,也可不再加空格来间隔;最好一个语句占一行。二、标识符1、标识符命名规则(1)只能包含字母、数字和下划线(2)第一个字符必须是字母或下划线(3)C语言是大小写敏感的,如grade和Grade是两个不同的标识符。2、标识符分类(1)关键字:已经事先定义好了,程序远不能再将它们另做它用。参看教材附录二,记住常用的关键字(如int、if、do、break、case、char等)。(2)预定义标识符:在C语言系统中已经使用了的标识符(如printf、scanf、define、include等)。预定义标识符可用作用户标识符。(3)用户标识符:根据用户需要定义的标识符。用户标识符不能是关键字。例;下列选项中,不能用作标识符的是A)_1234_B)_1_2C)int_2_D)2_int_以下选项中合法的用户标识符是______。A)longB)_2TestC)3DmaxD)A.dat三、常量与变量1、常量在程序的运行过程中,其值不发生改变的量。2、常量分类(1)直接常量直接常量又包括整型常量(如12、-3、0)、实型常量(如4.6、-1.23、1.2E+3)和字符常量(如'A'、'6')。(2)符号常量符号常量在使用之前必须先定义,其一般形式为:#define符号常量标识符常量值通过以下两个实现功能相同(求圆面积)的程序,给学生解释使用与不使用符号常量两者的区别。程序1: 程序2: #define R 5 main() #define PI 3.14159 { main() floatarea;{ intr;float area; r=5; area=PI*R*R; area=3.14159*r*r;printf("%f",area); printf("%f",area);} }注:习惯上符号常量的标识符用大写字母。符号常量的值在其作用域内不能被改变。3、变量在程序的运行过程中,其值可以改变的量。4、变量的定义变量定义的一般形式为:类型说明符变量名;注:变量名是合法的标识符,但不可以是关键字;允许在一个类型说明符后,定义多个相同类型的变量,各变量名之间用逗号间隔,最后一个变量名之后必须以“;”号结尾;一般变量的定义放在函数体的开头部分。可以通过以下例子的讲解,使学生进一步掌握变量的定义与使用。main(){inta,b,c;a=15;b=20;c=b-a;printf("%d",c);}四、整数和实数1、整型常量分类(1)八进制整型常量以数字0开头,其中由数字0~7组成,如023、076等。(2)十进制整型常量最常用的常量,由数字0~9组成,如15、345、-38等。(3)十六进制整型常量以0x或0X开头,由数字0~9、字母a~f(或大写A~F)组成,如0x7e、0X4AB等。注:整型常量没有二进制的。2、整型变量分类(1)短整型变量类型说明符为:[signed]short[int],占用2个字节,取值范围为-32768~32767。(2)基本整型变量类型说明符为:[signed]int,占用4个字节,取值范围为-2147483648~2147483647。(3)长整型变量类型说明符为:[signed]long[int],占用4个字节,取值范围与基本整型变量相同。(4)无符号短整型变量类型说明符为:unsignedshort[int],占用2个字节,取值范围为0~65535。(5)无符号基本整型变量类型说明符为:unsigned[int],占用4个字节,取值范围为0~4294967295。(6)无符号长整型变量类型说明符为:unsignedlong[int],占用4个字节,取值范围同无符号基本整型变量相同。注:整型变量的各种类型,在编程中一定要注意,不要让一个整型变量超出该类型的取值范围,以免发生溢出错误。可引导学生自己推出每种变量的表示范围。3、实型常量(1)小数形式小数点前或后可以没有数字,但不能同时没有数字。(2)指数形式可以参考口诀:“E前E后必有数,E后必须为整数”。例;以下选项中合法的实型常数是______。A)5E2.0B)E-3C).2E0D)1.3E例;以下符合C语言语法的实型常量是A)1.2E0.5B)3.14.159EC).5E-3D)E154、实型变量实型变量分为:单精度实型(float)和双精度实型(double)。float占用4个字节,double占用8个字节。五、算术运算和赋值运算1、算术运算符(+、-、*、/、%)(1)/:5/2=25.0/2=2.55/2.0=2.55.0/2.0=2.5(2)%:5%2=1-5%2=-15%-2=1注:这五种算术运算符以/和%为主,进行除运算时,注意两边都为整数的情况;“%”运算符左右两边必须为整数,余数的符号同被除数的符号相同。例:若有语句inti=-19,j=i%4;printf("%d\n",j);则输出的结果是【】。2、算术运算符的优先级(*、/、%)>(+、-)3、算术表达式的计算根据优先级的高低决定计算顺序。通过讲解以下表达式的计算过程,使学生掌握算术运算符的优先级。4*5+8*2%4+12/5=224、赋值运算符(=、+=、-=、*=、/=)赋值运算的一般格式为:变量=表达式(1)+=a+=6a=a+6(2)-=a-=6a=a-6(3)*=a*=6a=a*6(4)/=a/=6a=a/6注:任意一种赋值运算符的左侧必须为变量,不能是表达式和常量;整个赋值表达式的值是最左边变量的值。当赋值运算符左右两边类型不一样,系统会自定进行类型转换。六、强制类型转换强制类型转换的格式为:(类型名)表达式(int)5.28=5注:在二级C考试中,经常考强制类型的转换格式,尤其是一对小括号的位置。七、自加、自减运算符1、自加、自减运算符(++、--)自加、自减运算符的运算对象只能是变量,运算符可在变量的前面,也可以在变量的后面,形如i++、++i、i--、--i。2、自加、自减的运算规则自加:i++先用i的值参与运算,再使i的值加1。自加:++i先使i的值加1,再让i参与运算。自减:i--先用i的值参与运算,再使i的值减1。自减:--i先使i的值减1,再让i参与运算。注:自加、自减运算是一个难点,可以参考以下例子进行详细讲解,便于学生掌握。main(){intm=011,n=11;printf("%d,%d\n",++m,n++);/*输出结果为:10,11*/printf("%d,%d\n",--m,n--); /*输出结果为:9,12*/}3、自加、自减运算的注意事项(1)只能和变量结合,如(i++)++是不合法的。(2)运算结合方向是从右到左。例:设有intx=11;则表达式(x++*1/3)的值是【】例:有以下程序main(){intm=3,n=4,x;x=-m++;x=x+8/++n;printf("%d\n",x);}程序运行后的输出结果是【】例:有如下程序main0{inty=3,x=3,z=1;printf(“%d%d\n”,(++x,y++),z+2);}运行该程序的输出结果是【】例:设有以下定义inta=0;doubleb=1.25;charc=’A’;#defined2则下面语句中错误的是A)a++;B)b++C)c++;D)d++;八、逗号运算符及逗号表达式1、逗号运算符(,)在逗号表达式中,逗号运算符具有从左向右的结合性,最后一个表达式的值是整个逗号表达式的值。2、要和变量多余的情况区别开3、优先级别在所有运算符中,逗号运算符优先级最低。例:设有如下程序段:intx=2002,y=2003;printf("%d\n",(x,y));则以下叙述中正确的是A)输出语句中格式说明符的个数少于输出项的个数,不能正确输出B)运行时产生出错信息C)输出值为2002D)输出值为2003例:假定x和y为double型,则表达式的值是A)3.500000B)3C)2.000000D)3.000000九、C语言中的语句1、表达式语句表达式;2、空语句;3、复合语句{语句1;语句2;„语句n;}例:{t=x;x=y;y=t;}十、注释C语句中有两种注释方法:(1)//:只能注释一行(2)/*„*/:可注释多行,在“/*”和“*/”之间的都属于注释部分。注:注释在程序运行时,不执行,第二种注释需要注意,在二级C考试中出现过。十一、字符数据1、字符常量分类(1)一般字符常量用一对单引号括起来的单个字符,如'A'、'b'、'5'。(2)转义字符常量在一对单引号内,以“\”开头,后跟一个字符,或1~3位八进制数。另外也可以是1~2位的十六进制数,但必须以“\x”开头(在这里,一定注意x不能是大写的X)。常用的转义字符:注:在二级C考试中,转义字符是必考的。更要注意“\”后跟的1~3位八进制数不能以数字0开头。例:语句printf("a\bre\'hi\'y\\\bou\n");的输出结果是【】例:设有说明语句:chara=’\72’;则变量aA)包含1个字符B)包含2个字符C)包含3个字符D)说明不合法2、字符变量定义字符变量的格式为:char变量名;注:字符型数据在内存中占1个字节。3、字符型数据参与运算采用其ASCII码进行运算。注:字符型数据可以按“%d”和“%c”输出,注意这两者区别。十二、位运算1、位运算符(~、<<、>>、&、^、|)2、位运算注意事项(1)对象只能是整数或字符型数据。(2)进行位运算前,一定要先将数据转换成二进制数。(3)各个位运算符的优先级注:字符型数据参与位运算时,采用其ASCII码进行运算。3、位运算的规则(1)~:0变1,1变0。(2)<<:a<<i表示a向左移动i位,右补0。(3)>>:a>>i表示a向右移动i位,左补符号位。(4)&:a&ba、b对应的二进制位,同时为1,则结果即为1,否则为0。(5)|:a|ba、b对应的二进制位,只要有一个为1,则结果即为1,否则为0。(6)^:a^ba、b对应的二进制位,相同为0,不同为1。注:在没有舍去数据的时候,<<左移一位表示乘以2;>>右移一位表示除以2。两个相同的数进行按位异或(^),结果为0。例:设intb=2;表达式(b>>2)/(b>>1)的值是【】例:main(){unsignedchara,b,c;a=0x3;b=a|0x8;c=b<<1;printf("%d%d\n",b,C);}例:设char型变量x中的值为10100111,则表达式(2+x)∧(~3)的值是A)10101001B)10101000C)11111101D)01010101例:main(){unsignedchara,b;a=4|3;b=4&3;printf("%d%d\n",a,b);}第二章数据输出与输入一、数据输出函数printf1、printf函数的一般格式:printf(格式输出控制,输出列表)(1)格式输出控制:需用一对双引号括起来,双引号内包含“格式说明”和“普通字符”两部分。(2)输出列表:需要输出的数据,多个数据之间用逗号隔开。2、格式说明“格式说明”由“%”和格式字符组成,如%d,%c,它的作用是把输出数据转换为指定格式输出。注:在printf函数中,若格式说明的个数少于输出项的个数,多余的输出项则忽略不输出。例:有以下程序main(){inta=666,b=888;printf("%d\n",a,b);}程序运行后的输出结果是A)错误信息B)666C)888D)666,888例:以下程序段的输出结果是inta=1234;printf("%2d\n",a);A)12B)34C)1234D)提示出错、无结果3、普通字符普通字符会原样输出,转义字符需要输出对应的字符。注:printf函数输出数据时,学生做题很容易忽略普通字符的输出。在二级C考试中,这类题目常出现,可以通过以下例子进行讲解。main(){inta,b;a=10;b=15;printf("a+b=%d",a+b);}4、数据输出实例(已知inta=66;floatb=123.56;)通过以下各输出语句,讲解输出函数的各种格式。(1)printf("%d",a); 66(2)printf("%3d",a); □66(3)printf("%-3d",a); 66□(4)printf("%f",b); 123.560000(5)printf("%7.2f",b); □123.56(6)printf("%-7.2f",b); 123.56□(6)printf("%c",a); B(7)printf("%x",a); 425、putchar函数 格式为:putchar(c) 功能:输出单个字符。这里的c只能是字符型变量或字符型常量,即putchar函数只能输出字符型数据。二、数据输入函数scanf1、scanf函数的一般格式:scanf(格式输入控制,输入数据列表)格式输入控制与printf函数的格式输出控制相同。输入数据列表必须是一个或者是多个合法的地址。2、scanf函数的注意事项(1)输入数值型数据时,各数值间的分隔符可以是:空格、Tab、回车。(2)输入字符型数据时,空格、Tab、回车都会被认为是字符,而不是分隔符。(3)“格式输入控制”中的普通字符,在输入数据时一定要原样输入。(4)跳过输入数据,在%和格式字符之间加一个“*”。注:以上注意事项,在二级C考试题目中经常出现,可以通过以下数据输入实例,进行讲解。3、数据输入实例(已知charc1,c2;intc,d,e;)(1)scanf("%d%d%d",&c,&d,&e);输入:5<空格>6<空格>7<回车>输入:5<Tab>6<Tab>7<回车>输入:5<回车>6<回车>7<回车> //以上三种输入方式,c、d、e的值分别都为5、6、7。(2)scanf(“%d,%d,%d”,&c,&d,&e);输入:5,6,7<回车>若输入第一个数据后,使用了任意一种分隔符,则只确定输入了c的值为5,d和e为本身的初始值,若没有初始值,则为不定值。注:在C语言中,没有指定值的任何类型的变量,在输出时为不定值。(3)scanf(“%d%*d%d%d”,&c,&d,&e);输入:2<空格>3<空格>4<空格>5<回车> //c、d、e的值分别为2、4、5(4)scanf("%c%*c%*c%c",&c1,&c2);输入:a<空格>b4<回车>//c1、c2的值分别为a、4(5)scanf("%2d%d%d",&c,&d,&e);输入:123<空格>456<回车>//c、d、e的值分别为12、3、456(6)scanf("%d",&c,&d,&e);输入:1<空格>2<空格>3<回车> //c的值为1、d、e为不定值4、getchar函数格式为:getchar()该函数称为输入字符型数据的函数,只能用来接收一个字符型数据。注:在输入字符型数据时,空格、Tab、回车都属于字符。在二级C考试中经常出现该类题目,可以参考以下例子,进行讲解。main(){charc1,c2,c3,c4;c1=getchar();c2=getchar();c3=getchar();c4=getchar();printf("%c%c%c%c",c1,c2,c3,c4);}运行程序时,输入:a<空格>b<空格>5<回车>第三章选择结构一、关系运算与逻辑运算1、关系运算符>、>=、<、<=、==、!=。2、关系运算符的优先级别(>、>=、<、<=)>(==、!=)3、关系表达式关系表达式的运算结果有两个:0和1,0代表“假”,1代表“真”。例:以下程序输出的结果是【】。main(){inta=5,b=4,c=3,d;d=(a>b>c);printf("%d\n",d);}4、逻辑运算符&&、||、!5、逻辑运算符的优先级别!>&&>||6、逻辑表达式逻辑表达式的运算结果有两个:0和1,0代表“假”,非0代表“真”。注:“&&”和“||”存在“短路”现象。&&运算符左边的表达式的值为“假”,则不再计算&&运算符右边的表达式的值;||运算符左边的表达式的值为“真”,也不再计算||右边的表达式的值。在二级C考试中,经常考计算关系和逻辑表达式的值。在计算的过程中,要注意运算优先级:!>算术运算>关系运算>&&>||>赋值运算。例:有以下程序main(){inta=1,b=2,m=0,n=0,k;k=(n=b>a)||(m=a);printf("%d,%d\n",k,m);}例:设a、b、C、d、m、n均为int型变量,且a=5、b=6、c=7、d=8、m=2、n=2,则逻辑表达式(m=a>b)&&(n=c>d)运算后,n的值位为【】二、if语句1、简单的if语句格式为:if(表达式) 语句注:在二级C考试中,经常考查简单的if语句。当表达式成立时,默认只有一条执行语句,可以通过以下例子进行讲解。main(){inta=10,b=50,c=30;if(a>b)a=b,b=c;c=a;printf("%d,%d,%d\n",a,b,c);}2、if„else语句格式为:if(表达式)语句1else语句23、多分支if„else„if格式为:if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3„else语句n例: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\n”,y);}注:if语句中表达式可以是任意合法的表达式(在二级C考试中,经常用赋值语句作为if语句的表达式)。语句如果是复合语句必须用“{}”将语句括起来,否则会出错,可以参考以下例子进行讲解。main(){inta=0,b=0,c=0,d=0;if(a=1)b=1;c=2;elsed=3;printf("%d,%d,%d,%d\n",a,b,c,d);}4、嵌套if结构中的else和if的配对原则else总是和离它最近的且不带else的if配对,可以参考以下例子进行讲解。#include<stdio.h>main(){intx=1,y=2,z=3;if(x>y)if(y<z)printf("%d",++z);elseprintf("%d,",++y);printf("%d\n",x++);}例:有如下程序main(){inta=2,b=-1,c=2;if(a<0)if(b<0)c=0;elsec++;printf(“%d\n”,c);}该程序的输出结果是A)0B)1C)2D)3例:若执行以下程序时从键盘上输入9,则输出结果是A)11B)10C)9D)8main(){intn;scanf(“%d”,&n);if(n++<10)printf(“%d\n”,n);elseprintf(“%d\n”,n--);}例:阅读以下程序:main(){intx;scanf(“%d”,&x);if(x--<5)printf(“%d”,x);elseprintf(“%d”,x++);}程序运行后,如果从键盘上输人5,则输出结果是A)3B)4C)5D)6例:以下程序运行后的输出结果是【】。main(){intx=10,y=20,t=0;if(x==y)t=x;x=y;y=t;printf("%d,%d\n",x,y);}例:main(){intp,a=5;if(p=a!=0)printf("%d\n",p);elseprintf("%d\n",p+2);}执行后输出结果是【】。三、条件表达式、switch语句、goto语句1、条件表达式基本格式为:表达式1?表达式2:表达式3可以通过以下例子进行讲解,便于学生对条件表达式的分析和理解。main(){intx,a=2,b=5;x=(a<b)?a:b;printf("%d\n",x);}2、switch语句基本格式为: switch(表达式) { case 常量表达式1:语句1; break;case 常量表达式2:语句2; break;„ case 常量表达式n:语句n; break;default: 语句n+1;break;}switch语句注意事项:(1)switch、case、break、default都是关键字。(2)default语句至多有一个,但位置可以放在任何case之前。(3)表达式的值只能是整型或字符型。注:switch语句中,注意在case的语句块后加break语句和不加break语句的区别,在二级C考试中,经常考查该类题。另外,考查default语句的执行(只有所有case后的常量表达式都不成立时,才执行default后的语句)。例:有如下程序main(){intx=1,a=0,b=0;switch(x){case0:b++;case1:a++;case2:a++;b++;}printf(“a=%d,b=%d\n”,a,b);}该程序的输出结果是A)a=2,b=1B)a=1,b=1C)a=1,b=0D)a=2,b=2例:若a、b、c1、c2、x、y、均是整型变量,正确的switch语句是A)swich(a+b);B)switch(a*a+b*b){case1:y=a+b;break;{case3:case0:y=a-b;break;case1:y=a+b;break;}case3:y=b-a,break;}C)switchaD)switch(a-b){casec1:y=a-b;break{default:y=a*b;breakcasec2:x=a*d;breakcase3:case4:x=a+b;breakdefault:x=a+b;case10:case11:y=a-b;break;}}例:以下程序的输出结果是main(){inta=0,i;for(i=1;i<5;i++){switch(i){case0:case3:a+=2;case1:case2:a+=3;default:a+=5;}}printf("%d\n",a);}A)31B)13C)10D)20例:有以下程序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\n",m);}程序运行后的输出结果是______。A)1B)2C)3D)43、goto语句无条件转向goto语句,格式为:goto语句标号;第四章循环结构一、while语句while语句的一般形式为:while(表达式){循环体语句}while循环结构的执行过程:先计算表达式(循环条件)的值,若结果为“真”(非0),执行循环体语句;然后再次计算表达式的值,重复上述过程,直到表达式的值为“假”(0)时,结束循环,流程控制转到循环结构的下一条语句。while循环结构的注意事项:(1)while循环结构的特点是“先判断,后执行”。如果表达式的值一开始就为“假”,则循环体一次也不执行。(2)循环体内中,如果包含两个或两个以上的语句,必须用花括号括起来,以复合语句的形式出现。(3)循环体内一定要有改变循环条件的语句,使循环趋向于结束,以免形成“死循环”。例:有如下程序main(){intn=9;while(n>6){n--;printf(“%d”,n);}}该程序段的输出结果是A)987B)876C)8765D)9876二、do…while语句do„while语句的形式为:do{循环体语句}while(表达式);do„while循环结构的执行过程:先执行一次循环体语句,然后计算表达式(循环条件)的值。若结果为“真”(非0),则再次执行循环体,再计算表达式的值,如此重复下去,直到表达式的值为“假”(0)时,循环结束,流程控制转到循环结构的下一条语句。do„while循环结构的注意事项:(1)循环体包含两个或两个以上的语句时,必须用花括号括起来,以复合语句形式出现。(2)循环体内一定要有改变循环条件的语句,使循环趋向于结束,以免形成“死循环”。例:程序运行后的输出结果是【】。main(){inti=10,j=0;do{j=j+i;i--;}while(i>2);printf(“%d\n”,j);}例:有以下程序main(){ints=0,a=1,n;scanf("%d",&n);do{s+=1;a=a-2;}while(a!=n);printf("%d\n",s);}若要使程序的输出值为2,则应该从键盘给n输入的值是A)-1B)-3C)-5D)0三、for语句for语句的形式为:for(表达式1;表达式2;表达式3){循环体语句}for循环结构的执行过程:先执行表达式1,赋初值;再执行表达式2,计算表达式2的值,结果为“真”(非0),执行循环体语句;循环体语句执行完毕,返回表达式3,让循环变量发生变化,再判断表达式2的值。如此循环重复下去,直到表达式2的值为“假”(0)时,循环结束,流程控制转到循环结构的下一条语句。for循环结构的注意事项:(1)关键字for的三个表达式允许部分或全部省略,但其中的两个分号(;;)不能省略。(2)当省略表达式3时,应该在循环体有修改循环变量的值的语句,以保证循环能够正常结束。(3)当表达式2或三个表达式全部省略时,应该在循环体内设置相应的语句来结束循环,否则程序始终认为判断条件成立,循环将无终止地执行下去,即形成死循环。(4)循环体包含两个或两个以上的语句时,必须用花括号括起来,以复合语句形式出现。例:有以下程序main(){intt=1,i=5;for(;i>=0;i--)t*=i;printf("%d\n",t);}执行后输出结果是【】。四、循环结构的嵌套任意一种循环结构中又套有循环结构,称为循环的嵌套。循环结构的嵌套是一个难点,建议通过以下求阶乘的和(s=1!+2!+3!+„n!,n由键盘输入),main(){inti,j,n;longsum,p;/*定义变量sum、p为长整型变量*/scanf("%d",&n);for(sum=0,i=1;i<=n;i++){p=1;j=1;do{p=p*j; /*求i的阶乘*/}while(++j<=i);sum+=p; /*把i的阶乘累加到sum中*/printf("\nsum=%ld\n",sum);}例:执行以下程序后,输出'#'号的个数是【6】。main(){inti,j;for(i=1;i<5;i++)for(j=2;j<=i;j++)putchar('#');}五、break语句和continue语句1、break语句break语句的一般形式:break;该语句的功能是:使执行从包含它的最内层循环或switch语句中跳出,转到switch结构或该循环结构外的下一条语句执行。这将导致包含它的最内层循环(while、for、do„while)或switch语句的终止。使用break语句的注意事项:(1)break语句只能用于switch结构或循环结构中。在循环结构中应用时,通常与if语句配合使用。(2)在嵌套的循环结构中使用时,break语句只能跳出(或终止)包含它的最内层循环。而不能同时跳出(或终止)多层循环。以下程序涉及在嵌套结构中,使用了break语句,建议重点讲解。#include<stdio.h>main(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;printf("a=%d,b=%d\n",a,b); /*输出结果为:a=2,b=1*/2、continue语句continue语句的一般形式:continue;该语句的功能是:结束本次循环,使得包含它的循环(while、do„while、for)开始下一次循环。使用continue语句的注意事项:(1)continue语句只能用于循环结构中,通常也要有if语句配合使用。(2)continue语句只能结束本次循环,而不是终止整个循环的执行。(3)在循环结构中,一旦continue语句执行,即使该语句后有其他语句也不再执行,而是跳转到循环条件,再次判断条件是否成立。例:main(){inti,n=0;for(i=2;i<5;i++){do{if(i%3)continue;n++;}while(!i);n++;}printf("n=%d\n",n);}程序执行后的输出结果是()A)n=5B)n=2C)n=3D)n=4例:有以下程序main(){intk=4,n=0;for(;n<k;){n++;if(n%3!=0)continue;k--;}printf("%d,%d\n",k,n);}程序运行后的输出结果是A)1,1B)2,2C)3,3D)4,4例:以下程序的输出结果是main(){inta,b;for(a=1,b=1;a<=100;a++){if(b>=10)break;if(b%3==1){b+=3;continue;}}printf(“%d\n”,a);}A)101B)6C)5D)4第五章函数一、函数的定义1、函数定义功能单一且独立的程序模块,用于完成特定的任务并根据需要返回一个确定的值。2、函数定义的格式返回值类型函数名(类型1形参名1[,类型2形参名2]„){说明部分语句部分}3、注意事项(1)函数返回值类型名缺省时,返回值类型默认为int,无返回值时类型是void。(2)函数名和形参名是用户标识符,后面的括号“()”不能省。(3)一对花括号中的内容为函数体,包含两部分:说明部分和语句部分。(4)函数不能嵌套定义。二、函数返回值1、return语句基本格式为:return(表达式);2、使用return语句的注意事项(1)表达式可以不加括号。(2)表达式的类型应和函数定义返回值的类型一致。(3)如果有多个return语句,则只有第一个起作用,因为一旦遇到return语句就会结束当前函数的运行。intmax(inta,intb){intc;if(a>b)c=a;elsec=b;returnc;}三、库函数1、include命令行一般格式为:#include<头文件名.h>或#include"头文件名.h"2、注意事项(1)include命令行必须以“#”符号开头。(2)系统提供了的头文件以.h作为文件的后缀。(3)include命令行是C语言的预处理命令,所以不用在语句的结尾加“;”。例如,在程序中要引用数学函数,则在程序开头要加上:#include"math.h"。3、库函数的调用形式函数名(实参);库函数的调用可以以两种形式出现:(1)在表达式中调用,如y=cos(x);。(2)作为独立的语句完成某种操作,如:printf("Iamateacher");.此处可引入下面的例子来讲解库函数的应用。例如,若有代数式(其中e仅代表自然对数的底数,不是变量),则表示该代数式的C语言表达式是:sqrt(fabs(pow(n,x)+exp(x)))。解析:在C语言中,计算平方根应使用sqrt()函数,计算n的x次方应使用pow()函数(第1个参数是n,第2个参数是x);计算自然数e的x次方应使用exp()函数,计算绝对值使用fabs()函数。本题的代数式首先应计算nx和ex,根据前面介绍应该分别为pow(n,x)和exp(x),然后计算它们的和pow(n,x)+exp(x),接着是这个和的绝对值fabs(pow(n,x)+exp(x)),最后对这个绝对值开平方,所以最终结果应是sqrt(fabs(pow(n,x)+exp(x)))。四、函数调用1、函数调用的形式函数名(实参);2、函数调用注意事项(1)不写返回值类型和实参类型。(2)实参可以是常量、变量、表达式、函数调用。(3)参数传递方向:实参→形参(单向)。(4)若函数返回值类型是void,则函数调用不能出现在表达式中,不能赋值给变量。注:函数调用以及参数的传递,初学者很难理解,所以多举一些例子详细讲解函数调用和参数传递的过程。在此可以参考教材P78、例1、例2和P79、例3来详细讲解函数的调用。voidswap(intx,inty){intt;t=x;x=y;y=t;printf("%d%d",x,y);}main(){inta=3,b=4;swap(a,b);printf("%d%d",a,b);}五、函数的声明1、函数声明的形式返回值类型函数名(类型1形参名1,类型2形参名2,„);即在函数的首部加上分号。2、函数声明的注意事项(1)可省略形参名,不可省略形参的类型。(2)声明的位置:在函数的内部,该函数属于私有函数;如果在所有函数的外部,则属于公有函数。(3)声明时的参数名可与定义时的形参名相同,也可不同。3、函数的两种使用方式(1)先定义,后调用。(2)先声明,后调用,最后定义。例:若程序中定义了以下函数doublemyadd(doublea,doubleb){return(a+b);}并将其放在调用语句之后,则在调用之前应该对该函数进行说明,以下选项中错误的说明是()A)doublemyadd(doublea,b);B)doublemyadd(double,double);C)doublemyadd(doubleb,doublea);D)doublemyadd(doublex,doubley);例:下列程序的运行结果是A)63B)36C)编译出错D)00voidfun(int*a,int*b){int*k;k=a;a=b;b=k;}main(){inta=3,b=6,*x=&a,*y=&b;fun(x,y);printf(“%d%d”,a,b);}例:下列程序的输出结果是【】。voidfun(int*n){while((*n)--);printf(“%d”,++(*n));}main(){inta=100;fun(&a);}例:下程序的输出结果是【】。main(){intx=0;sub(&x,8,1);printf("%d\n",x);}sub(int*a,intn,intk){if(k<=n)sub(a,n/2,2*k);*a+=k;}例:如下程序intrunc(inta,intb){return(a+b);}main(){intx=2,y=5,z=8,r;r=func(func(x,y),z);printf(“%\d\n”,r);}该程序的输出的结果是A)12B)13C)14D)15例:以下程序floatfun(intx,inty){return(x+y);}main(){inta=2,b=5,c=8;printf("%3.0f\n",fun((int)fun(a+c,b),a-c));}程序运行后的输出结果是______。例:有以下程序charfun(charx,chary){if(x<y)returnx;returny;}main(){inta='9',b='8',c='7';printf("%c\n",fun(fun(a,b),fun(b,c)));}程序的执行结果是()A)函数调用出错B)8C)9D)7第六章指针一、指针的定义1、变量p存放变量a的地址,即变量p指向变量a,p是一种特殊类型的变量,称为指针变量。2、指针变量的定义形式(1)一级指针变量的定义:类型名*指针变量名1;(2)二级指针变量的定义:类型名**指针变量名1;二级指针变量即指向指针的指针变量。二、指针变量赋值1、通过“&”运算符给指针变量赋初值inta,*p;p=&a;注释:单目运算符“&”只能和变量结合,求变量的地址,不能放在表达式的前面。2、给指针变量赋空值int*p;p=NULL;注释:不能通过一个空指针访问一个存储单元。3、通过其他指针变量获得地址值int*p,*q,a;p=&a;q=p;这样p和q则指向同一个变量。三、间接访问运算符(引用存储单元)1、间接访问运算符:*2、含义:*p表示访问p所指向变量的值。(p为指针变量)3、间接访问运算符和定义时指针变量中“*”的区别inta,*p;a=3;p=&a;priintf("%d",*p);注:要讲解清楚,第一行中的*p和第三行中的*p的区别。四、指针的移动和比较1、指针的移动移动指针就是通过赋值运算,使指针变量加上或减去一个整数,使指针变量指向相邻的存储单元。指针每移动一次则移动一个存储单元。2、指针比较p>q:p所指单元在q之后;p<q:p所指单元在q之前。此处可结合教材P90的图例,再引入如下的图例来讲解。a[0]a[1]a[2]a[3]a[4]1122334455p↑q↑上图中,指针p指向存储单元a[0],指针q指向存储单元a[2],这时运算表达式q-p值为2,如果执行p++;则指针p向后移动一个存储单元指向存储单元a[1],q=q+2;则将指针q向后移动2个存储单元指向存储单元a[4]。如下图:a[0]a[1]a[2]a[3]a[4]1122334455p↑q↑五、函数之间地址值的传递1、传值调用与传址调用函数调用过程中的参数传递:(1)传值:前面学习的普通变量作实参的函数调用便是传值调用。形参改变时实参不变。(2)传址:当函数的形参为指针变量时,则调用该函数时,对应的实参也必须是与形参基类型相同的地址值或指针变量,这种函数调用即传址调用。形参变化时,实参也会改变。可引用以下两个程序进行对比,讲解传值调用和传址调用时,形参和实参的变化。传值调用:voidswap(intx,inty){intt;t=x;x=y;y=t;printf("%d%d",x,y);}main(){inta=3,b=4;swap(a,b);printf("%d%d",a,b);}传址调用:voidswap(int*a,int*b){intt;t=*a;*a=*b;*b=t;}main(){inta=3,b=4;printf("(1)a=%db=%d\n",a,b);swap(&a,&b);printf("(2)a=%d b=%d\n",a,b);}注:以下是在二级C考试中,一个比较容易出错的题,作为重点进行讲解。#include<stdio.h>voidfun(int*a,int*b){int*c;c=a;a=b;b=c;}main(){intx=3,y=5,*p=&x,*q=&y;fun(p,q);printf("%d,%d",*p,*q);fun(&x,&y);printf("%d,%d\n",*p,*q);}程序的结果是:3,5,3,52、函数返回地址值函数返回值的类型也可以为指针类型。第七章数组一、一维数组1、数组的概念数组是一组具有相同类型的数据的集合。2、一维数组的定义类型名数组名[整型常量表达式]例如:inta[5];通过上面语句定义数组后,便会为数组a开辟连续的5个存储单元,每个存储单元存放一个整型数据。注意事项:常量表达式用来表示数组的长度,不能为变量。3、一维数组元素的引用数组名[下标表达式]例如:通过inta[5]定义一个数组后,a[0]、a[1]、a[2]、a[3]和a[4]便是数组中的5个元素。注意事项:(1)数组元素的下标,必须是从0开始,到数组的最大长度减1。(2)数组名代表数组的首地址,是一个地址常量,不能整体引用数组里的所有元素。(3)数组中的元素就是一个变量,所有适合该类型变量的操作同样适用于数组。4、一维数组的初始化数组的初始化,就是在定义数组之后对数组元素赋初值。有以下几种方式:(1)inta[5]={1,2,3,4,5};(2)inta[5]={1,2};(3)inta[]={1,2,3,4,5};(4)inta[5];a[0]=1;a[1]=2;a[2]=3;a[3]=4;a[4]=5;例:以下程序的输出结果是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)369例:以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序voidsort(inta[],intn){inti,j,t;for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)if(a[i]<a[j]){t=a[i];a[i]=a[j];a[j]=t;}}main(){intaa[10]={1,2,3,4,5,6,7,8,9,10},i;sort(&aa[3],5);for(i=0;i<10;i++)printf("%d,",aa[i]);printf("\n");}程序运行后的输出结果是______。A)1,2,3,4,5,6,7,8,9,10,B)10,9,8,7,6,5,4,3,2,1,C)1,2,3,8,7,6,5,4,9,10,D)1,2,10,9,8,7,6,5,4,3,例:以下程序中的函数reverse的功能是将a所指数组中的内容进行逆置。voidreverse(inta[],intn){inti,t;for(i=0;i<n/2;i++){t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;}}main(){intb[10]={1,2,3,4,5,6,7,8,9,10};inti,s=0;reverse(b,8);for(i=6;i<10;i++)s+=b[i];printf("%d\n",s);}程序运行后的输出结果是______。A)22B)10C)34D)30二、二维数组1、二维数组的定义类型名 数组名[常量表达式1][常量表达式2]例如:inta[2][3];通过上面的语句便定义了一个2行3列的数组,数组中元素的个数为:上标×下标=2×3=6。即为数组a开辟了6个连续的存储单元,每个存储单元可存放一个整型数。注意事项:(1)行下标和列下标都必须是常量表达式,不能为变量。(2)二维数组可看作是一个特殊的一维数组,这个一维数组中的每个元素又是一个一维数组。可参考以下图例进行讲解。a[0]→a[0][0]a[0][1]a[0][2]a[1]→a[1][0]a[1][1]a[1][2]2、二维数组的引用数组名[行下标][列下标];例如,上面定义的数组a,则a[0][0]、a[0][1]、a[0][2]、a[1][0]、a[1][1]、a[1][2]便是数组中6个元素。注意事项:(1)数组中的行下标和列下标都是从0开始,到下标的上界减1。(2)列下标变化比行下标快。(3)数组名代表数组的首地址,是一个地址常量,不能整体引用数组里的所有元素。3、二维数组的初始化二维数组的初始化有如下几种方法:(1)inta[2][3]={{1,2,3},{4,5,6}};(2)inta[2][3]={{1,2},{3}};(3)inta[2][3]={{1,2}};(4)inta[2][3]={1,2,3,4,5,6};(5)inta[][3]={1,2,3,4,5,6};注意事项:(1)在初始化过程中,不允许缺省常量表达式2(列数),在单纯定义数组不赋初值时,常量表达式1(行数)和常量表达式2(列数)都不能省略。(2)一般情况下,每一行初值放在一对内花括号中,但每一行所赋的个数不能多于该行的元素数。三、数组的实际应用在数组的实际应用中,常常用循环来控制数组中的元素。用单层循环控制一维数组,用嵌套的双层循环控制二维数组。由于二维数组中,列下标的变化快,行下标的变化慢,所以用嵌套循环的内层循环变量控制列下标,用外层循环变量控制行下标。要注意数组的下标是从0开始的。例:有如下程序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\n",s);}例:以下数组定义中不正确的是A)inta[2][3];B)intb[][3]={0,1,2,3};C)intc[100][100]={0};D)intd[3][]={{1,2},{1,2,3},{1,2,3,4}};例:有以下程序main(){intaa[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}};inti,s=0;for(i=0;i<4;i++)s+=aa[i][1];printf("%d\n",s);}例:以下能正确定义二维数组的是A)inta[][3];B)inta[][3]=2{2*3};C)inta[][3]={};D)inta[2][3]={{1},{2},{3,4}};第八章字符串一、字符串字符串是用双引号("")括起来的一串字符。注意,C语言编译系统会自动在字符串的结尾加上字符串结束标志'\0'。二、字符串的处理字符串的处理方式主要有以下几种:1、一维数组存放字符串,但后面加'\0'。主要有以下几种方式:(1)charstr[10]={'x','i','a','o','y','u','a','n','\0'};(2)charstr[10];str[0]='x';str[1]='i';str[2]='a';str[3]='o';str[4]='y';str[5]='u';str[6]='a';str[7]='n';str[8]='\0';(3)charstr[]={'x','i','a','o','y','u','a','n','\0'};(4)charstr[10]={"xiaoyuan"};(5)charstr[10]="xiaoyuan";注:charstr[10];str="xiaoyuan";是错误的。2、指针指向字符串的首地址例如:char*p="xiaoyuan";3、二维字符数组存放字符串数组例如:charname[4][20]={"I","am","a","teacher"};4、指针数组处理字符串数组例如:char*pname[4]={"I","am","a","teacher"};注:用字符数组和指针对字符串进行处理是比较灵活的,但有时容易混淆,造成非法使用。三、字符串的输入输出1、字符串的输出(1)printf函数:用%s格式控制符,输出列表是字符串的首地址。(2)puts函数:puts(字符串首地址);2、字符串输入(1)scanf函数:采用%s格式控制符,制表符、空格和回车不读入。(2)gets函数:gets(待输入字符串的首地址),制表符、空格和回车读入。注:此处要注意哪些函数读入制表符、空格和回车,哪些不读入。四、字符串处理函数1、strcpy(d,s);:将字符串s赋到字符串d的存储空间中。2、strlen(s);:求字符串s的长度。3、strcat(d,s);:将字符串s赋值到字符串d的后面。4、strcmp(s1,s2);:比较s1和s2两个字符串的大小。第九章文件一、基本概念1、文件文件名=主文件名+扩展名2、文件指针FILE*指针变量名;3、文件的基本操作(1)读:从文件中输入数据给程序中的变量;(2)写:将变量中的数据输出到文件中。二、文件的基本操作1、打开文件fopen(文件名,文件使用方式);注意事项:文件名和文件指针都是字符串;文件名中含有'\',要用'\\'代替;文件打开方式,要注意常用的和特殊的。例:文件打开与测试FILE*fp=fopen(“test.c”,“w”);if(fp==NULL){printf(“Fileopenerror!\n”);exit(0);}2、关闭文件fclose(文件指针);3、判断文件结束feof(文件指针);功能:判断文件是否结束返回值:文件结束,返回真(非0);文件未结束,返回0判断二进制文件是否结束while(!feof(fp)){c=fgetc(fp);……..}4、设置文件的位置fseek(文件指针,位移量,移动起始点);功能:改变文件位置指针的位置起始点文件开始SEEK_SET0文件当前位置SEEK_CUR1文件末尾SEEK_END2例fseek(fp,100L,0);fseek(fp,50L,1);fseek(fp,-10L,2);5、获得文件当前的位置ftell(文件指针);功能:返回位置指针当前位置(相对文件开头的位移量)6、将文件指针定位在文件头rewind(文件指针);功能:重置文件位置指针到文件开头7、文件的读操作:从文件中输入数据给程序中的变量(1)变量=getc(文件指针);功能:从fp指向的文件中读取一字节代码(2)fscanf(文件指针,格式控制字符串,输入项表);功能;按格式对文件进行读操作fscanf(fp,“%d,%f”,&i,&t);//若文件中有3,4.5,则将3送入i,4.5送入t8、文件的写操作:将变量中的数据输出到文件中(1)putc(文件指针);功能:把一字节代码ch写入fp指向的文件中(2)fprintf(文件指针,格式控制字符串,输出项表);9、读写字符串功能;按格式对文件进行写操作fprintf(fp,“%d,%6.2f”,i,t);//将i和t按%d,%6.2f格式输出到fp文件fgets(字符串首地址,长度,文件指针);功能:fgets从fp所指文件读n-1个字符送入s指向的内存区,并在最后加一个‘\0’(若读入n-1个字符前遇换行符或文件尾EOF即结束)fputs(字符串首地址,文件指针);功能:fputs把s指向的字符串写入fp指向的文件10、读写二进制文件fread(buffer,size,count,fp);fwrite(buffer,size,count,fp);功能:读/写数据块返值:成功,返回读/写的块数;出错或文件尾,返回0说明:typedefunsignedsize_t;buffer:指向要输入/输出数据块的首地址的指针size:每个要读/写的数据块的大小(字节数)count:要读/写的数据块的个数fp:要读/写的文件指针fread与fwrite一般用于二进制文件的输入/输出例:floatf[2];FILE*fp;fp=fopen(“in.dat","rb");fread(f,4,2,fp);等价:for(i=0;i<2;i++)fread(&f[i],4,1,fp);第十章对C语言的深入探讨一、用户自定义类型1、基本格式typedef类型名标识符2、用户自定义类型需要注意的事项(1)用户自定义类型并没有产生新的类型。(2)新类型名一般用大写。二、预编译处理1、宏(1)不带参数的宏的定义形式:#define宏名替换文本。(2)宏展开:用替换文本代替宏名的过程,参考教材P128,例2、例3进行讲解。注:此处强调宏展开时加括号问题,注意讲解计算方法。强调不能用计算结果展开,不能乱加括号。(3)宏的处理时间:在编译之前。(5)#undef提前终止已经定义的宏。(6)带参数的宏的定义形式:#define宏名(形参表)表达式(7)带参数的宏也要注意展开时的括号问题(8)宏和函数的调用区别:1.处理时间不同2.参数要求不同例:如下程序#defineN2#defineMN+1#defineNUM2*M+1#main(){inti;for(i=1;i<=NUM;i++)printf(“%d\n”,i);}该程序中的for循环执行的次数是A)5B)6C)7D)8例:以下程序的输出结果是[16]。#defineMAX(x,y)(x)>(y)?(x):(y)main(){inta=5,b=2,c=3,d=3,t;t=MAX(a+b,c+d)*10;printf(“%d\n”,t);}例:程序的输出结果是A)16B)2C)9D)1#defineSQR(X)X*Xmain(){inta=16,k=2,m=1;a/=SQR(k+m)/SQR(k+m);printf(“d\n”,a);}2、文件包含(1)文件包含的形式:#include"文件名"或#include<文件名>(2)处理时间在编译之前。(3)在同一个程序中可包含多个文件。三、标识符的作用域和存储分类1、变量的分类(1)按存储类别分为:自动类和静态类。(2)按定义位置分为:局部变量和全局变量。2、局部变量(1)auto变量定义形式:autointa;或intautoa;,(2)register变量定义形式:registerinta;和auto变量的不同之处在于:auto在内存中分配空间,而register在寄存器中分配空间。(3)static变量注:static变量是重点也是难点,注意涉及到这个知识点的程序分析。static变量的特点是:1.占据永久性存储单元。2.未赋值的情况下,系统自动赋值为0。3.存储单元保留上一次运行结果。例:以下程序的输出的结果是intx=3;main(){inti;for(i=1;i<=2;i++)ncre();}ncre(){staicintx=1;x*=x+1;printf("%d",x);}A)33B)22C)26D)253、全局变量(1)在函数外部定义的变量,称为全局变量,全局变量只能是静态变量。(2)用extern说明全局变量在同一文件内其作用域从extern说明处起,延伸到该文件末尾;在其他用到全局变量的文件中,可使用extern对这些变量进行说明。(3)用static说明全局变量:只限于在本文件使用,不能被其他文件引用。4、用extern说明函数(1)用extern说明的函数称为外部函数,可供其他文件的函数调用。(2)如果extern省略,则隐含为外部函数。5、用static说明函数用static说明的函数称为内部函数,只能被本文件的函数调用。例:有以下程序inta=3;main(){ints=0;{inta=5;s+=a++;}s+=a++;printf("%d\n",s);}程序运行后的输出结果是_______。A)8B)10C)7D)11例:以下程序:inta=2;intf(int*a){return(*a)++;}main(){ints=0;{inta=5;s+=f(&a);}s+=f(&a);printf("%d\n",s);}执行后输出结果是()A)10B)9C)7D)8四、动态存储分配1、malloc函数(1)调用形式:malloc(size)(2)一次只能分配单个数据类型的存储单元。(3)返回值类型为void*,若函数执行失败,返回空指针(NULL)。(4)重点强调malloc返回值的强制类型转换。(5)使用sizeof运算符int*p;p=(int*)malloc(sizeof(int));注:以上是利用malloc函数使p指向一个整型的动态存储单元,在二级C考试中,题目会要求p指向不同类型的动态存储单元,注意该语句的书写。2、calloc函数(1)调用形式:calloc(n,size)(2)一次可分配多个同一类型的连续的存储单元。(3)返回值类型为void*,若函数执行失败,返回空指针(NULL)。(4)讲解教材P139,例2。注意calloc返回值的强制类型转换。3、free函数(1)调用形式:free(p)(2)p为指针变量,但必须指向由动态分配函数分配的地址。(3)该函数没有返回值。注:动态存储分配一般考查填空题,重点注意malloc函数返回值的强制类型转换。五、main函数的参数与函数指针1、main函数的参数(1)参数的类型:intargc,char*argv[](2)参数argc和argv是常规的名称,也可以换成其他名称。(3)argc为整型,对应命令行中参数个数,包括执行文件名;argv为字符型的指针数组,每个数组元素是一指向字符数据的指针,对应命令行中各参数的名字。2、函数指针(1)函数指针存放的是函数的入口地址。(2)函数指针的定义格式:函数返回值类型(*指针名)(函数参数列表);(3)函数的3种调用格式(可以参考以下程序进行讲解)intadd(inta,intb){returna+b;}main(){intk,(*f)(),a=5,b=10;f=add;„}3种正确的函数调用格式为:k=(*f)(a,b); k=add(a,b); k=*f(a,b);例:假定以下程序经编译和连接后生成可执行文件PROG.EXE,如果在此可执行文件所在目录的DOS提示符下键入:PROGABCDEFGHIJKL<回车>,则输出结果为A)ABCDEFGB)IJHLC)ABCDEFGHIJKLD)IJKLABCDEFGHmain(intargc,char*argv[])){while(--argc>0)printf(“%s”,argv[argc]);printf(“\n”);}例:有以下程序#include<string.h>main(intargc,char*argv[]){inti,len=0;for(i=1;i<argc;i++)len+=strlen(argv[i]);printf("%d\n",len);}程序编译连接后生成的可执行文件是ex1.exe,若运行时输入带参数的命令行是:ex1abcdefg10<回车>则运行的结果是______。A)22B)17C)12D)9例:有以下程序main(intargc,char*argv[]){intn,i=0;while(argv[1][i]!='\0'){n=fun();i++;}printf("%d\n",n*argc);}intfun(){staticints=0;s+=1;returns;}假设程序编译、连接后生成可执行文件exam.exe,若键入以下命令exam123〈回车〉则运行结果为A)6B)8C)3D)4六、函数的递归调用与对C语言的补充说明1、函数的递归调用调用函数的过程中直接或间接调用该函数本身。2、采用递归方法的约束条件(1)解决问题的方法相同,调用函数的参数每次不同(有规律的递增或递减),如果没有规律也就不能适用递归调用。(2)可以应用这个转化过程使问题得到解决。(3)必须有一个明确的结束递归的条件。3、递归分析时要注意:从那里出去执行,结束回到那里4、C语言的总体说明(1)C
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 购货合同格式范本
- 购销合同印花税的征收依据解析
- 购销框架协议范本
- 赛车手事故处理协议
- 跨国工程承包合同
- 软件开发合同协议范本范例
- 软件技术开发与实施合同
- 软件购买及许可协议
- 造纸厂购销合同的履行和解和解机构
- 造纸厂购销合同的履行和解协议
- 政府关系与公共关系管理制度
- 第2课+互联网应用新特征+课件++2024-2025学年人教版(2024)初中信息技术七年级全一册
- 关于艾滋病的课件
- 《密封知识培训》课件
- 硬件测试岗位招聘笔试题及解答(某大型央企)2024年
- 2024年中国光学太阳镜片市场调查研究报告
- 2023-2024学年广东省广州市白云区九年级(上)期末英语试卷
- 2024-2030年中国体外培育牛黄行业市场竞争格局及投资价值分析报告
- 冠状动脉粥样硬化性心脏病-28
- 幕墙工程冬季施工方案
- 2024年全国企业员工全面质量管理知识竞赛活动题库(完整)
评论
0/150
提交评论