




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言基本语法归纳及实例介绍,计算机教学中心 李雪飞,提 纲,C语言概况 C程序的结构 数据类型、运算符与表达式 最简单的C程序设计顺序程序设计 选择结构程序设计 循环控制 数组 函数 指针,C语言概况,C的优点 1)、高效 2)、可移植 3)、灵活 C的缺点 可读性差,学习应用较难。,C语言概况-简单的C程序,例1.1 main( ) printf(This is a C program.n); 该程序的作用:在屏幕上输出一行信息: This is a C program.,1、main( ) 表示“主函数”,每一个C程序都必须有且只有一个主函数。 2、main函数体由大括号 括起来。 3、
2、语句后面有一个分号。. 4、printf( )是C语言的输出函数。双引号内的字符 被原样输出。 5、“n”是换行符,即在输出This is a C program之后换行。,例1.2求两数之和。 main( ) int a, b, sum; /*定义三个整型变量。(int = integer)。*/ a = 123;b = 456; /*把常数123赋给变量a,把常数456赋给变量b*/ sum = a + b; /*计算a、b之和,并把和值赋变量给sum*/ printf(“Sum is %dn”, sum);/*输出sum的值*/ 程序的输出信息为: sum is 579 /* */中间的
3、内容表示“注释”。注释是程序员对程序某部分的功能和作用所做的说明,是给人看的,对编译和运行不起作用。 %d表示输出的数据类型是十进制整数类型。在输出时,该位置用对应变量sum的值代替。,例1.3输入两个整数,输出其中的最大值。,int max(int x,int y) /*求两数最大值函数max*/ int z;if(xy) z=x; else z=y;return (z); /*将z的值返回给主函数main*/ /*返回值通过函数名max带回main函数调用处*/ main ( ) /*主函数*/ int a,b,c;scanf(“%d,%d”, /*输出最大值*/,C程序的结构,、C 程序
4、是由函数构成的。一个C源程序至少包括一个函数(main函数:它代表程序开始执行的起始位置),也可以包括一个main函数和若干其它函数。因此,函数是C程序的基本单位。,C程序中有三种类型的函数: 1).main():主函数,每一个C程序必须且只有一个main()函数。 2).开发系统提供的特殊函数,如printf( )、scanf( )等。 Turbo C开发系统提供三百多个函数。 3).程序员自己设计的函数,如例1.3中的函数max()。 C的函数相当于其它语言中的子程序。用函数来实现特定的功能。可以说C是函数式的语言。程序全部工作都是由函数来完成的。C的这种特性很容易实现模块化。,C程序的结
5、构,C程序的结构,、一个函数由两部分组成: ()函数的说明部分。包括函数名、函数类型、函数属性、函数参数(形参)名、形式参数类型。 如int max (int x, int y) 函数类型 函数名 函数参数类型 函数参数名 函数参数类型 函数参数名 ()函数体。即函数说明部分下面的大括弧.内的部分。如果一个函数内有多个大括弧,则最外层的一对 为函数体的范围。,函数体一般包括: 变量定义。如例1.3中main函数中的“int a,b,c;” 执行部分。由若干个语句组成。 当然,在某些情况下也可以没有变量定义部分(例如 例1.1)。甚至可以既无变量定义也无执行部分,如:dump() 它是一个空函数
6、,什么也不干,但这是合法的。,C程序的结构,、一个C程序总是从main函数开始执行的,而不论main函数在整个程序中的位置如何(main函数可以放在程序最前头,也可以放在程序最后,或在一些函数之前在另一些函数之后)。 、 C程序书写格式自由,一行内可以写几个语句,一个语句可以分写在多行上。C程序没有行号,也不象fortran或cobol那样严格规定书写格式(语句必须从某一列开始书写)。,C程序的结构,、每个语句和数据定义的最后必须有一个分号。分号是C语句的必要组成部分。例如:c=a+b; 分号不可少。即使是程序中最后一个语句也应包含分号(这是和pascal语言不同的)。 、C语言本身没有输入输
7、出语句。输入和输出的操作是由库函数scanf和printf等函数来完成的。C对输入输出实行“函数化”。 、可以用/*/对C程序中的任何部分作注释。可以增加程序的可读性。,C程序的结构,程序开发过程,数据类型、运算符与表达式,3.1 信息在计算机中的存储与表示,计算机的基本功能是进行数据的计算和加工处理,程序和数据在计算机的存储是用二进制形式表示的。 数与字符是自然信息与计算机二进制信息的中转环节。 数制:就是用一组固定的数字和一套统一的规则来表示数据的方法。 日常使用的十进制(逢十进一) 机器内部的二进制(逢二进一) 其它常用的数制:八进制,十六进制,不同数制之间的对应表示,10,A,B,C,
8、D,E,F,20,10,11,12,13,14,15,16,17,数制间的转换,1.二、八、十六进制转换为十进制 按权展开法。 例: (101.11)2=122+021+120+12-1+12-2 =(5.75) 10 (127.4)8=182+281+780+42-1 =(87.5) 10,数制间的转换,2.十进制转换为二、八、十六进制 整数部分:除R取余法(先余为低,后余为高) 小数部分:乘R取整法(先整为高,后整为低) 转换精度问题 例: (4.6875)10=(?) 2 结果: (100.1011) 2 (87.5)10=(?) 8 结果: (127.47) 8,数制间的转换,3.二进
9、制与八、十六进制之间的转换 八、十六进制转换为二进制 一分为三、一分为四 例: (23.54)8=(010011.101100) 2 =(10011.1011) 2 (13.B)16=(00010011.1011) 2 =(10011.1011) 2 二进制转换为八、十六进制 合三为一、合四为一,3.2 C的数据类型,数据结构指的是数据的组织形式。 不同的计算机语言所允许定义和使用的数据结构是不同的。 处理同一类问题,如果数据结构不同,算法也会不同。 所以,我们应当综合考虑算法和数据结构,选择最佳的数据结构和算法。 数据结构+算法=程序 对程序当中所用到的所有数据都必须指定其数据类型。 C语言
10、的数据结构是以数据类型形式出现的。,C的数据类型如下:,3.2 常量与变量,3.2.1 常量和符号常量 3.2.2 变量,3.2.1 常量和符号常量,在程序运行过程中,其值不能被改变的量称为常量。 常量分为: (1)整型常量;如12,0,3等; (2)实型常量;如4.6,1.23等; (3)字符常量;如a,d等; (将在后面的小节中详细讲解) 常量一般从其字面形式即可判别,这种常量称为字面常量或直接常量。 也可以用一个标识符代表一个常量。如例3.1,例 3.1 符号常量的使用。,#define PRICE 30 main() int num,total; num=10; total=num*P
11、RICE; printf(“total=%d”,total); 程序中用#define 命令行定义PRICE代表常量30,此后凡在本文件中出现的PRICE都代表30,可以和常量一样进行运算。 程序运行结果为:total=300,符号常量,用一个标识符代表一个常量的,称为符号常量,即标识符形式的常量。 注意:符号常量不同于变量。符号常量的值在其作用域(例3.1中即为main()函数)内不能被改变,也不能被再次赋值。如:在主函数main中再次用“PRICE=40”语句对PRICE赋值是错误的。 为了方便区分符号常量与变量,习惯上符号常量名大写,变量名小写。,使用符号常量的好处,(1)含义清楚。 定
12、义符号常量名时应考虑“见名知意”,在一个规范的程序中不提倡使用很多的常数,如:sum=15*30*23.5*43.在检查程序时搞不清各个常数究竟代表什么。应尽量使用“见名知意”的变量名和符号常量。 (2)在需要改变一个常量时能够做到“一改全改”。例如,在程序中多处用到某物品的价格,如果价格用常数表示,则在价格进行调整时,需要在程序中作多处修改;若使用符号常量PRICE代表价格,则只需在定义该符号常量处作一次修改即可。如:#define PRICE=35,3.2.2 变量,其值可以改变的量称为变量。一个变量应该有一个名字,在内存中占据一定的存储单元。在该存储单元中存放该变量的值。 注意:变量名与
13、变量值的区别。,3,a,变量名(一个符号地址,在对程序编译时系统分配给它一个内存地址),变量值(在程序中对变量取值,实际上是通过变量名找到相应内存地址,从其存储单元中读取数据),存储单元,变量的使用是程序设计的中心环节之一,应掌握: (1) 变量的定义:某一时刻值是确定的,不同时刻可能取不同的值,其改变是不连续的。 (2) 变量的两个要素 变量名:它是一个标识符,代表一定的内存存储单元,存储单元有一个地址。C语言以“(指定变量a,b为整型)unsigned short c,d; (指定变量c,d为无符号短整型)long e,f (指定变量e,f为长整型) 对变量的定义,一般是放在一个函数的开头
14、部分的声明部分,变量的作用域是整个函数;也可以放在函数中的某一分程序内,但变量的作用域只限于该分程序内(这将在第8章介绍)。,例3.2 整型变量的定义与使用,main() int a,b,c,d; /*指定a,b,c,d为整型变量*/ unsigned u; /*指定u为无符号整型变量*/ a=12;b=-24;u=10; c=a+u;d=b+u; printf(“a+u=%d,b+u=%dn”,c,d); 运行结果为:a+u=22,b+u=-14 可以看到:不同种类的整型数据可以进行算术运算。在本例中是int型数据与unsigned int型数据进行加减运算。,3.4 实型数据,3.4.1
15、实型常量的表示方法 3.4.2 实型变量 3.4.3 实型常量的类型,3.4.1 实型常量的表示方法,实数在C语句中又称为浮点数。实数有两种表示形式: (1)十进制数形式。它由数字和小数点组成(注意必须有小数点)。0.123, .123, 123.0, 123., 0.0都是十进制数形式。 (2)指数形式。如123e3或123E3都代表123103 。但注意字母e(或E)之前必须有数字,且e后面指数必须为整数,如e3, 2.1e3.5, .e3, e等都不是合法的指数形式。,3.4.2 实型变量,1. 实型数据在内存中的存放形式 2. 实型变量的分类 3. 实型数据的舍入误差,3.4.2 实型
16、变量,1. 实型数据在内存中的存放形式 2. 实型变量的分类 3. 实型数据的舍入误差,3.5 字符型数据,3.5.1 字符常量 3.5.2 字符变量 3.5.3 字符数据在内存中的存储形式 3.5.4 字符串常量,3.5.1 字符常量,C的字符常量是用单引号括起来的一个字符。如a, D, ?等都是字符常量。注意,a和A是不同的字符的常量。 除了以上形式的字符常量外,C还允许用一种特殊的字符常,就是以一个“”开关的字符序列。例如,前面已经遇到过的,在printf函数中的n,它代表一个“换行”符,这种非显示字符难以用一般形式的字符表示,故规定用这种特殊形式表示。 这类特殊的字符称为“转义字符”。
17、,转义字符,a. 控制字符: t 水平制表(跳到下一个tab位置); r 回车; n 换行; b. 疑难字符: 单引号字符 反斜杠字符c. 指定ASCII码对应的字符:格式1: xhh:1到2位十六进制数ASCII码对应的字符如:x42表示字符“B”;格式2:ddd: 1到3位八进制数ASCII码对应的字符 如:102同样表示字符“B”;,3.5.2 字符变量,字符型变量用来存放字符常量,注意只能放一个字符,不要以为在一个字符变量中可以放一个字符串(包括若干字符)。字符变量的字义如下: char c1,c2; 它表示c1和c2为字符型变量,各可以放一个字符。因此可以用下面语句对c1,c2赋值:
18、 c1=a;c2=b 一般以一个字节来存放一个字符,或者说一个字符变量在内存中占一个字节。,3.5.3 字符数据在内存中的存储形式,将一个字符常量放到一个字符变量中,并不是把该字符本身放到内存单元中,而是将该字符的ASCII码放到存储单元中,而且以二进制形式存放。例如:执行赋值语句c1=a;c2=b;字符a的ASCII码为97,b为98,在内存中变量c1,c2的值如图所示: 既然在内存中,字符数据以ASCII码存放,它的存储形式就与整数的存储类似,这使得字符型数据和整型数据之间可以通用。,97,98,c1,c2,01100001,01100010,c1,c2,字符型数据和整型数据的通用性,一个
19、字符数据既可以以字符形式输出,也可以以整数形式输出。 两种通用形式的输出;以字符形式输出时,需要先将存储单元中的ASCII码转换成相应字符,然后输出;以整数形式输出时,直接将ASCII码作为整数输出。 对字符数据进行算术运算;相当于对它们的ASCII码进行整数的算术运算。 相互赋值;字符数据与整型数据可以相互赋值。,两种通用形式的输出,main() char c1,c2; c1=97;c2=98; (等价于c1=a;c2=b;) printf(“%c%cn”,c1,c2); printf(“%d%dn”,c1,c2); ,将97和98两个整数直接存放到c1和c2的内存单元中。,先将字符a 和b
20、化成ASCII码97和98,然后放到内存单元中。,两者的作用和结果是完全相同的,程序输出如下: a b 97 98,对字符数据进行算术运算,例3.7 大小写字母的转换。 main() char c1,c2; c1=a;c2=b; c1=c1-32;c2=c2-32; printf(“%c%c”,c1,c2); 运行结果为: A B,a的ASCII码为97,A为65; b为98,B为66。从ASCII 代码表中可以发现:每一个 小写字母比它相应的大写字母 的ASCII码大32。 C语言允许字符数据与整数 直接进行算术运算。,相互赋值,字符数据与整型数据可以相互赋值。 main() int i;
21、char c; i=a; c=97; printf(“%c,%dn”,c,c); printf (“%c,%dn”,i,i); 运行结果:a,97 a,97,3.5.4 字符串常量,前面已提到,字符常量是由一对单引号括起来的单个字符。C语言除了允许使用字符常量外,还允许使用字符串常量。 字符串常量是一对双引号括起来的字符序列。如:“How do you do.”, “CHINA”, “$123.45”都是字符串常量。 可以输出一个字符串,如printf(How do you do.);,不要将字符常量与字符串常混淆。a是字符常量,“a”是字符串常量,二者不同。 假设C被指定为字符变量: cha
22、r c; c=a; 是正确的; 而 c=“a”; 是错误的。c=“CHINA”, 也是错误的。 不能把一个字符串赋给一个字符变量。,究竟为什么c=a就是正确的,而c“a”就错了呢?,3.6 变量赋初值,程序中常需要对一些变量预先设置初值。C语言允许在定义变量的同时使变量初始化。 int a=3; /*指定a为整型变量,初值为3*/ float f=3.56; /*指定f为实型变量,初值为3.56*/ char c=a; /*指定c为字符变量,初值为a*/ 也可以使被定义的变量的一部分赋初值。 int a,b,c=5; /*指定a,b,c为整型变量,只对c初始化*/ 如果对几个变量赋予初值3,应
23、写为:int a=3,b=3,c=3; 不能写成:int a=b=c=3,初始化不是在编译阶段完成的(只有在第8章中介绍的静态存储变量和外部变量的初始化时在编译阶段完成的)。 如:int a=3; 相当于:int a; /*指定a为整型变量*/ a=3; /*赋值语句,将3赋给a*/ 如:int a,b,c=5; 相当于:int a,b,c; /*指定a,b,c为整型变量*/ c=5; /*赋值语句,将5赋给c*/,3.7 算术运算符和算术表达式,3.7.1 C运算符简介 3.7.2 算术运算符和算术表达式 1. 基本的算术运算符 2. 算术表达式和运算符的优先级与结合性 3. 强制类型转换运
24、算符 4. 自增、自减运算符 5. 有关表达式使用中的问题说明,3.7.1 C运算符简介,C语言是表达式语言,除了控制语句和输入输出外几乎都是表达式。如:赋值符“”作为赋值运算符,而方括号“”作为下标运算符等。 C的运算符有13类之多。,C的运算符,1. 算术运算符(+,-,*,/,%,即加,减,乘,除,求余) 2. 关系运算符( ,=,|, 前置形式运算规则:先对表达式中含有前置自增(减)运算符的变量进行自加(减)1,然后用这些变量的新值参与表达式运算。 后置形式运算规则:先用变量原值参与表达式运算,然后对含有后置自加(减)运算符的变量进行自加(减)1运算。,main() main() in
25、t j,i=3; int j,i=3; j=+i;(相当于i=i+1;j=i) j=i+;(相当于j=i;i=i+1) printf(“%d,%d”,i,j); printf(“%d,%d”,i,j); 运行结果:4,4 运行结果:4,3 (1)自增运算符()和自减运算符(),只能用于变量,不能用于常量或表达式; (2)和的结合方向为“自右至左”。 考虑:若i的初值为3,那么print(“%d”,-i+)的结果 应该为多少呢?,3.8 赋值运算符和赋值表达式,1. 赋值运算符 2. 类型转换 3. 复合的赋值运算符 4. 赋值表达式,1. 赋值运算符,赋值符号“”就是赋值运算符,作用是将一个数
26、据赋给一个变量。 如“a=3”的作用是执行一次赋值操作(或称赋值运算),把常量3赋给变量a。 也可以将一个表达式的值赋给一个变量。如“a=3+5-8%5”,相当于把结果值5赋给变量a(“a=5”)。,2. 类型转换,如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时要进行类型转换。,3. 复合的赋值运算符,在赋值符“”之前加上其他运算符,可以构成复合的运算符。如:a+=3等价于a=a+3,x%=3等价于x=x%3。 注意:赋值符“”右边看作一项。 凡是二元运算符,都可以与赋值符一起组成复合赋值符。C语言规定了10种复合赋值运算符:+=,-=,*=,/=,%=,=, a=b=c=0
27、; 连续使用等号时,从右向左顺序赋值: a=(b=(c=0); 赋值表达式也可以包含复合的赋值运算符。如: a+=a-=a*a也是一个赋值表达式。 若a的初值为12,则: 先进行“a-=a*a”,相当于a= a- a*a,a的值为 12-144=-132; 再进行“a+=-132”的运算,相当于“a= a+(-132)”,a的值为-132-132=-264。,3.9 逗号运算符和逗号表达式,逗号运算符(又称顺序求值运算符):, 逗号表达式:用逗号运算符把两个表达式连接起来的表达式。 一般形式为:表达式1,表达式2,.,表达式n 逗号表达式的值:表达式n的值. 如:逗号表达式“3+5,6+8”的
28、值为14。 如:“a=3*5,a*4”,由于赋值运算符的优先级高于逗号运算符(逗号运算符在所有运算符中级别最低),因此应先求解a=3*5,再求解a*4,得到逗号表达式的值60。,一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式,如:(a=3*5,a*4),a+5,先计算出a的值为15,由于a*4的操作并没有改变a的值,所以a+5的值为20。因此,逗号表达式最终的值为20。 在许多情况下,使用逗号表达式的目的只是想分别得到各个表达式的值。 逗号表达式最常用于循环(for)语句。 注意:并不是任何地方出现的逗号都作为逗号运算符。例如函数参数也是用逗号来间隔的,如:printf(“%d,%d
29、,%d”,a,b,c);,课堂作业:,2.1 指出下面哪些是合法的变量名: 123 abc a+b a_b pad ?12 Li_Li *P 2.2 a在内存中占 个字节,“a”在在内存中占 个字节. 2.3 写出下面程序的运行结果: main() char ch; ch=B; /*B的ascii码的值为66*/ printf(“%c,%dn”,ch,ch), 1 2 B 66,2.4 写出下面程序的运行结果: main() int a=10, b , c , d ; int b,c; a+=6; b = (c=20, 6, a+2 ); printf(a=%d,b=%d,c=%dn,a,b,
30、c); ,运行结果:a=16,b=18,c=20,2.5写出下面程序的运行结果: main() int a=4; int b,c; c=a+(b=2); a+=a-=a*a; printf(%d,%d,%dn,a,b,c); 2.6 写出下面程序的运行结果: main() int a,b,c=9; a=3,b=4; c%= a+b; printf(“%dn”,c) ,运行结果:-24,2,6 运行结果:2,2.7 写出下面程序的运行结果: main() int i,j,m,n; i=8;j=10; m=+i; n=j+; printf(%d,%d,%d,%dn,i,j,m,n); ,运行结果:
31、9,11,9,10,2.8 写出下面程序的运行结果: main() float x=5.4; int i; i=(int)x; printf(”x=%f,i=%dn,x,i); ,运行结果:x=5.400000,I=5,第四章 最简单的C程序设计顺序程序设计,4.1 C语句概述 4.2 赋值语句 4.3 数据输入输出的概念及实现 4.4 字符数据输入输出函数 4.5 格式输入与输出 4.6 顺序结构程序设计举例,4.1 C语句概述,与其他高级语言一样,C语言的语句用来向计算机系统发出操作指令。 一个语句经编译后产生若干条机器指令。 一个实际的程序应当包含若干条语句。 C语句都是用来完成一定的操
32、作任务的;声明部分的内容不应称为语句。如:int a;不是一个C语句,它不产生机器操作,而只是对变量的定义。,C程序结构,C程序,源程序文件1,源程序文件2,源程序文件n,预处理命令,全局变量声明,函数1,函数n,函数首部,函数体,局部变量声明,执行语句,.,C语句分类,C语句可以分为以下5类: 1. 控制语句; 2. 函数调用语句; 3. 表达式语句; 4. 空语句; 5. 复合语句;,1. 控制语句,完成一定的控制功能。C只有9种控制语句: if()else (条件语句) for() (循环语句) while() (循环语句) dowhile() (循环语句) continue (结束本次
33、循环语句) break (中止switch或循环语句) switch (多分支选择语句) goto (转向语句) return (从函数返回语句) ( )表示条件,表示内嵌的语句。,2. 函数调用语句,由一次函数调用加一个分号构成一个语句。 如:printf(“This is a C statement.”);,一次函数调用,分号,3. 表达式语句,由一个表达式构成一个语句;最典型的是,由赋值表达式构成一个赋值语句(表达式后面加分号即构成语句)。如:a=3是一个赋值表达式,而a=3;是一个赋值语句。 一个语句必须在最后出现分号。 任何表达式都可以加上分号而成为语句。如:x+y;是语句,但没有意
34、义(没有将相加之和赋给另一个变量)。 表达式能构成语句是C语言的一个重要特色。C中大多数语句是表达式语句(包括函数调用语句),所以有人称C语言为“表达式语言”。,4. 空语句,空语句:仅包含一个分号的语句,它什么都不做。有时用来做被转向点,或是循环语句中的循环体(循环体是空语句,表示循环体什么也不做。) 如:;,5. 复合语句,由大括号 括起来的语句序列,称为复合语句,或是分程序。 如: z = x + y; t = z / 100; printf(%f,t); 注意:复合语句中最后一个语句最后的分号不能忽略不写。 C语言允许一行写几个语句,也可以一个语句拆开写在几行上。,4.2 赋值语句,C
35、语言的赋值语句具有其他高级语言赋值语句的一切特点和功能,但也有不同之处: 1、C语言中的赋值号“=”是一个运算符,而其它大多数语言中赋值号“=”不是运算符。 2、关于赋值表达式和赋值语句的概念。其他大多数高级语言中没有“赋值表达式”这一概念。作为赋值表达式可以包括在其他表达式之中,如: if(a=b)0) t=a;(先赋值,将b的值赋给a;再判断a是 否0,若0,则执行t=a; ) if(a=b;)0) t=a;(不合法:if条件不能包含赋值语句),4.3 数据输入输出的概念及实现,所谓输入输出是以计算机主机为主体而言的。从计算机向外部输出设备(显屏,打印机)输出数据称为“输出”;从输入设备(
36、键盘,磁盘)向计算机输入数据称为“输入”。 C语言本身不提供输入输出语句,输入和输出操作是由函数来实现的。 在C的标准函数库中提供了一些输入输出函数,例如,printf函数和scanf函数。在使用它们时,千万不要简单地认为它们是C语言的“输入输出语句”。printf和scanf不是C语言的关键字。完全可以不用printf和scanf这两个名字,而另外编两个函数,另用其它函数名。,C提供的函数以库的形式存放在系统中,它们不是C语言文本中的组成部分。因此各函数的功能和名,在各种不同的计算机系统所不同。 有些通用的函数(如printf和scanf等),各种计算机系统都提供,成为各种计算机系统的标准函
37、数(标准输入输出库的一部分)。在程序编译连接时,用户程序与标准文件相连,所以在程序中可以直接使用printf和scanf函数。 注意:在源程序中有printf函数,在编译时并不把它翻译成目标指令,而是在执行阶段中调用已被连接的函数库中的printf函数。,C语言函数库中有一批“标准输入输出函数”,它是以标准的输入输出设备(一般为终端设备)为输入输出对象的。其中有: putchar(输出字符) getchar(输入字符) printf(格式输出) scanf(格式输入) puts(输出字符串) gets(输入字符串),在使用标准I/O库函数时,要用预编译命令“#include”将“stdio.h
38、”文件包括到用户源文件中。即#include “stdio.h”(或#include )。stdio.h是standart input a=B; b=O; c=Y;putchar(a); putchar(b); putchar(c);运行结果:BOY,也可以输出控制字符,如putchar(n)输出一个换行符。如果将例4.1程序最后一行改为:putchar(a);putchar(n);putchar(b);putchar(n); putchar(c);putchar(n);则输出结果为:BOY,也可以输出其它转义字符,如:putchar(101) (输出字符A)putchar() (输出单引号字
39、符)putchar(015)(输出回车,不换行,使输出的 位置移到本行开头),4.4.2 getchar函数,此函数的作用是从终端(或系统隐含指定的输入设备)输入一个字符。getchar函数没有参数,其一般形式为:getchar() 函数的值就是从输入设备得到的字符。 例4.2:#include stdio.h main() char c; c=getchar(); putchar(c); ,在运行时,如果从键盘输入字aa (输入a后,按“回车” 键,字符才送到内存)a (输出变量c的值a),请注意,getchar()只能接收一个字符。getchar函数得到的字符可以赋给一个字符变量或整型变量
40、,也可以不赋给任何变量,作为表达式的一部分。 例如,例4.2第4、5行可以用下面一行代替:putchar(getchar(); 也可以用printf函数:printf(%c,getchar(); 在函数中要用getchar函数,应该在函数的前面(或本文件开头)用#include stdio.h”。因为在使用标准I/O库中的函数时需要用到“stdio.h”文件中包含的一些信息。,4.5 格式输入与输出,4.5.1 printf函数(格式输出函数) 4.5.2 scanf函数(格式输入函数),4.5.1 printf函数,1. printf函数的一般格式 2. 格式字符,printf函数的一般格式
41、,printf函数的作用是:向终端(或系统隐含指定的输出设备)输出若干个任意类型的数据。 注意:putchar只能输出字符,而且只能是一个字符;而printf可以输出多个数据,且为任意类型。,一般格式:printf(格式控制,输出列表) 如:printf(“%d , %c n” , i,c),格式说明: 将数据转换 为指定格式输出。,普通字符:即需要原样输出的字符(逗号,空格和换行符),输出列表:需要输出的数据,可以是表达式。,例:printf(“a=%d_b=%d”,a,b); 双引号中的字符除了“%d”和“%d”以外,还有非格式说明的普通字符“a=”、“b=”及空格“_”,它们按原样输出。
42、若a=3,b=4,则输出为:a=3_b=4,格式字符,对不同类型的数据用不同的格式字符。 常用的有以下几种格式字符: (1) d格式符 (6) s格式符 (2) o格式符 (7) f格式符 (3) x格式符 (8) e格式符 (4) u格式符 (9) g格式符 (5) c格式符,d格式符:输出十进制整数,%d: 按整型数据的实际长度 输出; %md: 输出m位(指定的输出字段宽度); (数据位数小于m位时左端补空格,大于m位时按实际长度输出); %ld,%mld:l表示输出“长整型”数据,也可以指定输出字段宽度; 一个int型数据可以用%d或%ld格式输出; 注:%后面的m(位数控制) 对于其
43、它格式符也适用。,例、(表示空格) int i = 123; long j = 123456; printf(%d,%5d,%ld, %8ld ,i ,i , j, j); 输出:,123,123,123456, 123456,c格式符:输出一个字符,一个整数,只要它的值在0255之间,也可以用字符形式输出。在输出前,系统会将该整数作为ASCII码转换成相应的字符;反之,字符数据也可以用整数形式输出。 例:4.4 main() char c=a; int i=97; printf(%c,%dn,c,c); printf(%c,%dn,i,i); 可以指定输出字段宽度:printf(“%3c”,
44、c);则输出:_a,输出: a,97 a,97,s格式符:输出一个字符串,(1)%s:原样输出字符串; 如:printf(“%s”,“CHINA”)输出:CHINA (2)%ms:输出字符串占m列;m全输出m,则m自动取n值,即保证n个字符正常输出。,例 4.5 main() printf(%3s,%7.2s,%.4s,%-5.3sn, CHINA,CHINA,CHINA,CHINA); 输出: CHINA, CH,CHIN,CHI ,m自动取n值,即等价于:4.4s,f格式符:以小数形式输出实数(单/双精度),(1)%f:由系统自动指定字段宽度,使整数部分全部输出,并输出6位小数。 (2)%
45、m.nf:指定输出的数据共占m列,其中由n位小数。若数值长度m,则左端补空格。 (3)%-m.nf:同%m.nf,只是输出的数值向左端靠,右端补空格。 注意:并非全部数字都是有效数字。 单精度实数的有效位数一般为7位,而双精度实数的有效位数一般为16位(小数6位)。,例4.6 main() float x,y; x=111111.111;y=222222.222; printf(“%f”,x+y); 运行结果为:333333.328125 显然,只有前7位数字是有效数字。,例4.7 main() double x,y; x=1111111111111.111111111; y=22222222
46、22222.222222222; printf(“%f”,x+y); 运行结果为:3333333333333.333010 可以看到,最后3位小数(超过16位)是无意义的。,例: 4.8 main() float f=123.456; printf(%f %10f %10.2f %.2f %-10.2fn,f,f,f,f,f); 输出: 123.455994 123.455994 123.46 123.46 123.46 ,按原样输出的字符,由于格式定义而输出的字符,4.5.2 scanf函数,getchar函数只能用来输入一个字符,用scanf函数可以用来输入任何类型的多个数据。 在前面已初
47、步接触到了scanf函数,在本节中再作详细介绍。 1. 一般形式 2. 格式说明 3. 使用scanf函数时应注意的问题,一般形式,scanf(格式控制,地址表列) “格式控制”含义同printf函数。“地址表列”是由若干个地址组成的表列,可能是变量的地址,或字符串的首地址。,例4.9:用scanf函数输入数据,main()int a,b,c;scanf(%d%d%d, 运行时按以下方式输入a,b,c的值:3 4 5 (输入a,b,c的值)3,4,5 (输出a,b,c的值) scanf(%f,%f,%f , 运行情况如下: 3,4,6 a=3.00, b=4.00, c=6.00 area =
48、5.33,例4.11输入一个大写字母,改为小写字母输出。,#include main() char c1,c2; c1=getchar(); printf(“%c,%dn”,c1,c1); c2=c1+32; printf(“%c,%dn”,c2,c2); 运行情况如下:A A,65 a,97,第5章 选择结构程序设计,C语言中选择结构是用if语句实现的。 if语句最常用的形式是: if (关系表达式) 语句1 else 语句2 例如:if (x0) y=1;else y=-1; 其中,x0是一个关系表达式,“”是一个关系运算符。,5.1 关系运算符和关系表达式 5.2 逻辑运算 5.3 if
49、语句 5.4 switch语句 5.5 程序举例,5.1 关系运算符和关系表达式,关系运算是逻辑运算的一种。 所谓“关系运算”实际上是“比较运算”。将两个值进行比较,判断比较的结果是否符合给定的条件。 例如,a3是关系表达式,大于号“”是一个关系运算符,如果a的值为5,则满足给定的的“a3”条件,因此关系表达式a3的值为“真”(即“条件满足”);如果a的值为2,不满足“a3”条件,则称关系表达式的值为“假”。,5.1.1 关系运算符及其优先次序 5.1.2 关系表达式,5.1.1 关系运算符及其优先次序,C语言有六种关系运算符: (1) 大于 (4)= 大于或等于 (5)=(等于) 优先级相同
50、(低) (6)!= 不等于,算术运算符,关系运算符,赋值运算符,5.1.2 关系表达式,用关系运算符将两个表达式(算术表达式或关系表达式、逻辑表达式、赋值表达式、字符表达式)连接起来的式子,称为关系表达式。 如:ab,a+bb+c,(a=3)(b=5),ab”的值为“真”,表达式的值为1;“b+ca”的值为“假”,表达式的值为0。,例、a=3,b=2,c=1; 1). ca+b 等效于c(a+b) 表达式的值为0 2). ab=c 等效于(ab)=c 表达式的值为1 3). a!=bc 等效于a=(bc)(赋值表达式)表达式的值为1 例:a=3,b=2,c=1; d=abc f的值为0 (赋值
51、表达式),5.2 逻辑运算,5.2.1 逻辑运算符及其优先次序 5.2.2 逻辑表达式,5.2.1 逻辑运算符及其优先次序,C语言提供三种逻辑运算符: ,表达式,语句,假(0),真(非0),(2) if(表达式)语句1 else 语句2 例如:if (xy) printf(%d,x); else printf(%d,y);,表达式,语句1,语句2,假,真,(3) if (表达式1) 语句1 else if(表达式2)语句2 else if(表达式3)语句3 else if(表达式m)语句m else 语句n 例如:if (num500) cost=0.15;else if (num300) c
52、ost=0.10;else if (num100) cost=0.075;else if (num50) cost=0.05;else cost=0;,.,表达式1,表达式2,表达式3,表达式4,语句5,语句4,语句3,语句2,语句1,假,假,假,假,真,真,真,真,对if语句的三点说明,(1)if后面的“表达式”,一般为逻辑表达式或关系表达式。 例如:if(a=b执行结果:97,(2)第二、第三种形式的if语句中,在每个else前面有一分号,整个语句结束处有一分号。 例如:if (x0) printf(“%f”,x); else printf(%f,-x); 这个分号是if语句中的内嵌语句所
53、要求的。 如果无此分号,则出现语法错误。,(3)在if和else后面可以只含一个内嵌的操作语句,也可以有多个操作语句。若有多个操作语句,则用花括号“ ”将几个语句括起来成为一个复合语句。 例如:if(a+bc 注意:在 外面不需要再加分号。,例5.1:输入两个实数,按代数值由小到大输出这两个数。,main() float a,b,t; scanf(%f,%f, 运行示例: 3.6 ,-3.2 -3.20, 3.60,例5.2:输入三个数a,b,c,按由小到大输出。 main() float a,b,c,t; scanf(%f,%f,%f, 运行示例: 3,7,1 1.00,3.00,7.00,
54、3 7 1,3 7 1,1 7 3,1 3 7,5.3.2 if语句的嵌套,一般形式:if ( ) if ( ) 语句1 else 语句2 else if ( ) 语句3 else 语句4 *注意:使用嵌套if语句时,必须特别注意if与else配对: (1)从最内层开始,else总是与它上面最接近的(未曾配对的)if配对。 (2)避免if与else配对错位的最佳办法是加大括号,同时,为了便于阅读,使用适当的缩进。(只有大括号能保证if和else不错位配对,缩进只是为了便于阅读),内嵌if,内嵌if,5.3.3 条件运算符,若if语句中,在表达式为“真”和“假”时,且都只执行一个赋值语句给同一个
55、变量赋值时,可以用简单的条件运算符来处理。 例如: if(ab) max=a; else max=b; 可以用下面的条件运算符来处理:max=(ab)?a:b;其中“(ab)?a:b”是一个“条件表达式”。它是这样执行的:如果(ab)条件为真,则条件表达式取值a,否则取值b。,条件运算符要求有三个操作对象,称三目(元)运算符。它是C语言中唯一的三目运算符。条件表达式的一般形式为:表达式1?表达式2:表达式3,表达式1,条件表达式 取表达式2的值,条件表达式 取表达式3的值,假(0),真(非0),5.4 switch语句,switch语句是多分支选择语句。if语句只有两个分支可供选择,而实际问题
56、中常常需要用多分支的选择。 一般形式:switch(表达式) case 常量表达式1:语句1 case 常量表达式2:语句2 case 常量表达式n:语句n default :语句n+1 ,例:按照考试成绩的等级打印出百分之分数段。,grade,输出 “6069”,输出 “60”,输出 “error”,输出 “7084”,输出 “85100”,用switch语句实现,switch(grade) case A:printf(85100n); case B:printf(7084n); case C:printf(6069n); case D:printf(60n); default :print
57、f(errorn); 问题1:各个case和default的出现次序影响执行结果吗? 问题2:若grade=B,以上程序的输出结果是什么?,Default的出现次序会不会影响结果?和书中意见不同。,应该在执行一个case分支后,使流程跳出switch结构,即终止switch语句的执行。可以用一个break语句来达到此目的。 switch(grade)case A:printf(85100n);break; case B:printf(7084n);break; case C:printf(6069n);break; case D:printf(60n);break; default :printf(errorn);,在case后面,若包含一个以上的执行语句,可以不必用 括起来,系统会自动的顺序执行该case后面所有的执行语句。 多个case可以共用一组执行语句,如: case A:case B:case C: printf(60); break; ,习题5-6:判别学生成绩的等级: 小于60分,E
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年厂里厂里安全培训考试试题标准卷
- 2025温州二模253温州二模英语试卷
- 2024-2025企业安全培训考试试题加答案下载
- 2024计算机基础考试的策略与方法的试题答案
- 未来汽车美容师的技能需求与试题及答案
- 2024-2025安全管理人员安全培训考试试题(5A)
- 2024-2025公司厂级员工安全培训考试试题及答案5A
- 二手车评估师考试经验分享与2024年试题答案
- 2025年员工三级安全培训考试试题(历年考题)
- 现象认知面试题及答案高中
- 2024-2025学年二年级语文下册统编版第三单元基础达标卷(单元测试)(含答案)
- DB37T 4834-2025高速公路集中养护工作指南
- 2025年土木工程业务能力试题及答案
- 2025济南财金投资控股集团有限公司权属企业招聘(9人)笔试参考题库附带答案详解
- 2025年开封大学单招职业倾向性测试题库含答案
- 全国川教版信息技术八年级下册第二单元第2节《制作文创作品》教学设计设计
- DG-TG08-12-2024 普通中小学建设标准
- 实时数字孪生数据同步技术-深度研究
- Unit 4 History and traditions Project 说课稿 -2024-2025学年高中英语人教版(2019)必修第二册
- 《浅谈A企业消防安全管理中存在的问题及完善对策研究》6300字(论文)
- 秦汉考古Uooc课程答案
评论
0/150
提交评论