《C程序基础》PPT课件.ppt_第1页
《C程序基础》PPT课件.ppt_第2页
《C程序基础》PPT课件.ppt_第3页
《C程序基础》PPT课件.ppt_第4页
《C程序基础》PPT课件.ppt_第5页
已阅读5页,还剩105页未读 继续免费阅读

下载本文档

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

文档简介

第一章 程序基础,1.1 语言程序的基本结构 1.2 语言基本语法成分 1.3 语言数据类型 1.4 表达式和语句 1.5 程序运行过程 1.6 编写简单的程序 1.7 数据的输入与输出 1.8 C语言宏定义 1.9 算法 1.10 语言的产生、发展及特点,自学,什么是程序?,常见的软件:记事本、画图、Word、Excel、暴风影音、Windows XP、Unix等。 它们用某种计算机语言写成(如C、VC+、Java、C#等),由一系列详细的指令组成,能准确的告诉计算机怎么处理文字或数据。,程序员必须给出计算机要执行的详细指令序列,即程序。,程序就是完成某种功能的指令序列。,编写程序需要什么?,程序由一系列符号(字母、数字等)组成,不能由计算机直接识别。 程序不能由计算机直接识别,需要转换成二进制形式,称为编译(Compile),完成编译功能的程序称为编译器(Compiler)。,常见的语言编译器: Turbo C Turbo C+Borland C+ Visual C+,1.1 语言程序的基本结构,1.1.1 简单程序介绍,观察下面两个程序哪些相同的部分:,#include void main( ) printf(“This is a C program!n“); ,编译预处理命令,函数,语言程序的两大部分: 编译预处理命令:以“#”开头;一般放在程序的最前面 #include表示文件包含,即将后面文件的内容包含到本程序中 stdio.h是包含了输入输出函数的头文件 函数:一个程序中可以有多个,必须有一个main函数,#include void main( ) printf(“This is a C program!n“); , 函数:用于实现程序要求的功能 包括函数首部和函数体两部分:,函数首部:即函数的第一行,包括函数类型、函数名、参数(放在括号内,可以没有参数) 函数体:即由开始、到结束的内容,函数首部,函数体,#include void main( ) printf(“This is a C program!n“); ,、main是函数名,称为主函数。每个程序必须有且只能有一个main函数。程序总是从main函数开始执行。 、void用于说明函数值的类型,void表示函数空值(没有值)。 、函数体由一对大括号括起来;范围以“”开始,“”结束。 、printf是C语言的标准输出函数,表示把“”内的字符串按原样输出到显示器上(除非遇到%或)。 、“n”是换行符,即输出完后回车换行。 、每个语句必须以分号“;”结束。,This is a C program!,EG101.C,1.5.4 VC+ 6.0上机步骤,语言程序的基本结构:,#include void main( ) ,例. 输出下列图形:,* very good *,#include void main( ) ,printf(“*n“);,printf(“ very good n“);,printf(“*n“);,printf(“*n very goodn*n“);,原则:一行不要写的太长!,例2:,#include void main( ) /* 主函数 */ int a,b,sum; /* 定义三个整型变量 */ a=2; b=3; /* 为变量a,b赋值 */ sum=a+b; printf(“sum is %dn“, sum); ,说明: 、“/*/”表示注释部分,以“/*”开始,以“*/”结束;注释只是对程序的说明,仅起帮助阅读程序的作用,不影响程序的运行,可以放在程序的任意位置。注意不能嵌套注释(即/*/*/*/)。 、定义变量后,系统就为其分配相应大小的存储单元,用于存放其值。语言要求变量必须先定义,后使用。,、“=”为赋值运算符,把“=”右边表达式的值赋值给左边的变量 、“%d”表示以“十进制整数”形式输入输出数据,输出时代以一个十进制整数值,该值由“,”后边对应的变量或表达式提供 、本程序只能计算2、3之和,若要求其它数之和,则要修改程序,给使用程序带来很大的不便。,sum is 5,eg102.c,更通用的形式:,#include void main( ) int a,b,sum; scanf(“%d%d“, ,说明: 、scanf是C语言的标准输入函数,“&”的含义是得到后面变量的地址。即将输入的数按前面指定的格式给后面指定的变量 、“%d” 表示输入输出一个整数。 、本程序在运行时可输入任意两个整数,并求和输出。,eg102.c,可以是任意两个整数,即程序执行前不能确定a、b的值,程序运行中指定,例3:,#include void main( ) float a,b,c,aver; scanf(“%f%f%f“, /* 为变量aver赋值 */ printf(“aver is %fn“, aver); ,说明: 、float用于声明实型变量 、 “%f” 表示输入、输出一个实数,输出时默认位小数。“%.2f”表示控制输出位小数。 、本程序可对输入的任意3个实数计算平均值。,3 4 5 aver is 4.000000,eg103.c,例4:求任意2个整数中的较大数,#include void main( ) int a,b,c; scanf(“%d%d“, ,用函数实现比较大小 #include void main( ) int a,b,c; scanf(“%d%d“, ,12 34 max=34,eg104.c、eg105.c,1.1.2 程序的基本结构,#include #include #define /* 预处理命令 */ void main( ) 声明部分 /* 定义本函数中用到的变量 */ 执行部分 /* 完成本函数功能的若干语句 */ 其他函数 声明部分 执行部分 ,1、一个程序由一个或多个函数构成。程序中应至少包含一个main函数。函数是语言的基本单位(函数式语言)。 2、一个程序总是从main函数开始执行,而不论main函数在整个程序中的位置如何;一般说来,又随着main函数的结束而整个程序结束。,3、被调用的函数可以是系统提供的库函数,也可以是用户根据需要自己编写的函数。 4、语言本身没有输入输出语句,输入和输出操作由库函数scanf和printf等函数来完成,对输入输出实行函数化。 5、每个语句和数据定义的最后必须有一个分号;分号是语句的必要组成部分。,函数的构成:,一个函数由两部分构成: 1、函数首部:即函数的第一行。包括函数名、函数类型、函数参数(形参)名、参数类型。 int max(int x, int y) 注意:一个函数名后面必须跟“( )”作为函数的标志:main( ),2、函数体:即函数首部下面“ ”内的部分 函数体内一般又分为两部分:,、变量定义(数据声明)部分:定义在本函数中用到的变量或数组的数据类型; 、执行部分:由若干语句组成,完成函数所规定的功能。,int max(int x, int y) int z; if (xy) z=x; else z=y; return(z); ,源程序的书写格式和程序风格:,1、函数首部后面不要加分号。 2、程序的书写格式自由,一个语句可以写在多行上;一行内也可以写几个语句,但是都必须用“;”作为每个语句的结束标志。 3、可以用/*/对程序的任何部分作注释。 4、为了清晰的表现出程序的结构,建议采用锯齿形格式。,#include void main( ) int a,b,sum; a=2; b=3; sum=a+b; printf(“sum is %dn“,sum); ,#include void main( ) int a,b,c; scanf(“%d%d“, ,1.1.3 编写简单的程序,程序的三种结构:顺序结构,选择结构、循环结构。所谓顺序结构,是指在各函数中按照从上到下、从左到右的书写顺序依次执行。,例1.4 已知a=5, b=10,交换并输出a、b的值。 分析:交换两个变量需要借助第3个变量。,#include void main( ) ,int a=5, b=10, temp; /*初始化*/ temp=a; a=b; b=temp; printf(“a=%d,b=%dn“, a, b);,思考:交换a、b能否不借助于第3个变量?,eg106.c,a=a+b; b=a-b; a=a-b;,变量赋初值/初始化,语言允许在定义变量的同时给变量赋初值,即变量的初始化。 float f=3.56; int a,b,c=3; int a=3,b=3,c=3; int a=b=c=3;,int a,b,c=5;,int a,b,c; c=5;,例:从键盘输入两个整数,分别计算并输出它们的和、差、积、商及除得的余数。,算术运算符:+ - *(乘) /(除) %(求余,模) + - * /:两个整数运算结果为整数,但只要有一个是实数,结果就是double型数 %:要求参加运算的两个数必须都是整数,#include void main( ) ,int a, b; scanf(“%d%d“, ,printf(“%d,%d,%d,%d,%dn“,a+b, a-b, a*b, a/b, a%b);,EG107.C,原则: 一个句子不要写太长 输出数据时要有说明信息,用于表示输出数据的含义,思考:两个数相除如何才能得到实数?如0.33,int a=1, b=3, c; c=a/b; c=?,0,方法一:,float a=1, b=3, c; c=a/b; c=?,0.333333,将变量定义为实型,方法二:,int a=1, b=3; float c; c=1.0*a/b; c=?,0.333333,方法三:,强制类型转换,格式:(类型)变量 或 (类型)(表达式),int a=1, b=3; float c; c=(float)a/b; c=?,0.333333,int a=1, b=3; float c; c=(float)(a)/b;,int a=1, b=3; float c; c=(float)(a/b);,c=0.0,例1.6:计算圆柱体的表面积。,分析:圆柱体表面积S侧面积S1底面积S22 S1=dh,S2=r2,d=2r 因此,需要知道底面半径r和圆柱体高h,怎么办?,步骤: 设圆柱体的高为h,半径为r,表面积为s; 输入r、h的值; 计算底面周长d=2r; 计算侧面积s1=dh; 计算底面积s2=r2; 计算表面积:s=s1+2s2; 输出s的值。,#include void main( ) ,float r, h, s ; scanf(“%f%f“, , d, s1, s2;,是否可以合并步骤?,原则:只出现一次的变量可以省略!,#include #define PI 3.14 void main( ) ,float r, h, s; printf(“Input r, h:“); scanf(“%f%f“, ,用一个标识符代表一个常量的,称为符号常量,即标识符形式的常量。其值不能被改变,也不能再被赋值。 定义形式: #define 符号常量名 常量表达式或字符串 如: #define PRICE 30 #define LETTER abcdefg,3.1415926,EG108.C,原则:输入/输出要有提示信息,以说明相应数据的含义。,关于scanf、printf的说明:,关于格式控制符: 整型数据的输入输出都使用%d; 实型数据(float)的输入只能使用%f,不能是%.2f的格式。,scanf(“%d%d“, ,关于其它字符: scanf函数中只包括%d、%f等格式控制符,不要有其它字符。 printf函数中为了说明输出数据,往往包含其它字符。,scanf(“r=%d“, /不推荐,printf(“sum=%dn“,sum); printf(“a=%d,b=%dn“,a,b);,1.2 语言基本语法成分,语言字符集由字母、数字、空白、标点符号和特殊字符组成(在字符串常量和注释中还可以使用汉字和其它图形符号,如、)。由字符集中的字符可以构成C语言进一步的语法成分,如标识符、关键字、运算符等。,1.2.1 语言字符集, 字母:A-Z,a-z 数字:0-9 标点符号、特殊字符:, 空白符:空格,制表符(Tab健),换行符(空行),1.2.2 标识符,标识符是给程序中的实体所起的名字。用来标识变量名、符号常量名、函数名、数组名、类型名等实体(程序对象)的有效字符序列。标识符由用户定义。,1、标识符的命名规则 、以字母或下划线开头, 由字母、数字和下划线三种字符组成的字符序列 合法的标识符:a i sum S1 r3 aver _total Class day student 不合法标识符:S1 r3 S表 S M.D.John $123 3D6 a-b,、不能与语言的关键字重名,如int、float、if 、注意标识符的有效长度,不能超过32个字符 、区分大小写字母:sum和Sum不同,2、定义标识符应遵循的原则,、尽量不要用下划线开头。因为系统内部使用了一些下划线开头的标识符(如_fd、_cs、_ss),避免与系统定义的标识符冲突。 、不与系统预先定义的“标准标识符”同名,如main、printf、scanf、int、float等 、尽量做到“见名知义”;如sum、area 、应尽量避免使用容易认错的字符。如: 数字1与字母l和字母I,数字0与字母o和O,数字2与字母Z和z 、习惯上变量名、函数名用小写,而符号常量用大写,int a,b,sum; #define PI 3.14,关键字是语言预先定义的、具有特定意义的标识符,也称为保留字。语言包括32个关键字:,1.2.3 关键字,语言的关键字都是小写。不能重新定义关键字,也不能把关键字定义为一般标识符。,1.2.4 运算符,运算符是用于描述某种运算功能的符号,如+、-、*、/、%等,运算符可以由一个或多个字符组成。,语言运算符分为以下几类: 算术运算符:+、-、*、/、% 关系运算符:、=、=、!= 逻辑运算符:!、&、| 位运算符:、|、& 赋值运算符:=及扩展赋值运算符 条件运算符:?: 逗号运算符: , 指针和地址运算符:*、& 求字节运算符:sizeof 分量运算符:.、- 下标运算符: 强制类型转换运算符:(类型) 其他:如函数调用运算符( ),运算符和表达式,用于描述运算形式的符号称为运算符。如+、-、=、 参与运算的对象(即数据)称为操作数。 表达式是将操作数用运算符连接起来的、符合语法规则的式子。它描述了对哪些数据、以什么顺序施以何种操作。其中运算量可以是常量、变量或函数调用。如: x+3/2、max=a+b、t=sin(x)+cos(x),需要注意的问题: 、参加操作的数据类型:,、要求运算量的个数: 一元(单目)、二元(双目)或三元(三目)运算符,、优先级 操作数两侧的运算符优先级别不同时,则先执行“优先级”高的运算。如:3+5*6,、结合性 操作数两侧的运算符优先级别相同时,则按结合方向处理(左结合性、右结合性)。如:3*5/6,、结果的取值及类型 语言中的所有表达式都具有确定的值。当不同类型的数据进行运算时,注意结果的值及类型。2.0+3.0,1. 算术运算符和算术表达式,一、算术运算符 5个基本算术运算符:+ - * / %,说明: 、+、-、*、/的运算对象可以是整型或实型数据;但如果其中一个运算量为实型,则运算结果为double型。 、/:两个整数相除舍去小数部分,结果为整数。 、%:要求两侧的操作数必须为整数。如果两数符号不同,则运算结果的符号与被除数符号相同,5/2=2 5/2.0=2.5 1/3=0 1.0/3=0.333333,5%2=1 -5%2=-1 5%-2=1,二、运算符的优先级和结合性 当一个表达式中出现多个运算符时,按各运算符的优先级和结合性确定各运算符的计算顺序。,、*、/、%的优先级相同,+、-的优先级相同;但前三种高于后两种。 、+ - * / %均为左结合性。 3+2-5 x-2*3 2*5%7/3,三、自增、自减运算符 +、-:使变量的值增1或减1(均为一元运算符),形式: 、前缀:+i、-i,在使用i之前,先使i的值加减1 、后缀:i+、i-,在使用i之后,使i的值加减1 比较:,int i=10; x=i+; y=i;,x=10, i=11, y=11,int i=10; x=+i; y=i;,x=11, i=11, y=11,i=3; j=5; a=(+i)*j; a=(i+)*j;,i=4 a=4*5=20,a=3*5=15 i=4,注意: 、对于自增、自减运算符,只能用于变量,而不能用于常量和表达式。 如:5+,(a+b)+都是错误的。,、自增自减运算符,优先级高于*、/、%运算,结合方向为自右至左(单目运算符) 。,算术运算符优先级关系: + - * / % + -,(单目运算符) (双目运算符) (双目运算符),2. 赋值运算符和赋值表达式,一、赋值运算符(=) =:双目运算符、优先级14、结合性为自右至左,二、赋值表达式 1、简单赋值表达式:变量名=表达式 作用:先计算表达式的值,再将表达式的值赋值给左边的变量 结果:赋值表达式的值和类型等于被赋值变量的值和类型 如:x=3、i=i+1,2、多重赋值表达式:变量名1=变量名2=变量名n=表达式 作用:先计算表达式的值,然后将表达式的值赋值给各个指定的变量,如:a=b=c=3+4,a=(b=(c=3+4),说明:应该理解为 变量名1=(变量名2=(=(变量名n=表达式),三、复合(自反)赋值运算符(+=、-=、*=、/=、%=、=、&=、=、|=),a+=5;,a=a+5;,y*=x-2;,y=y*(x-2);,x%=y/3;,x=x%(y/3);,a+=a-=a*a,a=a+(a=a-a*a),3. 逗号运算符和逗号表达式,一、逗号运算符(,) ,:双目运算符、优先级15(最低)、结合性为自左至右,二、逗号表达式 形式:表达式1,表达式2,表达式n 运算:从左至右依次计算表达式1、表达式2、表达式n; 结果:表达式n的值(和类型)即为整个逗号表达式的值(和类型),运算符优先级:,( ) + - * / % + - = +=等 ,1.2.5 其它符号,分隔符:在C语言程序中,空格、逗号、回车/换行等,在各自不同的应用场合起着分隔符的作用。,#include void main( ) /* 主函数 */ int a,b,sum; /* 定义整型变量 */ scanf(“%d%d“, / 输出 ,花括号:“”和“”通常用于标识函数体或者一个语句块(复合语句) 注释符:“/*”和“*/”构成一组注释符。编译系统将/* . */之间的所有内容看作注释,编译时编译系统忽略注释。,1.3 语言数据类型,1. 常量,在程序运行过程中其值不能被改变的量。 语言中的常量区分为不同的类型:,18 0 -3 4.6 -1.23 0.0 a x,字面常量,用一个标识符代表一个常量的,称为符号常量,即标识符形式的常量。其值不能被改变,也不能再被赋值。 定义形式:#define 符号常量名 常量表达式或字符串 如: #define PI 3.14,PI=3.1415926; /符号常量不能被赋值,2. 变量:在程序运行过程中其值可以被改变的量,int a,b,sum; float x,y;,变量的特点: 每个变量都应该有一个名字; 在内存中占据一定的存储单元; 在存储单元中存放变量的值。,每个变量在使用之前必须先进行定义(声明),C要求变量必须先定义后使用。,进行变量声明后,计算机系统会为声明的变量分配相应大小的存储空间,用以存放数据。,1.3.1 整型数据,一、整型常量的表示方法,、十进制形式,如112、0、-3; 、八进制形式,以数字0开头,如0123; 、十六进制形式,以0x开头,如0x123 每种形式的整型常量又都可以表示成短常量和长常量。凡在整型常量后面紧跟大写字母L或小写字母l则表示此常量为长整型常量,如25L。,int x, y, z; x=10; y=010; z=0x10; printf(“x=%d, y=%d, z=%dn“, x,y,z);,x=10, y=8, z=16,EG109.C,二、整型变量,1、整型数据在内存中的存放形式: 以二进制补码的形式存放,int i; i=10;,数据存放示意图:,i,数据在内存中的实际存放情况:(以2B为例),计算机中数的表示,2、整型变量的分类:,根据数值的范围可以分为三种: 、基本型,以int表示;占2个字节(VC+6.0中4B) 、短整型,以short int或short表示;占2个字节(-3276832767) 、长整型,以long int或long表示;占4个字节 (-2,147,483,6482,147,483,647,即-231(231-1),为了充分利用变量的表数范围,可以将变量定义为“无符号”类型。即所有位都用于存放数值本身,不包含符号。,unsigned:无符号数 signed:有符号数;默认为有符号类型,归纳起来,有以下六种整型变量(TC 2.0):,说明:Visual C+ 6.0中int与long等价,3、整型变量的定义:,int a, b, sum; unsigned int i, j, area; long x, y;,每个变量被指定为一确定类型后,计算机系统在编译时就为其分配相应大小的存储单元,用以存放数据。 同时据此检查该变量所进行的运算是否合法。,4、整型数据的溢出:,#include void main( ) short a,b; a=32767; b=a+1; printf(“%d,%dn“,a,b); ,32767, -32768,a:,b:,EG110.C,1.3.2 实型数据,例. 计算20!,并输出结果。,1!=1 2!=2 3!=6 4!=24 5!=120 6!=720 7!5000 8!4万,9!36万 10!360万 11!4千万 12!5亿 13!65亿 ,存放结果的变量应该定义为什么类型?,int ?,long int ?,unsigned long int ?,一、实型常量的表示方法,实数又称为浮点数,实型常量有两种表示形式: 、十进制数形式:如0.123、.123、123.0、123.、0. 、指数形式:字母e(E)之前必须有数字,且e后面的指数必须为整数,如:1.23e2、12300E-2、.123e3、123.e0 而2.1e3.5、E2、.e2 ,规范化的指数形式: 在小数部分中,小数点左边有且只有一位非零的数字,指数占3位。如1.23E+002。一个实数在用指数形式(%e或%E)输出时,是按规范化的指数形式输出的。,二、实型变量,1、实型数据在内存中的存放形式: 实型数据是按指数形式存储(分成小数部分和指数部分,分别存放)。,如实数314.159在内存中的存放形式如下:,2、实型变量的分类:,实型变量分为单精度(float)、双精度型(double)和长双精度(long double)。,注意: 表示数据的精度:0.123456789012 表示数据的范围:绝对值范围, 实数在参加运算时,都是按double类型处理。,3、实型数据的舍入误差:,由于不同类型的实型数据在计算机中有效数字的位数不同,有时不能精确表示某个实数,只能近似表示,所以应避免将一个很大的数和一个很小的数直接相加减。 1.2E30 1,1.3.3 字符型数据,一、字符常量,的字符常量是用单引号( )括起来的一个字符。如a、8、x、D、?、$等。,转义字符:以“”开头的字符序列。,101、x41:A 1、x1: 32、x1A:,二、字符变量,字符变量用来存放字符常量。但只能存放一个字符。,char ch1, ch2; ch1=a; ch2=101;,三、字符数据在内存中的存储形式及使用方法,字符数据在内存中以相应的ASCII码存放,即以二进制形式存放,占1个字节。,ch1=a,ch2=b,字符型数据和整型数据在一定范围内通用。, 字符数据用整数形式输出,#include void main( ) char ch; ch=97; printf(“%c,%dn“, ch,ch); ,a, 97, 字符数据与整数进行算术运算,#include void main( ) char ch; int x; ch=A; x=ch+32; printf(“%c,%dn“, ch, ch); printf(“%c,%dn“, x, x); ,A, 65 a, 97,如需要存放ASCII码为128255之间的字符,需要将字符变量定义为unsigned char。(默认为signed char:-128127) unsigned char ch1,ch2;,EG111.C、EG112.C,四、字符串常量,字符串常量由一对双引号(“ “)括起来的字符序列。如“How are you!“、“China“、“a“、“$123.45“、“等。可以输出一个字符串,如:printf(“Hello!“);。,系统在存储字符串时自动在字符串末尾加一个结束标志0,据此判断字符串是否结束。,“China“,a,“a“,注意:写字符串时不必加0,它是系统自动加上的。,1.3.4 枚举类型,当一个变量的取值仅有少数几种可能时,把每个值一一列举出来,称为枚举类型。相应的变量只能取这些列举出来的值,而不能取别的值。,枚举类型属于简单数据类型,但其使用方法与结构体类型相似。将在复杂构造数据类型中讲述。,1.3.5 指针类型,1、地址 在计算机中,把内存区划分为一个一个的存储单元,每个单元为一个字节(位),它们都有一个编号,这个编号就是内存单元的地址。,说明: 1、每个变量都占有各自的内存单元,具有相应的地址 。 2、一个变量所占有的内存单元个数是由其类型决定的。 3、首地址:变量所占第1个字节的地址 4、注意表示地址的数与整数的不同:属于不同的数据类型(指针、整型),2、指针 一个变量占有内存单元,具有相应的地址,通过地址能找到所需的变量,可以说:地址“指向”该变量。,因此,把一个变量的地址称为该变量的“指针”。 可以定义一种变量,专门用来存放其它变量的地址(指针),这种变量称为指针变量。,变量的指针就是变量的地址。 指针变量就是存放变量地址的变量。,整型变量i 指针变量ip,如何使ip和i建立联系?,赋值:,ip=,2000,1.4 语句,语句用来向计算机系统发出操作指令,完成一定操作任务。一个程序应当包含若干语句。 说明:声明部分的内容不是语句,它只是对变量的定义,不产生机器操作。如:int a,b;,语句的分类: 1、控制语句:完成一定的控制功能 if ( ) else for ( ) while ( ) do while( ) continue, break switch goto return,2、函数调用语句:由一个函数调用加一个分号构成 printf(“This is a C statement!n“);,3、表达式语句:由表达式加分号构成 x=1 x=1; i=i+1 i=i+1;,任何表达式都可以加上分号而构成语句。 i+; i+,b-; x+y;,赋值语句: 由赋值表达式加上一个分号构成。,赋值语句:变量名=表达式; 作用:先计算表达式的值,再将表达式的值赋值给左边的变量 如:x=3; i=i+1; i+;,变量赋值的特点: 变量必须已经定义(C要求变量“先定义后使用”)。 新定义的变量被赋值前,值不确定。 对变量的赋值过程是“覆盖”过程,即用新值去替换旧值。 读出变量的值,变量的值保持不变。 参与表达式运算的所有变量都保持原来的值不变。 赋值运算是右结合性,即“取右送左”。,int a,b,c; a=1; b=2; a=3; c=a*b*b;,int a=1,b=2,c=3; /* 变量的初始化 */ a=-1; b=-2; c=a*b*b;,赋值语句的几种形式: 简单赋值语句:i=1; y=sin(x); 多重赋值语句:i=j=0; a=b=c=3+x; 复合(自反)赋值语句:x+=1; a-=a*a;,等价于:x=x+1; a=a-a*a;,原则:不用太过复杂的表达式!,4、空语句(仅由一个分号构成) ; 用处:语法上需要一个语句,但是不需要做任何工作,比如有些循环体。,5、复合语句(用 括起来的语句序列), temp=a; a=b; b=temp; ,说明: 复合语句是一个整体, 相当于一个语句 一个复合语句中可以包含其它的复合语句 在复合语句的花括号后不能再加分号,1.5 程序运行过程,1.5.1 几个基本概念,源程序:用高级语言或汇编语言编写的程序称为源程序,以ASCII码形式存储。C源程序的扩展名为“.C”(.CPP)。,目标程序:源程序经过“编译程序”翻译所得到的二进制代码称为目标程序。目标程序的扩展名为“.OBJ”。,可执行程序:目标程序与库函数连接,形成完整的可在操作系统下独立执行的程序。可执行程序的扩展名为“.EXE” 。,#include void main( ) printf(“This is a C program!n“); ,1.5.2 C程序上机步骤,一、编辑:将源程序输入计算机内存中修改源程序将改正后的源程序保存为磁盘文件。以ASCII码形式输入和存储 -扩展名为.C或.CPP(源程序),二、编译:先进行语法检查,并将无语法错误的源程序翻译成二进制形式的目标代码-扩展名为.OBJ(目标程序) 三、链接:将各模块的二进制目标代码与系统标准模块连接,得到一个可执行文件-扩展名为.EXE(可执行程序) 四、执行:执行经过编译和连接的可执行目标文件。,1.5.3 Turbo C 2.0上机步骤,1、启动Turbo C 、启动:DOS、Windows 、工作窗口: 主菜单窗口、编辑窗口、信息窗口、功能键提示行,2、在编辑状态下输入或修改源文件 、编辑新文件 编辑新文件:FileNew 保存文件:FileSave 或 F2 、编辑已存在的文件 打开文件:FileLoad 或 F3 保存文件:FileSave 或 F2 另存文件:FileWrite to,3、编译源程序 CompileCompile to OBJ 或 Alt+F9 编译时如提示错误,则按F6键在源程序和错误提示之间进行切换,并修改;修改完毕再重新编译,直到无任何错误编译成功。 注意:编译成功只能说明程序无语法错误,不一定代表算法正确或运行结果正确。,4、运行源程序 RunRun 或 Ctrl+F9 查看结果:RunUser Screen 或 Alt+F5 5、退出 FileQuit 或 Alt+x,1.5.4 VC+ 6.0上机步骤,1、启动VC+ 6.0 、启动:开始菜单程序Visual C+ 6.0 、工作窗口: 编辑窗口、工作空间窗口、输出窗口,2、在编辑状态下输入或修改源文件 、编辑新文件 编辑新文件:文件新建文件“C+ Source File” 保存文件:文件保存 或 Ctrl+S 、编辑已存在的文件 打开文件:文件打开 或 Ctrl+O 或 直接双击文件 另存文件:文件另存为,编译时的提示信息将显示在输出窗口,双击错误信息则转到相应出错处,修改完毕再重新编译,直到无任何错误后编译成功,显示“0 error(s), 0 warning(s)”。 注意:编译成功只能说明程序无语法错误,不一定代表算法正确或运行结果正确。,3、编译源程序 组建编译 或 Ctrl+F7 编译时若弹出如下提示框,选择“是”。,4、运行源程序 组建执行 或 Ctrl+F5,1.6 编写简单的C程序,前面已讲,此处略。,1.7 数据的输入输出,语言对数据的输入输出实行函数化。 语言没有提供输入输出语句,其输入输出功能均由函数来实现。如printf、scanf等称为标准输入输出函数。,使用标准输入输出函数时;需要在程序开始使用预编译命令#include 或#include “stdio.h“。 由于printf函数和scanf函数使用频繁,规定:使用printf和scanf这两个函数可以不用#include命令。-本规则不适用于VC6.0,VC6.0中必须加上。,1.7.1 printf函数,格式:printf(格式控制, 输出表列) 功能:在终端的当前光标处输出若干个任意类型的数据,1. 格式控制: 用“ “括起来的字符串,包括两部分: 普通字符(包括转义字符): 需要原样输出的字符 格式说明: 由%和格式字符组成,其作用是将输出数据按指定的格式输出,printf(“This is a C program!n“); printf(“a=%d, b=%dn“, a, b);,printf函数使用的格式控制符:,int a=123,b=-1; float x=12.34; char ch=65;,printf(“a=%d,b=%d“,a,b);,输出结果:a=123,b=-1,printf(“a=%X,b=%x“,a,b);,输出结果:a=7B,b=ffffffff,printf(“a=%o,b=%o“,a,b);,输出结果:a=173,b=37777777777,printf(“x=%f“,x);,输出结果:x=12.340000,printf(“x=%e“,x);,输出结果:x=1.234000e+001,printf(“x=%g“,x);,输出结果:x=12.34,printf(“%f%“,1.0/3);,输出结果:0.333333%,printf(“ch=%c“,ch);,输出结果:ch=A,printf(“str=%s“,“I love China!“);,输出结果:str=I love China!,EG113.C,在格式控制符中,%和后面跟随的单个字符之间又可以插入以下几种修饰符。,EG114.C,例:int i=79;,float x=33.1234567; double y=-555.12345678E-9;, ,2. 输出表列:由0到多个具体参数组成,其中的参数可以是常量、变量或表达式。,printf(“%dn“, 25); printf(“x=%dn“, x); printf(“x*y=%dn“, x*y); printf(“|y|=%dn“, fabs(y);,EG115.C,注意: 、输出整数和实数时,数0用以指定数字前的空位是否补0;无0则补空格。,float a=1.23; printf(“%08.1fn“, a);,000001.2,、如果要输出%,则在格式控制字符串中连续用两个%表示。,printf(“%f%n“, 1.0/3);,0.333333%,、格式控制符的个数与后面的参数个数应相等,且前后位置要一一对应。,printf(“a=%d, b=%dn“, a,b);,、格式字符与其对应的输出项的类型要保持一致,例如,不应用%f输出整数。,int a=123; float x=12.345;,printf(“a=%5d “,a);,输出结果:a=_ _123,printf(“a=%2d“,a);,输出结果:a=123,printf(“a=%-5X“,a);,输出结果:a=7B_ _ _,printf(“x=%7.2f“,x);,输出结果:x=_ _12.35,printf(“x=%.2f“,x);,输出结果:x=12.35,printf(“x=%10.2e“,x);,输出结果:x=_1.23e+001,printf(“x=%2E“,x);,输出结果:x=1.234500E+001,printf(“str=%5.3s“,“Computer“);,输出结果:str=_ _Com,printf(“str=%3s“,“Computer“);,输出结果:str=Computer,1.7.2 scanf函数,格式: scanf(“格式控制“,地址表列) 功能:从键盘读入字符序列,并按指定的格式转换成相应的数据,存储到地址表列所指定的内存单元中,“地址表列”由若干个地址组成,可以是变量的地址或字符串的首地址。,#include void main( ) int a,b,c; scanf(“%d%d%d“, ,注:输入整数、实数或字符串时,如果格式控制部分只有格式控制符,不含其它字符,则数据之间以一个或多个空格、或Tab键或回车键分隔。,EG116.C,scanf函数的格式控制符:,在%和格式字符之间可插入附加的格式说明符:,格式:% * m l或h 格式字符,说明: 、与printf函数不同,scanf函数的格式控制部分一般不包含其它字符;,scanf(“%d%d%d“, ,、对于unsigned型变量所需的数据,可以用%u、%d或%o、%x格式输入;,、格式控制中若带域宽,系统自动按域宽截取所需数据;,scanf(“%3d%3d“, ,12345678 a=123, b=456,scanf(“%3c%3c“, ,abcdefg ch1=a, ch2=d,char s120,s220; scanf(“%s%3s“, s1,s2);,Computer Computer s1=Computer, s2=Com,、赋值抑制符*,表示按格式说明读入数据后不送给任何变量,scanf(“%2d%*3d%2d“, ,12345678 a=12, b=67,EG117.C、EG118.C、EG119.C;EG120.C,、输入实数时不能规定精度;,scanf(“%7.2f“, ,scanf(“%5f“, ,12.345678 a=12.340000,使用scanf函数应注意的问题:,、地址表列必须提供变量或字符串在内存中的地址,不能写成变量名的形式;,int a,b; scanf(“%d%d“, ,char str20; scanf(“%s“, str);,、如果在“格式控制”字符串中除格式控制符外还有其它字符,则在输入时应输入相同的字符;,scanf(“%d,%d“,&a,&b),12, 34,scanf(“%d:%d:%d“,&a,&b,&c),12:34:56,scanf(“a=%d, b=%d, c=%d“, ,a=12, b=34, c=56,、在用“%c”输入字符时,空格字符和转义字符也都作为有效字符输入;,scanf(“%c%c%c“, ,A B C c1=A, c2= , c3=B,、在输入数据时,遇以下情况之一认为一个数据输入结束: 、遇到空格或按Tab键或回车键; 、满足域宽,如%4d,输入4位即结束; 、遇到非法字符。,int a; char b; float c; scanf(“%d%c%f“,12P12o.35 a=12,b=P,c=12.00000,scanf(“%d%d“, ,12, 34 x=12, y无正确数据,数据类型及printf、scanf的总结,定义数据类型的原则: 只要是存放整数都定义为int; 实数:一般情况下定义为float即可,如果需要精度高或数值大则定义为double。,关于输入、输出的格式控制符: int型数据的输入输出都使用%d。 float型数据的输入使用%f,double型数据输入必须使用%lf;数值比较大的数输出一般使用%e(%E)。 scanf函数中不要加其它符号;printf函数中往往要加,作为输出数据的说明信息。,1.8 宏定义,1.8.1 不带参数的宏定义,1、形式: #define 标识符 字符串 其中: 、#define是宏定义命令; 、标识符通常称为符号常量; 、“字符串”可以包含任意字符。,#define PI 3.1415926 #define LETTER abcdefg,4、说明:,、宏名一般习惯用大写字母表示,以示与变量名相区别;,、宏定义不是语句,不必加分号,否则连分号一起替换;,#define PI 3.1415926; area=PI*r*r;,area=3.1415926;*r*r;,、#define命令一般写在程序开头,但也可以在其它位置;,、可以用#undef命令终止宏定义的作用域;,#define G 9.8 #undef,、宏定义中还可以引用已定义的宏名:,#define R 3.0 #define PI 3.1415926 #define L 2.0*PI*R #define S PI*R*R,、对于双引号括起来的字符串内的字符,即使与宏名相同也不进行替换;,printf(“L=%fn“, L);,printf(“L=%fn“, 2.0*PI*R);,、宏定义是专门用于预处理命令的一个专用名词,与定义变量的含义不同,只做字符替换,不分配内存空间。,1.8.2 带参数的宏定义,1、形式: #define 宏名(形式参数表) 字符串,其中:“字符串”为包含形式参数表中参数的表达式,2、功能:将一个带参数的宏体定义为一个带参数的宏名,预处理时先用宏体替换宏名,同时用实参表中的实参替换表达式中的形参,#define S(a, b) a*b,area=S(3*2);,则预处理为:先area=a*b, 再area=3*2,3、说明:,、带参数的宏的展开只是将语句中的宏名后面括号内的实参字符串代替#define命令

温馨提示

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

评论

0/150

提交评论