收藏 分销(赏)

C语言复习提纲.doc

上传人:二*** 文档编号:4511763 上传时间:2024-09-26 格式:DOC 页数:31 大小:188KB 下载积分:5 金币
下载 相关 举报
C语言复习提纲.doc_第1页
第1页 / 共31页
本文档共31页,全文阅读请下载到手机保存,查看更方便
资源描述
. . 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〕和系统提供的库文件〔.lib〕中的某些代码连接在一起,生成一个可执行文件〔.exe〕。 4、执行:执行生成的可执行代码,并输出结果。 5、调试:是将编制的程序投入实际运行前,用手工或编译程序等方法进展测试,修正语法错误和逻辑错误的过程。 ▲三、构造化程序设计的根本概念 1、概念 以模块化设计为中心,将待开发的软件系统划分为假设干个相互独立的模块,将原来较为复杂的问题化简为一系列简单模块的设计,任何模块都可以使用一些根本的构造来实现,任何复杂的程序,都可以使用这些根本构造按一定的顺序组合起来,这些根本构造的特点都是只有一个入口、一个出口,这样的程序设计方法称为构造化程序设计。 2、根本思想 构造化程序设计的根本思想是采用"自顶向下,逐步细化、模块化设计、构造化编码"的程序设计方法和"单入口单出口"的控制构造。 3、三种根本构造 ⑴顺序构造⑵选择构造⑶循环构造 4、三种根本构造的特点 ⑴只有一个入口⑵只有一个出口 ⑶每一个根本构造中的每一局部都有时机执行到 ⑷构造内不存在“死循环〞 5、设计原那么 ⑴自顶向下⑶逐步细化⑶模块化设计 ⑷构造化编码 ▲四、C程序的根本组成: C程序是由假设干个函数构成的,至少有一个主函数main(),main()的位置可以任意,其他各函数在程序中的前后位置也是可以任意的。程序的执行总是从主函数开场,在主函数中完毕。主函数是可以调用其他任何非主函数的函数,任何非主函数也可以调用其它任何非主函数。 C程序的根本组成:声明区、主程序区、函数定义区。 1、声明区 处在程序文件的所有函数的外部,一般包含:包含头文件、宏定义、类定义、构造体定义、函数声明、全局变量声明、条件编译等。 2、主程序区 主程序以main()函数开场,main()函数〔主函数〕是程序运行时的入口,包含局部变量的声明、函数调用、一般运算、构造控制、对象与构造的处理、文件处理等。 3、函数定义区 函数的定义包含函数说明和函数体两局部。 4、注释 //或/* */为注释,不能嵌套 不产生编译代码,不影响程序的执行效率。 ▲五、标识符 1、标识符的定义:用来对变量、符号常量名、函数、数组、类型等命名的有效字符序列统称为标识符。 2、标识符的命名规那么:由字母、数字或下画线组成,并且第1个字符必须为字母或下画线。 注意:标识符区分大小写,即大写字母和小写字母的通常意义不同,且不能与关键字重名。 练习1_1:以下变量标识符哪些是正确的,哪些是不正确的? a3bcifa!bc _abc abc_3abca_bc 3abc 3、标识符分类:关键字、预定义标识符、用户自定义标识符。 第二章 数据类型、运算符和表达式 图2_1 C语言的数据类型 数据类型 根本类型 空类型〔无值类型〕void 构造类型 指针类型 实型〔浮点型〕 联合型类型union 单字符型char 整型int 单精度型float 双精度型double 字符型 宽字符型w-char 逻辑型bool 类类型class 枚举类型enum 构造类型struct 数组类型 ▲一、C语言的数据类型 C语言中根本数据类型包括整型、实型、字符型、枚举类型,构造类型有数组、构造体、共用体等。 ⑴、根本数据类型〔见P17〕 ⑵、构造类型又称为组合类型,它是由根本类型按照某种规那么组合而成的。 n 数组:是由具有一样数据类型的元素组成的集合。 n 构造体:是由不同的数据类型构成的一种混合的数据构造,构成构造体的成员的数据类型一般不同,并且在内存中分别占据不同的存储单元。 n 共用体:是类似于构造体的一种构造类型,与构造体不同的是构成共同体的数据成员共用同一段内存单元。 n 枚举:是将变量的值一一列举出来,变量的值只限于列举出来的值的X围内。 ⑶、指针类型变量用于存储另一变量的地址,而不能用来存放根本类型的数据。它在内存中占据一个存储单元。 ⑷、类是一种数据类型,它定义的是一种对象类型,由数据和方法组成,描述了属于该类型的所有对象的性质。 二、常量和变量 ⑴、常量:在程序运行的整个过程中,其值始终保持不变的量。 n 整型常量:表示形式有十进制、八进制〔以0开头〕和十六进制〔以0x或0X开头〕。整型常量可以后缀字母L〔或l〕表示长整数,后缀字母U〔或u〕表示无符号整数。 n 实型常量〔浮点型常量〕:表示形式有一般形式和指数形式。实型常量缺省为double型〔双精度型〕,如后缀f或F,那么为float型〔单精度型〕。 n 字符常量:用单撇号括起来的一个字符。如'A','*'等。 转义字符:用反斜杠引导的,具有特定含义的字符(见P22表2-4),如 '\n','\367','\x8a'。 注:C语言字符集中的任何一个字符均可用转义字符来表示。 n 字符串常量:用双撇号括起来的字符序列。如"student","XXXX"等。 n 布尔常量:false,true。 n 符号常量: ² #define 宏名 常数 练习2_1:以下哪些是合法的常量: ①12.7f②0986③0986.012④、0625L⑤87U ⑥-0x98C2⑦01a⑧-6.87E-2 ⑨1.2e0.5 ⑩E-3  ⑾0xFF ⑿2L⒀'\72' ⒁160 ⒂-0xffff ⒃5E2.0⒄-0xcdf⒅1.3E⒆2E0⒇0668 〔21〕011 〔22〕0xe 〔23〕-01 〔24〕-0x48a 〔25〕0x ⑵变量:指程序在运行时其值可改变的量。 n 变量应先定义〔声明其类型和名称〕后使用; n 变量定义的一般形式为: u < 数据类型 > <变名1>,<变名2>,…,<变名n>; n 在定义一个变量的同时,也可以给它赋以初值。 练习2_2以下正确的变量标识符是 ①3abc②$amount③Num_of_Student④if⑤a!bc ⑥_above ⑦_abc⑧a>b⑨sin ⑩day ▲三、运算符和表达式 1、算术运算符和算术表达式 注意:int i=1.2*3; //结果为3,而不是3.6。 int i=5/3结果为1。 表达式17/5的结果是3,表达式17%5的结果是2。 2、赋值运算符和赋值表达式 注意: n 赋值运算符的结合性是从右至左的 n 复合赋值运算符:int a=12; a+=a-=a*=a;〔a=a+(a=a-(a=a*a)),结果为0〕 注意: 在C语言中,定义int a=b=c=3;是错误的,而定义int a,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)>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。 练习2_8设有定义:int x=1,y=-1;那么执行语句printf("%d\n",(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-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;a^b=3;~b=-7;b<<2=24;b>>2=1。 注:在位运算中,操作数左移三位,其结果相当于操作数乘以8。 8、逗号运算符 表达式1, 表达式2, ……, 表达式n 注意: 自左至右,依次计算各表达式的值,“表达式n〞 的值即为整个逗号表达式的值。如:a = 3 * 5, a * 4, a + 5的值为20。 ▲四、运算符的优先级与结合性 1、所谓结合性是指,当一个操作数两侧的运算符具有一样的优先级时,该操作数是先与左边的运算符结合,还是先与右边的运算符结合。 自左至右的结合方向,称为左结合性。反之,称为右结合性。 结合性是C语言的独有概念。除单目运算符、赋值运算符和条件运算符是右结合性外,其它运算符都是左结合性。 2、表达式求值 n 按运算符的优先级上下次序执行。例如,先乘除后加减。 n 如果在一个运算对象〔或称操作数〕两侧的运算符的优先级一样,那么按C语言规定的结合方向〔结合性〕进展。 例如,算术运算符的结合方向是“自左至右〞,即:在执行“a – b + c〞时,变量b先与减号结合,执行“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 如果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()函数格式字符 格式转换字符 含义 举例 %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.235413 %g,%G 按照%e,%f输出宽度较短的格式输出,不输出无意义的0 float x=23.240; printf("%g",x);//23.24 n 修饰符: 表3_2 printf()函数修饰符 修饰符 功能 例如 m 数据最小宽度. >m,正常输出;<m ,左补空格. int a=36;printf("a=%5d\n",a); //□□□36 .n 对实数,表示输出n位小数;对字符串,表示截取的字符个数 float a=123.456; printf("a=%8.2f\n",a);//□□123.46 – 输出的数值靠左端,右边补空格。 printf("s=%-5.3s","guangdong") //gua 0 小于指定宽度左边补0。 int b=789; printf("b=%05d\n",b);//00789 如:在C程序的格式输出中,%d表示输出十进制整数,%6.2f表示输出长度为6位,有2位小数的实数。printf("s=%-5.3s","student");的输出结果是s=stu 。 2、格式化输入——scanf()函数 scanf()函数的一般格式 scanf("格式字符串", 输入项首地址表); 注: ①格式输入函数scanf()可以从键盘上接收不同数据类型的数据。 ②格式化输出函数〔printf()〕和格式化输入函数〔scanf()〕都包含在头文件“stdio.h〞中。 n 格式字符串。格式字符串可以包含3种类型的字符:格式指示符、空白字符〔空格、Tab键和回车键〕和非空白字符〔又称普通字符〕。 格式指示符与printf()函数的相似,空白字符作为相邻2个输入数据的缺省分隔符,非空白字符在输入有效数据时,必须原样一起输入。 n 输入项首地址表──由假设干个输入项首地址组成,相邻2个输入项首地址之间,用逗号分开。 输入项首地址表中的地址,可以是变量的首地址,也可以是字符数组名或指针变量。 变量首地址的表示方法: &变量名 其中“&〞是地址运算符。 n 数据输入操作 ² 如果相邻2个格式指示符之间,不指定数据分隔符〔如逗号、冒号等〕,那么相应的2个输入数据之间,至少用一个空格分开,或者用Tab键分开,或者输入1个数据后,按回车,然后再输入下1个数据。 例如,scanf("%d%d",&num1,&num2); 假设给num1输入12,给num2输入36,那么正确的输入操作为:12□36↙ 或者:12↙ 36↙ 注:使用“↙〞符号表示按回车键操作,在输入数据操作中的作用是,通知系统输入操作完毕。 ² “格式字符串〞中出现的普通字符〔包括转义字符形式的字符〕,务必原样输入。 例如,scanf("%d,%d",&num1,&num2); 假设给num1输入12,给num2输入36,正确的输入操作为:12,36↙ 练习3_1已有定义double d,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++ -1;printf("%d %d\n", m ,n); 输出结果是3,1。 第四章 选择构造程序设计 ▲一、算法 1、算法的概念:算法是指为解决一个问题而采取确实定的、有限的方法和步骤。 2、算法的描述方法最常用的有自然语言、流程图、N-S流程图、PAD图和伪代码等。 ▲二、顺序构造程序设计 顺序构造是构造化程序设计中最简单、最常见的一种程序构造。顺序构造中的语句是按照书写的先后次序执行的,并且每个语句都会被执行到。 练习4_1编写一个程序,从键盘上输入一个学生5门课的成绩,计算出该学生的总成绩和平均成绩,并用自然语言描述算法。 解:设变量 a、b、c、d、e分别表示学生5门课的成绩,sum表示总成绩,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("总成绩=%0.2f,平均成绩=%.2f\n",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,%f",&a,&b,&h); area=(a+b)*h/2.0; printf("梯形的面积为%0.2f\n",area); } 练习4_3编写一个程序,从键盘输入圆的半径,计算并输出圆的周长和面积〔保存两位小数〕,用伪代码表示出算法。 解:设用变量r 、length、area分别表示圆的半径、周长和面积,那么用伪代码表示算法如下: BEGIN input r length=2*3.14*r area=3.14*r*r print length,area END 程序如下: #include <stdio.h> #define PI 3.14 main() { float r,length,area; printf("请输入圆的半径\n"); scanf("%f",&r); length=2*PI*r; area=PI*r*r; printf("圆的周长为%0.2f\n",length); printf("圆的面积为%0.2f\n",area); } ▲三、选择构造程序设计 1、if语句 ⑴、if语句的一般格式 if(表达式) {语句组1;} [else {语句组2;} ] n if语句中的“表达式〞必须用“(〞和“)〞括起来。表示程序执行的条件,常用关系运算符、逻辑运算符等表示的条件表达式,其结果只有两个值“1”或“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,否那么直接转向执行下一条。 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元,试编写一道计算行李托运费的程序。 解:/*程序功能:计算行李托运费*/ #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); } 2.switch语句 ⑴、switch语句的一般形式 switch(表达式) { case 常量表达式1:语句组;break; case 常量表达式2:语句组;break; ...... case 常量表达式n:语句组;break; [default:语句组;[break; ]] } ⑵、执行过程 n 当switch后面“表达式〞的值,与某个case后面的“常量表达式〞的值一样时,就执行该case后面的语句〔组〕;当执行到break语句时,跳出switch语句,转向执行switch语句的下一条。 n 如果没有任何一个case后面的“常量表达式〞的值,与“表达式〞的值匹配,那么执行default 后面的语句〔组〕。然后,再执行switch语句的下一条。 ⑶说明 n switch后面的“表达式〞,可以是int、char和枚举型中的一种。 n 每个case子句后面的“常量表达式〞的值,必须各不一样,否那么会出现相互矛盾的现象〔即对表达式的同一值,有两种或两种以上的执行方案〕。 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,%d\n",x,y,z); 结果:7,8,7 练习4_6以下程序的输出结果是 #include <stdio.h> void main() { int m=5; if(m++>5) printf("%d\n",m); else printf("%d\n",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=%d\n",x,y); } 结果x=2,y=1 第五章 循环构造程序设计 ▲一、循环程序设计 1、while语句 ⑴、一般格式 while(循环继续条件) { 循环体语句组;} ⑵、执行过程 ①求解“循环继续条件〞表达式。如果其值为非0,转②;否那么转③。 ②执行循环体语句组,然后转①。 ③执行while语句的下一条。 练习5_1:/*程序功能:求1~100的累计和*/ #include <stdio.h> void main() { int i=1,sum=0; /*初始化循环控制变量i和累计器sum*/ while( i<=100 ) { sum += i;/*实现累加*/ i++;/*循环控制变量i增1*/ } printf(“sum=%d\n〞,sum); } 程序运行情况如下: sum=5050 2、do-while语句〔直到型循环〕 ⑴、一般格式 do { 循环体语句组; } while(循环继续条件);/*本行的分号不能缺省*/ 当循环体语句组仅由一条语句构成时,可以不使用复合语句形式。 ⑵、执行过程 ①执行循环体语句组。 ②计算“循环继续条件〞表达式。如果“循环继续条件〞表达式的值为非 0〔真〕,那么转向①继续执行;否那么,转向③。 ③执行do-while的下一条语句。 ⑶、do-while循环语句的特点是:先执行循环体语句组,然后再判断循环条件。 因此do......while语句不管条件是否成立,至少要执行一次循环体。 练习5_2:用do-while语句求解1~100的累计和。 /*程序功能:求1~100的累计和*/ main() { int i=1, sum=0; /*定义并初始化循环控制变量,以及累计器*/ Do { sum += i; /*累加*/ i++; } while(i<=100);/*循环继续条件:i<=100*/ printf(“sum=%d\n〞,sum); } 3、for语句 ⑴、for语句的一般格式 for([变量赋初值];[循环继续条件];[循环变量增值]) { 循环体语句组;} ⑵、for语句的执行过程 ①求解“变量赋初值〞表达式。 ②求解“循环继续条件〞表达式。如果其值非0,执行③;否那么,转至④。 ③执行循环体语句组,并求解“循环变量增值〞表达式,然后转向②。 ④执行for语句的下一条语句。 ⑶、说明 ①“变量赋初值〞、“循环继续条件〞和“循环变量增值〞局部均可缺省,甚至全部缺省,但其间的分号不能省略。 ②当循环体语句组仅由一条语句构成时,可以不使用复合语句形式。 ③“循环变量赋初值〞表达式,既可以是给循环变量赋初值的赋值表达式,也可以是与此无关的其它表达式〔如逗号表达式〕。 例如,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的阶乘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 ! = %ld\n", n, fact); } 程序运行情况如下: Input n: 5↙ 5 ! = 120 练习5_4 有以下程序 #include <stdio.h> void main() { int a=10,b=10,i; for(i=0;a>8;b=++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"); }答: 12 24 36 48 4、循环的比拟 ⑴、While和 for都是先判断后循环,而do-while是先循后判断。即do-while语句在条件不成立时循环体也要被执行一次。 ⑵、while和do-while语句的条件表达式只有一个,只起到控制循环完毕的作用,循环变量的初值等都用其他语句完成;for语句那么有3个表达式,不仅能起到控制循环完毕的作用,还可给循环变量赋初值。 练习5_7对于以下程序段 int m=-1; do { m=m*m; } while(!m); 循环执行的次数为多少?答:1次。 练习5_8对于以下程序段 int k=5;while (k=0) k=k-1; printf("%d\n",k);,循环体执行的次数为多少次?答: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:编程: 输出以下图形 * *** ***** ******* ********* 解:/*程序功能:打印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:强行完毕循环,转向执行循环语句的下一条语句。 ②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 3 F3=2=F1+F2 4 F4=3=F2+F3 … n Fn=Fn-1+Fn-2 由此可写出递推公式 1 (n=1) F(n)= 1 (n=2) F〔n-1〕+ F〔n-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=%d\n",S); } 第六章 数组 数组是数目固定、类型一样的假设干变量的有序集合。 ▲一、一维数组 1、一维数组的定义:数据类型数组名[常量表达式][, 数组名2[常量表达式2]……]; n “数据类型〞是指数组元素的数据类型。 n 数组名,与变量名一样,必须遵循标识符命名规那么。 n “常量表达式〞必须用方括号括起来,指的是数组的元素个数〔又称数组长度〕,它是一个整型值,其中可以包含常数和符号常量,但不能包含变量。 n 数组元素的下标,是元素相对于数组起始地址的偏移量,所以从0开场顺序编号。 n 数组名中存放的是一个地址常量,它代表整个数组的首地址。同一数组中的所有元素,按其下标的顺序占用一段连续的存储单元。 注:数组名能与其他变量名一样,数组名后是用方括号括起来的常量表达式,不能和圆括号。 2、数组元素的引用 引用数组中的任意一个元素的形式:数组名[下标表达式] n “下标表达式〞可以是任何非负整型数据,取值X围是0~〔元素个数-1〕。 n 1个数组
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服