C语言程序设计整本书课件完整版电子教案(最新)_第1页
C语言程序设计整本书课件完整版电子教案(最新)_第2页
C语言程序设计整本书课件完整版电子教案(最新)_第3页
C语言程序设计整本书课件完整版电子教案(最新)_第4页
C语言程序设计整本书课件完整版电子教案(最新)_第5页
已阅读5页,还剩236页未读 继续免费阅读

下载本文档

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

文档简介

1、CC语言程序设计第一章 C语言概述解读课程名程序:为了让计算机完成某项任务而编写的逐条执行的指令序列,每一条指令对应计算机能执行的最基本操作。计算机语言经历机器语言、汇编语言、高级语言等阶段。C语言是一种结构化的计算机高级语言,于1973年诞生,是最合适的计算机编程入门语言。语法和算法编写程序必须具备两个基本条件:一是掌握一门计算机高级语言的规则(语法),二是要分析出解决问题的方法和步骤(算法)。算法是灵魂,语法是工具,二者缺一不可。课程目标牢固掌握C语言的基本语法掌握基本的分析问题和利用计算机解决问题的方法(算法)具备初步的高级语言程序设计能力,会读、会编、会调试程序期末通过省二级C语言考试

2、在各类软件大赛中获奖(精英之路) 学习要求课前认真预习上课认真听讲,保持头脑清醒,思维活跃多抄写、默写课堂示例勤思考,多练习,认真、独立地完成课后作业重视上机实践编辑和执行C程序编辑:选择适当的编辑程序,将C语言源程序通过键盘输入到计算机中,并以文件的形式存入到磁盘中(.c)编译:即将源程序翻译成机器语言程序的过程。编译出来的程序称为目标程序(.obj)连接:编译后生成的目标文件经过连接后生成最终的可执行程序(.exe)执行:得到程序的运行结果。程序书写规范一条语句占一行。语句的书写要有层次,低层次的语句要比高层次的语句向右缩进若干字符。 写在一行的末尾, 和该层次语句的第一个字母对齐,并单独

3、占一行。技巧:为避免遗漏必须配对使用的符号,例如函数体的起止标识符、圆括号()、注释符号/* */ 等等,在输入时,可连续成对输入这些起止标识符,然后再在其中进行插入来完成内容的编辑。C程序结构特点C程序是由函数构成的。 一个函数由两部分组成: 函数头部和函数体。 C程序中有且只能有一个main函数。main函数通常位于程序之首, 实际上它可以位于程序的开头、 最后及任意函数之间, 但不管在什么位置,一个C程序总是从main函数开始执行,从main函数结束。每条语句以分号结束,分号是语句的必要组成部分。C程序结构特点C程序书写格式自由, 一行内可以写几个语句, 一个语句可以分写在多行上(每一行

4、的结尾要输入续行符 ),但为了增强程序可读性,我们一般一行只写一条语句。C语言本身不提供输入输出语句,输入和输出的操作由库函数scanf和printf等函数来完成。如程序中使用到这些函数,在程序开头必须包含#include。可以用/* */(多行注释)或 /(单行注释) 对C程序中的任何部分作注释, 它可增加程序的可读性。 CC语言程序设计第二章 顺序结构整型浮点型字符型不同进制的整型常量十进制形式 由09十个数码组成,且第一个数字不能为0。如80、-69。八进制形式 以数字0作前缀,由07八个数码组成。如0123、-057。 十六进制形式 以“0 x”或“0X”作为前缀,由09、af或AF十

5、六个数码组成。如0X53、0 x12f、0 xFFE。 指数形式的浮点型常量形式如3.2e5、-7.6E3、0.125e-2、-345.6E-12,分别表示3.2105、-7.6103、0.12510-2、-345.610-12。字母e或E之前必须有数字,之后必须为整数。如e3、3.2E1.5都不是合法的指数形式。转义字符以字符开头的字符序列,称之为转义字符。使用转义字符的原因有两点:某一些特定的字符在C中具有特殊用途。如反斜杠(),它是转义字符的前缀;再如双引号(),被定义为字符串的定界符。如果想要在屏幕上输出这些字符,只能用转义字符的形式,直接输出程序会出错。用转义字符来表示ASCll字符

6、集里的控制字符。如n,这是一种在屏幕上无法显示的“控制字符”,在程序中也无法用一个普通的字符来表示,只能采用这种特殊形式。 符号常量可以在程序中用一个标识符代表常量,称为符号常量。在使用符号常量后,如需要修改程序中多次用到的同一个常量,能做到“一改全改”。 符号常量不占内存,只是一个临时符号,代表一个常量,所以不能对符号常量赋值。程序中若出现PI=3.14159;这样的语句是错误的。若要改变符号常量所代表的常量,只能通过#define指令重新定义。为与变量相区分,习惯上用大写字母表示符号常量。 变量的定义在编程时,会处理一些固定数据(常量),我们通常不会直接操作它们,而是先把这些数据保存到相应

7、数据类型的变量中,再通过变量名引用、处理它们。变量实际代表了内存中的一块存储区域,我们给这块存储区域起个名字,就是变量名,存放在这块存储区域中的数据,就是变量值。 10001002100410061008100A100C100E1010int a,b,sum; /声明a和b两个变量a=123; /给变量a赋值123b=456; /给变量b赋值456 /进行a+b运算,并把结果存放在sum中sum=a+b; /把a中原来的值加上1后再重新赋给变量aa=a+1; ab123456124sum579变量的声明和初始化 变量的声明 向内存申请一个指定类型的存储空间,这样才能存储变量的值。变量只有先声明

8、才能使用。变量的声明必须放在函数的开头,否则出错。 int m; float a,b,sum; 变量的初始化 在声明变量的同时给变量一个初值。 int m=5; float a=2.5,b=6.2,sum;变量的赋值和调用 变量的赋值 可以多次赋值,但变量的当前值只有1个,为最后一个赋值所得到的值。 m=98; m=m+3; 变量的调用 变量在声明并赋值后,可以在程序中通过变量名来操作变量中保存的数据。 sum=a+b; printf(a+b=%dn,sum);变量的命名规则 变量名只能由下划线、数字09与大小写字母az,AZ构成。 变量的首个字符必须是字母或下划线,而不能是数字或其它符号。

9、区分大小写字母,如name和Name是两个不同的变量。 不能使用系统关键字作为变量名。 尽量作到“见名知义”,例如max、score等,而不用象abc、x1、y2等标识符。变量的命名规则关键字是指系统预定义的保留标识符,又称之为保留字。它们有特定的含义,不能再作其它用途使用。ANSI C定义的关键字共32个。C语言的关键字都是小写的。 数据类型转换C语言中有3种形式的数据类型转换自动类型转换赋值转换强制类型转换自动类型转换同种数据类型的数据做算术运算时,结果类型不变;当一个运算符两边的数据类型不同时,则先遵循规则自动进行类型转换,使二者具有同一种类型,然后进行计算。因此整型、实型、字符型数据间

10、可以进行混合运算。 赋值转换赋值转换是在作赋值运算时发生的。如果赋值运算符两侧的类型一致,则直接进行赋值;如果两侧的类型不一致(但都是整型,浮点型或字符型),在赋值时会进行类型转换。强制类型转换有时为了达到某种目的,需要将一个表达式的类型转变成所需的类型,这时就要用到强制类型转换运算符。其一般形式为: (数据类型名) (表达式) (int)a 将变量a强制转换为int型 (double)(x+y) 将x+y的值强制转换为double型强制转换运算符的使用#include stdio.h void main() int a=2; float b=3.6; printf(“%dn”,a+b);pr

11、intf(“%dn”,a+(int)b);a+b的计算结果为float型数据,无法用%d显示 printf函数的一般格式printf(“格式控制串”,输出列表)例如:printf(”i=%d,c=%cn”,i,c);普通字符printf函数 printf函数的一般格式printf(“格式控制串”,输出列表)例如:printf(”i=%d,c=%cn”,i,c);printf函数格式声明 printf函数的一般格式printf(“格式控制串”,输出列表)例如:printf(”i=%d,c=%cn”,i,c);printf函数可以是常量、变量或表达式 scanf函数的一般格式scanf(“格式控制

12、串”,地址列表)例如:scanf(”a=%d,b=%d”,&a,&b);scanf函数普通字符,需要原样输入 scanf函数的一般格式scanf(“格式控制串”,地址列表)例如:scanf(”a=%d,b=%d”,&a,&b);scanf函数格式字符 scanf函数的一般格式scanf(“格式控制串”,地址列表)例如:scanf(”a=%d,b=%d”,&a,&b);scanf函数&为“取地址符”,不可省略对于 scanf(“%c%c”,&a,&b);输入 1 3 13 使用scanf函数 对于 scanf(“%d%d”,&a,&b); 输入 1 3 13 还可以用Tab键和回车键分隔scan

13、f函数对于 scanf(“a=%d,b=%d”,&a,&b);输入 1,3 a=1,b=3 使用scanf函数 对于 scanf(“%d,%d”,&a,&b); 输入 1 3 1,3 scanf函数putchar()函数putchar函数可以输出显示一个字符putchar函数的一般格式 putchar( 单个字符); char ch=a; putchar(ch); putchar(a); putchar(97); putchar(141); putchar(x61); getchar()函数getchar函数可以从键盘接收一个字符,该函数对键盘上的任何键都是有效的。getchar函数的一般格式

14、 getchar(); /无参函数 char ch=getchar();运算符C语言中共有13类45个运算符 学习运算符要注意的问题运算符的功能运算符与操作对象的关系: 操作数的个数(一元、二元、三元); 操作数的类型(如求余运算符%要求操作数是整型);运算符的优先级;运算符的结合性:左结合、右结合;运算结果的数据类型:不同类型数据运算将发生类型转换 表达式变量、常量与符号的组合称为表达式。表达式中的符号称为运算符,运算符作用的变量、常量称为操作数。 printf(“%dn”,num+3); a+b num3=num1 ch=ch-32 32 (a+b)/(a-b) 32&53+1算术运算符

15、基本算术运算符算术运算符+和-符号在C语言中有双重含义,既可以表示正号和负号,也可以表示加号和减号。在表示正号和负号时,只能在运算符的一侧出现一个操作数,我们称之为一元运算符,又称单目运算符。在表示加号和减号时,要求在运算符两侧各有一个操作数,我们称之为二元(双目)运算符。*、/、%也是二元运算符。两个整数进行算术运算,结果仍为整数。取余运算符“%”要求两边的操作数必须为整型。 如:5%3.2 18.0%7.0 错误 其它运算符操作数的类型可以是任意的。 算术运算符自增、自减运算符 自增运算符“+”和自减运算符“-”也是一元运算符,作用是使操作数的值加1或减1。 如:i+ 相当于 i=i+1

16、-i 相当于 i=i-1+和-运算符的操作数只能是变量,不能是常量、函数或表达式。如2+、(a+b)+都是错误的表达式。 设已作声明:int i=6,a;算术运算符自增、自减运算符算术运算符的优先级和结合性优先级:当一个运算对象两侧的运算符的优先级别不同时,应遵循优先级高的先处理的规则。 结合性:当一个运算对象两侧的运算符的优先级别相同时,应遵循运算符的结合方向。赋值运算符C语言中赋值运算符为“=”,它的一般形式为: 变量=表达式赋值表达式的作用是将赋值号=右边表达式的值赋给左边的变量。其中,表达式可以是常量、变量或C语言中任意合法表达式。 如: sum=a+b a=8 注意:赋值运算符左边只

17、能是变量,不能是常量或表达式,如2=a、a+b=c都是错误的。复合赋值运算符C语言允许在赋值运算符“=”之前加上算术运算符或位运算符以构成复合的赋值运算符。复合赋值运算符【问题】x*=y+5是等价于x=x*y+5还是x=x*(y+5)? 【分析】因为+的优先级比*=高,所以先计算y+5,再进行复合赋值运算。因此表达式与x=x*(y+5)是等价的。 CC语言程序设计第三章 分支结构分支结构【问题】编程计算一个分段函数:顺序、分支(条件、选择)、循环是结构化程序中三种基本结构。分支结构是根据判定所给条件是否满足,从而决定程序执行哪些语句。单分支if语句单分支 if 语句的基本形式为: if (表达

18、式) 语句体 双分支if语句双分支 if 语句为 if-else 形式,语句的结构为: if (表达式) 语句体1 else 语句体2 if语句语法注意if语句的条件表达式一般是逻辑表达式或关系表达式,表达式的值非0,即为“真”;表达式值为0,即为“假”。语句体中可包含1条或多条语句,如只有1条语句,则花括号可以省略,但从语法规范考虑,最好不要省略。关系运算符 小于 大于 = 大于或等于 = 等于 != 不等于 优先级:关系运算符的优先级低于算术运算符,高于赋值运算符。其中、=、=优先级高于= =和!= 的优先级。结合性:左结合关系运算符关系运算符都是二元运算符,其结果为int类型的值。当关系

19、成立时,关系表达式的值为1,关系不成立时,值为0。a50 值为3+2 = 2*3 值为526 值为0101-3-2b?a:b求值规则:计算表达式1的值,若表达式1的值为真,则以表达式2的值作为整个条件表达式的值,否则以表达式3的值作为整个条件表达式的值。条件运算符max=ab?a:b if (ab) max=a; else max=b;等价逻辑运算符【问题】键盘输入学生的原始成绩,如果在80到100之间,则把成绩打8折,然后输出成绩;否则给出错误信息。if(80=score=80 & scoreb | cd 等价于 (ab) | (cd) !a= =b& cd 等价于 (!a) = =b)&(

20、cd)结合性:逻辑运算符中,非运算符(!)的结合性为右结合; 与运算(&)和或运算(|)的结合性为左结合。逻辑运算符 a & b 当且仅当a,b都为真时,结果为1 a | b 当且仅当a,b都为假时,结果为0 ! a 当a为真时,结果为0; 当a为假时,结果为1多重if结构和嵌套if结构【问题】编程计算下列分段函数:110if(x1) y=x;else if(x10) y=2*x-1;else y=3*x-11;if(x1) y=x;else if(x10) y=2*x-1; else y=3*x-11;if(x=1) y=2*x-1; else y=x;else y=3*x-11; xy=x

21、y=2x-1y=3x-11多重 if 结构嵌套 if 结构多重if结构 多分支选择结构的 if 语句一般形式为: if(表达式1) 语句体1 else if (表达式2) 语句体2 . else if (表达式n) 语句体n else 语句体n+1 语义:依次判断表达式的值,当某个表达式的值为真时, 则执行其对应的语句,然后跳到整个if语句之外继续执行程序;如果所有的表达式均为假,则执行语句n+1,然后继续执行后续程序。多重if结构的控制流程多重if结构【例】分析下面程序段的运行结果int a,k;a=75;if (a60) k=1;else if(a70) k=2;else if(a80)

22、k=3;else if(a90) k=4;printf(k=%dn,k); k=1嵌套if结构 当 if 语句中的语句体又是 if 语句时,这种情况就叫嵌套的 if 结构。其一般形式为: if (表达式) if (表达式) 语句组1; else 语句组2; else if (表达式) 语句组3; else 语句组4; int x,y;x=1; y=0;if(x=2) if(x=2) if(x10) y=3*x-1;else y=x; y=1 y=0嵌套if结构switch结构 switch语句专门用于解决多分支选择问题,其一般形式为: switch(表达式) case 常量表达式1: 语句组1

23、;break; case 常量表达式2: 语句组2; break; case 常量表达式n: 语句组n; break; default : 语句组n+1; break; 计算表达式的值,并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语句,然后跳出switch结构继续执行程序; 如表达式的值与所有的常量表达式均不相同时,则执行default后的语句,然后跳出switch结构继续执行程序。 a=1,b=0Switch结构int x=1,a=0,b=0;switch(x) case 0 : b+; break; case 1 : a+; break; def

24、ault : a+; b+; break;printf(a=%d,b=%dn,a,b); 在case后,允许有多个语句,可以不用 括起来。 case和default子句出现的先后顺序可以变动,不会影响程序执行结果。default子句也可以省略不用。 a=1,b=0Switch结构语法注意int x=1,a=0,b=0;switch(x) case 0 : b+; break; default : a+; b+; break; case 1 : a+; break;printf(a=%d,b=%dn,a,b); switch后跟的“表达式”允许为任何类型的表达式,但计算结果必须为 int 型或

25、char 型。 error C2050:switch expression not integralSwitch结构语法注意float x=1,a=0,b=0;switch(x) case 0 : b+; break; case 1 : a+; break; default : a+; b+; break;printf(a=%f,b=%fn,a,b); case后必须为整型常量或由整型常量构成的表达式。这里的整型也包括字符型。 error C2052: const double : illegal type for case expressionSwitch结构语法注意int x=1,a=0,

26、b=0;switch(x) case a : b+; break; case 1.5 : a+; break; default : a+; b+; break;printf(a=%f,b=%fn,a,b); error C2051: case expression not constant 在每一个case后的各常量表达式的值不能相同,否则会出现错误。 error C2196: case value 0 already usedSwitch结构语法注意int x=1,a=0,b=0;switch(x) case 0 : b+; break; case 0 : a+; break; defaul

27、t : a+; b+; break;printf(a=%f,b=%fn,a,b); 多个case可以共用一组执行语句。 a=1,b=0Switch结构语法注意int x=1,a=0,b=0;switch(x) case 0 : b+; break; case 1 : case 2 : a+; break; default : a+; b+; break;printf(a=%f,b=%fn,a,b);注意: case 和 default 后的 break;语句不能省略,否则在执行完某个case或 default的语句体后,程序将不能跳出switch结构,而是不管后面的case表达式是否满足条件,

28、都会执行其语句体,直到遇到 break; 或 。int x=1,a=0,b=0;switch(x) case 0 : b+; case 1 : a+; case 2: b+; default : a+; b+; printf(a=%f,b=%fn,a,b);Switch结构语法注意 a=1,b=2比较多重 if 结构 和 switch 结构多重if结构和switch结构都可以用来实现多路分支。当需要判断输入的数据是否在某个范围时,使用多重 if 结构比较方便。switch结构只能处理等值条件判断的情况。CC语言程序设计第四章 循环结构循环结构【问题1】张浩C语言考试得了80分,没达到自己的目标

29、。为了表明自己勤奋学习的决心,他决定写一百遍“好好学习,天天向上”。#include main() printf(“第1遍写:好好学习,天天向上n); printf(“第2遍写:好好学习,天天向上n); printf(“第3遍写:好好学习,天天向上n); printf(“第4遍写:好好学习,天天向上n); /此处省略94句输出语句 printf(“第99遍写:好好学习,天天向上n); printf(“第100遍写:好好学习,天天向上n);printf(“第%d遍写:好好学习,天天 向上n,i);i=i+1;while(i=100)int i=1;循环结构【问题2】编写一个程序,计算半径为0.5

30、、1.5、2.5、3.5、4.5厘米的圆面积。#include #define PI 3.14159 /定义符号常量PImain() float r1,r2,r3,r4,r5; float s1,s2,s3,s4,s5; r1=0.5; s1=PI*r1*r1; printf(r1=%.1f,s1=%.2fn,r1,s1); r2=1.5; s2=PI*r2*r2; printf(r2=%.1f,s2=%.2fn,r2,s2); r3=2.5; s3=PI*r3*r3; printf(r 3=%.1f,s3=%.2fn,r3,s3); r4=3.5; s4=PI*r4*r4; printf(r

31、4=%.1f,s4=%.2fn,r4,s4); r5=4.5; s5=PI*r5*r5; printf(r5=%.1f,s5=%.2fn,r5,s5);s=PI*r*r; printf(r=%.1f,s=%.2fn,r,s);r=r+1;while(r=4.5)float r=0.5,s;什么是循环循环就是重复地做一件事。生活中循环的例子: 打印50份试卷 在400米跑道上进行3000米赛跑 锲而不舍地学习 滚动的车轮什么是循环打印50份试卷: 循环条件:只要打印的试卷份数不足50份就继续打印。 循环操作:打印1份试卷,打印总数加1。3000米赛跑: 循环条件:跑过的距离不足3000米就继续跑

32、。 循环操作:跑一圈,跑过的距离增加400米。锲而不舍地学习: 循环条件:没有达到预定的目标就继续努力。 循环操作:学习,离预定目标更近。滚动的车轮: 循环条件:没有到达目的地就继续。 循环操作:车轮滚一圈,离目的地更近。循环结构循环结构是结构化程序中最重要的一种结构。其特点是,在给定条件成立时,反复执行某程序段,直到条件不成立为止。循环结构中控制循环的条件称为循环条件,循环条件中出现的变量成为循环变量,反复执行的程序段称为循环体。循环结构的3种形式C语言提供了3种基本的循环结构: while do-while forwhile循环while循环又称为“当型”循环。 while语句的一般格式为

33、: while (循环表达式) 循环体 while语句的执行过程为: (1) 计算并判断循环表达式的值。若值为非0,则执行循环体;若值为0,则结束循环,退出while结构。 (2) 转步骤(1)。while循环语法注意与 if 语句中的表达式相同,while 语句中的表达式可以是任意合法的表达式。表达式也叫做循环条件。循环体包括一条或多条语句,多条语句必须用 括起来。合理的循环是有限次循环。如果循环不能退出,则称为“死循环”,在程序设计中应该避免出现。 while循环【问题】判断以下循环各执行了多少次 int k=-10; while(k=0) k=k+1; /循环 次 int k=-10;

34、while(k=1) k=k+1; /循环 次 int k=-10; while(k) k=k+1; /循环 次010do-while循环do-while循环,又称为“直到 型”循环,用do-while语句来实现,其一般格式为: do 循环体 while(循环表达式); do-while语句的执行过程为: 先执行循环体语句再判断表达式的值。若值为0,则结束循环,退出do-while语句;若值为非0,则继续执行循环体。do-while循环【问题1】以下两个程序段的运行结果分别是多少?int i=10,s=0;while(i=10) s=s+i; i=i+1; printf(s=%dn,s); s

35、=10int i=10,s=0;do s=s+i; i=i+1; while(i=10); printf(s=%dn,s); s=10总结:当第一次判断循环表达式,表达式的值为真时,while和do-while循环在功能上没有任何区别。do-while循环【问题2】以下两个程序段的运行结果分别是多少?int i=11s=0;while(i=10) s=s+i; i=i+1; printf(s=%dn,s); s=0int i=11,s=0;do s=s+i; i=i+1; while(i=10); printf(s=%dn,s); s=11总结:当第一次判断循环表达式,如果表达式的值为假,则w

36、hile循环不会执行循环体,而do-while循环会把循环体执行一遍。for 循环for语句的一般格式为: for(表达式1;表达式2;表达式3) 循环体 int i,s=0;i=1;while(i=100) s=s+i; i=i+1;等价int i,s=0;for ( ; ; ) i=1i=100i+s=s+i;for 循环3个表达式的主要作用是: 表达式1:通常用于循环的初始化。包括循环变量的赋初值、其他变量的准备等; 表达式2:循环的条件判断式,用于判断循环是否继续执行,可以是任意合法的表达式; 表达式3:循环的调整部分,主要是循环变量的变化; 循环体:由一条或多条语句构成,多条语句需要

37、用 括起来。for语句的执行流程for(i=1;i=100;i+) s=s+i;for循环语法注意13个表达式之间用分号“;”分隔,3个表达式都可以省略,但两个分号不能省略。表达式1和表达式3可以是一个简单的表达式,也可以是逗号表达式,即包含一个以上的简单表达式,中间用逗号间隔。如: for(i=1,s=0; i=100;i+) s=s+i; for(i=0,j=10;i=j;i+,j-) k=i+j; 表达式1可以省略,如: i=1; for(;i=100;i+) s=s+i;for循环语法注意2表达式2可以省略,即不设置和检查循环条件,此时相当于表达式2始终为“真”,循环无终止地进行,如:

38、 for(i=1; ;i+) s=s+i; for(i=1;1;i+) s=s+i;表达式3可以省略,如: for (i=1;i=100;) s=s+i; i+; 等价for循环语法注意3表达式1和表达式3均可以省略,如: i=1; i=1; for (;i=100;) while(i=100) s=s+i; s=s+i; i+; i+; 循环体可以省略,如: for (i=1;i=100;i+); ;表示空语句等价【问题1】编写一个程序,计算半径为0.5、1.5、2.5、3.5、4.5cm的圆面积,直到面积大于20cm2。#include #define PI 3.14159 /定义符号常量

39、PIvoid main() float r=0.5,s; while(r20) break; printf(r=%.1f,s=%.2fn,r,s); r+; 【问题2】输出100到200之间可以被7整除的数。void main() int k; for(k=100;k=200;k+) if( ! (k%7) printf(“能被7整除的数有%dn”,k); void main() int k; for(k=100;k=200;k+) if(k%7) continue; printf(“能被7整除的数有%dn”,k); 参考程序2:参考程序1:break和continue语句switch结构中可

40、以用break语句跳出switch语句。break语句也可以用在循环结构中,用以结束本层 循环。continue语句用以结束本次 循环,不再执行continue语句后的循环体,直接回到循环表达式处判断。break和continue通常和if语句配合使用。break可以用于switch结构和循环结构,continue只能用于循环结构。循环嵌套(1) while ( ) while ( ) (2) for (;) for (;) (3) do do while ( ); while ( );(4) while ( ) for (;) (5) for (;) while ( ) (6) do for

41、 (;) while ( );CC语言程序设计第五章 函数函数【问题】编写一个程序,计算半径为0.5、2、2.5、3.2、5厘米的圆面积。#include #define PI 3.14159 /定义符号常量PImain() float r1,r2,r3,r4,r5; float s1,s2,s3,s4,s5; r1=0.5; s1=PI*r1*r1; printf(r1=%.1f,s1=%.2fn,r1,s1); r2=2; s2=PI*r2*r2; printf(r2=%.1f,s2=%.2fn,r2,s2); r3=2.5; s3=PI*r3*r3; printf(r 3=%.1f,s3

42、=%.2fn,r3,s3); r4=3.2; s4=PI*r4*r4; printf(r4=%.1f,s4=%.2fn,r4,s4); r5=5; s5=PI*r5*r5; printf(r5=%.1f,s5=%.2fn,r5,s5);void area(float r) float s=PI*r*r; printf(r=%.1f,s=%.2fn,r,s); void main() area(0.5); area(2); area(2.5); area(3.2); area(5);模块化程序设计方法人们在求解一个问题时,通常采用的是逐步分解、分而治之的方法,即把一个大问题分解成若干个比较易解的

43、小问题,然后分别求解。我们也通常把一个较大的程序分为若干个子程序模块,每个子程序模块实现一个特定的功能。这样的程序便于编写、阅读、修改和维护,提高了程序的可靠性,保证了程序的质量。在C语言中,这些子程序模块是由函数来完成的。一个C程序可由一个主函数和若干个函数组成。函数分类从函数定义的角度内置函数 即库函数。由系统提供,用户无须定义和说明,只需在程序前包含有该函数原型的头文件,就可在程序中直接使用。如scanf、printf、getchar、puts、strcpy等都是标准函数。自定义函数 用户根据需要,自己定义的用以完成某种功能的函数。函数分类从函数参数的角度无参函数 函数定义、函数说明、函

44、数调用均不带参数。主调函数和被调函数之间不进行参数传递,此类函数通常用来完成一组指定的功能,一般没有返回值。 有参函数 函数定义、函数说明时都有参数,称为形式参数(简称形参)。函数调用时必须给出参数,称为实际参数(简称实参)。进行调用时,主调函数把实参的值传递给形参,供被调函数使用,被调函数也可以将值带回来供主调函数使用。 函数的定义无参函数定义的一般形式 类型说明符 函数名() 语句序列 函数的定义有参函数定义的一般形式 类型说明符 函数名(形式参数类型说明 形式参数) 语句序列 函数定义语法说明一个函数由头部和函数体组成。其中类型说明符和函数名称为头部,花括号中的内容称为函数体。类型说明符

45、是指该函数值的类型,即函数返回值的类型。 void表示空类型,表示函数返回时不带回任何值。函数名是用户自己定义的标识符函数名后面必须有一对圆括号( ),不管里面有没有参数。不能在一个函数体内再定义另一个函数,即函数不能嵌套定义。 函数的调用函数调用的一般形式 函数名(实际参数表)在调用函数时,多个实参彼此间用逗号分隔。实参与形参的个数应相等,类型应一致。如果调用无参函数,则实参表为空,但函数名后的一对圆括号“( )”不能省略。函数的调用main()int a;fun1(a);fun1(int x) 调 用返 回函数调用的方式函数语句把函数调用作为一个语句,一般用于没有返回值的函数的调用。函数表

46、达式函数出现在表达式中,以函数的返回值参与表达式的运算。函数参数函数作为另一个函数调用的实参。这种情况是把该函数的返回值作为实参进行传递,因此要求该函数必须带值返回。函数的返回值函数的返回值是通过被调函数中的return语句实现的。return语句的一般形式为: return(表达式);功能为:计算表达式的值,并返回给主调函数。一条return语句只能返回一个值。函数的返回值的语法说明函数返回值的类型和函数定义的类型应保持一致。如果两者不一致,以函数定义的类型为准,函数类型决定函数返回值的类型。如果函数的返回值是整型,则在函数定义时可省略类型说明。在一个函数中允许有多个return语句,但每次

47、调用只执行一个return语句,因此只能返回一个函数值。当遇到return语句时,函数返回到主调函数中调用该函数的位置。函数原型声明函数定义是指对函数功能的确立,包括指定函数名、函数值的类型、形参及其类型、函数体等。它是一个完整的、独立的函数单位。函数声明是指对已定义的函数的返回值进行类型说明,它只包括函数名、函数类型等,不包括函数体。其作用是告诉编译系统,在本函数中将要调用的函数是何种类型,以便在主调函数中按此类型对函数值作相应的处理。函数原型声明可以省略的情况如果被调函数的定义出现在主调函数之前,则可以省略声明。如果函数类型为整型,则在主调函数中可以不要声明。函数的参数传递在函数的调用过程

48、中,大部分都存在着数据上的联系,主要表现在两个方面:一是外部数据如何传递到函数内部;二是函数内部加工过的数据如何传递给外部程序。因此 C程序中,函数间的参数传递有两个方面: 1. 函数调用时传递给函数的值 2. 函数调用结束时返回给主调函数的值 值传递值传递是将实参的值传递给形参。按这种方式传递时,形参的类型是变量,而实参可以是常量、变量或表达式,但必须有确定的值。 值传递的特点:形参和实参各自占用不同的存储空间,在函数内部对形参的任何操作,其结果只能影响形参的值,而不会影响到实参的值。10001002100410061008100A100C100E1010num135val13564num2

49、64val23665#include void increment(int,int);void main()int num1,num2;printf(n 请输入两个数: );scanf(%d %d,&num1,&num2);printf(n 主函数中递增前的值是%d 和 %dn, num1, num2);increment(num1,num2);printf(n 主函数中递增后的值是%d 和 %dn, num1, num2);void increment(int val1,int val2)val1+;val2+;printf(n 子函数中值 %d 和 %dn, val1, val2);值传递

50、应用演示【问题1】变量一旦声明,是否在程序中任何地方都能使用? 【问题2】任何事物有产生,也必然会有消亡,那么变量的生命周期是多久? 变量的作用域变量的作用域是指变量的有效范围,在该范围里,变量是可用的。C语言中,变量的说明方式不同,其作用域也不同,通常分为局部变量和全局变量两类。 局部变量在一个函数内部定义的变量称为局部变量其作用域仅限于函数体内,离开该函数再使用这些变量是非法的。在不同的函数内可以定义同名的局部变量,这些同名变量之间不会发生冲突。全局变量在所有函数(包括main函数)之外定义的变量称为全局变量。它不属于任何函数,而属于一个源程序文件,其作用域是从定义的位置开始到本源程序文件

51、结束。默认初值为0。在一个源程序中,全局变量和局部变量可以同名,在局部变量有效的范围内,全局变量不起作用。变量的存储方式变量的存储方式是指变量使用内存空间的方式,通常可分为“动态存储”和“静态存储”两种。动态存储是指在程序执行过程中,使用到变量时才分配存储单元,使用完毕立即释放。静态存储是指在变量定义时就分配存储单元并一直保持,直至整个程序结束。变量的4种存储类型自动类型auto寄存器类型register静态类型static外部类型externauto类型 和 register类型 属于动态存储static类型 和 extern类型 属于静态存储自动类型auto在变量定义的类型前面加上auto

52、,就将变量说明为自动类型。 auto int sum;C语言规定:函数内凡未加存储类型说明的变量、所有函数的形参变量均视为自动变量。自动变量属于动态存储方式,即仅当定义自动变量的函数被调用时,系统才分配内存单元,若没有赋初值,则其初值是随机的;离开该函数,空间释放,自动变量的值消失。10001002100410061008100A100C100E1010sum0num24523num168sum#include void addNumbers(); /函数原型声明void main()int sum=0;addNumbers();printf(n 主函数中 sum 的值是 %d n ,sum)

53、;/* 函数定义 */void addNumbers()int num1,num2,sum;printf(n 请输入两个数:);scanf(%d,%d,&num1,&num2);sum=num1+num2;printf( 子函数中 sum 的值是 %d n,sum);自动类型auto应用演示寄存器类型register在变量定义的类型前面加上register,就将变量说明为寄存器类型。 register int m;寄存器变量属于动态存储方式,其生存期和作用域与自动类型变量相同,只不过系统把这类变量直接分配在CPU的通用寄存器中。当需要使用这些变量时,无须访问内存,直接从寄存器中读写,提高了效率

54、。一般寄存器变量只能是int、char或指针型,全局变量不能定义为寄存器变量。 外部类型extern在变量定义的类型前面加上extern,就将变量说明为外部类型。 extern int m;如果全局变量的定义与使用在同一个文件中,则该文件的函数在使用外部变量时不需进行其他说明,直接可以使用如果全局变量的定义与使用在两个不同的文件中,则在使用全局变量之前需用“extern”存储类型加以说明。 外部类型extern在变量定义的类型前面加上extern,就将变量说明为外部类型。 extern int m;如果全局变量的定义与使用在同一个文件中,则该文件的函数在使用外部变量时不需进行其他说明,直接可以

55、使用如果全局变量的定义与使用在两个不同的文件中,则在使用全局变量之前需用“extern”存储类型加以说明。 静态类型static在变量定义的类型前面加上static,就将变量说明为静态类型。 static int m;作用域是在所定义的函数内有效。生存期从定义开始直到程序结束,退出函数,值不丢失,但不能引用。若没有给内部静态变量赋初值,则系统自动赋初值0。 10001002100410061008100Ai1s11m210001002100410061008100Ai111m2s2362#includevoid format();void main() int i; for(i=1;i=5;i

56、+) printf(i=%d ,i); format(); /*定义函数format()*/void format() static int m =1,s=1; s=s*m; m+; printf(i!=%dn,s); 静态类型static应用演示234sm11CC语言程序设计第七章 数组【问题】输入某班级6个学生某门课的成绩,求平均成绩并输出小于平均分的学生分数。【分析】通过循环结构,用一个变量依次存储6个成绩,可以非常方便地求成绩的累加和,进而求出平均分。但要找出比平均分小的数就无法实现。当然,可以用6个变量来实现存储,但这样会让程序无法用循环结构实现,变得繁琐。【解决】可以使用数组来解决

57、,先将6个数保存到数组中去,等求过平均数后再从数组里取出6个数进行比较。 数组的定义和分类在程序设计中,按序排列的同类型数据元素的集合称为数组。数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。根据数组的维数,数组可分为一维数组和多维数组。根据数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别的数组。一维数组一维数组的声明 数据类型 数组名长度; int a5; 定义了一个一维整型数组,数组名为a,有5个成员(数组元素),分别是: a0、a1、a2、a3、a4一维数组数组这一数据类型帮助我们实现了这样多个数据的批量处

58、理问题。数组可以一次性声明多个变量,只不过这些变量比较特别,具有相同的名字(即数组名),用下标进行区分。数组名用合法的标识符命名,与变量的命名方法相同,且不能和程序中其它变量名相同。方括号中的数字表示数组的长度,即数组元素的个数。数组长度可以用常量、符号常量或常量表达式表示,不能是变量。数组元素的下标从0开始,即下标范围从0到n-1。一维数组的赋值数组定义时给数组元素赋以初值逐个对数组元素赋值数组定义时给数组元素赋以初值对数组的全部元素赋初值 int num5=1,2,3,4,5; 将数组元素的初值依次放在一对花括号内,经过上述定义及初始化之后,num0中为1, num1中为2, num2中为

59、3, num3中为4, num4中为5。 当初值的个数大于数组长度时,作语法错误处理。 int num5=1,2,3,4,5,6; 是不合法的,因为num数组只能有5个元素。数组定义时给数组元素赋以初值对数组的部分元素赋初值 int num5=1,2,3; 只给前3个元素赋初值,其余2个元素的值为0。对全部数组元素赋初值时,可以不指定数组的长度。 int num =1,2,3,4,5; 等价于 int num 5=1,2,3,4,5;逐个对数组元素赋值int a5;a0=1;a1=2;a2=3;a3=4;a4=5;int a5,i; for(i=0;i5;i+) ai=i+1;等价逐个对数组元

60、素赋值int a5; scanf(“%d”,&a0);scanf(“%d”,&a1);scanf(“%d”,&a2); scanf(“%d”,&a3);scanf(“%d”,&a4);int a5,i; for(i=0;i5;i+) scanf(“%d”,&ai);等价冒泡法排序895420859420854920854290854209大数沉淀,小数起泡a0a1a2a3a4a5for(j=0;jaj+1) t=aj;aj=aj+1;aj+1=t; 985420854209584209548209542809542089a0a1a2a3a4a5for(i=0;jaj+1) t=aj;aj=aj

温馨提示

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

评论

0/150

提交评论