C语言教案ppt_第1页
C语言教案ppt_第2页
C语言教案ppt_第3页
C语言教案ppt_第4页
C语言教案ppt_第5页
已阅读5页,还剩168页未读 继续免费阅读

下载本文档

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

文档简介

1、主讲:周小勇主讲:周小勇QQ:542936950EMail:手机:手机:132359665991.1 程序设计语言程序设计语言1.1.1 程序设计语言的发展程序设计语言的发展(1) 机器语言CPU的指令系统。计算机能够识别的机器代码。(,)(2) 汇编语言低级语言,用一些 “助记符号“ 代替 “,“编程。第章第章 语言概述语言概述(3) 面向过程的语言汇编语言和机器语言是面向机器的。把解题过程看作是数据被加工的过程。基于这种方法的程序设计语言被称为面向过程的程序设计语言。() 面向对象的程序设计语言把现实世界看成是由许多对象组成的。1.1.2 程序设计语言的支持环境不同的操作系统下编译和运行C

2、语言程序的方式和命令是不同的。注意:注意:(1)FORTRAN语言是历史上的第一门计算机高级语言。(2)语言称为程序员设计的语言,可以作为系统描述 语言,既可以写系统软件,又可以写应用软件。 用C语言编写的UNIX比用汇编语言编写的更易于理解 修改和扩充 。并因此于1983年获得了计算机的最高奖 -图灵奖,要学UNIX必须先掌握C语言。(3)FORTAN、Algol和Pascal称为计算机科学家设计的 语言。1.1.3 编辑、编译、连接、运行语言程序编辑、编译、连接、运行语言程序 ()编辑源程序。(*.c)()对源程序进行编译。(*.obj)()对编译生成的.obj文件进行连接,生成可执行 程

3、序 .exe()执行可执行代码,验证结果的正确性,以确定 是否要进行修改。#include main()int a , b , sum;printf (“Enter Two Numbers:”);scanf (“%d%d”,&a,&b);sum=a+b+6;printf (“The sum is %dn”,sum);例例 11.2 用库函数组装用库函数组装C程序程序例例 2main()int a , b , c;scanf (“%d , %d”,&a,&b);c=max(a,b);printf (“max=%d”,c);int max (x, y)int x ,

4、y;int z;if (xy) z=x;else z=y;return (z); 结论:()程序是由函数构成的。一个源程序至少 包含一个main函数和若干个其它函数。 ()一个函数由两部分组成 . 函数的说明部分:函数名,函数类型,函 数属性,函数参数(形参)名 形参类型 .函数体:变量定义。执行部分,由若干个语 句组成 注注:在某些情况下可以没有变量定义部分, 甚至可以既无变量定义,又无执行部分。 如:dump() /*空函数*/ ()一个程序总是从main函数开始执行的而不论 main函数在整个程序中的位置如何。 ()程序书写格式自由,一行内可以写几个语句, 一个语句可以分写在多行上。 (

5、)每个语句和数据定义的最后必须有一个分号。 如:c=a+b; ()语言本身没有输入输出语句,输入和输出的 操作由库函数scanf和printf等完成 ()/*.*/可以对程序中的任何部分作注释。语言的特点语言的特点(1)语言简洁、紧凑、使用方便、灵活。(2)运算符丰富(共有34种运算符)。(3)数据结构丰富。如:整型、实型、字符型.(4)具有结构化的控制语句。如:ifelse while do while for .(5)语法限制不太严格、程序设计自由度大。(6)语言允许直接访问物理地址,能进行位(bit)操作, 能实现汇编语言的大部分功能,可以直接对硬件进 行操作。(7)生成目标代码质量高,

6、程序执行效率高。(8)用C语言写的程序可移植性好。2.1 数据类型数据类型 语言的词法记号:是指程序中具有独立含义的不可进一步分割的单位。分为以下5类:()关键词()关键词 是语言中预定义的符号,有固定的含义,用户自定义的任何名字不能够与之重复。关键词如下:auto break case char continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned

7、 void volatile while 准关键词:define endif include ifdef ifndef line undef 第第2章章 数据描述与基本操作数据描述与基本操作()标识符()标识符用户自已定义的符号。标识符的定义必须满足以下条件:. 只能由字母、数字,下划线构成。. 第一个字符必须为字母或下划线。. 标识符不能和关键词同名. 标识符最长只能是32个字符 (Turbo C中). 用大写字母来表示常量标识符,用小写字母表示 变量或其它标识符()分隔符:()分隔符: 分隔符用于分隔各种词法记号,常用的分隔符有: ( ) * . : = ; # ()运算符()运算符 ()

8、() 常量常量C语言的数据类型语言的数据类型: ()基本类型(简单类型)()基本类型(简单类型).数值类型数值类型 整型整型短整型短整型(short),整型,整型(int),长整型,长整型(long) 实型(浮点型)实型(浮点型) 单精度型(单精度型(Float),双精度型(),双精度型(double) B.字符类型字符类型 (char)C.枚举类型(枚举类型(enum) (2)构造类型(组合类型)构造类型(组合类型).数组类型数组类型 .结构类型结构类型 .共用类型(共用类型(union) D.文件类型(文件类型(FILE) (3)指针类型)指针类型 (4)空类型)空类型(void)2.1.

9、1 数值的定点表示形式与浮点表示形式数值的定点表示形式与浮点表示形式()语言中的指数形式的表示法:()语言中的指数形式的表示法:3.14159e00.314159e+10.0314159e+2 =3.14159=3.14159=3.14159(数字部分)尾数(数字部分)尾数指数(阶码)指数(阶码)浮点数:小数点的位置是浮动的。浮点数:小数点的位置是浮动的。注意:在计算机内部实数(以小数形式表示的数)都以注意:在计算机内部实数(以小数形式表示的数)都以 浮点形式存储,实数用浮点形式存储,实数用4个字节存储,个字节存储,3个字节存个字节存 放数字部分,一个字节存放指数部分。放数字部分,一个字节存放

10、指数部分。()定点数()定点数不带指数部分的数称为定点数。如:不带指数部分的数称为定点数。如:3.14159 , 10 , -20 , 1992注意:注意:()()虽然不带指数部分的实数称为虽然不带指数部分的实数称为 定点数,但在计算机内部会定点数,但在计算机内部会 自动转换成浮点形式存放。自动转换成浮点形式存放。 ()整数属于定点数。()整数属于定点数。2.1.2 字符类型数据的表示和存储形式字符类型数据的表示和存储形式字符类型的数据在内存中以字符类型的数据在内存中以ASCII码的形式存放。码的形式存放。a 01100001 97注意注意: ()()字符变量可以以整数的形式输出。字符变量可以

11、以整数的形式输出。 ()字符以单引号形式出现。()字符以单引号形式出现。()() a-A=32Main() char ch;Scanf(“%c”,&ch);Printf(“%c,%d”,ch,ch);2.1.3 数据的存储空间长度及取值范围数据的存储空间长度及取值范围Int,short 2个字节个字节Long 4个字节个字节Float 4个字节个字节Double 8个字节个字节2.1.4 带符号的数据类型与无符号的数据类型带符号的数据类型与无符号的数据类型在内存中数值以补码的形式存放。在内存中数值以补码的形式存放。16位的整数中,最高位位的整数中,最高位0表示正,表示正,1表示负。表示

12、负。注意注意:():()正数的补码是它的本身。正数的补码是它的本身。 ()负数的补码:先取该数的绝对值,再以二进制()负数的补码:先取该数的绝对值,再以二进制 的形式表示,再对各位取反,取后加的形式表示,再对各位取反,取后加1。无符号型整数:无符号型整数: 必须为正数或零。又分为:无符号整型必须为正数或零。又分为:无符号整型(unsigned int)、无符号短整型()、无符号短整型(unsigned short) 和无符号长整型(和无符号长整型(unsigned long)注意:实型数据没有注意:实型数据没有unsigned与与signed之分,均带符号。之分,均带符号。求一种类型数据占用的

13、存储空间的长度:求一种类型数据占用的存储空间的长度:sizeof (类型标识符类型标识符) 在程序的运行过程中其值不能被改变的量。(整型常量、浮点型常量、字符型常量、字符串常量和符号常量)。()0开头的是八进制数。 0516()0X或0 x开头的为十六进制数 0 x1c0d 0X4600()1或结尾时为长整型常量 49876L 0X4F8DAL()浮点型常量有十进制形式和指数形式(E后必须为整数。) 3.14 -9.568 1.5E5 2.9E-72.2 常量和变量常量和变量()字符型常量是用单引号括起来的单一字符,其值即为它 的ASCII码值。 s、S、如2的值为50语言还允许一种特殊形式的

14、字符常量,以语言还允许一种特殊形式的字符常量,以开头的字符序列。开头的字符序列。 表表 转义字符表转义字符表字符形式含义字符形式含义ntvbr换行横向跳格(Tab)竖向跳格退格回车fxhhddd换行但不回车反斜框单引号1到2位16进制数所代表的字符1到3位8进制所代表的字符注意:字符串所需存储空间比字符串的字符个数多一注意:字符串所需存储空间比字符串的字符个数多一 个字节。个字节。字符串常数:用双引号括起来的零个或多个字符序列称为字 符串常数。 如:”hello” , “a”内存中的存储方式: h e l l o 0实际的存储形式为: 104 101 108 108 111 02.2.3 变量

15、变量 其值可以改变的量称为变量。一个变量由一个名字来标识,此名字称为该变量的标识符。同一个 变量名对应的变量在不同的时刻可以有 不同的值。 变量说明的实例如下:int i; /*说明i为整型变量*/short c,d,e; /*说明c,d,e为短整型变量*/unsigned long p,g; /*说明p,g为无符号长整型变量*/float x,y; /*说明x,y为单精度型变量*/double z; /*说明z为双精度型变量*/char ch1,ch2; /*说明ch1,ch2为字符型变量*/(1)算术运算符和算术表达式算术运算符和算术表达式 算术运算符包括:(加)、(减)、(乖)、 (除)

16、、(取模)、(增一运算符)、 (减一运算符)。 +i 、-i 在使用i之前,先使i的值增减。 i+ 、i- 在使用i之后,使i的值增减1。 必须说明的是必须说明的是+、运算符只能用于变量,运算符只能用于变量, 而不能用于常量或表达式。而不能用于常量或表达式。 2.3 运算符和表达式运算符和表达式Main()int j;j=9;j+;Printf(“/n%d”,j);Main()int j;j=9;+j;Printf(“/n%d”,j);(2)关系运算符和关系表达式关系运算符和关系表达式关系运算符有(大于)、(大于等于)、(小于等于)、(等于)和!(不等于),它们的优先级低于算术运算符的优先级。

17、下面有几个实例:i5chb & cd x= =1| !b ! (sex= =m & ageb)?a:bB. 逗号表达式为:表达式,表达式其含义为: 先求表达式,再求表达式, 整个表达式的值就是表达式的值。 a=3*8,a+2 其值为26 在表达式中出现不同类型的操作数时,要按规则将其转换成同一类型。需要指出的是,两个均为float型的数据之间运算,也要先转换成double型,以便提高运算精度。double floatlongunsigned int char , short 类型转换规则类型转换规则高高低低2.4 不同类型数据间的转换不同类型数据间的转换 这里需要专门说明赋值表

18、达式中的类型自动转换。这里需要专门说明赋值表达式中的类型自动转换。当赋值表达式左边变量的数据类型级别高于右边表达当赋值表达式左边变量的数据类型级别高于右边表达式的级别时,仍按上述规则转换,否则,就要把右边式的级别时,仍按上述规则转换,否则,就要把右边高级别表达式的数据类型转换成左边低级别变量的数高级别表达式的数据类型转换成左边低级别变量的数据类型。据类型。 2.5.1 变量的初始化变量的初始化C语言允许在说明变量的同时对其初始化,例如:int sum=0; float pi=3.1416; char c=w; 也可对被说明的一部分初始 化,如: int i,sum=o,j;2.5 数据的输入和

19、输出数据的输入和输出2.5.2赋值语句赋值语句赋值语句是由赋值表达式加上一个分号组成的,如“sum=a+b;”就是一个赋值语名,而“sum=a+b”则是一个赋值表达式。可见赋值表达式与赋值语句是两个不同的概念,赋值表达式是语言特有的。下列语句者是赋值语句:x=0.3;y=z=-1;y=y*(z+1); x=(7+6)%5/2;2.5.3 数据输出数据输出一般形式:printf(格式控制参数,输出项1 ,输出 项2,)格式说明,它由格式说明,它由“%”和转换字符组成,如和转换字符组成,如%d、 %f等,等, 作用是将输出的数据转换成指定的格式输出。作用是将输出的数据转换成指定的格式输出。普通字符

20、,即按照原样输出的字符。普通字符,即按照原样输出的字符。 Printf(“%d + %d = %d”, a , b , a+b);输出项输出项1输出项输出项2输出项3Main()int j;j=2;Printf(“j=%d,j+=%d”,j,j+);格式字符:格式字符:对于不同的数据用不同的格式字符。对于不同的数据用不同的格式字符。d 格式符。用来输出十进制整数。格式符。用来输出十进制整数。()()%d 按整型数据的实际长度输出。按整型数据的实际长度输出。()()%md m为指定的输出字段的宽度。如果数据为指定的输出字段的宽度。如果数据 的位数小于的位数小于m,则左端补以空格,若大,则左端补以

21、空格,若大 于于m,则按实际位数输出。,则按实际位数输出。()()%ld 输出长整型数据输出长整型数据注意注意:如果长整型数据如果长整型数据(32767)用用%d输出,就会发生错输出,就会发生错误。对于误。对于long型数据应当用型数据应当用%ld格式输出,格式输出, 也可以指定字段宽度。如也可以指定字段宽度。如%8ld。2. O格式符格式符 以以8进制数形式输出整数,输出的数值不进制数形式输出整数,输出的数值不 带符号,将符号位也一起作为八进制数的带符号,将符号位也一起作为八进制数的 一部分输出。一部分输出。int a=-1;Printf(“%d,%o”,a,a);-1,177777注意:不

22、会输出带负号的八进制整数。对于长整型可注意:不会输出带负号的八进制整数。对于长整型可以用以用%lo格式输出,同样可以指定宽度。如:格式输出,同样可以指定宽度。如:%8o3. X格式符,以格式符,以16进制数形式输出整数。同样不会出现进制数形式输出整数。同样不会出现 负的十六进制。负的十六进制。int a=-1;Printf(“%x,%o,%d”,a,a,a);ffff,177777,-14. u格式符格式符 用来输出用来输出unsigned型数据,以十进制的形型数据,以十进制的形 式输出。一个有符号的整数也可式输出。一个有符号的整数也可 以用以用%u 格式输出。格式输出。Unsigned型数据

23、也可以用型数据也可以用%d, %o,%x格式输出。格式输出。 main()unsigned int a=65535;int b=-2;printf(“%d,%o,%x,%un”,a,a,a,a);printf(“%d,%o,%x,%un”,b,b,b,b);-1,177777,ffff,65535-2,177776,fffe,655345. c格式符格式符 用来输出一个字符。用来输出一个字符。 注意:一个整数,只要它的值在注意:一个整数,只要它的值在0255范围内,也可范围内,也可 以用字符的形式输出,转换成以用字符的形式输出,转换成ASCII字符。字符。6. s格式符格式符 用来输出一个字符

24、串。用来输出一个字符串。 printf(“%s”,”china”); (1) %s (2) %ms 输出的字符串占m列,如字符串本 身长度大于m,则突破m的限制, 将字符串全部输出。若串长小于 m,则左补空格。(3) %-ms 右补空格。(4) %m.ns 输出占输出占m列,但只取字符串左端列,但只取字符串左端n个字符。这个字符。这n个个字符输出在字符输出在m列的右侧,左补空格。列的右侧,左补空格。(5) %-m.ns 右补空格。右补空格。7. f 格式符格式符 用来输出实数用来输出实数(包括单,双精度包括单,双精度),以小数的,以小数的 形式输出形式输出 。单精度的有效位数为。单精度的有效位

25、数为7位,双精位,双精 度为度为16位位 (1) %f (2) %m.nf 指定输出的数据共占m列,其中 有n位小数。如果数值长度小于m 则左补空格。(2) %m.nf 右补空格。右补空格。8. e 格式符格式符 以指数形式输出实数。以指数形式输出实数。 ()()%e printf(“%e”,123.456); 1.23456 e + 02 指数部分占列指数部分占列 小数占列小数占列 尾数部分占列尾数部分占列 注意:注意:%e格式输出的实数点格式输出的实数点11列宽度。列宽度。 ()()%m.ne和和%-m.ne 占占m列宽度,保留列宽度,保留n-1位小数。位小数。 8. g 格式符格式符 用

26、来输出实数,它根据数值的大小,自动选择用来输出实数,它根据数值的大小,自动选择f格式格式 或或e格式,选择输出时占宽度较小的一种,且不输出格式,选择输出时占宽度较小的一种,且不输出 无意义的零。无意义的零。 注意注意:1. 用用printf函数输出时函数输出时,应注意数据类型与上述格式说明应注意数据类型与上述格式说明 匹配匹配,否则将会出现错误。否则将会出现错误。. 有些系统要求格式字符要用小写字母,如:有些系统要求格式字符要用小写字母,如:%d不不能写成能写成%D。3. 可以在可以在printf函数中的函数中的“格式控制格式控制“字符串内包含字符串内包含“转转 义字符义字符“。4. 如果要输

27、出字符如果要输出字符“%“,应在,应在“格格 式控制式控制“字符串中用连续两个字符串中用连续两个 “%“表示或一个表示或一个“%“。5. 不同的系统在实现格式输出时,输出结果可能有一些小的不同的系统在实现格式输出时,输出结果可能有一些小的差差 别。如:别。如:%e时,指数有的是时,指数有的是4位,有的是位,有的是5位,尾数有的是位,尾数有的是 5位,有的是位,有的是6位。位。2.5. 数据输入数据输入一般形式:一般形式:scanf(格式控制参数,地址,地址格式控制参数,地址,地址2,.)格式说明:格式说明:()标准()标准C在在scanf中不使用中不使用%u说明符,对说明符,对 unsigne

28、d型数据,以型数据,以%d,%o , %x格式格式 输入。输入。()可以指定输入数据所占列()可以指定输入数据所占列 数,系统自动按它截取所需数,系统自动按它截取所需 数据。数据。main()int a,b;scanf(“%3d%3d”,&a,&b);printf(“%d,%d”,a,b);main()char a,b;scanf(“%3c%3c”,&a,&b);printf(“%c,%c”,a,b);(3)%后的后的“附加说明符,用来表示跳过它相应的附加说明符,用来表示跳过它相应的数数 据。据。main()int a,b;scanf(“%3d%*3d%3d”,

29、&a,&b);printf(“%d,%d”,a,b);(3)输入数据时不能规定精度。如:)输入数据时不能规定精度。如:scanf(“%7.2f ”,&a)注意:注意:()()scanf函数中的函数中的“格式控制格式控制“后而是变量地址,后而是变量地址,而而 不是变量名。不是变量名。()如果在()如果在“格式控制格式控制“字符中除了格式说明以字符中除了格式说明以外外 还有其它字符,则在输入数据时应输入与这还有其它字符,则在输入数据时应输入与这 些字符相同的字符。些字符相同的字符。()在用()在用“%c “格式输入字符时,空格字符和格式输入字符时,空格字符和“转转 义字符义

30、字符“都作为有效字符输入。都作为有效字符输入。()在输入数据时,遇到以下情况时该数据认为()在输入数据时,遇到以下情况时该数据认为 输入结束。输入结束。 遇到空格,或按遇到空格,或按“回车回车“或或“跳格跳格 (TAB)“键。键。 遇宽度结束,如遇宽度结束,如“%3d“,只取,只取3列。列。 遇到非法输入。如:遇到非法输入。如:main()float a;scanf(“%f”,&a);printf(“%f”,a);输入输入: 1.2o45输出输出: 1.2000002.5.5 getchar函数与函数与putchar函数函数getchar函数:输入一个字符,不带参数。函数:输入一个字符

31、,不带参数。putchar函数:输出一个字符,带参数。函数:输出一个字符,带参数。注意:使用注意:使用getchar函数或函数或putchar函数之前要加上:函数之前要加上:#include “stdio.h”例:例:#includemain()int a=0,b=4,c=3;int x,y,z;printf(“%d %dn”,!a,!b);printf(“%dn”,abc);x=y=z=1;+x|+y&+z;printf(“x=%dty=%dtz=%dn”,x,y,z);x=y=z=1;+x&+y|+z;printf(“x=%dty=%dtz=%dn”,x,y,z);x=y=

32、z=1;+x&+y&+z;printf(“x=%dty=%dtz=%dn”,x,y,z);程序输出结果为:程序输出结果为: x=2 y=1 z=1x=2 y=2 z=1x=2 y=2 z=23.1 算法算法第第3章章 程序的流程设计程序的流程设计算法算法+数据结构程序数据结构程序瑞士瑞士 Niklaus Wirth:算法和数据结构也是面向过程的程序的两个大要素。算法和数据结构也是面向过程的程序的两个大要素。3.1.1 算法的性质与组成要素算法的性质与组成要素(一)算法的性质(一)算法的性质算法:进行操作的方法和操作步算法:进行操作的方法和操作步 骤。骤。算法的性质算法的性质:

33、()输入性()输入性 ()输出性()输出性 ()有穷性()有穷性 ()确定性()确定性 ()可行性()可行性(二)算法的组成要素(二)算法的组成要素()操作()操作 算述运算,逻辑运算,关系运算,函数运算述运算,逻辑运算,关系运算,函数运 算,位运算,算,位运算,I/O操作等。操作等。()控制结构()控制结构控制结构:控制组成算法的各操作的执行顺序。控制结构:控制组成算法的各操作的执行顺序。有如下三种控制结构:有如下三种控制结构:. 顺序结构顺序结构. 选择结构选择结构. 循环结构或重复结构循环结构或重复结构3.1.2 算法的描述算法的描述(一一) 流程图与算法的结构化流程图与算法的结构化特点

34、:用图框表示各种类型的操特点:用图框表示各种类型的操 作,用线表示这些操作的作,用线表示这些操作的 执行顺序。执行顺序。数据数据处理处理特定处理特定处理准备准备判断判断循环(上)界限循环(上)界限可注明数据名称,来源,用途或文可注明数据名称,来源,用途或文字说明。字说明。可注明处理名称或其简要功能。可注明处理名称或其简要功能。表示已命名的处理。表示已命名的处理。注明判断的条件。注明判断的条件。循环(下)界限循环(下)界限连接符连接符端点符端点符注解符注解符流线流线省略符省略符虚线虚线并行方式并行方式直线表示执行的流程,流程自上向下或直线表示执行的流程,流程自上向下或由左向右时,流程线可不带箭头

35、,其它由左向右时,流程线可不带箭头,其它情况应加箭头表法流程。情况应加箭头表法流程。程序流程的起,始点。程序流程的起,始点。例:求例:求n的阶乘的阶乘.调用调用参数参数n是是否否fac=1fac=1 i=1当当i=nfac=fac*ii=i+1返回返回fac值值调用结束调用结束流程图流程图n=0程程序序:main()int fac,i,n;scanf(“%d”,&n);if (n=0)fac=1;elsefac=1;i=1;while(iy)max=x;elsemax=y;if(maxz)max=max ;elsemax=z;printf(max=%d,max);例例1:求三数中的最大

36、数:求三数中的最大数例例2:公鸡一只值五钱,母鸡一只值三钱,小鸡三只值一:公鸡一只值五钱,母鸡一只值三钱,小鸡三只值一 钱,一百钱买一百只鸡,请问可以买公鸡,母鸡,小钱,一百钱买一百只鸡,请问可以买公鸡,母鸡,小 鸡各几只?鸡各几只?main()int x,y,z,max; x=0;while (x=20)y=0;while (y=33)z=100-x-y;if(5*x+3*y+z/3.0=100) printf(n%-6d%-6d%-6dn,x,y,z); y+; x+;3.2 用用C语言来描述算法语言来描述算法3.2.1 语句语句 语句是语言源程序的重要组成部分。语言的语句可以分为五大类:

37、(1) 表达式语句表达式的后面加一个分号就构成了一个语句,如sum=a+b;i+;y=2事实上,语言中有使用价值的表达式语句主要有种:A. 赋值语句。B. 自加减运算符构成的表达式语句。C. 逗号表达式语句。(2) 空语句 光有一个分号“;”,作为语句结束符,它表示什么也不做。(3) 复合语句 由“”和“”把一些变量说明和语句组合在一起,称之为复合语句(Block),又称语句块。 int a=0,b=1,sum;sum=a+b;printf(“%d”,sum);(4) 函数调用语句 它是由一个函数调用加上一个分号组成一个语句。如:printf(“This is a function call”

38、);3.2.2 停止函数停止函数exit作用:停止当前程序,退回到操作系统状态。作用:停止当前程序,退回到操作系统状态。加上预编译命令:加上预编译命令:#include “stdlib.h”exit ( )带参数。参数为带参数。参数为0时,正常停止,时,正常停止,为其它值时,指出停止的错误类型。为其它值时,指出停止的错误类型。3.3 选择型程序设计选择型程序设计3.3.1 if语句的一般形式语句的一般形式if 语句的一般形式:if (表达式)语句else语句求分段函数的值: 0 x=0 include “stdio.h”main()int x,y; printf(“请输入x的值:”);scan

39、f(“%d”,&x);y=x=0?2*x+1:0;printf(“当x=%d时,f(x)=%d”,x,y);运行结果:请输入的值:当时,f(x)=7例1:请输入两个数a,b,比较a+b和a*b哪个大,输出判断结果。#include”stdio.h”main()int a,b,s1,s2;printf(“请输入两个整数a,b:”);scanf(“%d,%d”,&a,&b);s1=a+b;S2=a*b;if (s1s2)printf(“a与b的和大于a与b的积n”);elseprintf(“a与b的积大于等于a与b的和n”); 运行结果为: 请输入两个整数:, a与b的积大

40、于等于a与b 的和例2:3.3.2 if-else 中的复合语句中的复合语句如果两个分支中需要招待的语句不止一条,必须有“”括起来,作为一个复合语句使用。若只是一条语句,“”可以省略。请年下面的例子。例4.4 输入一个学生成绩,若成绩大于等于,提示成绩合格,否则提示需要努力学习。程序实现如下: include main() int score; char grade; printf(“please input a score:”); scanf(“%d”,&score); if(score=60) grade=p; printf(“your grade is %c,you have p

41、assed.”,grade); else grade= F; printf(“your grade is %c,you should work harder.”,grade);注意:注意:A. if后面的表达式一定要有括号。B. if 和else 同属于一个if 语句,else不能作为语句单独使 用,它只是if 语句的一部分,与if配对使用。因此程 序中不可以没有if而只有else.C. 只能执行与if有关的语句或者招待与else有关的语 句,而不可能同时 执行两者。 D. 如果语句和语句是非复合语句,那 么该语句一定要以分号结束。if语句的表达式可以是任意类型的C语言的合法的表达 式,但计算

42、结果必须为整型、字符型或浮点型之一。3.3.3 if语句的缺省形式语句的缺省形式从if 语句的一般形式也可以年出:由于条件语句中“else 语句“部分是可选项,因此可以缺省,此时条件语句变成:if(表达式)语句其执行过程是:如果表达式的值不为零,执行语句,否则什么也不执行,跳if语句的下面,继续招待程序中的其他语句。缺省else时的条件分支语句也经常使用。3.3.4较复杂的条件表达式较复杂的条件表达式在程序中,if语句中的表达式起着关键的作用,千变万化的表达式可以派生出各种功能不同的程序。前面看到的是一些简单的关系表达式,而在实际的应用中可能会用到复杂的表达式。例4.6 判断某一年是否为闰年。

43、判断闰年的条件为下面二者之一:能被整除,但不能被100整除。能被400整除。 #include “stdio.h” main() int year; scanf (“%d#,&year); if (year%4= =0&year%100!=0|year%400= =0) printf(“%d是闰年”,year); 3.3.5非关系或逻辑表达式构成的条件表达式非关系或逻辑表达式构成的条件表达式if后面圆括号中的表达式表示分支的条件,表达式的类型不限于逻辑关系表达式,可以是任意的c语言的有效的表达式(如赋值表达式算术表达式,因此也可以是作为表达式特例的党量或变量。include “

44、stdio.h”main()int s;if (s=2)printf(“hello”);elseprintf(“error);3.3.6同一个条件的多种表达方式同一个条件的多种表达方式if语句能够实现分支,主要看表达式的结果。#include “stdio.h”main()int x,y;scanf(“%d”,&x);if (x)y=1;elsey=-1;printf(“y=%d”,y); 现把程序中if(x)改成if(x!=0),这样虽然条件表达式写法不 同,但是完成的功能是相同的。 下面两种表示方法经常使用: if(x) 等价于if(x!=0) if(!x) 等价于if(x= =0

45、)3.3.7 if语句的嵌套语句的嵌套 C语言规定:else与前面最接近它而又没有和其他else语句配对的if语句配对。同时从书写格式上了要注意,要有层次感。如果if的数目和else的数目相同,从内层到外层一一对应,不易出错,如果if与else的数目不一样,为实现编者的意图,必要的时候必须加“”,来强制确定配对关系。否则,就不能实现编程者的真正意图。02cbxax042 acb042 acb例:求方程从代数知识可以知道:有两个不等的实根。有两个相等的。的根的值?042 acb有两个虚根。 #include “math.h”main()flost a ,b ,c ,delta,x1,x2,rea

46、lpart,imagepart;scanf(“%f,%f,%f”,&a,&b,&c);if (fabs(a)=1e-6)printf(“这是一次方程x=%f”,-c/b);elsedelta=b*b-4*a*c;if(fabs(delta)1e-6)x1=(-b+sqrt(delta)/(2*a);x2=(-b-sqrt(delta)/(2*a);printf(“有两个不等的实根:%8.4f 和%8.4fn”,x1,x2);elserealpart= -b/(2*a);imagepart=sqrt(-delta)/(2*a);printf(“有两个虚根:n”);prin

47、tf(“%8.4f+%8.4f in”,realpart,imagepart);printf(“%8.4f-%8.4f in”,realpart,imagepart);3.3.8 else if语句语句一般形式:一般形式: if (条件条件1) (语句语句1)else if (条件条件2) (语句语句)else if (条件条件3) (语句语句)else if (条件条件4) (语句语句)else (语句语句)注意:注意:各条件各条件是并列是并列关系,关系,而不是而不是包含关包含关系。系。例:例:大学里对不同性质的学生听课收费不同。某校是这样规定的:本校全日制学生不收费。本校夜大学生选课学分及

48、以下付400元,然后每增加一个学分付50元。对外校学生选课12学分及以下付800元,然后每增加一个学分付100元。输入某个学生的编号,选课分以及学生应付的学费。分析:学分_n,收费_x,编号_number,学生的类别_p。根据题意,分3种情况考虑:A. 本校全日制:x=0B. 本校夜大:n12,x=400+(n-12)*50C. 外校: n12,x=800+(n-12)*100main()int n,x,number,p;printf(“ 学生收费管理n”);printf(“=n”);printf(“1-本校全日制学生n2-本校夜大学生n3-外校学生n”);printf(“请输入学生的类别(1

49、3):”);scanf(“%d%d”,&number,&n);printf(“请输入学生的编号和学分:“);scanf(“%d%d”,&number,&n); if (p= =1) x=0; else if (p= =2) if(n=12)x=400;else x=400+(n-12)*50;elseif (n=12)x=800;elsex=800+(n-12)*100;printf(“学生%4d应交费%4d元”,number,x);3.3.9 switch结构的应用结构的应用 if 语句只能实现两路分支,在两者中选择其一。虽然嵌套的if语句可以实现多路的检验,

50、但有时不够简洁。同时一定程度上影响可读性。为此c语言提供了实现多路选择的另一个语句switch,称为开关语句。用switch语句。 switch语句的般形式是:switch(表达式)case 常量表达式:语句序列case 常量表达式:语句序列.case 常量表达式n:语句序列ndefault:语句序列n+1注意:注意:. case后面发布是常量表达式,因此不能 是包含变量的表达式。 case和常量之间要有空格,case后面的 常量之后有“:”,且所有case 包含在 B. “”里。例例 2000年元旦是星期六,求出2000年的任何一个日期 是星期几(用06表示星期日星期六)。main() in

51、t month,day,week,todalday; int err=0; printf(“请输入月,日:n”); scanf(“%d,%d”,&month,&day) totalday=day; /*day保存当前的日期/ switch(month) case 1:totalday+=0;break; case2:totalday+=31;break; case 3: totalday+=60;break; case4: totalday+=91;break case5: totalday+=121;break; case6: totalday+=152;break; cas

52、e7: totalday+=182;break; case8: totalday+=213;break; case9: totalday+=244;break; case10: totalday+=274;break; case11: totalday+=305;break; case12: totalday+=335;break; default:printf(“输入错误”);err=1; if (err=0) week=( totalday+5)%7; printf(“2000年d月%d日是星期%d”,month,day,week”);3.4 循环型程序设计循环型程序设计3.4.1 穷举与

53、迭代算法()穷举穷举是一种重复型算法。它的基本思想是:对问题的所有可能状态进行 一一测试,直到找到解或全 部可能状态都测试过为止。循环控制有两种方法: A. 计数法:先确定循环次数,然后逐次 测试,完成测试次数后,循环结束。 B. 标志法:达到某一目标后,使循环 结束。()迭代迭代是一个不断用新值取代变量的旧值,或由旧值递 推出变量的新值的过程。3.4.2 while结构的应用一般形式:While(条件)循环体例:从1加到1000,并将结果打印出来。#include “stdio.h”main() long sum=0;int i=1;while(i=1000)sum+=i;i+;printf

54、(“总和是%ldn”,sum);#include stdio.hmain()char c;while(c=getchar()!=EOF)putchar(c);例:将输入的字符原样输出。注意:“EOF“是一个符号常数,称为文件结束标志。 当从键盘输入CtrlZ (或遇到文件结束标志) ,c的值得到-1,等于EOF.使用前要加上:”#include stdio.h例:求n! 的值?main()int i,sum,fac,n;scanf(%d,&n);if(n=0)sum=1;Elsei=1;fac=1;sum=0;while(i=n) fac*=i;sum+=fac; i+; printf

55、(sum=%8d,sum);例:爱因斯坦的阶梯问题。设有一阶梯,每步跨2阶,最后余1阶;每步跨3阶,最后余2阶;每步跨5阶,最后余4阶;每步跨6阶,最后余5阶;每步跨7阶时,正好到阶梯顶。问共有多少阶梯?main()int ladders=7;while(ladders%3!=2|ladders%5!=4|ladders%6!=5)ladders+=14;printf(flight of stairs=%dn,ladders);3.4.3 dowhile结构的应用一般形式为:do 循环体 while (条件表达式) ;3.4.4 for 结构的应用for(表达式1;表达式2;表达式3) 循环体

56、语句一般形式为:for(循环变量赋初值;循环条件;循环变量自增) 循环体语句常用形式为: 例:fibonacci数列f(n)是一个算术序列n的所有值是正整数序列,这个序列根据下面的算法求得 1 n=1 f(n)= 1 n=2 f(n-2)+f(n-1) n如:f(3)=f(3-2)+f(3-1)=f(1)+f(2)=1+1=23 main() long int f,f1=1,f2=1;int I , n ;printf (“请输入n”: “ ) ;scanf (“%d”,&n) ; printf ( “ %8ld%8ld”,f1,f2) ;for (i=3;i=n;i+) f=f1+f

57、2 ; f1=f2 ; 存放第一个数 f2 = f ; 存放第二个数 printf (“ %8ld” , f ) ; if ( i%5=0) printf(“n”); 例相传古代印度国王舍罕要褒奖他的聪明能干的宰相达依尔(国际象棋发明者),问他需要什么,达依尔回答:“国王只要在国际象棋的棋盘上第一个格子放粒麦子,第二个格子放上粒,第三格子放粒,以次类推,每格加一倍,直到放到64格,我就感恩不尽了”。国王答应了,结果全印度的粮食用完还不够,国王很纳闷,怎么也算不清这笔帐。现在用语言编程来算一下。222633221 m3108需要计算sum=算出小麦的颗粒数。小麦大约1.42main() int

58、n ; double v ,sum=0.0 , t =1.0 ; for (n=0;n64;n+) sum+=t; t*=2; printf(“sum=%en”,sum); v=sum/1.42e8 ; printf(“v=%e”,v); 粒,为体积。例 求整数3100中的素数。如果是一个大于等于2的整数,并且只有1和本身是它的因子,没有别的正因子,则称是一个素数(质数)。即除1和它本身之外不能被其他整数整除。为了检查某数是否是素数,采用的方法是,从起不断增加,直到,逐个相除,只要有一个数能整除,说明该数不是素数。 main() int i , n,num for ( n=3,num=0 ;

59、n=100 ; n+)i = 2 ; While (i = A & ch= ach= z) putchar(ch); while(1) continue语句语句:continue语句的一般形式为:continue ;其语义为:结束本次循环,即跳过循环语句中尚未执行语句,接着进行循环条件的判定。comtinue语句只用在for,while,do-while等循环体中,常与if语句在一起使用,用来加速循环例 求1100之间不能被12整除的数。#include “stdio.h”main() int n ; for (n=1 ;n=100 ;n+) if (n%12=0)continue ;

60、printf (“%4d”,n)goto语句语句 几乎所有的计算机语言都含有这条语句,这是一条无条件跳转语句。goto语句的一般形式为:goto语句标号;其语义是:无条件地转向语句标号处语句标号应是一个有效地语言标识符,不能是整数标号出现在程序其他位置时,其后跟一个冒号;goto语句通常与if语句连用,在满足某一条件时,程序跳到标号处执行而且goto语句只限于在同一程序段内跳转,不可能跳到另一个函数由于大量使用goto语句的无条件转移会打乱各种有效的控制语句,造成程序结构不清晰,再加上goto语句可以用别的语句代替,因此仅在可以简化控制流程且提高程序执行效率的情况下使用例 求1100之间的整数之和 int i =1,sum=0; loop: if (i=100) sum+=i;i+;goto loop ;printf (“%d/n”,sum);例 求最大公约数和最小公倍数求一个自然数m .n的最大公约数,通常采用欧及里得算数,即辗转相除法求从求最大公约数算法可知,这是一个循环过程.循环体是:r=m%n,m

温馨提示

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

评论

0/150

提交评论