C语言复习提纲_第1页
C语言复习提纲_第2页
C语言复习提纲_第3页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.C语言复习提纲第一章 C语言程序设计概述一、Visual C+6.0开发环境1、了解Visual C+6.0的安装过程;2、了解Visual C+6.0的工作界面,菜单和工具栏的使用;二、掌握C语言程序运行的过程1、编辑:是指把按照C语法规那么编写的程序代码通过编辑器Visual C+ 6.0,Turbo C 3.0输入计算机,并存盘。在存盘时,C源文件的扩展名为 .c 2、编译:将C语言源程序编译成目标程序,即对源程序进展编译,并将源程序转换为扩展名为.obj的二进制目标代码即把已经编辑好的源程序翻译成二进制目标代码的过程。 3、连接:将用户程序生成的目标代码文件.obj和系统提供的库文件

2、.lib中的某些代码连接在一起,生成一个可执行文件.exe。4、执行:执行生成的可执行代码,并输出结果。5、调试:是将编制的程序投入实际运行前,用手工或编译程序等方法进展测试,修正语法错误和逻辑错误的过程。三、构造化程序设计的根本概念1、概念以模块化设计为中心,将待开发的软件系统划分为假设干个相互独立的模块,将原来较为复杂的问题化简为一系列简单模块的设计,任何模块都可以使用一些根本的构造来实现,任何复杂的程序,都可以使用这些根本构造按一定的顺序组合起来,这些根本构造的特点都是只有一个入口、一个出口,这样的程序设计方法称为构造化程序设计。2、根本思想构造化程序设计的根本思想是采用"自顶

3、向下,逐步细化、模块化设计、构造化编码"的程序设计方法和"单入口单出口"的控制构造。3、三种根本构造顺序构造选择构造循环构造4、三种根本构造的特点只有一个入口只有一个出口每一个根本构造中的每一局部都有时机执行到构造内不存在“死循环5、设计原那么自顶向下逐步细化模块化设计构造化编码四、C程序的根本组成:C程序是由假设干个函数构成的,至少有一个主函数main(),main()的位置可以任意,其他各函数在程序中的前后位置也是可以任意的。程序的执行总是从主函数开场,在主函数中完毕。主函数是可以调用其他任何非主函数的函数,任何非主函数也可以调用其它任何非主函数。C程序的根本

4、组成:声明区、主程序区、函数定义区。1、声明区处在程序文件的所有函数的外部,一般包含:包含头文件、宏定义、类定义、构造体定义、函数声明、全局变量声明、条件编译等。2、主程序区主程序以main()函数开场,main()函数主函数是程序运行时的入口,包含局部变量的声明、函数调用、一般运算、构造控制、对象与构造的处理、文件处理等。3、函数定义区函数的定义包含函数说明和函数体两局部。4、注释/或/* */为注释,不能嵌套不产生编译代码,不影响程序的执行效率。五、标识符1、标识符的定义:用来对变量、符号常量名、函数、数组、类型等命名的有效字符序列统称为标识符。2、标识符的命名规那么:由字母、数字或下画线

5、组成,并且第1个字符必须为字母或下画线。注意:标识符区分大小写,即大写字母和小写字母的通常意义不同,且不能与关键字重名。练习1_1:以下变量标识符哪些是正确的,哪些是不正确的.a3bcifa!bc _abc abc_3abca_bc 3abc3、标识符分类:关键字、预定义标识符、用户自定义标识符。第二章 数据类型、运算符和表达式图2_1 C语言的数据类型数据类型根本类型空类型无值类型void构造类型指针类型实型浮点型联合型类型union单字符型char整型int单精度型float双精度型double字符型宽字符型w-char逻辑型bool类类型class枚举类型enum构造类型struct数组

6、类型一、C语言的数据类型C语言中根本数据类型包括整型、实型、字符型、枚举类型,构造类型有数组、构造体、共用体等。、根本数据类型见P17、构造类型又称为组合类型,它是由根本类型按照某种规那么组合而成的。n 数组:是由具有一样数据类型的元素组成的集合。n 构造体:是由不同的数据类型构成的一种混合的数据构造,构成构造体的成员的数据类型一般不同,并且在内存中分别占据不同的存储单元。n 共用体:是类似于构造体的一种构造类型,与构造体不同的是构成共同体的数据成员共用同一段内存单元。n 枚举:是将变量的值一一列举出来,变量的值只限于列举出来的值的X围内。、指针类型变量用于存储另一变量的地址,而不能用来存放根

7、本类型的数据。它在内存中占据一个存储单元。、类是一种数据类型,它定义的是一种对象类型,由数据和方法组成,描述了属于该类型的所有对象的性质。 二、常量和变量、常量:在程序运行的整个过程中,其值始终保持不变的量。n 整型常量:表示形式有十进制、八进制以0开头和十六进制以0x或0X开头。整型常量可以后缀字母L或l表示长整数,后缀字母U或u表示无符号整数。n 实型常量浮点型常量:表示形式有一般形式和指数形式。实型常量缺省为double型双精度型,如后缀f或F,那么为float型单精度型。n 字符常量:用单撇号括起来的一个字符。如'A','*'等。转义字符:用反斜杠引导的

8、,具有特定含义的字符(见P22表2-4),如 'n','367','x8a'。注:C语言字符集中的任何一个字符均可用转义字符来表示。n 字符串常量:用双撇号括起来的字符序列。如"student","XXXX"等。n 布尔常量:false,true。n 符号常量:² *define 宏名 常数练习2_1:以下哪些是合法的常量:12.7f09860986.012、0625L87U-0x98C201a-6.87E-2 1.2e0.5 E-30xFF 2L'72' 160 -0xffff5

9、E2.0-0xcdf1.3E2E0066821011 220xe 23-01 24-0x48a 250x变量:指程序在运行时其值可改变的量。n 变量应先定义声明其类型和名称后使用;n 变量定义的一般形式为: u < 数据类型 > <变名1>,<变名2>,<变名n>;n 在定义一个变量的同时,也可以给它赋以初值。练习2_2以下正确的变量标识符是3abc$amountNum_of_Studentifa!bc _above _abca>bsin day三、运算符和表达式1、算术运算符和算术表达式注意:int i=1.2*3; /结果为3,而不是3

10、.6。 int i=5/3结果为1。表达式175的结果是3,表达式175的结果是2。2、赋值运算符和赋值表达式注意:n 赋值运算符的结合性是从右至左的n 复合赋值运算符:int a=12; a+=a-=a*=a;a=a+(a=a-(a=a*a),结果为0注意:在C语言中,定义inta=b=c=3;是错误的,而定义inta,b,c;a=b=c=3;是正确的。 练习2_3设m=9,i=3,那么执行运算m%=i+1后,m的值是多少.结果1。m=m%(i+1)m=9%(3+1)m=1。3、关系运算符和关系表达式注意:n 关系运算符的优先级低于算术运算符。例如:a+b>c 等价于 (a+b)>

11、;c,a!=b>c等价于a!=(b>c) n “=与“=的区别4、逻辑运算符与逻辑表达式注意:n 逻辑非的优先级最高,逻辑与次之,逻辑或最低练习2_4 假设有inta=3,b=0;那么表达式a&&!b的值为1。练习2_5设有变量说明:int a=8,b=7;那么执行语句:printf("%d,%d n",+a,b-),输出的结果是9,7练习2_6设a,b,c均为int型变量,那么执行语句a=b=3;c=+a|+b;后,b的值为3。练习2_7设x、y和z都是int型变量,且x=8, y=3, z=5, 那么表达式x*y/z+6-14%z的值为6。练

12、习2_8设有定义:intx=1,y=-1;那么执行语句printf("%dn",(x-&+y);后的输出结果是0。练习2_9 设x,y,z,t均为int型变量,那么执行以下语句x=y=z=1;t=+x|+y&&+z; 后,x、y、z、t的值分别为2,1,1,1。6、条件运算符表达式1.表达式2:表达式3注意:n 结合性是自右向左。a>b"a:c>d"c:d相当于a>b"a:(c>d"c:d)n 条件运算符的优先级别高于赋值运算符,低于关系运算符和算术运算符。如:a>b"a

13、-b:b-a相当于a>b"(a-b):(b-a) 练习2_10设有变量说明:int x=3,y=5;那么表达式:z=x>y"x:y运算后,z的值是5。7、位运算符位运算符是对其操作数按其二进制形式逐位进展运算,参加位运算的操作数必须为整数。练习2_11 int a=5,b=6;a&b=4;a|b=7;ab=3;b=-7;b<<2=24;b>>2=1。注:在位运算中,操作数左移三位,其结果相当于操作数乘以8。8、逗号运算符表达式, 表达式, , 表达式n注意:自左至右,依次计算各表达式的值,“表达式n 的值即为整个逗号表达式的值。如

14、:a = 3 * 5, a * 4, a + 5的值为20。四、运算符的优先级与结合性1、所谓结合性是指,当一个操作数两侧的运算符具有一样的优先级时,该操作数是先与左边的运算符结合,还是先与右边的运算符结合。自左至右的结合方向,称为左结合性。反之,称为右结合性。结合性是语言的独有概念。除单目运算符、赋值运算符和条件运算符是右结合性外,其它运算符都是左结合性。2、表达式求值n 按运算符的优先级上下次序执行。例如,先乘除后加减。n 如果在一个运算对象或称操作数两侧的运算符的优先级一样,那么按语言规定的结合方向结合性进展。例如,算术运算符的结合方向是“自左至右,即:在执行“a b + c时,变量b先

15、与减号结合,执行“a - b;然后再执行加c的运算。练习2_12 设int x=2,y=3,z=4; 执行语句行x+;y+=1;z=x+y-以后,x,y和z的值分别是多少.答案:3,3,7练习2_13假设有定义int m=2;那么逻辑表达式(m=3)&&(m= =3)的值是1。练习2_14 如果a=5,b=3,c=7,d=9,那么条件表达式a<b"a:c<d"c:d的值为多少.结果为7。练习2_15设a=5,b=6,c=7,d=8,m=2,n=2,执行(m=a>b) && (n=c>d);后,n的值为2。练习2_16

16、如果a=5,b=3,c=7,d=9,那么条件表达式a<b"a:c<d"c:d的值为7。第三章 顺序构造程序设计一、顺序构造程序设计数据的输入和输出1、格式化输出printf()函数n printf()函数的一般格式如下:printf("格式字符串" ,输出项表);² 输出项表:要输出的数据项可以没有,有多个时以“,分隔² 格式控制串:包含两种信息格式说明: %修饰符格式字符,用于指定输出格式如:格式控制字符“%c表示的含义是输出一个字符型数据。普通字符或转义序列:原样输出。n 格式控制字符:表3_1 printf()函数格

17、式字符格式转换字符含义举例%d,%i以十进制整数输出int a=65;printf(“%d,a)/65%c输出一个字符型数据int a=65;printf(“%c,a)/A%s输出一个字符串printf(“%s,“abcd)/abcd%e,%E以指数形式输出一个浮点型数据小数位数缺省值为6位float x=984.235497426;printf("%e",x);/9.842355e+002%f(有效数字6-7位)以十进制小数形式输出一个浮点型数据小数位数缺省值为6位float x=984.235432426;printf("%f",x);/984.23

18、5413%g,%G按照%e,%f输出宽度较短的格式输出,不输出无意义的0float x=23.240;printf("%g",x);/23.24n 修饰符:表3_2 printf()函数修饰符修饰符功能例如m数据最小宽度. >m,正常输出;<m ,左补空格.int a=36;printf("a=%5dn",a);/36.n对实数,表示输出n位小数;对字符串,表示截取的字符个数float a=123.456;printf("a=%8.2fn",a);/123.46输出的数值靠左端,右边补空格。printf("s=%

19、-5.3s","guangdong")/gua 0小于指定宽度左边补0。int b=789;printf("b=%05dn",b);/00789如:在C程序的格式输出中,%d表示输出十进制整数,%6.2f表示输出长度为6位,有2位小数的实数。printf("s=%-5.3s","student");的输出结果是s=stu 。2、格式化输入scanf()函数scanf()函数的一般格式scanf("格式字符串", 输入项首地址表);注:格式输入函数scanf()可以从键盘上接收不同数据类

20、型的数据。格式化输出函数printf()和格式化输入函数scanf()都包含在头文件“stdio.h中。n 格式字符串。格式字符串可以包含3种类型的字符:格式指示符、空白字符空格、Tab键和回车键和非空白字符又称普通字符。格式指示符与printf()函数的相似,空白字符作为相邻2个输入数据的缺省分隔符,非空白字符在输入有效数据时,必须原样一起输入。n 输入项首地址表由假设干个输入项首地址组成,相邻2个输入项首地址之间,用逗号分开。输入项首地址表中的地址,可以是变量的首地址,也可以是字符数组名或指针变量。变量首地址的表示方法: &变量名其中“&是地址运算符。n 数据输入操作

21、78; 如果相邻2个格式指示符之间,不指定数据分隔符如逗号、冒号等,那么相应的2个输入数据之间,至少用一个空格分开,或者用Tab键分开,或者输入1个数据后,按回车,然后再输入下1个数据。例如,scanf("%d%d",&num1,&num2);假设给num1输入12,给num2输入36,那么正确的输入操作为:1236或者:12 36注:使用“符号表示按回车键操作,在输入数据操作中的作用是,通知系统输入操作完毕。² “格式字符串中出现的普通字符包括转义字符形式的字符,务必原样输入。例如,scanf("%d,%d",&num

22、1,&num2); 假设给num1输入12,给num2输入36,正确的输入操作为:12,36练习3_1已有定义doubled,f;,数据的输入方式为:3.69<CR>3.2<CR>,根据定义和数据的输入方式,输入函数语句的正确形式为scanf("%lf%lf",&d,&f)。scanf("%4.2lf%3.1lf",&d,&f) 或scanf("%4.2f%3.1f",&d,&f)都是错误的练习3_2 有以下程序段int m=2, n=2;n = m+ -

23、1;printf("%d %dn", m ,n); 输出结果是3,1。第四章 选择构造程序设计一、算法1、算法的概念:算法是指为解决一个问题而采取确实定的、有限的方法和步骤。2、算法的描述方法最常用的有自然语言、流程图、N-S流程图、PAD图和伪代码等。二、顺序构造程序设计顺序构造是构造化程序设计中最简单、最常见的一种程序构造。顺序构造中的语句是按照书写的先后次序执行的,并且每个语句都会被执行到。练习4_1编写一个程序,从键盘上输入一个学生5门课的成绩,计算出该学生的总成绩和平均成绩,并用自然语言描述算法。解:设变量 a、b、c、d、e分别表示学生5门课的成绩,sum表示总

24、成绩,aver表示平均成绩, 那么用自然语言描述算法如下:输入学生5门课的成绩a、b、c、d、e;求总成绩sum=a+b+c+d+e;求平均成绩: aver =sum/5.0;输出总成绩和平均成绩。程序如下:*include <stdio.h>main()float a,b,c,d,e,sum,aver;printf("请输入学生5门课的成绩n");scanf("%f,%f,%f,%f,%f",&a,&b,&c,&d,&e);sum=a+b+c+d+e;aver=sum/5.0;printf("

25、;总成绩=%0.2f,平均成绩=%.2fn",sum,aver);练习4_2 编写一个程序,从键盘输入梯形的上底、下底和高的值浮点数,计算并输出其面积保存两位小数,并用N-S构造图表示算法。 解:设变量a、b、h、area分别表示梯形的上底、下底、高和面积,那么用N-S构造图表示算法如下:输入梯形的上底a、下底b和高h计算梯形的面积: area=(a+b)*h/2.0输出结果。程序如下:*include <stdio.h>main()float a,b,h,area;printf("请输入梯形的上底、下底和高n");scanf("%f,%f,

26、%f",&a,&b,&h); area=(a+b)*h/2.0;printf("梯形的面积为%0.2fn",area);练习4_3编写一个程序,从键盘输入圆的半径,计算并输出圆的周长和面积保存两位小数,用伪代码表示出算法。解:设用变量r 、length、area分别表示圆的半径、周长和面积,那么用伪代码表示算法如下:BEGIN input r length=2*3.14*r area=3.14*r*r print length,areaEND程序如下:*include <stdio.h>*define PI 3.14main()

27、float r,length,area;printf("请输入圆的半径n");scanf("%f",&r);length=2*PI*r;area=PI*r*r;printf("圆的周长为%0.2fn",length);printf("圆的面积为%0.2fn",area);三、选择构造程序设计1、if语句、if语句的一般格式 if(表达式) 语句组1; else 语句组2; n if语句中的“表达式必须用“(和“)括起来。表示程序执行的条件,常用关系运算符、逻辑运算符等表示的条件表达式,其结果只有两个值“1”

28、或“0”成立或不成立。如:表示字符型变量ch是大写英文字符的C语言表达式是ch>='A'&&ch<='Z',要判断字符变量ch中的值是否为数字字符,那么其表达式是ch>='0'&&ch<='9'。n else子句可选是if语句的一局部,必须与if配对使用,不能单独使用。n 当if和else下面的语句组,仅由一条语句构成时,也可不使用复合语句形式即去掉花括号。、if语句的执行过程n 缺省else子句时n 当“表达式的值不等于0即判定为“逻辑真时,那么执行语句组1,否那么直接转向

29、执行下一条。n 指定else子句时n 当“表达式的值不等于0即判定为“逻辑真时,那么执行语句组1,然后转向下一条语句;否那么,执行语句组2。、if语句的嵌套与嵌套匹配原那么n if语句允许嵌套。所谓if语句的嵌套是指,在“语句组1”或和“语句组2”中,又包含有if语句的情况。n if语句嵌套时,为防止嵌套的if-else语句的二义性,C语言规定:else总是与在其之前最近的未配对的if语句组成配对关系。练习4_4:铁路托运行李,假设每X车票可按每公斤0.3元托运40公斤以内的行李,如果超过40公斤时,超过的局部每公斤加价0.5元,试编写一道计算行李托运费的程序。解:/*程序功能:计算行李托运费

30、*/*include <stdio.h>Void main() float w,x; printf("输入行李的重量:"); scanf("%f",&w); if(w>40.0) x=40.0*0.3+(w-40.0)*0.8; else x=w*0.5;printf("行李重量w=%.2f公斤,托运费x=%.2f元n",w,x); 2switch语句、switch语句的一般形式switch(表达式) case 常量表达式1:语句组;break;case 常量表达式2:语句组;break; . case 常量

31、表达式:语句组;break; default:语句组;break; 、执行过程n 当switch后面“表达式的值,与某个case后面的“常量表达式的值一样时,就执行该case后面的语句组;当执行到break语句时,跳出switch语句,转向执行switch语句的下一条。n 如果没有任何一个case后面的“常量表达式的值,与“表达式的值匹配,那么执行default 后面的语句组。然后,再执行switch语句的下一条。说明n switch后面的“表达式,可以是int、char和枚举型中的一种。n 每个case子句后面的“常量表达式的值,必须各不一样,否那么会出现相互矛盾的现象即对表达式的同一值,有

32、两种或两种以上的执行方案。n case后面的常量表达式仅起语句标号作用,并不进展条件判断。系统一旦找到入口标号,就从此标号开场执行,不再进展标号判断,所以要退出switch语句,方法是使用break语句。n 各case及default子句的先后次序,不影响程序执行结果。n 多个case子句,可共用同一语句组n 用switch语句实现的多分支构造程序,完全可以用if语句或if语句的嵌套来实现。练习4_5以下程序段的输出结果是intx=7,y=8,z=9;if(x>y) x=y,y=z;z=x;printf("%d,%d,%dn",x,y,z);结果:7,8,7练习4_6

33、以下程序的输出结果是*include <stdio.h>void main()int m=5;if(m+>5)printf("%dn",m);elseprintf("%dn",m-);结果:6练习4_7以下程序的输出结果是*include <stdio.h>void main()int k=1,x=0,y=0;switch(k)case 0:y+;case 1:x+;case 2:x+;y+;printf("x=%d,y=%dn",x,y);结果x=2,y=1第五章 循环构造程序设计一、循环程序设计1、w

34、hile语句、一般格式 while(循环继续条件) 循环体语句组;、执行过程求解“循环继续条件表达式。如果其值为非0,转;否那么转。执行循环体语句组,然后转。执行while语句的下一条。练习5_1:/*程序功能:求1100的累计和*/*include <stdio.h>void main() int i=1,sum=0; /*初始化循环控制变量i和累计器sum*/ while( i<=100 ) sum += i;/*实现累加*/ i+;/*循环控制变量i增1*/ printf(“sum=%dn,sum); 程序运行情况如下:sum=50502、do-while语句直到型循环

35、、一般格式 do 循环体语句组; while(循环继续条件);/*本行的分号不能缺省*/当循环体语句组仅由一条语句构成时,可以不使用复合语句形式。、执行过程执行循环体语句组。计算“循环继续条件表达式。如果“循环继续条件表达式的值为非 0真,那么转向继续执行;否那么,转向。执行do-while的下一条语句。、do-while循环语句的特点是:先执行循环体语句组,然后再判断循环条件。因此do.while语句不管条件是否成立,至少要执行一次循环体。练习5_2:用do-while语句求解1100的累计和。/*程序功能:求1100的累计和*/main() int i=1, sum=0; /*定义并初始化

36、循环控制变量,以及累计器*/ Do sum += i; /*累加*/ i+; while(i<=100);/*循环继续条件:i<=100*/ printf(“sum=%dn,sum); 3、for语句、for语句的一般格式 for(变量赋初值;循环继续条件;循环变量增值) 循环体语句组;、for语句的执行过程求解“变量赋初值表达式。求解“循环继续条件表达式。如果其值非0,执行;否那么,转至。执行循环体语句组,并求解“循环变量增值表达式,然后转向。执行for语句的下一条语句。、说明“变量赋初值、“循环继续条件和“循环变量增值局部均可缺省,甚至全部缺省,但其间的分号不能省略。当循环体语

37、句组仅由一条语句构成时,可以不使用复合语句形式。“循环变量赋初值表达式,既可以是给循环变量赋初值的赋值表达式,也可以是与此无关的其它表达式如逗号表达式。例如,for(sum=0;i<=100;i+) sum += i; for(sum=0,i=1;i<=100;i+) sum += i;“循环继续条件局部是一个逻辑量,除一般的关系或逻辑表达式外,也允许是数值或字符表达式。如:while(!E)等价于while(0),while(E)等价于while(1)。for语句最为灵活,不仅可用于循环次数已经确定的情况,也可用于循环次数虽不确定、但给出了循环继续条件的情况。练习5_3:求n的阶

38、乘n!n!=1*2*n。/*程序功能:求n!*/main() int i, n; long fact=1;/*将累乘器fact初始化为1*/ printf(“Input n: ); scanf(“%d, &n); for(i=1; i<=n; i+)fact *= i;/*实现累乘*/ printf("%d ! = %ldn", n, fact); 程序运行情况如下:Input n: 55 ! = 120练习5_4 有以下程序*include <stdio.h>void main()int a=10,b=10,i;for(i=0;a>8;b=

39、+i)printf("%d %d ",a-,b);程序输出的结果是10 10 9 1练习5_5 有以下程序*include <stdio.h>void main()int k;for(k=0;k<10;k+);printf("%d",k);答案:10练习5_6以下程序的运行结果是*include <stdio.h>void main()int m;for(m=1;m<=50;m+)if(m%12!=0) continue; printf("%4d",m); printf("n")

40、;答: 12 24 36 484、循环的比拟、While和 for都是先判断后循环,而do-while是先循后判断。即do-while语句在条件不成立时循环体也要被执行一次。、while和do-while语句的条件表达式只有一个,只起到控制循环完毕的作用,循环变量的初值等都用其他语句完成;for语句那么有3个表达式,不仅能起到控制循环完毕的作用,还可给循环变量赋初值。练习5_7对于以下程序段intm=-1;do m=m*m;while(!m);循环执行的次数为多少.答:1次。练习5_8对于以下程序段intk=5;while(k=0)k=k-1;printf("%dn",k)

41、;,循环体执行的次数为多少次.答:0次。练习5_9 对于以下程序段int a=5;while(a>=1) a-;程序执行后,a的值是0。练习5_10以下程序*include <stdio.h>void main()int i;for(i=0;i<10;i+);printf("%d",i);输出结果是10。5、循环的嵌套、循环语句的循环体内,又包含另一个完整的循环构造,称为循环的嵌套。循环嵌套的概念,对所有高级语言都是一样的。、for语句和while语句允许嵌套,do-while语句也不例外。练习5_11:编程:输出以下图形 * * * * *解:/*

42、程序功能:打印5行"*",第一行1个,第二行3个,第三行5个.*/*include <stdio.h>void main() int i=1; while(i<=5) int j=1,k=1; while(j<=5-i) printf(" "); j+; while(k<=2*i-1) printf("*"); k+; printf("n"); i+; 6、break语句与continue语句、一般格式: break; continue;、功能break:强行完毕循环,转向执行循环语句

43、的下一条语句。continue:对于for循环,跳过循环体其余语句,转向循环变量增量表达式的计算;对于while和do-while循环,跳过循环体其余语句,但转向循环继续条件的判定。、说明break能用于循环语句和switch语句中,而continue只能用于循环语句中。break是终止整个循环的执行,而continue只是完毕本次循环。循环嵌套时,break和continue只影响包含它们的最内层循环,与外层循环无关。练习5_12 求Fibonacci数列前12项的和。解:每月新增兔子数Fn=1,1,2,3,5,8,13,21,34,斐波那契数列月份n 兔子数Fn 1 F1=1 2 F2=1

44、 3 F3=2=F1+F2 4 F4=3=F2+F3 n Fn=Fn-1+Fn-2 由此可写出递推公式1 (n=1)F(n)= 1 (n=2)Fn-1+ Fn-2 (n>3) 程序代码如下:*include<stdio.h>void main() int F1=1,F2=1; int F,S=2,n=3;while(n<=12) F=F1+F2; F1=F2; F2=F; S=S+F; n+;printf("S=%dn",S); 第六章 数组数组是数目固定、类型一样的假设干变量的有序集合。一、一维数组1、一维数组的定义:数据类型数组名常量表达式, 数

45、组名2常量表达式2;n “数据类型是指数组元素的数据类型。n 数组名,与变量名一样,必须遵循标识符命名规那么。n “常量表达式必须用方括号括起来,指的是数组的元素个数又称数组长度,它是一个整型值,其中可以包含常数和符号常量,但不能包含变量。n 数组元素的下标,是元素相对于数组起始地址的偏移量,所以从0开场顺序编号。n 数组名中存放的是一个地址常量,它代表整个数组的首地址。同一数组中的所有元素,按其下标的顺序占用一段连续的存储单元。注:数组名能与其他变量名一样,数组名后是用方括号括起来的常量表达式,不能和圆括号。2、数组元素的引用引用数组中的任意一个元素的形式:数组名下标表达式n “下标表达式可

46、以是任何非负整型数据,取值X围是0元素个数-1。n 1个数组元素,实质上就是1个变量,它具有和一样类型单个变量一样的属性,可以对它进展赋值和参与各种运算。n 在C语言中,数组作为1个整体,不能参加数据运算,只能对单个的元素进展处理。、一维数组元素的初始化n 初始化格式:数据类型数组名常量表达式初值表n 如果对数组的全部元素赋以初值,定义时可以不指定数组长度系统根据初值个数自动确定。如果被定义数组的长度,与初值个数不同,那么数组长度不能省略。n “初值表中的初值个数,可以少于元素个数,即允许只给局部元素赋初值。3、数组元素的存储数组元素在计算机内存中存储时,占据一片连续的存储空间,数组名代表数组

47、元素占据的内存空间的首地址。由于数组各元素的数据类型一样,因此在数组中,每一个元素在内存里占用的存储单元数都是一样的。练习6_1:从键盘上任意输入n个整数,用冒泡法按从小到大地排序,并在屏幕上显示出来。解:冒泡法排序的根本思想:从第一个数开场依次对相邻两数进展比拟,如次序对那么不做任何操作;如次序不对那么使这两个数交换位置。第一遍的N-1次比拟后,最大的数已放在最后,第二遍只需考虑N-1个数,以此类推直到第N-1遍比拟后就可以完成排序。*include "stdio.h"*define NUM 10/*定义符号常量数据个数N*/main() int dataNUM;/*定义

48、1个1维整型数组data*/ int i,j,temp;/*定义循环变量和临时变量*/ printf("请输入10个整数:n");for(i=0; i<NUM; i+) scanf("%d", &datai); /*冒泡法排序*/ for(i=0; i<NUM-1; i+) /*外循环:控制比拟趟数*/ for(j=NUM-1; j>i; j-) /*内循环:进展每趟比拟*/ if(dataj<dataj-1) /*如果dataj大于dataj-1,交换两者的位置*/ temp=dataj; dataj=dataj-1;

49、dataj-1=temp; ; /*输出排序后的数据*/ printf("n排序后的数据:n"); for(i=0; i<NUM; i+) printf("%d ",datai); printf("n");练习6_2以下对一维数组正确赋初值的语句是A、int a10= "I am a student"; B、char a="I am a student";C、int a3=1,3,5,7,9,1; D、char a3= " I am a student"。练习6_3、在

50、下面关于一维数组的定义中,有语法错误的选项是A、intx=1,2,3,4,5; B、intx5=0;C、intx5; D、 intx;答案:D练习6 _4青年歌手参加歌曲大奖赛,有10个评委对他进展打分,试编程求这位选手的平均得分去掉一个最高分和一个最低分,并在屏幕上输出去掉的最高分和去掉的最低分及这位选手的最后得分。解:*include <stdio.h>main()int i,j,min;float temp,ave=0;float a11;printf("n输入评委所打的分数:n");for(i=1;i<=10;i+)scanf("%f&q

51、uot;,&ai);/*选择法排序*/for(i=1;i<=9;i+)/*外循环:控制比拟趟数*/min=i;for(j=i+1;j<=10;j+) /*内循环:每趟比拟的次数*/if(amin>aj)min=j;temp=ai;ai=amin;amin=temp;for(i=2;i<=9;i+) /*注意i值的变化X围*/ave=ave+ai;printf("去掉一个最低分:%6.1f分n",a1);printf("去掉一个最高分:%6.1f分n",a10);printf("选手最后得分:%6.1f分n&quo

52、t;,ave/8);二、二维数组1、二维数组的定义:数据类型数组名行常量表达式列常量表达式, 数组名2行常量表达式2列常量表达式2;n 数组元素在内存中的排列顺序为“按行存放,即先顺序存放第一行的元素,再存放第二行,以此类推。n 设有一个m*n的数组x,那么第i行第j列的元素xij在数组中的位置为:i*n+j注意:行号、列号均从0开场计数。2、二维数组元素的引用引用2维数组元素的形式为:数组名行下标表达式列下标表达式n “行下标表达式和“列下标表达式,都应是整型表达式或符号常量。n “行下标表达式和“列下标表达式的值,都应在已定义数组大小的X围内。假设有数组x34,那么可用的行下标X围为02,

53、列下标X围为03。n 对根本数据类型的变量所能进展的操作,也都适合于一样数据类型的2维数组元素。3、二维数组元素的初始化n 按行赋初值数据类型数组名行常量表达式列常量表达式第0行初值表,第1行初值表,最后1行初值表;赋值规那么:将“第0行初值表中的数据,依次赋给第0行中各元素;将“第1行初值表中的数据,依次赋给第1行各元素;以此类推。n 按2维数组在内存中的排列顺序给各元素赋初值数据类型数组名行常量表达式列常量表达式初值表;赋值规那么:按2维数组在内存中的排列顺序,将初值表中的数据,依次赋给各元素。如果对全部元素都赋初值,可以省略“行数,但不能省略“列数。注意:只能省略“行数。练习6_5 执行

54、int a3=1,3,5,7,9,11;语句后,a10的值是7。练习6_6 以下对二维数组a进展正确初始化的是 Aint a23=1,2,3,4,5,6; Bint a3=1,2,3,4,5,6;Cint a2=1,2,3,4,5,6; Dint a2=1,2,3,4;三、字符数组1、字符数组的定义n 1维字符数组,用于存储和处理1个字符串,其定义格式与1维数值数组一样。n 2维字符数组,用于同时存储和处理多个字符串,其定义格式与2维数值数组一样。2、字符数组的初始化字符数组的初始化,可以通过为每个数组元素指定初值字符来实现。3、字符数组的引用字符数组的逐个字符引用,与引用数值数组元素类似。n 字符数组的输入除了可以通过初始化使字符数组各元素得到初值外,也可以使用getchar()或scanf()函数输入字

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论