C语言程序设计项目教程

上传人:仙*** 文档编号:142272731 上传时间:2022-08-24 格式:PPT 页数:202 大小:2.04MB
返回 下载 相关 举报
C语言程序设计项目教程_第1页
第1页 / 共202页
C语言程序设计项目教程_第2页
第2页 / 共202页
C语言程序设计项目教程_第3页
第3页 / 共202页
点击查看更多>>
资源描述
C语言程序设计项目教程化学工业出版社化学工业出版社C语言概述 C C语言的产生和发展语言的产生和发展 C C语言和其他计算机语言的比较语言和其他计算机语言的比较 C C语言的特点语言的特点 C C语言程序设计举例语言程序设计举例 C C语言的结构特点语言的结构特点 Visual Visual.开发工具开发工具 练习题练习题引言 C语言的原型ALGOL 60语言。(也称为A语言)1963年,剑桥大学将ALGOL 60语言发展成为CPL(Combined Programming Language)语言。1967年,剑桥大学的Martin Richards 对CPL语言进行了简化,于是产生了BCPL语言。1970年,美国贝尔实验室的Ken Thompson将BCPL进行了修改,起名“B语言”。1972年,美国贝尔实验室的D.M.Ritchie在B语言的基础上设计出了一种新的语言,这就是C语言。1978年由美国电话电报公司(AT&T)贝尔实验室正式发表了语言。1989年,由美国国家标准化协会(American National Standards Institute)在此基础上制定了一个C语言标准,通常称之为89 ANSI C。1994年,ISO又重新修订了C语言的标准,正式成为现行的C语言标准。一、C语言的产生和发展二、几种程序设计语言的比较 机器语言:用二进制代码表达的计算机语言,指令用0和1组成。优点:计算机可以直接识别,不需要进行任何翻译,执行速度最快。缺点:可读性差,不便于交流与合作;严重地依赖于具体的计算机,可移植性差,重用性差。汇编语言:用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码 优点:能够直接访问与硬件相关的存储器或I/O端口;能够最大限度地发挥硬件的功能。缺点:操作码量大,难于记忆,不好维护。二、几种程序设计语言的比较 高级语言:语法和结构类似于普通英文,远离 对硬件的直接操作优点:算法语言,易学、易掌握;远离机器语言,与具体的计算机硬件关系不大,可移植性好,重用率高。C语言就是一种独立于机器,编码相对短,可读性强的语言就是一种独立于机器,编码相对短,可读性强的高级语言。高级语言。机器语言机器语言汇编语言汇编语言高级语言高级语言面向过程面向过程面向对象面向对象CPU指令系统,由指令系统,由0、1序列构成的指令码组成序列构成的指令码组成如:如:1011010000000000 加法加法 用助记符号描述的指令系统用助记符号描述的指令系统如如 ADD A,B程序设计是数据被加工的过程程序设计是数据被加工的过程语法类似于英语语法类似于英语如如c语言语言 c=a+b图表:计算机语言的发展过程三、三、C语言的特点语言的特点语言简洁、灵活,便于学习和使用。运算符类型丰富。数据类型丰富,并有多种数据结构。具有结构化的控制语句,层次清晰,便于使用、维护以及调试。高效率的目标代码。能对硬件进行编程。同汇编语言相比,用C语言写的程序可移植性好程序设计较自由,语法限制不严格。四、C语言的格式及结构特点【例例0.1】编写程序,在计算机屏幕上显示编写程序,在计算机屏幕上显示Hello,World!主函数开始主函数开始主函数体开始标志主函数体开始标志C语句语句主函数体结束标志主函数体结束标志C语句结束语句结束分析几个简单的C程序【例0.2】编写程序求解123+456的和。#includemain()int a,b,sum;a=123;b=456;sum=a+b;printf(“sum is%d:n”,sum);定义变量,所有的定义变量,所有的变量的定义都要放变量的定义都要放在程序的声明部分在程序的声明部分“=”赋值语句,念做赋值语句,念做123赋值给赋值给a预处理命令,为预处理命令,为调用调用printf()函数函数注意:没有注意:没有“;”四、C语言的格式及结构特点分析几个简单的C程序运行后输出:运行后输出:sum is 579sum is 579#include#define PI 3.1415926main()float r,a,c;r=2.5;/*输入圆的半径*/a=PI*r*r;c=2*PI*r;printf(“r=%f,a=%f,c=%fn”,r,a,c);运行后输出:r=2.500000,a=19.634954,c=15.707963 四、C语言的格式及结构特点练一练:分练一练:分析下列程序析下列程序的功能的功能【例0.4】从键盘输入两个数,求其中的最大值。被调用的子函数主函数四、C语言的格式及结构特点分析几个简单的C程序#includeint max(int x,int y);main()int a,b,c;scanf(“%d,%d”,&a,&b);c=max(a,b);printf(“max=%d”,c);int max(int x,int y)int z;if(xy)z=x;else z=y;return(z);五、C语言的结构特点一个C程序由一个或多个函数组成,其中有且只有一个用“main”命名的主函数,程序都是从main函数开始到main函数结束。每个函数由表示开始和结束在其内部包含的是函数体。每个C语句以“;”(分号)结尾。C程序的书写格式比较自由。函数体中可以有定义和执行部分,定义部分必须放在执行部分的前面可以在程序的任何位置用“/*/”对C程序中的任何部分作注释。练一练:练一练:选择题0.1一个C程序的执行是从_。(A)本程序的main函数开始,到main函数结束。(B)本程序的第一个函数开始,到本程序文件的最后一个函数结束。(C)本程序的main函数开始,到本程序文件的最后一个函数结束。(D)本程序的第一个函数开始,到本程序main函数结束。0.2以下叙述不正确的是_。(A)一个C源程序可由一个或多个函数组成。(B)一个C源程序必须包含一个main函数。(C)程序的基本组成单位是函数。(D)在C程序中,注释说明只能位于一条语句的后面。0.3C语言规定:在一个源程序中,main函数的位置_。(A)必须在最开始(B)必须在所有函数的后面(C)可以任意(D)必须在最后填空题0.4函数体是有符号_开始,符号_结束。函数体的前面是_部分,后面是_部分。0.5一个C源程序中至少应包括一个_。0.6在一个C源程序中,注释部分两侧的分界符分别为_和_。练一练:练一练:观察以下程序,指出C程序的错误所在。#include;main();float r,s;/*/*r is radius*/*/r=5.0 s=3.14*r*r;printf(“%fn”,s)main()后后面没有面没有“;”预处理命令,没有预处理命令,没有;注释注释不能再套一层不能再套一层注释注释每条语句每条语句后都要有后都要有“;”“”括起括起整个函数整个函数体体练一练:练一练:【实验0.1】一个简单的C语言程序 编写用 printf 语句将3个字符串:good morning,floppy disk,hard disk显示在计算机屏幕上的程序。【实验0.2】按照要求输入程序,查看程序运行的结果输入并运行下面程序,分析其运行结果。#include main()printf(和是%f ,16.8+27.5);printf(差是%f n,16.8-27.5);printf(积是%f ,16.8*27.5);printf(商是%f n,16.8/27.5);上机实验【实验0.3】输入并运行下面程序,分析其运行结果。按照下面的程序,输入到Visual C+6.0集成开发环境中,并分析运行结果#include main()printf(表达式1的值:%fn,99.7*0.26+4.25);printf(表达式2的值:%dn,1/2+1/3+1/4+1/5);printf(表达式3的值:%fn,3.5/(6.1+2.0*(2.9-1.4*2.7);系统总体设计 C C语言的产生和发展语言的产生和发展 C C语言和其他计算机语言的比较语言和其他计算机语言的比较 C C语言的特点语言的特点 C C语言程序设计举例语言程序设计举例 C C语言的结构特点语言的结构特点 Visual Visual.开发工具开发工具 练习题练习题第1章1、关于程序、关于程序知识储备人机能够对话,是因为计算机可以执行程序人机能够对话,是因为计算机可以执行程序人机进行对话所使用的语言,就是程序设人机进行对话所使用的语言,就是程序设计语言计语言程序程序是为了使计算机完成指定的任务而编写的具有是为了使计算机完成指定的任务而编写的具有特定语法规则的指令序列。特定语法规则的指令序列。C语言就是一种完成程序设计的高级语言。语言就是一种完成程序设计的高级语言。用用C语言编写的程序叫做语言编写的程序叫做“源程序源程序”,文件为,文件为*.c1.1 程序和程序设计C语言程序编辑与运行流程开始开始编辑源程序编辑源程序编译连接程序编译连接程序编译连接有错?编译连接有错?运行程序运行程序运行有错?运行有错?结束结束修改程序修改程序调试程序调试程序真真假假假假真真注意IDE(集成集成开发环境开发环境)*.obj*.c*.exe2 程序设计用程序设计语言来描述问题的求解过程,以及对其中参与运算的数据进行合理地组织和安排,就叫做。分析问题分析问题确定算法确定算法画流程图画流程图编写程序编写程序运行调试运行调试总结过程总结过程基本步骤=数据结构+算法知识储备1.1 程序和程序设计有穷性有穷性确定性确定性可行性可行性有一个或有一个或者多个输者多个输入输出入输出算法描述常见工具:算法描述常见工具:流程图流程图NS图图1.2 算法的概念及描述方法是针对提出的可行方案确定解决问题、完成任务的每一个细节步骤。好的算法开始框一般处理框判断框结束框流程线1.2 算法的概念及描述方法 流程图输入rr0真 假 S=r2 C=2r输出S,C N-S流程图1.2 算法的概念及描述方法自顶向下,无分支,无转移有分支,需条件判断有转移,某些语句可重复执行 当型循环 直到型循环语句1语句2语句1语句2(a)流程图)流程图 表示法表示法(b)N-S图图 表示法表示法 顺序结构判 断 表 达 式语句1语句2假真判 断 表 达 式真 假语句1 语句2(a)流程图)流程图 表示法表示法(b)N-S图图 表示法表示法选择结构当条件判断表达式为真 循环体语句判断表达式循环体语句真假循环体语句直到判断表达式为假循环体语句判断表达式假真当型循环直到型循环循环结构 主函数 子函数 语句dabcgkfhjiel模块化结构程序设计主函数主函数:main(),main(),是必须存在且唯一的,是程序执是必须存在且唯一的,是程序执行的入口。行的入口。从从使用角度使用角度分:分:标准库函数标准库函数:以程序库的形式直接提供给用户使用。以程序库的形式直接提供给用户使用。stdio.hstdio.hgets()gets()、printf()printf()math.h math.h sin()sin()、sqrt()sqrt()用户自定义函数用户自定义函数:由用户自己建立定义。:由用户自己建立定义。函数的分类函数的分类从从函数形式函数形式分:分:v 无参函数无参函数:调用函数时主函数不将数据传送给:调用函数时主函数不将数据传送给被调函数。用于完成特定功能的操作。被调函数。用于完成特定功能的操作。如:如:c=getchar()c=getchar()v 有参函数有参函数:调用函数时在主调函数和被调函数:调用函数时在主调函数和被调函数之间有参数传递。之间有参数传递。如:如:putchar(c)putchar(c)、puts(str)puts(str)、两种函数分类是独立的注意题目:求函数 的值,x的值通过键盘输入。1xy#include#include main()float x,y;scanf(%f,&x);y=sqrt(fabs(x)+1;printf(%f,y);数学函数:fabs(x):求x的绝对值。sqrt(n):计算n的平方根。输入输出函数:scanf(),printf()。调用标准库函数前要求使用include命令包含库函数所对应的头文件。#include void print_star();void print_text();main()print_star();print_text();print_star();void print_star()printf(*n);void print_text()printf(Good Morning!n);无参函数的定义形式:【类型标识符】函数名()说明部分;语句部分 无参函数的调用:函数语句:print_star();函数说明:函数要求必须“先定义后使用”,若函数的定义位置在调用之后,要求在主函数的上面要进行函数的原型说明,即说明函数名、函数返回值类型、形参类型及个数等。函数调用语句主调函数 被调函数 函数体实参形参a)程序流向b)参数传递main()int a,b,c;scanf(%d%d,&a,&b);c=max(a,b);printf(max=%dn,c);int max(int x,int y)int z;if(xy)z=x;else z=y;return(z);形式参数形式参数实际参数实际参数有参函数定义形式有参函数定义形式:类型返回值的类型名类型返回值的类型名 函数名函数名(类型名类型名 形式参数形式参数1 1,类,类型名型名 形式参数形式参数n)n)说明部分;说明部分;语句部分;语句部分;函数调用格式:函数调用格式:函数调用及函数调用及returnreturn语句执行图示:语句执行图示:main()int a,b,c;scanf(“%d%d”,&a,&b);c=max(a,b);printf(“max=%dn”,c);int max(int x,int y)int z;if(xy)z=x;else z=y;return(z);主调函数被调函数c=max(a,b);printf(max=%dn,c)知识归纳:知识归纳:知识归纳:知识归纳:知识归纳:知识归纳:如使用库函数,一般应在文件开头用:如使用库函数,一般应在文件开头用:include include 函数调用遵循函数调用遵循“先定义后调用先定义后调用”的原则。一般被的原则。一般被调函数放在调用函数之前定义。调函数放在调用函数之前定义。若被调函数在调用函数之后定义,就必须在调用若被调函数在调用函数之后定义,就必须在调用函数中对被调函数加以如下说明:函数中对被调函数加以如下说明:类型名类型名 被调函数名被调函数名(参数类型参数类型1 1,参数类型,参数类型2 2,参数类型参数类型n)n);知识归纳:知识归纳:#include int isleap(int year)int flag;f(year%400=0|(year%4=0&year%100!=0)flag=1;else flag=0;return flag;main()int y;printf(nplease input a year:);scanf(%d,&y);if(isleap(y)=1)printf(n%d is leap.,y);else printf(n%d is not leap.,y);形式参数形式参数实际参数实际参数参数传递参数传递练一练:练一练:分析下面程序功能,结构,函数定义及调用过程。练一练:练一练:分析下面程序功能,结构,函数定义及调用过程。void pchar()printf(*n);double area(double r)double s;s=3.14*r*r;return s;double volume(double ar,double hgt)double vol;vol=ar*hgt/3;return vol;#include#include double area(double);double volume(double,double);void pchar();main()double r,h,s,v;clrscr();pchar();printf(input the radius and height:);scanf(%lf%lf,&r,&h);printf(n);s=area(r);v=volume(s,h);printf(radius=%8.4lf,height=%8.4lfn,r,h);printf(area=%8.4lf,volume=%8.4lfn,s,v);pchar();练一练:练一练:#include main()int r1,r2;double s1,s2,s;r1=2;r2=5;s1=myarea(r1)s2=myarea(r2)s=s2-s1;printf(%lfn,s);int myarea(double r)double s;s=3.14*r*r;修改错误:修改错误:练一练:练一练:#include float myaverage(float,float);main()float x,y,z;x=12;y=25;z=myaverage(x,y);printf(%lfn,z);分析下面的程序,写出程序的预期结果。float myaverage(float a,float b)float c;c=(a+b)/2;return c;练一练:练一练:#include【】/*myarea()函数的原型说明*/【】/*myvolume()函数的原型说明*/main()double r,h;double s,v;r=5;h=10;【】/*调用myarea()函数求圆面积*/【】/*调用myvolume()函数求体积*/printf(volume=%lfn,v);根据程序功能要求,将程序补充完整。练一练:练一练:double myarea(double r)double s;s=3.14*r*r;return s;double myvolume(double ar,double hgt)double vol;vol=ar*hgt;return vol;练一练:练一练:程序设计。设有一个平行四边形,其顶点坐标依次为A(2,2)、B(4,6)、C(8,6)、D(6,2),编写程序,计算两个对角线AC、BD的长度。已知两点坐标(x1,y1)和(x2,y2),求两点间距离的公式为:22)21()21(yyxx程序要求定义函数mylength()计算两坐标点之间的长度。任务一:任务一:“学生成绩管理系统学生成绩管理系统”整体结构设计整体结构设计功能需求分析步骤1:创建文件存放一批学生的成绩。本系统要求每一位学生至少存有4门课程的成绩和总评成绩及平均成绩。实现“添加”、“修改”、“删除”指定成绩记录的操作。能对一个已存在文件进行“打开”、“保存”等操作。能实现“分类查询课程成绩”、“查询全部课程成绩”等查询功能。能对学生成绩进行排名。能统计学生的“奖学金获得情况”,“未获学位情况”,“某门课程的总分及平均分”,“某门课程的学生成绩等级情况”等。菜单界面要求美观,大方,易于操作。能够安全退出系统。整个系统只有一个出口,程序只能通过该出口结束。分析设计步骤2:实验 预习【实验实验1.1】上机运行以下程序,熟悉函数的调用方法。main()int x,y,z;x=4;y=12;z=6;fun(x,y,z);printf(“%x=%d;y=%d;z=%dn”,x,y,z);fun(int i,int j,int k)int t;t=(i+j+k)/3;printf(“t=%dn”,t);main()int i,j,x,y,n,g;i=4;j=5;g=x=6;y=7;n=8;f(n,6);printf(“g=%d;i=%d;j=%dn”,g,i,j);printf(“x=%d;y=%dn”,x,y);f(n,8);f(int i,int j)int x,y,g;g=8;x=7;y=2;printf(“g=%d;i=%d;j=%dn”,g,i,j);printf(“x=%d;y=%dn”,x,y);实验 预习【实验实验1.2】上机运行以下程序,了解程序的执行过程。#include void myswap(int,int);main()int x,y;x=2;y=4;myswap(x,y);printf(x=%d,y=%dn,x,y);void myswap(int a,int b)int c;c=a;a=b;b=c;printf(a=%d,b=%dn,a,b);写出运行以上程序后的预期结果。观察实际输出结果与预期结果是否相符。将函数myswap()中的a和b改为x和y,再观察运行结果,有什么不同。用单步执行的方法,了解程序执行过程中数据的变化情况。系统数据结构设计及运算第2章知识储备引导:分析引导:分析C程序组成程序组成2.1 常量与变量 一个一个C C程序是由一个或多个函数组成,函数体由若程序是由一个或多个函数组成,函数体由若干条干条C C语句组成,那么,语句组成,那么,C C语句又是由什么组成?语句又是由什么组成?主函数主函数函数nC语句1C语句2C语句n常量常量 变量变量C程序标识符标识符#include#define PI 3.1415926main()float r,s,c;r=5;/*输入圆的半径*/s=PI*r*r;c=2*PI*r;printf(“r=%f,s=%f,c=%fn”,r,s,c);常量与变量使用举例直接常量符号常量l整型常量:整型常量:1111、2525、-1-1;l实型常量:实型常量:0.20.2、3.1415,3.03.1415,3.0;l字符常量:字符常量:A A,a a(大小写(大小写代表不同的值)代表不同的值)l字符串常量:字符串常量:“nicenice”、“goodgood”;l 定义形式定义形式l 一般用大写字母一般用大写字母l 是宏定义预处理命令,不是是宏定义预处理命令,不是C C语句语句,后面没有,后面没有“;”#include#define PI 3.1415926main()float r,s,c;r=5;s=PI*r*r;c=2*PI*r;printf(“r=%f,s=%f,c=%fn”,r,s,c);常量与变量使用举例定义变量rsc变量:变量:变量赋值0000 00000000 00000000 00000000 0101变量参加运算重点:重点:变量必须先定义后使用;变量的实质是内存的存储单元。决定了变量的数据结构及分配存储空间的大小。整型变量:存放整型数据实型变量:存放实型数据字符变量:存放字符型数据 标识符标识符是对变量、函数、数组等命名的符号。是对变量、函数、数组等命名的符号。由英文字母、数字及下划线构成,并且首字符必须为字母由英文字母、数字及下划线构成,并且首字符必须为字母或下划线。或下划线。标识符的种类:标识符的种类:每个都代表着某一固定每个都代表着某一固定含义。含义。定义变量的格式:数据类型数据类型 变量名变量名1 1,变量名,变量名2 2,变量名变量名n n;分讲:分讲:变量的定义变量的定义1.C语言允许在定义变量时对变量进行初始化,即对变量赋初值。如:int a=2;int a=2;等价于int aint a;a a2 2;2.对变量进行初始化,允许只对定义的变量的一部分赋初值。如:int a,b,c=25;int a,b,c=25;char ch1=x,ch2;char ch1=x,ch2;3.C语言中若有几个变量初值相同,必须分别赋值。如:int a=2,b=2,c=2;int a=2,b=2,c=2;不允许:不允许:int a=b=c=2;int a=b=c=2;分讲:变量定义及初始化分讲:变量定义及初始化 变量在初始化之前,他变量在初始化之前,他的值是无意义的(值随的值是无意义的(值随机)机)注意注意标识符区分大小写标识符区分大小写练一练:练一练:练习:请找出不合法的标识符.unionabc_1232ab3 d+babc8*stu_bc8abcdefghi-s10*&%$#C C数数据据类类型型基本类型基本类型构造类型构造类型指针类型指针类型空类型空类型void定义类型定义类型typedef字符类型字符类型char枚举类型枚举类型enum整整 型型实型实型单精度型单精度型float双精度型双精度型double数组数组结构体结构体struct共用体共用体union短整型短整型short长整型长整型long整型整型int1.1.整型数据类型整型数据类型整型常量整型常量l 十进制数十进制数如:如:1212、345345、0 0、-5-5l 八进制数八进制数(以以0 0开头开头)如:如:012012、045045l 十六进制数十六进制数(0 x(0 x开头开头)如:如:0 x120 x12、0 x3450 x345整型变量整型变量l 基本型基本型(intint)l 短整型短整型(short intshort int、shortshort)l 长整型长整型(long intlong int、longlong)l 无符号型无符号型无符号整型无符号整型(unsigned intunsigned int)无符号短整型无符号短整型(unsigned shortunsigned short)无符号长整型无符号长整型(unsigned longunsigned long)问题:0123 =()100 x123=()100Xff =()10整形数据的所占存储空间的大小及表示数的范围整形数据的所占存储空间的大小及表示数的范围说明:数据类型所占字节数随机器硬件和编译环境的不同而不同,上表以IBM PC机,和Turbo C集成开发环境为例。类型符号关键字数值表示范围所占字节整型有无(signed)int-3276832767(signed)short-3276832767(signed)long-21474836482147483647unsigned int06553504294967295unsigned longunsigned short065535需要记忆需要记忆#include main()int x=123,y=0123,z=0 x123;printf(%d,%d,%dn,x,y,z);/*以十进制格式输出*/printf(%o,%o,%on,x,y,z);/*以八进制格式输出*/printf(%x,%x,%xn,x,y,z);/*以十六进制格式输出*/整型常量的表示方法整型变量的定义及表示数范围举例#include main()int a,b;long c,d;unsigned e,f;a=32767;b=1;c=2147483647;d=1;e=65535;f=1;printf(int:%d,%dn,a+b,a);printf(long:%ld,%ldn,c+d,c);printf(unsigned:%u,%un,e+f,e);运行结果:int:-32768,32767long:-2147483648,2147483647unsigned:0,65535当各种整型数取最大值时,如果再加1,则超出其所能表示的范围,结果为该类型取值范围的最小值。整数在内存中的存储方式整数在内存中的存储方式 正整数:用原码的形式存储,符号位是正整数:用原码的形式存储,符号位是“0 0”-3276832767(Turbo C)2.2.实型数据类型实型数据类型1 1)实型常量实型常量:即实数或称浮点数。以十进制形式表示。:即实数或称浮点数。以十进制形式表示。实型常量的表示形式实型常量的表示形式l小数形式小数形式例如:例如:0.150.15、.15.15、0.00.0、123.123.(注意:必须有小数点!)(注意:必须有小数点!)l指数形式指数形式 说明:说明:“小数小数”表示实数的数值位,即尾数部分。表示实数的数值位,即尾数部分。“E E”代表十进制数的基数代表十进制数的基数1010。“整数整数”表示表示1010的乘幂。的乘幂。1.231.2310103 33.918e-003.918e-002 21.23E+001.23E+003 33.918 3.918 1010-2-2123.0123.00.0039180.003918举例:举例:2.2.实型数据类型实型数据类型2 2)实型变量实型变量类型所占字节有效数字数的取值范围定义举例单精度实型float467-10-371038float x1,y1;双精度实型double81516-10-30710308double x2,y2;例:例:float a;a=123456.789;/*a=123456.789063*/double b;b=123456.789;/*b=123456.789000*/实型数据表示方法#include main()float a,b;double c,d;a=12345.678;b=1.2345678e4;c=12345.678;d=1.2345678E4;printf(%f,%en,b,a);printf(%f,%en,d,c);小数形式小数形式指数形式指数形式以小数形式形式输出以小数形式形式输出以指数形式形式输出以指数形式形式输出3.3.字符型数据类型字符型数据类型l 字符常量字符常量概念:把概念:把ASCIIASCII码字符集码字符集里里的的一个字符一个字符用用单引号单引号括起来称括起来称为字符常量。为字符常量。例如:例如:a a(ASCIIASCII码码9797););A A (ASCIIASCII码码6565););1 1(ASCIIASCII码码4949););!(ASCIIASCII码码3333)字符常量的分类字符常量的分类l一般字符常量一般字符常量l转义字符常量转义字符常量转义字符功能ntvrfb”dddxhh0回车换行横向跳若干格(代表“Tab”键)竖向跳格回车符换页符退格符(代表“Backspace”键)反斜杠字符“”单引号字符双引号字符三位八进制数代表的一个ASCII字符两位十六进制数代表的一个ASCII字符空值 字符常量需要注意的事项字符常量需要注意的事项 区分大小写;例如区分大小写;例如A A和和a a表示不同的字符常量。表示不同的字符常量。单引号内必须要字符:有且只有一个,单引号内必须要字符:有且只有一个,(空格)(空格)也是字符常量也是字符常量 a a、“a a”和和a a代表不同的意义代表不同的意义注 意3.3.字符型数据类型字符型数据类型l 字符变量字符变量例:例:char c1,c2;c1=a;c2=b;数据在计算机中以二进制形式存放。数据在计算机中以二进制形式存放。字符数据在内存单元中存放的是其字符数据在内存单元中存放的是其对应的对应的ASCIIASCII码,且一个字符占用一码,且一个字符占用一个字节。个字节。语言中允许字符常量像整型数据语言中允许字符常量像整型数据一样参与相关运算。一样参与相关运算。字符ASCII码内存中的格式A6501000001B6601000010 Z9001100000a9701100001b9801100010 z12210000000字符变量举例main()char c1,c2;c1=a;c2=98;printf(“%c,%dn”,c1,c1);printf(%c,%dn,c2,c2字符型数据和整型数据是通用的。以字符形式输出。以整数形式输出(字符的ASCII码)。a,97b,98运行结果为:字符型数据进行算术运算#include main()char c1,c2;c1=a;c2=A;c1=c1-32;c2=c2+32;printf(%c,%cn,c1,c2);1.程序最终运行结果如何?2.若以整数形式输出变量c1,c2,则格式说明符应改为?思考问题转义字符的使用例例 转义字符举例转义字符举例main()printf(101 x42 Cn);printf(I say:How are you?n);printf(C Programn);printf(Turbo C);运行结果:运行结果:(屏幕显示屏幕显示)A B CI say:”How are you?”C ProgramTurbo C例例 main()printf(“Yb=n”);运行结果:运行结果:屏幕显示:屏幕显示:=利用字符型数据输出键盘上没有的字符编写程序输出如下图形:#include main()char cx=30 printf(%cn,cx printf(%c%cn,cx,cx);printf(%c%c%cn,cx,cx,cx);printf(%c%c%c%cn,cx,cx,cx,cx);思考:能否用以下语句实现?cx=;Printf(“%cn”,cx);概念概念:字符串常量是指用一对双引号括起来的字符序列。:字符串常量是指用一对双引号括起来的字符序列。如如“Hello”Hello”、“good”good”等。等。字符串常量的存储字符串常量的存储:系统系统在字符串的末尾加上一个字符串结束标记在字符串的末尾加上一个字符串结束标记00,以此判断字符串是否结束。,以此判断字符串是否结束。程序中长度为程序中长度为n n个字符的字符串常量,在内存中需要用个字符的字符串常量,在内存中需要用n+1n+1个字节空间来存储它。个字节空间来存储它。举例举例:字符串:字符串“string”string”的存储。的存储。string01151161141051101030l 字符串常量字符串常量如:如:a a是字符常量,而是字符常量,而“a a”是字符串常量。是字符串常量。如:如:a a在内存中只占在内存中只占1 1个字节,个字节,“a a”则需占用则需占用2 2个字节个字节空间。空间。如:如:ch=ch=a a;是正确的,而是正确的,而ch=ch=“a a”;不是将字符不是将字符a a赋值给变赋值给变量量chch。练一练:练一练:一一.选择题选择题1.1.下面四个选项中,均是不合法的用户标识符的选项是:下面四个选项中,均是不合法的用户标识符的选项是:A AP_0P_0dodofloatfloat la0la0_A_A b-a b-agotogotointint _123 _123 temptempINTINT2.2.在在C C语言中,语言中,charchar型数据在内存中的存储形式是:型数据在内存中的存储形式是:(A)(A)补码补码 (B)(B)反码反码 (C)(C)原码原码 (D)ASCII(D)ASCII码码3.3.设设C C语言中,一个语言中,一个intint型数据在内存中占型数据在内存中占2 2个字节,则个字节,则unsigned unsigned intint型数据的取值范围是:型数据的取值范围是:(A)0(A)0255(B)0255(B)032767(C)032767(C)065536(D)065536(D)0214748364721474836474.4.下面不正确的字符串常量是:下面不正确的字符串常量是:(A)(A)abc (B)“1212”(C)“0”(D)“abc (B)“1212”(C)“0”(D)“”5.5.在在C C语言中语言中(以以1616位位PCPC机为例机为例),5 5种基本数据类型的存储空间种基本数据类型的存储空间长度的排列顺序为:长度的排列顺序为:charintlong int=floatdoublecharintlong int=floatdouble char=int long int=floatdoublechar=int long int=floatdouble charintlong int=float=doublecharintlong int=float=double char=int=long int=floatdoublechar=int=long int=float、=、=、!=!=(3)(3)逻辑运算符:逻辑运算符:&、|、!(4)(4)赋值运算符:赋值运算符:=、复合的赋值运算符、复合的赋值运算符(5)(5)逗号运算符:逗号运算符:,(6)(6)位运算符:位运算符:、&、|、(7)(7)条件运算符:条件运算符:?:(8)(8)强制类型转换运算符:强制类型转换运算符:(类型类型)运算符功能;与操作数关系;要求操作数个数;要求操作数类型;运算符优先级别;结合方向;结果的类型运算符名称运算规则运算对象类型示例备注+加a+bint,float2.5+1 结果:3.5 双目运算符 优先级:*、/、%高于+、-。%运算要求两个操作数必须为整型,否则出错-减a-bint,float2.5-1 结果:1.5*乘a*bint,float2.5*1 结果:2.5/除a/bint,float7.5/3 结果:2.55/2 结果:2%求余a%bint7/3 结果:13/7 结果:3-取负-aint,float-3单目运算符除法和求余运算符的运算规则阅读程序:阅读程序:main()int a=22;int b=3;printf(“%dn”,a/b);分析程序运行结果为?分析程序运行结果为?运行结果为运行结果为7 7,而不是,而不是7.333333,7.333333,为什么为什么?除法运算符的操作数除法运算符的操作数 整数整数 实数实数两个整数相除,结果为两个整数相除,结果为整数;两个实数相除,整数;两个实数相除,结果为实数。结果为实数。例 5/2 =2 2 -5.0/2.0=-2.5例 5/2 =-5.0/2.0=两个整数相除,结果为整数;两个整数相除,结果为整数;被除数或除数为实数,则被除数或除数为实数,则相除结果为实数。相除结果为实数。除法和求余运算符的运算规则说明:表达式说明:表达式a ab b的运算结果为的运算结果为a a除以除以b b的余数,条件是的余数,条件是a a、b b必须为整数。必须为整数。例 15%5 =5%2 =-5%2 =5%-2 =5.5%2 23%10=若0 xy,则:(x+y)%y=1%10 =01-11()3x1第一个数能被第二个数整除第一个数能被第二个数整除对对2求余为非求余为非0值,则此数不是偶值,则此数不是偶数数负数的余数符号看被除数负数的余数符号看被除数对对10求余可得到个位数求余可得到个位数小的数对大的数求余得到的还是小的数对大的数求余得到的还是它本身它本身算术运算符的结合方向练一练:分析下列表达式的运行结果:-3-2*3+2/3*2-(3-2)*(3+2)/(3*2)算术运算符的优先级为*、/、%高于+、-,如果有括号先算括号内的。算术表达式的结合性是“自左至右”。算术运算符优先级及结合性:例题1:写出表达式(a+b)/2+x%y-z的执行过程。先算括号内的a+b;再算(a+b)/2;再算x%y;然后计算(a+b)/2+x%y;最后计算(a+b)/2+x%y-z。不同数据类型之间的混合运算main()int i=2;float j=1.2;double k=123.4;long x=100;char y=a;printf(%lfn,i*(j+k)+x-y);两个不同类型的运算量参加运算,C编译系统自动把长度较短的类型转换为长度较长的类型,转换规律为:“垂直降落,向上位移”,以保证不丢失精度。charfloatintlongdouble 目的:弥补自动类型转换的不足。一般形式:(类型关键字)(变量名或表达式)举例:float a=56.789;int b;b=(int)a%3;(double)b(float)(20%3+4)强制类型转换运算符的应用华氏温度转换成摄氏温度的公式为C=(F-32)*5/9,编写程序输入一个华氏温度F,F为整数,输出相应的摄氏温度,要求精确到小数点后一位。#includemain()int f;float c;printf(“please input F:”);scanf(“%d”,&f);c=(float)(f-32)*5/9;printf(“huashi:%d,sheshi:%.2fn”,f,c);分析:若直接使用公式计算,由于分子分母都是整形数据,则输出结果不正确。可用强制转换运算符进行转换。使用强制类型转换注意:在进行强制类型转换时,类型关键字必须用括号括住。在对一个表达式进行强制类型转换时,整个表达式也要用括号括住。如:(float)(a+b)(float)a+b 在对变量和表达式进行了强制类型转换后,并不改变原变量或表达式的类型。如:int z;float x;double y;z=(int)(x+y);执行后x、y的类型不变。赋值运算符举例等价式备注=a=5x=y+5基本赋值运算符+=a+=2a=a+2复合赋值运算符:由其他运算符和简单赋值运算符组合而成。-=a-=2a=a-2*=x*=y+5x=x*(y+5)/=x/=y+5x=x/(y+5)%=x%=y+5x=x%(y+5)特点:其优先级只高于逗号特点:其优先级只高于逗号运算符,比其他的任何运算运算符,比其他的任何运算符都低。符都低。赋值表达式:赋值表达式:形式:变量表达式形式:变量表达式运算过程:将赋值运算符运算过程:将赋值运算符右边表达式的值赋给左边右边表达式的值赋给左边的变量。的变量。结合方式:自右向左结合方式:自右向左练一练:练一练:分析,执行下列各赋值表达式后,变量a,b,c的值分别为?(1)a=a+1;(2)a=b=c=2;(3)a=2+(b=3);(4)a=(b=2)*(c=3);a的数值+1赋值给a。连续赋值,等价于:a=(b=(c=2);或者:a=2;b=2;c=2;等价于:b=3;a=2+3=5;等价于:b=2;c=3;a=2*3=6;赋值运算符的运算过程步骤:(1)求出“表达式”的值;(2)把求出的表达式的值与“变量”做op运算;(3)把第二步求出的值再赋给“变量”。练习练习1 1:设x=5,y=2,求x%=y+3的值。练一练:练一练:复合赋值运算符的运算过程(1)y3 5即:x%=5(2)x%5 0(3)x 0练习练习2 2:设有int a=10;写出下面表达式的值。a+=a a-=12 a*=3+a a/=a+an=5,a%=n%2赋值运算符及表达式实例#include main()int a=4,b=0,c=0;c=b=a*100;printf(a=%d,b=%d,c=%dn,a,b,c);c=(a=5)+(b=a+5);printf(a=%d,b=%d,c=%dn,a,b,c);a=10;a+=a-=a*a;printf(a=%dn,a);相当于相当于c=(b=a*100);对对a,ba,b先赋值,再计算表先赋值,再计算表达式,对达式,对c c赋值赋值先进行先进行a-=aa-=a*a a的计算,的计算,它相当于它相当于a=a-aa=a-a*a=10-a=10-1010*10=-9010=-90;再进行;再进行a+=-a+=-9090的计算,它相当于的计算,它相当于a=a+(-90)=-90-90=-180a=a+(-90)=-90-90=-180。运算符名称示例功能大于aba是否大于b=大于或等于a=ba是否大于或等于b小于aba是否小于b=小于或等于a 关系运算符关系运算符 赋值运算符。赋值运算符。自身运算符中自身运算符中:,=:,=的级别高于的级别高于=,!=!=。关系表达式的值:是逻辑值关系表达式的值:是逻辑值“真真”或或“假假”,用,用1 1和和0 0表示。表示。例:关系运算符的优先级及结合方向。ca+b /c(a+b)ab!=c /(ab)!=c a=bc /a=(bc /a=(bc)例:设 int a=3,b=2,c=1,d,f;分析下列关系表达式的值。ab (ab)=c b+cb f=abc关系运算符优先级及运算过程/表达式值1/表达式值1/表达式值0/d=1/f=0逻辑运算符名称示例&与a0&a100|或a100!(单目)非!(a=0)数据a数据ba&ba|b!aTTTTFTFFTFFTFTTFFFFT 优先级:结合方向:!&|高高低低!:从右向左从右向左&:从左向右从左向右|:从左向右从左向右!+-+-算术运算符算术运算符关系运算符关系运算符逻辑运算符逻辑运算符 赋值运算符赋值运算符逗号运算符逗号运算符&|例2:逻辑运算符的运算过程。int a=4;b=5;!a a&b a|b !a|b 4&0|2 c&d例1:逻辑运算符的优先级。a=x&xb/(a=x)&(xb)值为1值为0值为1值为1值为1值为1逻辑运算符优先级及运算过程运算符运算符名称名称运算格式运算格式功能功能+自增运算符自增运算符+i+i使用使用i i之前将之前将i i加加1 1i+i+使用使用i i之后将之后将i i加加1 1-自减运算符自减运算符-i-i使用使用i i之前将之前将i i减减1 1i-i-使用使用i i之后将之后将i i 减减1 1前缀式前缀式 :先执行先执行i i+1+1或或i-1i-1,再再使用使用i i值值。前缀式前缀式 :先执行先执行i i+1+1或或i-1i-1,再再使用使用i i值值。例 j=3;k=+j;j=3;k=j+;j=3;printf(“%d”,+j);j=3;printf(“%d”,j+);a=3;b=5;c=(+a)*b;a=3;b=5;c=(a+)*b;a=9;b=-a-;/k=4,j=4/k=3,j=4/4/3/c=20,a=4/c=15,a=4自增、自减运算符优先级及运算过程/a=8,b=-9自增、自减运算小结:自增、自减运算小结:自增运算符和自减运算符是单目运算符,且只能用于单个变量,不能对常量或者表达式操作;自增运算符和自减运算符的操作数可以是整数或者实数;当前置运算或者后置运算与其他运算结合在一个表达式中时:前置运算:先增值后引用 后置运算:先引用后增值“+”和“-”的运算结合方向是从右到左。逗号运算符:“,”,即顺序求值运算符。逗号表达式:用逗号把若干独立的运算表达式结合成一个运算表达式,称为逗号表达式。逗号表达式的一般形式:表达式1,表达式2,表达式n 求解过程:先求“表达式1”,再求“表达式2”,最后求“表达式n”。整个表达式的值为“表达式n”的值。逗号运算符的使用#include main()int a=10,b=10,c=0,d=0,k=0;c=a+;d=b-;k=(a*b,+a,-b);printf(a=%d,b=%d,c=%d,d=%d,k=%dn,a,b,c,d,k);解题步骤:解题步骤:求表达式求表达式1 1:计算a*b。求表达式求表达式2 2:再计算+a。求表达式求表达式3 3:最后计算b。写结果:逗号表达式的值赋值给写结果:逗号表达式的值赋值给k k。逗号表达式可以作为赋值运算逗号表达式可以作为赋值运算中的表达式。中的表达式。逗号运算符的结合方向是从左逗号运算符的结合方向是从左到右。到右。逗号运算符是所有运算符中级逗号运算符是所有运算符中级别最低的。别最低的。C C语言中的优语言中的优先级从高到低先级从高到低分为分为1515级。级。运算符的一运算符的一般顺序:般顺序:l先运算优先运算优先级别高的,先级别高的,再运算优先再运算优先级别低的。级别低的。l对于优先对于优先级别相同的级别相同的运算符,按运算符,按其结合方向其结合方向执行。执行。优先级分级一般规律:优先级分级一般规律:单目运算符优先级最高,双目次之,三目较单目运算符优先级最高,双目次之,三目较低。低。双目运算符中,算术运算符较高,关系次之,双目运算符中,算术运算符较高,关系次之,逻辑较低逻辑较低(!除外!除外)。位运算符中,移位运算高于关系运算,位逻位运算符中,移位运算高于关系运算,位逻辑运算低于关系运算。辑运算低于关系运算。圆括号运算符优先级最高,逗号运算符最低。圆括号运算符优先级最高,逗号运算符最低。练一练:练一练:1.上机编译下面程序,进行调试。#include main();/*main function*/float r;c;r=5.0;c=2r;printf(“%fn”,s)2.写出下列程序的执行结果:#include main()int a,b,c;c=(a=4,b=a+);printf(
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!