C语言程序设计项目教程_第1页
C语言程序设计项目教程_第2页
C语言程序设计项目教程_第3页
C语言程序设计项目教程_第4页
C语言程序设计项目教程_第5页
已阅读5页,还剩197页未读 继续免费阅读

下载本文档

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

文档简介

C语言程序设计项目教程化学工业出版社化学工业出版社C语言概述C语言的产生和发展C语言和其他计算机语言的比较C语言的特点C语言程序设计举例C语言的结构特点VisualC++6.0开发工具练习题本章主要内容:引言C语言的原型ALGOL60语言。(也称为A语言)1963年,剑桥大学将ALGOL60语言发展成为CPL(CombinedProgrammingLanguage)语言。1967年,剑桥大学的MartinRichards对CPL语言进行了简化,于是产生了BCPL语言。1970年,美国贝尔实验室的KenThompson将BCPL进行了修改,起名“B语言”。1972年,美国贝尔实验室的D.M.Ritchie在B语言的基础上设计出了一种新的语言,这就是C语言。1978年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言。1989年,由美国国家标准化协会(AmericanNationalStandardsInstitute)在此基础上制定了一个C语言标准,通常称之为89ANSIC。1994年,ISO又重新修订了C语言的标准,正式成为现行的C语言标准。一、C语言的产生和发展二、几种程序设计语言的比较机器语言:用二进制代码表达的计算机语言,指令用0和1组成。优点:计算机可以直接识别,不需要进行任何翻译,执行速度最快。缺点:可读性差,不便于交流与合作;严重地依赖于具体的计算机,可移植性差,重用性差。

汇编语言:用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码优点:能够直接访问与硬件相关的存储器或I/O端口;能够最大限度地发挥硬件的功能。

缺点:操作码量大,难于记忆,不好维护。二、几种程序设计语言的比较高级语言:语法和结构类似于普通英文,远离 对硬件的直接操作优点:算法语言,易学、易掌握;远离机器语言,与具体的计算机硬件关系不大,可移植性好,重用率高。

※※※C语言就是一种独立于机器,编码相对短,可读性强的高级语言。机器语言汇编语言高级语言面向过程面向对象CPU指令系统,由0、1序列构成的指令码组成如:1011010000000000加法

用助记符号描述的指令系统如ADDA,B程序设计是数据被加工的过程语法类似于英语如c语言c=a+b图表:计算机语言的发展过程三、C语言的特点语言简洁、灵活,便于学习和使用。运算符类型丰富。数据类型丰富,并有多种数据结构。具有结构化的控制语句,层次清晰,便于使用、维护以及调试。高效率的目标代码。能对硬件进行编程。同汇编语言相比,用C语言写的程序可移植性好程序设计较自由,语法限制不严格。四、C语言的格式及结构特点【例0.1】编写程序,在计算机屏幕上显示Hello,World!

#include<stdio.h>main(){printf(“Hello,World!”);}主函数开始主函数体开始标志C语句主函数体结束标志C语句结束程序代码:分析几个简单的C程序【例0.2】编写程序求解123+456的和。#include<stdio.h>main(){ inta,b,sum; a=123;b=456; sum=a+b; printf(“sumis%d:\n”,sum); }定义变量,所有的变量的定义都要放在程序的声明部分“=”赋值语句,念做123赋值给a预处理命令,为调用printf()函数注意:没有“;”四、C语言的格式及结构特点分析几个简单的C程序运行后输出:sumis579

#include<stdio.h>#definePI3.1415926 main() { floatr,a,c; r=2.5; /*输入圆的半径*/ a=PI*r*r; c=2*PI*r; printf(“r=%f,a=%f,c=%f\n”,r,a,c);} 运行后输出:r=2.500000,a=19.634954,c=15.707963四、C语言的格式及结构特点练一练:分析下列程序的功能【例0.4】从键盘输入入两个数,求其中的最最大值。被调用的子函数主函数四、C语言的格式式及结构特特点分析几个简简单的C程序#include<stdio.h>intmax(intx,inty);main(){inta,b,c;scanf(“%d,%d””,&a,&b);c=max(a,b);printf(“max=%d”,c);}intmax(intx,inty){intz;if(x>y)z=x;elsez=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.3』』C语言言规规定定::在在一一个个源源程程序序中中,,main函数数的的位位置置___。(A)必须须在在最最开开始始(B)必须须在在所所有有函函数数的的后后面面(C)可以以任任意意(D)必须须在在最最后后填空空题题『0.4』』函数数体体是是有有符符号号____开始始,,符符号号____结束束。。函函数数体体的的前前面面是是____部分分,,后后面面是是____部分分。。『0.5』』一个个C源程程序序中中至至少少应应包包括括一一个个_______。『0.6』』在一一个个C源程程序序中中,,注注释释部部分分两两侧侧的的分分界界符符分分别别为为_____和_________。练一一练练::观察察以以下下程程序序,,指指出出C程序序的的错错误误所所在在。。#include<stdio.h>;main();floatr,s;/*/*risradius*/*/r=5.0s=3.14*r*r;printf(““%f\n””,s)main()后面面没没有有““;””预处处理理命命令令,,没没有有;注释不能再套一层注释每条语句后都要有“;”“{}”括起整个函数体练一一练练::【实验验0.1】】一个个简简单单的的C语言言程程序序编写写用用printf语句句将将3个字字符符串串::goodmorning,floppydisk,harddisk显示示在在计计算算机机屏屏幕幕上上的的程程序序。。【实验验0.2】】按照照要要求求输输入入程程序序,,查查看看程程序序运运行行的的结结果果输入入并并运运行行下下面面程程序序,,分分析析其其运运行行结结果果。。#include<stdio.h>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】】输入入并并运运行行下下面面程程序序,,分分析析其其运运行行结结果果。。按照照下下面面的的程程序序,,输输入入到到VisualC++6.0集成成开开发发环环境境中中,,并并分分析析运运行行结结果果#include<stdio.h>main(){printf("表达达式式1的值值::%f\n",99.7*0.26+4.25);printf("表达达式式2的值值::%d\n",1/2+1/3+1/4+1/5);printf("表达达式式3的值值::%f\n",3.5/(6.1+2.0*(2.9-1.4*2.7)));}系统统总总体体设设计计C语言言的的产产生生和和发发展展C语言言和和其其他他计计算算机机语语言言的的比比较较C语言言的的特特点点C语言言程程序序设设计计举举例例C语言言的的结结构构特特点点VisualC++++66.0开开发发工工具具练习习题题本章章主主要要内内容容::第1章1、关关于于程程序序知识识储储备备人机机能能够够对对话话,,是是因因为为计计算算机机可可以以执执行行程程序序………人机机进进行行对对话话所所使使用用的的语语言言,,就就是是程程序序设设计计语语言言……程序是为了了使计计算机机完成成指定定的任任务而而编写写的具具有特特定语语法规规则的的指令令序列列。C语言就就是一一种完完成程程序设设计的的高级级语言言。用C语言编编写的的程序序叫做做“源源程序序”,,文件件为*.c1.1程序和和程序序设计计C语言程程序编编辑与与运行行流程程开始编辑源程序编译连接程序编译连接有错?运行程序运行有错?结束修改程序调试程序真假假真注意上述过过程都都在IDE(集成开开发环环境)中进行行!程序员员只需需要在在IDE中完成成*.c的源文文件的的设计计和程程序的的调试试*.obj*.c*.exe2程序设设计用程序序设计计语言言来描描述问问题的的求解解过程程,以以及对对其中中参与与运算算的数数据进进行合合理地地组织织和安安排,,就叫叫做程序设设计。分析问问题确定算算法画流程程图编写程程序运行调调试总结过过程基本步骤程序设设计=数据结结构+算法知识储储备1.1程序和和程序序设计计有穷性性确定性性可行性性有一个个或者者多个个输入入输出出算法描描述常常见工工具::流程图图N-S图1.2算法的的概念念及描描述方方法算法是针对对提出出的可可行方方案确确定解解决问问题、、完成成任务务的每每一个个细节节步骤骤。好的算算法开始框框一般处处理框框判断框框结束框框流程线线1.2算法的的概念念及描描述方方法流程图图输入rr>0真假S=π·r2C=2π·r输出S,CN-S流程图图1.2算法的的概念念及描描述方方法1.3C程序设设计中中的三三种基基本结结构顺序结结构——自顶向向下,,无分分支,,无转转移选择结结构——有分支支,需需条件件判断断循环结结构——有转移移,某某些语语句可可重复复执行行当型循循环直到型型循环环(a)流程程图表示法法(b)N-S图表示法法1.3C程序设设计中中的三三种基基本结结构顺序结结构(a)流程程图表示法法(b)N-S图表示法法1.3C程序设设计中中的三三种基基本结结构选择结结构当条件判断表达式为真

循环体语句判断表达式循环体语句真假循环体语句直到判断表达式为假循环体语句判断表达式假真当型循循环直到型型循环环1.3C程序设设计中中的三三种基基本结结构循环结结构主函数数子函数数语句dmainabcgkfhjiel自上而而下,,逐步步细化化模块化化结构构程序序设计计1.4函数的的定义义和使使用主函数数:main(),是必须须存在在且唯唯一的的,是是程序序执行行的入入口。。从使用角角度分:标准库库函数数:以程序序库的的形式式直接接提供供给用用户使使用。。stdio.h……gets()、printf()math.h……sin()、sqrt()用户自自定义义函数数:由用用户自自己建建立定定义。。函数的的分类类1.4函数的的定义义和使使用函数的的分类类从函数形形式分:无参函函数:调用函函数时主主函数不不将数据据传送给给被调函函数。用用于完成成特定功功能的操操作。如:c=getchar()……有参函数数:调用函函数时在在主调函函数和被被调函数数之间有有参数传传递。如:putchar(c)、puts(str)、……两种函数数分类是是独立的的注意实例演示库函数的的使用题目:求求函数的值,x的值通过过键盘输输入。#include<stdio.h>#include<math.h>main(){floatx,y;scanf("%f",&x);y=sqrt(fabs(x))+1;printf("%f",y);}数学函数数:fabs(x):求x的绝对值值。sqrt(n):计算n的平方根根。输入输出函数:scanf(),printf()。调用标准准库函数数前要求求使用include命令包含含库函数数所对应应的头文文件。实例演示无参函数数的定义义及调用用#include<stdio.h>voidprint_star();voidprint_text();main(){print_star();print_text();print_star();}voidprint_star(){printf("********************************\n");}voidprint_text(){printf("GoodMorning!\n");}无参函数数的定义义形式::【类型标识识符】函数名(){说明部分分;语句部分分}无参函数数的调用用:函数语句句:print_star();函数说明明:函数要求求必须““先定义义后使用用”,若若函数的的定义位位置在调调用之后后,要求求在主函函数的上上面要进进行函数数的原型型说明,,即说明明函数名、、函数返返回值类类型、形形参类型型及个数数等。函数调用语句主调函数被调函数函数体实参形参a)程序流向b)参数传递函数调用用过程示示意实例演示有参函数数的定义义及调用用main(){inta,b,c;scanf("%d%d",&a,&b);c=max(a,b);printf("max=%d\n",c);}intmax(intx,inty){intz;if(x>y)z=x;elsez=y;return(z);}形式参数数实际参数数有参函数数定义形形式:类型返回回值的类类型名函函数名名(类型名形形式参参数1,…,类型名名形式式参数n){说明部分分;语句部分分;}函数调用用格式::作为表达达式出现在任任何允许许表达式式出现的的地方,,参与运运算。函数调用用及return语句执行行图示::main(){inta,b,c;scanf(““%d%d”,&a,&b);c=max(a,b);printf(“max=%d\n”,c);}intmax(intx,inty){intz;if(x>y)z=x;elsez=y;return(z);}主调函数被调函数实例演示有参函数的定定义及调用函数调用的三三种方式按照函数在程程序中出现的的位置来分;;作为表达式出出现在任何允允许表达式出出现的地方,,参与运算。。如:c=max(a,b);作为一条独立立的语句完成成特定的操作作。如:printf("max=%d\n",c);作为函数的参参数被其他函函数调用。如:printf(“%s\n”,strcpy(str1,”Redrose””));知识归纳:知识归纳:函数的返回值值是通过return语句传递的。。return语句的一般形形式:return表达式;return(表达式);函数返回值的的注意事项返回值类型要要与函数类型型一致函数类型缺省省时,系统自自动按整型处处理。一个函数中可可以有若干个个return语句,流程执执行到哪里,,就从哪里返返回主调函数数。若函数体内没没有return语句,则执行行函数到末尾尾,然后返回回主调函数。。当不需要返回回值的时候,,可以用void定义函数为空空类型,表示示无返回值。。知识归纳:调用函数与被被调函数的相相对位置关系系如使用库函数数,一般应在在文件开头用用:#include<……>……函数调用遵循循“先定义后后调用”的原原则。一般被被调函数放在在调用函数之之前定义。若被调函数在在调用函数之之后定义,就就必须在调用用函数中对被被调函数加以以如下说明::类型名被调调函数名(参数类型1,参数类型2,……参数类型n);知识归纳:#include<stdio.h>intisleap(intyear){intflag;f(year%400==0||(year%4==0&&year%100!=0))flag=1;elseflag=0;returnflag;}main(){inty;printf("\npleaseinputayear:");scanf("%d",&y);if(isleap(y)==1)printf("\n%disleap.",y);elseprintf("\n%disnotleap.",y);}形式参数实际参数参数传递练一练:分析下面程序序功能,结构构,函数定义义及调用过程程。练一练:分析下面程序序功能,结构构,函数定义义及调用过程程。voidpchar(){printf("************************\n");}doublearea(doubler){doubles;s=3.14*r*r;returns;}doublevolume(doublear,doublehgt){doublevol;vol=ar*hgt/3;returnvol;}#include<stdio.h>#include<conio.h>doublearea(double);doublevolume(double,double);voidpchar();main(){doubler,h,s,v;clrscr();pchar();printf("inputtheradiusandheight:");scanf("%lf%lf",&r,&h);printf("\n");s=area(r);v=volume(s,h);printf("radius=%8.4lf,height=%8.4lf\n",r,h);printf("area=%8.4lf,volume=%8.4lf\n",s,v);pchar();}练一练:#include<stdio.h>main(){intr1,r2;doubles1,s2,s;r1=2;r2=5;s1=myarea(r1)s2=myarea(r2)s=s2-s1;printf("%lf\n",s);}intmyarea(doubler){doubles;s=3.14*r*r;}修改错误:练一练:#include<stdio.h>floatmyaverage(float,float);main(){floatx,y,z;x=12;y=25;z=myaverage(x,y);printf("%lf\n",z);}分析下面的程程序,写出程程序的预期结结果。floatmyaverage(floata,floatb){floatc;c=(a+b)/2;returnc;}练一练:#include<stdio.h>【①】】/*myarea()函数的原型型说明*/【②】】/*myvolume()函数的原型型说明*/main(){doubler,h;doubles,v;r=5;h=10;【④】】/*调用myarea()函数求圆面面积*/【⑤】】/*调用myvolume()函数求体积积*/printf("volume=%lf\n",v);}根据程序功功能要求,,将程序补补充完整。。练一练:doublemyarea(doubler){doubles;s=3.14*r*r;returns;}doublemyvolume(doublear,doublehgt){doublevol;vol=ar*hgt;returnvol;}练一练:程序设计。。设有一个平平行四边形形,其顶点点坐标依次次为A(2,2)、B(4,6)、C(8,6)、D(6,2),编写程序序,计算两两个对角线线AC、BD的长度。已已知两点坐坐标(x1,y1)和(x2,y2),求两点间距距离的公式式为:程序要求定定义函数mylength()计算两坐标标点之间的的长度。任务一:““学生成绩绩管理系统统”整体结结构设计功能需求分分析步骤1:创建文件存存放一批学学生的成绩绩。本系统统要求每一一位学生至至少存有4门课程的成成绩和总评评成绩及平平均成绩。。实现“添加加”、“修修改”、““删除”指指定成绩记记录的操作作。能对一个已已存在文件件进行“打打开”、““保存”等等操作。能实现“分分类查询课课程成绩””、“查询询全部课程程成绩”等等查询功能能。能对学生成成绩进行排排名。能统计学生生的“奖学学金获得情情况”,““未获学位位情况”,,“某门课课程的总分分及平均分分”,“某某门课程的的学生成绩绩等级情况况”等。菜单界面要要求美观,,大方,易易于操作。。能够安全退退出系统。。整个系统统只有一个个出口,程程序只能通通过该出口口结束。分析设计步骤2:实验预习【实验1.1】上机运行以以下程序,,熟悉函数数的调用方方法。main(){intx,y,z;x=4;y=12;z=6;fun(x,y,z);printf(“%x=%d;y=%d;z=%d\n”,x,y,z);}fun(inti,intj,intk){intt;t=(i+j+k)/3;printf(“t=%d\n”,t);}main(){inti,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=%d\n””,g,i,j);printf(“x=%d;y=%d\n”,x,y);f(n,8);}f(inti,intj){intx,y,g;g=8;x=7;y=2;printf(“g=%d;i=%d;j=%d\n””,g,i,j);printf(“x=%d;y=%d\n”,x,y);}实验预习【实验1.2】上机运行以以下程序,,了解程序序的执行过过程。#include<stdio.h>voidmyswap(int,int);main(){intx,y;x=2;y=4;myswap(x,y);printf("x=%d,y=%d\n",x,y);}voidmyswap(inta,intb){intc;c=a;a=b;b=c;printf("a=%d,b=%d\n",a,b);}写出运行以以上程序后后的预期结结果。观察实际输输出结果与与预期结果果是否相符符。将函数myswap()中的a和b改为x和y,再观察运运行结果,,有什么不不同。用单步执执行的方方法,了了解程序序执行过过程中数数据的变变化情况况。系统数据据结构设设计及运运算第2章知识储备备引导:分分析C程序组成成2.1常量与变变量一个C程序是由由一个或或多个函函数组成成,函数数体由若若干条C语句组成成,那么么,C语句又是是由什么么组成??主函数……函数nC语句1C语句2……C语句n常量变量C程序标识符#include<stdio.h>#definePI3.1415926main(){floatr,s,c;r=5;/*输入圆的的半径*/s=PI*r*r;c=2*PI*r;printf(“r=%f,s=%f,c=%f\n”,r,s,c);}实例演示常量与变变量使用用举例直接常量符号常量量整型常量:11、25、-1;实型常量:0.2、3.1415,3.0;字符常量:‘A’,‘a’(大小写代表不同的值)字符串常量:“nice”

、“good”;定义形式#define常量名常量值一般用大写字母是宏定义预处理命令,不是C语句,后面没有“;”#include<stdio.h>#definePI3.1415926main(){floatr,s,c;r=5;s=PI*r*r;c=2*PI*r;printf(“r=%f,s=%f,c=%f\n”,r,s,c);}实例演示常量与变变量使用用举例定义变量rsc变量:变量赋值00000000000000000000000000000101变量参加运算重点:变量必须先定义后使用;变量的实质是内存的存储单元。决定了变变量的数数据结构构及分配配存储空空间的大大小。整型变量量:存放放整型数数据实型变量量:存放放实型数数据字符变量量:存放放字符型型数据标识符是对变量量、函数数、数组组等命名名的符号号。由英文字字母、数数字及下下划线构构成,并并且首字字符必须须为字母母或下划划线。标识符的的种类::关键字::C语言预先先规定的的标识符符,每个都代代表着某某一固定定含义。。预定义标标识符::预先定定义并有有特定含含义的标标识符用户标识识符:用用户自己己命名的的标识符符。定义变量量的格式式:数据类型型变量名1,变量名名2,……变量名n;分讲:变变量的的定义1.C语言允许许在定义义变量时时对变量量进行初初始化,,即对变变量赋初初值。如:inta=2;等价于inta;a=2;2.对变量进进行初始始化,允允许只对对定义的的变量的的一部分分赋初值值。如:inta,b,c=25; charch1=‘x’,ch2;3.C语言中若若有几个个变量初初值相同同,必须须分别赋赋值。如:inta=2,b=2,c=2;不允许::inta=b=c=2;分讲:变变量定义义及初始始化变量在初初始化之之前,他他的值是是无意义义的(值值随机))注意标识符区区分大小小写练一练::练习:请请找出不不合法的的标识符符.unionabc_1232ab3d+babc8*stu_bc8abcdefghi-s10*&%$#2.2C语言的的数据据类型型C数据类型基本类型构造类型指针类型空类型void定义类型typedef字符类型char枚举类型enum整型实型单精度型float双精度型double数组结构体struct共用体union短整型short长整型long整型int2.2C语言的的数据据类型型1.整型数数据类类型整型常常量十进制制数如:12、345、0、-5八进制制数(以0开头)如:012、045十六进进制数数(0x开头)如:0x12、0x345整型变变量基本型型(int)短整型型(shortint、short)长整型型(longint、long)无符号号型无符号号整型型(unsignedint)无符号号短整整型(unsignedshort)无符号号长整整型(unsignedlong)问题::0123=()100x123=()100Xff=()10整形数数据的的所占占存储储空间间的大大小及及表示示数的的范围围说明:数据类类型所所占字字节数数随机机器硬硬件和和编译译环境境的不不同而而不同同,上表以以IBMPC机,和和TurboC集成开开发环环境为为例。。类型符号关键字字数值表表示范范围所占字字节整型有无(signed)int2-32768~32767(signed)short2-32768~32767(signed)long4-2147483648~21474836472unsigned

int0~6553540~4294967295unsigned

longunsigned

short20~65535需要记记忆#include<stdio.h>main(){intx=123,y=0123,z=0x123;printf(″%d,%d,%d\n″″,x,y,z);/*以十进进制格格式输输出*/printf(″%o,%o,%o\n″″,x,y,z);/*以八进进制格格式输输出*/printf(″%x,%x,%x\n″″,x,y,z);/*以十六六进制制格式式输出出*/}实例演示整型常常量的的表示示方法法实例演示整型变变量的的定义义及表表示数数范围围举例例#include<stdio.h>main(){inta,b;longc,d;unsignede,f;a=32767;b=1;c=2147483647;d=1;e=65535;f=1;printf(″int:%d,%d\n″,a+b,a);printf(″long:%ld,%ld\n″,c+d,c);printf(″unsigned:%u,%u\n″,e+f,e);}运行结结果::int:-32768,32767long:-2147483648,2147483647unsigned:0,65535当各种种整型型数取取最大大值时时,如如果再再加1,则超超出其其所能能表示示的范范围,,结果果为该该类型型取值值范围围的最最小值值。整数在在内存存中的的存储储方式式正整数数:用用原码码的形形式存存储,,符号号位是是“0”;负整数数:用用“补码”的形式式存储储,符符号位位为“1”;-1用补码码表示示为::1111111111111111有符号号整型型变量量的取取值范范围是是-32768~32767(TurboC)3.无符符号号整整数数::最最高高位位不不再再是是符符号号位位,,整整个个16二进进制制数数都都用用来来存存放放整整数数。。1111111111111111表示示655352.2C语言言的的数数据据类类型型2.实型型数数据据类类型型1)实型型常常量量:即即实实数数或或称称浮浮点点数数。。以以十十进进制制形形式式表表示示。。实型型常常量量的的表表示示形形式式小数数形形式式例如如::0.15、.15、0.0、123.(注注意意::必必须须有有小小数数点点!!))指数数形形式式小数数E(或e)整数数说明明::“小数数”表示示实实数数的的数数值值位位,,即即尾尾数数部部分分。。“E”代表表十十进进制制数数的的基基数数10。“整数数”表示示10的乘乘幂幂。。注意意::字字母母E之前前必必须须有数数字字!!1.23×1033.918e-0021.23E+0033.918×10-2123.00.003918举例:2.2C语言言的的数数据据类类型型2.实型型数数据据类类型型2)实型型变变量量类型所占字节有效数字数的取值范围定义举例单精度实型float46~7-10-37~1038floatx1,y1;双精度实型double815~16-10-307~10308doublex2,y2;例::floata;a=123456.789;/*a=123456.789063*/doubleb;b=123456.789;/*b=123456.789000*/实例例演示示实型型数数据据表表示示方方法法#include<stdio.h>main(){floata,b;doublec,d;a=12345.678;b=1.2345678e4;c=12345.678;d=1.2345678E4;printf(″″%f,%e\n″″,b,a);printf(″″%f,%e\n″″,d,c);}小数形式指数形式以小数形式形式输出以指数形式形式输出2.2C语言言的的数数据据类类型型3.字符符型型数数据据类类型型字符符常常量量概念念::把把ASCII码字字符符集集里的的一个个字字符符用单引引号号括起起来来称称为为字字符符常常量量。。例如如::‘a’(ASCII码97);‘A’(ASCII码65);‘1’(ASCII码49);‘!’(ASCII码33)字符常常量的的分类类一般字字符常常量转义字字符常常量转义字符功能\n\t\v\r\f\b\\\’\”\ddd\xhh\0回车换行横向跳若干格(代表“Tab”键)竖向跳格回车符换页符退格符(代表“Backspace”键)反斜杠字符“\”单引号字符双引号字符三位八进制数代表的一个ASCII字符两位十六进制数代表的一个ASCII字符空值字符常常量需需要注注意的的事项项区分大大小写写;例例如‘A’和‘a’表示不不同的的字符符常量量。单引号号内必必须要要字符符:有有且只只有一一个,,‘(空格格)’也是字字符常常量‘a’、“a”和a代表不不同的的意义义注意意2.2C语言的的数据据类型型3.字符型型数据据类型型字符变变量例:charc1,c2;c1=‘a’;c2=‘‘b’’;数据在在计算算机中中以二二进制制形式式存放放。字符数数据在在内存存单元元中存存放的的是其其对应应的ASCII码,且且一个个字符符占用用一个个字节节。C语言言中允允许字字符常常量像像整型型数据据一样样参与与相关关运算算。字符ASCII码内存中的格式‘A’6501000001‘B’6601000010…………‘Z’9001100000‘a’9701100001‘b’9801100010…………‘z’12210000000部分字字符ASCII表实例演示字符变变量举举例main(){charc1,c2;c1='a';c2=98;printf(“%c,%d\n””,c1,c1);printf("%c,%d\n",c2,c2}字符型型数据据和整整型数数据是是通用用的。。以字符形式输出。以整数形式输出(字符的ASCII码)。a,97b,98运行结果为:

实例演示字符型型数据据进行行算术术运算算#include<stdio.h>main(){charc1,c2;c1='a';c2='A';c1=c1-32;c2=c2+32;printf("%c,%c\n",c1,c2);}1.程序最最终运运行结结果如如何??2.若以整整数形形式输输出变变量c1,c2,则格格式说说明符符应改改为??思考问问题实例演示转义字字符的的使用用73例转转义字字符举举例main(){printf("\101\x42C\n");printf("Isay:\"Howareyou?\"\n");printf("\\CProgram\\\n");printf("Turbo\'C\'");}运行结结果::(屏幕显显示)ABCIsay:””Howareyou?”\CProgram\Turbo‘‘C’’例main(){printf(““Y\b=\n”);}运行结结果::屏幕显显示::=实例演示利用字字符型型数据据输出出键盘盘上没没有的的字符符编写程程序输输出如如下图图形::▲▲▲▲▲▲▲▲▲▲▲▲#include<stdio.h>main(){charcx=30printf("%c\n",cxprintf("%c%c\n",cx,cx);printf("%c%c%c\n",cx,cx,cx);printf("%c%c%c%c\n",cx,cx,cx,cx);}思考:能能否用以以下语句句实现??cx=‘‘▲’;Printf(“%c\n””,cx);概念:字符串串常量是是指用一一对双引引号括起起来的字字符序列列。如““Hello”、“good”等。字符串常常量的存存储:系统自动在字符串串的末尾尾加上一一个字符符串结束束标记‘‘\0’,以此判判断字符符串是否否结束。。程序中长长度为n个字符的的字符串串常量,,在内存存中需要要用n+1个字节空空间来存存储它。。举例:字符串串“string””的存储。。string\011511611410511010302.2C语言的数数据类型型字符串常常量字符常量量与字符符串常量量的区别别二者表示示形式不不同。字字符常量量的定界界符是‘’,而字符符串常量量的定界界符是“”。如:‘a’是字符常常量,而而“a”是字符串串常量。。存储空间间不同。。一个字字符常量量只占1个字节,,而一个个含有单单个字符符的字符符串常量量需要占占用2个字节。。如:‘a’在内存中中只占1个字节,,“a”则需占用用2个字节空空间。不允许将将一个字字符串常常量赋给给一个字字符型变变量。如:ch=‘a’;是正确的的,而ch=“a”;不是将字字符a赋值给变变量ch。字符常量量中‘’是不允许许空白,,字符串串常量允允许空白白“”,称为“空串”。练一练::一.选择题1.下面四个个选项中中,均是是不合法法的用户户标识符符的选项项是:AP_0dofloatla0_Ab-agotoint_123 tempINT2.在C语言中,,char型数据在在内存中中的存储储形式是是:(A)补码(B)反码(C)原码(D)ASCII码3.设C语言中,,一个int型数据在在内存中中占2个字节,,则unsignedint型数据的的取值范范围是::(A)0~255(B)0~32767(C)0~65536(D)0~21474836474.下面不正正确的字字符串常常量是::(A)‘abc’’(B)“12’’12””(C)““0”(D)“””5.在C语言中(以16位PC机为例),5种基本数据据类型的存存储空间长长度的排列列顺序为::char<int<longint<=float<doublechar=int<longint<=float<doublechar<int<longint=float=doublechar=int=longint<=float<double二.填空题。1.C语言中,实实型变量分分为_____和_____两种。2.若有变量定定义inta=2;floatb=1.2345;则变量a、b在内存占用用___字节,b再内存中占占用__字节。3.C语言中的转转义字符就就是以一个个_____开头的字符符序列,用用来表示ASCII码字符集中中一些不可可打印的控控制字符和和特定功能能的字符。。2.3运算符与表表达式(1)算术运算符符:+、-、*、/、%、+++、--(2)关系运算符符:>、<、==、>=、<=、!=(3)逻辑运算符符:&&、||、!(4)赋值运算符符:=、复合的赋赋值运算符符(5)逗号运算符符:,,(6)位运算符::<<、>>、&、|、~、^(7)条件运算符符:?:(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单目运算符1.图表讲解::算术运算算符实例演示除法和求余余运算符的的运算规则则阅读程序::main(){inta=22;intb=3;printf(“%d\n””,a/b);}分析程序运运行结果为为?运行结果为为7,而不是7.333333,为什么?除法运算符符的操作数数整数实数两个整数相相除,结果果为整数;;两个实数数相除,结结果为实数数。例5/2=22-5.0/2.0=-2.5例5/2=-5.0/2.0=两个整数相相除,结果果为整数;;被除数或或除数为实实数,则相相除结果为为实数。实例演示除法和求余余运算符的的运算规则则说明:表达达式a%b的运算结果果为a除以b的余数,条条件是a、b必须为整数数。例15%5=5%2=-5%2=5%-2=5.5%223%10=若0<x<y,则:(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(){inti=2;floatj=1.2;doublek=123.4;longx=100;chary='a';printf(″%lf\n″,i*(j+k)+x-y);}两个不同类类型的运算算量参加运运算,C编译系统自自动把长度度较短的类类型转换为为长度较长长的类型,,转换规律律为:“垂垂直降落,,向上位移移”,以保保证不丢失失精度。charfloatintlongdouble目的:弥补补自动类型型转换的不不足。一般形式:(类型关键字字)(变量名或表表达式)举例:floata=56.789;intb;b=(int)a%3;(double)b(float)(20%3+4)实例演示强制类型转转换运算符符的应用华氏温度转转换成摄氏氏温度的公公式为C=(F-32)*5/9,编写程序序输入一个个华氏温度度F,F为整数,输输出相应的的摄氏温度度,要求精精确到小数数点后一位位。#include<stdio.h>main(){intf;floatc;printf(“pleaseinputF:”);scanf(“%d”,&f);c=(float)(f-32)*5/9;printf(“huashi:%d,sheshi:%.2f\n”,f,c);}分析:若直接接使用公式计计算,由于分分子分母都是是整形数据,,则输出结果果不正确。可可用强制转换换运算符进行行转换。使用强制类型型转换注意::在进行强制类类型转换时,,类型关键字字必须用括号号括住。在对一个表达达式进行强制制类型转换时时,整个表达达式也要用括括号括住。如:(float)(a+b)(float)a+b在对变量和表表达式进行了了强制类型转转换后,并不不改变原变量量或表达式的的类型。如:intz;floatx;doubley;z=(int)(x+y);执行后x、y的类型不变。。2.图表讲解:赋赋值运算符及及表达式赋值运算符举例等价式备注=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:设x=5,y=2,求x%=y+3的值。练一练:复合赋值运算算符的运算过过程(1)y+35

即:x%=5(2)x%5 0(3)x0练习2:设有inta=10;写出下面表达达式的值。①a+=a②②a-=12③③a*=3+a④④a/=a+a⑤n=5,a%=n%2实例演示赋值运算符及及表达式实例例#include<stdio.h>main(){inta=4,b=0,c=0;c=b=a*100;printf("a=%d,b=%d,c=%d\n",a,b,c);c=(a=5)+(b=a+5);printf("a=%d,b=%d,c=%d\n",a,b,c);a=10;a+=a-=a*a;printf("a=%d\n",a);}相当于c=(b=a*100);对a,b先赋值,再计计算表达式,,对c赋值先进行a-=a*a的计算,它相相当于a=a-a*a=10-10*10=-90;再进行a+=-90的计算,它相相当于a=a+(-90)=-90-90=-180。3.图表讲解:关关系运算符及及表达式运算符名称示例功能>大于a>ba是否大于b>=大于或等于a>=ba是否大于或等于b<小于a<ba是否小于b<=小于或等于a<=ba是否小于或等于b==等于a==ba是否等于b!=不等于a!=ba是否不等于b结合方向:自自左向右优先级别:算术运算符>关系运算符>赋值运算符。。自身运算符中中:<,<=,>,>=的级别高于==,!=。关系表达式的的值:是逻辑辑值“真”或或“假”,用用1和0表示。例:关系运算算符的优先级级及结合方向向。c>a+b//c>(a+b)a>b!=c//(a>b)!=ca==b<c//a==(b<c)a=b>c//a=(b>c)例:设inta=3,b=2,c=1,d,f;分析下列关系系表达式的值值。a>b(a>b)==cb+c<ad=a>bf=a>b>c实例演示关系运算符优优先级及运算算过程//表达式值1//表达式值1//表达式值0//d=1//f=04.图表讲解:逻逻辑运算符及及表达式逻辑运算符名称示例&&与a>0&&a<100||或a<0||a>100!(单目)非!(a==0)数据a数据ba&&ba||b!aTTTTFTFFTFFTFTTFFFFT优先级:结合方向:!

&&||高低!:从右向左&&:从左向右||:从左向右!++--+-算术运算符关系运算符逻辑运算符赋值运算符逗号运算符&&

||图表讲解:逻逻辑运算符优优先级及结合合方向例2:逻辑运算符的的运算过程。。inta=4;b=5;!aa&&ba||b!a||b4&&0||2‘c’&&‘‘d’例1:逻辑运算符符的优先级。。a<=x&&x<=ba==b||x==y!a||a>b//(a<=x)&&(x<=b)//(a==b)||(x==y)//(!a)||(a>b)值为1值为0值为1值为1值为1值为1实例演示逻辑运算符优优先级及运算算过程5.图表讲解:自自增、自减运运算符运算符名称运算格式功能++自增运算符++i使用i之前将i加1i++使用i之后将i加1--自减运算符--i使用i之前将i减1i--使用i之后将i减1前缀式:先执行i+1或i-1,再使用i值。前缀式:先执行i+1或i-1,再使用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自增、自自减运算算小结::自增运算算符和自自减运算算符是单单目运算算符,且且只能用用于单个个变量,,不能对对常量或或者表达达式操作作;自增运算算符和自自减运算算符的操操作数可可以是整整数或者者实数;;当前置运运算或者者后置运运算与其其他运算算结合在在一个表表达式中中时:前置运算算:先增增值后引引用后置运算算:先引引用后增增值“++”和“--”的运算结结合方向向是从右右到左。。6.图表讲解解:逗号号运算符符、逗号号表达式式逗号运算算符:“,”

温馨提示

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

评论

0/150

提交评论