版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一章计算机程序设计概述教材与课时安排教材C语言程序设计与实践廖小飞等编著电子工业出版社课时安排授课:36学时上机:12学时计算机系统组成程序设计语言计算机算法简介数制及进制转换第1章计算机程序概述数值编码C语言概述1.1计算机系统组成计算机系统的基本组成1.1计算机系统组成硬件系统根据冯·诺依曼结构,硬件系统由5部分构成:1.1计算机系统组成硬件系统1.控制器计算机的控制中心2.运算器完成相应的二进制算术运算3.存储器保存程序和数据及存储运算时的数据和结果4.输入设备输入设备是用来完成输入功能的部件;5.输出设备将计算机的中间运行情况或运行后的结果进行表现的1.1计算机系统组成计算机执行程序的过程1.取指阶段
2.译码阶段分析翻译指令为对应的操作;3.执行阶段完成指令规定的操作;4.取下一条指令产生下一条指令地址存储器处理器中的寄存器1.1计算机系统组成软件系统为指挥计算机工作的程序和程序运行时所需要的数据及所需要的数据和文档的集合。系统软件计算机系统必备的基本软件操作系统、语言处理程序译程序、程序设计语言程序、系统支持和服务程序、查杀病毒程序、数据库管理系统。应用软件为解决计算机各类应用问题而编写的程序 用户程序(如天气预报软件)和应用软件包1.2程序设计语言
机器语言用二进制代码表示的计算机能直接识别和执行的一种机器指令的集合。例用机器语言计算a=a+b的代码,其中a=1,b=2:111000111010000000000000000000011110001110100000000100000000001011100000100000000000000000000001汇编语言采用助记符来代表低级机器语言的操作例用汇编语言计算计算a=a+b的代码,其中a=1,b=2:MOVR0,#1MOVR1,#2ADDR0,R0,R11.2程序设计语言
高级语言接近人们对求解问题的描述方式的计算机语言称为高级语言。例用C语言计算a=a+b的代码,其中a=1,b=2:inta=1;intb=2;a=a+b;1.3计算机算法简介算法的定义算法是对特定问题求解步骤的一种描述。算法+数据结构=程序一个程序应包括对数据的描述,在程序中要指定数据的类型和数据的组织形式,即数据结构(datastructure)对操作的描述,即操作步骤,也就是算法(algorithm)算法的特点:(1)输入:一个算法有零个或多个输入。(2)输出:一个算法应有一个或多个输出,输出是算法计算的结果。(3)确定性:算法的描述必须无歧义,每个步骤应当是确定的,而不能是含糊的、模棱两可的,以保证算法的实际执行结果是准确符合要求或期望的,通常要求实际运行结果是确定的。(3)有限性:一个算法应包含有限的操作步骤,而不能是无限的。(4)有效性:又称可行性,算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现的。1.3计算机算法简介求解5!=1×2×3×4×5方法一:先求1×2,得到2;将2×3,得到6;将6×4,得到24;将24×5,得到120;1.3计算机算法简介方法二:设p:被乘数,i:乘数S1:p=1S2:i=2S3:p=p×iS4:i=i+1S5:如果i不大于5,返回到S3以及其后的S4和S5,否则结束,最后得到的p就是1×2×3×4×51.3计算机算法简介求解方法一:
1.求1-1/2,得到1/2
2.将1/2+1/3,得到5/6
3.将5/6-1/4,得到7/12
…….方法二:
S1:sign=1
S2:sum=1
S3:deno=2
S4:sign=(-1)×sign
S5:term=sign×(1/deno)
S6:sum=sum+term
S7:deno=deno+1
S8:若deno+1≤100,返回S4;否则算法结束2.4算法的表示方法用自然语言表示算法用流程图表示算法例将5!=1×2×3×4×5的算法用流程图表示。2.4算法的表示方法用N-S流程图表示算法用伪代码表示算法用计算机语言表示算法将求5!=1×2×3×4×5的算法。用伪代码表示:开始置p的初值为1置i的初值为2当i<=5,执行下面的操作: 使p=p×i 使i=i+1 (循环体到此结束)打印p的值结束用N-S图表示:用计算机语言表示:intproduct=1;inti=2;while(i<=5){ product=product*i; i=i+1;}printf("%d",product);基本程序结构和流程图
基本结构包括三种: ①顺序结构,按指令的顺序依次执行;1.3计算机算法简介基本程序结构和流程图
基本结构包括三种: ②选择结构,根据判别条件有选择地改变执行流程;1.3计算机算法简介基本程序结构和流程图
基本结构包括三种: ③循环结构,有条件地重复地执行某个程序块。1.3计算机算法简介当型循环结构直到型循环结构1.4数制及进制转换基本进位制数码、基与权数码:表示数的符号基:数码的个数权:每一位所具有的值进制二进制八进制十六进制十进制1.4数制及进制转换基本进位制十进制
任意一个n位十进制正整数均可表示为:例数76543和2015.21用位权来表示1.4数制及进制转换基本进位制二进制 数码:0和1 基数:2位权。二进制的各位位权分别为、、、…
任意一个n位十进制正整数均可表示为:例如:1.4数制及进制转换基本进位制十六进制 数码:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F,逢十六进一 基数:16,采用16个基本编码位权。各位位权分别为
、
、
、…
任意一个n位十六进制正整数均可表示为:例如:1.4数制及进制转换基本进位制八进制 数码:0、1、2、3、4、5、6、7等8个符号,逢八进一。 基数:8,采用8个基本编码位权。各位位权分别为
、
、
、…
任意一个n位十六进制正整数均可表示为:例如:1.4数制及进制转换基本进位制R进制 数码:逢R进一。 基数:8,采用8个基本编码位权。各位位权分别为
、
、
、…
任意一个n位十六进制正整数均可表示为:R进制数第i位系数第i位位权第i位位权1.4数制及进制转换各种进制之间的转换 二进制、八进制、十六进制转换成十进制方法:按权相加例26 十进制转换成二进制、八进制、十六进制方法:除R倒取余数-----十进制数的整数乘R顺取整数-----十进制数的小数十进制数987转换成十六进制数十进制数75.56转换为二进制数整数部分:(除2倒取余数)小数部分(乘2顺取整数)1.4数制及进制转换各种进制之间的转换 二进制数与十六进制数的相互转换将二进制正整数转换为十六进制数——4位一组例将二进制数11010110111101转换为十六进制数结果:将十六进制正整数转换为二进制数例将十六进制数F9E8转换为二进制数结果:(F9E8)16=(1111100111101000)21.4数制及进制转换各种进制之间的转换 二进制数与八进制数的相互转换将二进制正整数转换为八进制数——3位一组将八进制正整数转换为二进制数例将二进制数11010110111101转换为八进制数结果:(11010110111101)2=(32675)8例将八进制数7654转换为二进制数结果:(7564)8=(111110101100)2291.5数值编码编码的定义及分类 编码定义是信息从一种形式或格式转换为另一种形式或格式的过程编码分类十进制编码:ASCII二进制编码:数的机器码301.5数制及进制转换数的机器码表示原码“符号+绝对值”表示法特点:简单易懂,运算速度较慢反码规则:正数的反码与原码相同,负数的反码是符号位为1,数值是对应原码各位取反。零的反码:(+0)反=00000000,(-0)反=11111111。补码规则:正数的补码与原码相同,负数的补码是符号位为1,数值位逐位取反(求其反码),然后在最低位对整个数加1。零的补码:(+0)补=(-0)补=00000000。例:若a=13,b=21,计算a-b的值补码法:
a-b=11111000原码10001000=-800001101111010110位表示正数,1表示负数原码、反码、补码对照表1.5数制及进制转换负数补码转换成十进制数:最高位不动,其余位取反加1例补码:11111001
取反:10000110
加1:10000111=-7十进制数二进制数原码反码补码+0000000000000000000000000-0100000001111111100000000+1000000010000000100000001-1100000011111111011111111十进制数二进制数原码反码补码+7000001110000011100000111-7100001111111100011111001数值范围11111111~01111111(-127~-0,+0~+127)10000000~01111111(-127~-0,+0~+127)10000000~01111111(-128~0~+127)
机器语言汇编语言高级语言面向过程面向对象1.6
C语言概述程序设计语言的发展1.6
C语言概述C语言发展过程C标准标准C:K&R合著《TheCProgrammingLanguage》ANSIC:1983年87ANSIC:1987年1990年国际标准的ANSIC发展过程1960年,ALGOL60,面向问题,离硬件远,不宜编系统程序.1963年,剑桥,CPL语言,更近硬件,但规模大,难以实现.1967年,剑桥,MartinRichards,简化,BCPL语言.1970年,美国贝尔实验室,KenThompson,简化,B语言,写第一个UNIX系统.1972~1973年,贝尔实验室,D.M.Ritchie,B语言基础上,设计出C语言,克服B语言的过于简单、功能有限的不足.1973年,K.Thompson和D.M.Ritchie合作将UNIX的90%以上用C改写.1978年以后,C语言已先后移植到大、中、小、微型机上,已独立于UNIX和PDP,得以广泛应用。1989年,C语言被美国国家标准协会(ANSI)标准化,扩展K&RC,被称为C89,是最早的C语言规范。1990年,国际标准化组织(ISO)成立工作组规定国际标准的C语言,制定了ISO9899:1990,又称为C90C语言特点语言简洁、紧凑、灵活运算符和数据类型丰富程序设计结构化、模块化生成目标代码质量高可移植性好1.6
C语言概述C语言程序示例在屏幕上输出“hello,world!”字符串求出正弦值后输出#include<stdio.h>intmain(void){printf("hello,world!\n");return0;}#include<stdio.h>#include<math.h>intmain(){doublex=0.0;doubles=0.0;printf("Inputanumber:");scanf("%lf",&x);s=sin(x);printf("sin(%lf)=%lf\n",x,s);return0;}输出结果:hello,world!输出结果:Inputanumber:10sin(10.000000)=-0.544021C语言程序编译与执行编辑代码。源程序(.c)或头文件(.h)编译。翻译生成目标程序(.o或者.obj)连接。生成可执行程序(.exe)运行。1.6
C语言概述C语言开发环境文件-新建组建-组建编辑组建-执行文件-关闭第二章C语言基础基本知识常量变量数据类型转换运算符和表达式第2章C语言基础2.1
基本知识算术运算符位——计算机中最基本的单位(0或1两种状态)字节——存储空间的基本计量单位字——计算机进行数据处理和运算的单位字的位数称为字长不同类型的计算机有不同的字长对于KB,K表示1024,即210。1KB表示210个Byte,即1024字节。对于MB,1MB=220Byte=1024×1024Byte=1024KB对于GB,1GB=1024MB=1024×1024KB=2030Byte2.1
基本知识标识符命名规则字母(A~Z,a~z)、数字(0~9),下画线(_)第一个字条必须为字母区分大小写不能与关键字相同长度:最长32位注意标识符长度受不同C语言编译器或不同类型计算机限制标识符区分大小写命名应尽量有相应的意义例下列标识符是否正确x,abc,name,stu123,sum,Sum,day,Date,_above3com,-ax,7days,#33,$123等a*b,boy-girl,M.D.John,a>b等char,goto,for等2.1
基本知识数据类型数据类型决定:1.数据占内存字节数2.数据取值范围3.其上可进行的操作2.1
基本知识数据类型基本类型不可以再分解,可分为常量和变量两类类
型符
号关
键
字字
节
数取
值
范
围整型有(signed)
short
(int)2-32768~32767,即(signed)
int4(signed)
long
(int)4(signed)
long
long
(int)8
无unsigned
short
(int)20~65535,即0~unsigned
int40~unsigned
long
(int)40~unsigned
long
long
(int)80~实型有float4±1.2×~±3.4×1038,0(6位有效数字)有double8±2.3×~±1.7×10308,0(15位有效数字)有long
double8±2.3×~±1.7×10308,0(15位有效数字)字符型有(signed)
char1-128~127,即无unsigned
char10~255,即43如#definePRICE302.2
常量符号常量可以用一个标识符来表示一个常量格式定义格式:#define
标识符常量例符号常量举例#definePRICE30#include<stdio.h>intmain(){intnum,total;num=10;total=num*PRICE;printf("total=%d",total);return0;}运行结果:total=30044例12与12L三种形式:十进制整数:由数字0~9和正负号表示.如123,-456,0八进制整数:由数字0开头,后跟数字0~7表示.如0123,011十六进制整数:由0x开头,后跟0~9,a~f,A~F表示.如0x123,0Xff例30000为int型
65536为longint型整型常量的类型根据其值所在范围确定其数据类型在整常量后加字母l或L,认为它是longint
型常量问题:0123=()100x123=()100Xff=()1083291255问题:0123=()100x123=()100Xff=()10整型常量(整常数)2.2
常量45表示形式:十进制小数形式:(必须有小数点)如0.123,.123,123.0,0.0,123.指数形式:(e或E之前必须有数字;指数必须为整数)如12.3e3,123E2,1.23e4,e-5,1.2E-3.5
浮点型常量的类型没有后缀的浮点数常量为double型(默认情况)在浮点型常量后加字母f或F,认为它是float型实型常量(实数或浮点数)
2.2
常量aaa46定义:用单引号括起来的单个普通字符或转义字符.
字符常量的值:该字符的ASCII码值<转义字符及其含义:转义字符含义\n\v\r\a\‘\ddd\t\b\f\\\“\xhh转义字符含义换行垂直制表回车响铃单引号3位8进制数代表的字符水平制表退格换页反斜线双引号2位16进制数代表的字符如‘\101’-----------‘A’‘\012’-----------’\n’‘\376’-----------’
’‘\x61’-----------’a’
例:‘A’-------’\101’-------’\x41’--------65如‘A’——65,‘a’——97,
‘0’——48,‘\n’——10如'a'、'1'、'='、'\n'、'\101'转义字符:反斜线后面跟一个字符或一个代码值表示例转义字符举例#include<stdio.h>intmain(){printf("\101\x42C\n");printf("Isay:\"Howareyou?\"\n");printf("\\CProgram\\\n");printf("Language\'C\'");return0;}运行结果:(屏幕显示)ABCIsay:”Howareyou?”\CProgram\Language‘C’字符常量
2.2
常量47字符常量与字符串常量不同定义:用双引号(“”)括起来的多个字符序列存储:每个字符串尾自动加一个空字符‘\0’作为字符串结束标志,即字符串常量占的内存字节数等于字符串中的字符数加1aa\0例‘a’“a”例空串“”\0例:charch;ch=“A”;例:charch;ch=‘A’;字符串常量
2.2
常量hello例字符串“Helloworld”在内存中wdlro\048编译程序根据变量定义为其分配指定字节的内存单元…...地址inta=1,b=-3,c;abc2字节2字节2字节地址地址…...内存1-3
随机数概念:其值可以改变的量变量名与变量值变量定义的一般格式:
数据类型变量1[,变量2,…,变量n];变量初始化:定义时赋初值例:inta,b,c;floatdata;决定分配字节数和数的表示范围合法标识符例://变量定义intsum;longwidth,long;floatx,y,z;doublearea;//变量初始化doubler=1.5;charch='A';变量的使用:先定义,后使用例1intstudent;stadent=19;//Undefinedsymbol‘stadent’infunctionmain
变量定义位置:一般放在函数开头#include<stdio.h>intmain(){inta,b=2;floatdata;a=1;data=(a+b)*1.2;printf(“data=%f\n”,data);return0;}变量定义可执行语句#include<stdio.h>intmain(){inta,b=2;a=1;floatdata;data=(a+b)*1.2;printf(“data=%f\n”,data);return0;}
2.3变量49占字节数随机器不同而不同,一般占一个机器字整型变量
(1)短整型(shortint或short):在内存中占2字节。(2)整型(int):在内存中占4字节。(3)长整型(longint或long):在内存中占4字节。(4)长长整型(longlongint或longlong):在内存中占8字节各种类型所占的内存空间字节数:short≤int≤long≤longlong2.3变量例整型变量的定义与使用#include<stdio.h>intmain(){inta,b,c,d;unsignedx;
a=10;b=-10;x=1;c=a+x;d=b+x;printf("a+x=%d,b+x=%d\n",c,d);
return0;}#include<stdio.h>intmain(){ shortinta,b; a=32767; b=a+1; printf("a=%d,b=%d\n",a,b); return0;
}运行结果:
a+x=11,b+x=-9运行结果:
a=32767,b=-32768a01111111
1111111132767
b10000000
00000000-3276850实型变量float:占4字节,7位有效数字double:占8字节,15位有效数字longdouble:占8字节,15位有效数字2.3变量例1:floata;a=111111.111;/*a=111111.1*/例2:doubleb;b=111111.111;/*b=111111.111*///例实型变量的舍入误差#include<stdio.h>intmain(){ floata; doubleb; a=33333.33333; b=33333.333333333333333; printf("a=%f\nb=%.15lf\n",a,b); return0;}运行结果:a=33333.332031b=33333.33333333333600051字符型变量字符变量存放字符ASCII码char与int数据间可进行算术运算字符变量与整型变量可以相互输出例a=‘D’;/*a=68;*/x=‘A’+5;/*x=65+5;*/s=‘!’+‘G’/*s=33+71;*/2.3变量//例字符变量与整型变量之间的运算#include<stdio.h>intmain(){chara,b,x,y;a=65;b=66;printf("a=%c,b=%c\n",a,b);printf("a=%d,b=%d\n",a,b);x='a';y='b';x=x-32;y=y-32;printf("x=%c,%d,y=%c,%d\n",x,x,y,y);return0;}运行结果:a=A,b=Ba=65,b=66x=A,65,y=B,66变量定义输出结果52隐式转换发生情况运算转换,不同类型数据混合运算时;赋值转换,把一个值赋给与其类型不同的变量时;输出转换,输出时转换成指定的输出格式;函数调用转换,实参与形参类型不一致时转换。2.4
数据类型转换转换规则先转换后运算按类型长度增加的方向浮点型运算都是以双精度进行char型和short型都转换成int型例charch;inti;floatf;doubled;ch/i+f*d-(f+i)//例类型隐式转换#definePI3.1416#include<stdio.h>intmain(){intgirth=0,area=0;intradius=10;girth=2*PI*radius;area=PI*radius*radius;printf("girth=%d,area=%d\n",girth,area);return0;}
运行结果:girth=62,area=31453显式转换(强制转换,用户指定的)一般形式:(类型说明符)(表达式)例:(int)(x+y)(int)x+y(double)(3/2)2.4
数据类型转换注意:无论是隐式转换还是显式转换,都只是为了本次运算的需要而对变量的数据类型进行的临时性转换,而不改变数据说明时对该变量定义的类型。//例类型显式转换#include<stdio.h>intmain(){floatx=3.6;inti;i=(int)x;printf("x=%f,i=%d\n",x,i);return0;}
运行结果:x=3.600000,i=3C运算符算术运算符:(+-*/%++--)关系运算符:(<<===>>=!=)逻辑运算符:((!&&||)位运算符:(<<>>~|^&)赋值运算符:(=及其扩展)条件运算符:(?:)逗号运算符:(,)指针运算符:(*&)求字节数:(sizeof)强制类型转换:(类型)分量运算符:(.->)下标运算符:([])其它:(()-)2.5
运算符和表达式55一、算术运算符+加法,或正值。如:3+6,+3(双目运算)–减法,或负值。如:6–4,
–5(双目运算)乘法。如:38/除法。如:8/5%模或称求余。如:7%4的值为32.5
运算符和表达式“+、–、*、/”运算中,如果运算量中有一个是实型(float或double),则结果为双精度实型(double)。56说明:++--不能用于常量和表达式,如5++,(a+b)++++--结合方向:自右向左优先级:-++--<------*/%<-----+-
高低例-i++
-(i++)i=3;printf(“%d”,-i++);//-3
例-i++i=3;printf(“%d”,-i++);
作用:使变量值加1或减1种类:前置++i,--i(先执行i+1或i-1,再使用i值)后置i++,i--(先使用i值,再执行i+1或i-1)自增、自减运算符++--例j+++k;(j++)+k;尽可能多地自左而右将若干个字符组成一个运算符2.5
运算符和表达式57例2,-2
2.666667,-2.666667
12.5运算符和表达式
//例自增自减运算#include<stdio.h>intmain(){printf("%d,%d\n",8/3,-8/3);printf("%f,%f\n",8.0/3,-8.0/3);printf("%d\n",10%3);return0;}//例算术运算符#include<stdio.h>intmain(){intx,y;inta,b,c;x=1;y=++x;printf("x=%d,y=%d\n",x,y);x=1;y=x++;printf("x=%d,y=%d\n",x,y);x=1;y=--x;printf("x=%d,y=%d\n",x,y);x=1;y=x--;printf("x=%d,y=%d\n",x,y);a=1;b=2;c=(++a)*b;printf("c=%d\n",c);a=1;b=2;c=(a++)*b;printf("c=%d\n",c);return0;}运行结果:a=A,b=Ba=65,b=66x=A,65,y=B,6658算术表达式及算术运算符的优先级与结合性运算对象:常量、变量、函数等优先级:
(),
+,–(单目运算符)
,/,%,
+,–
算术表达式:用算术运算符和括号将运算对象连接起来,且符合C语法规则的式子。最高最低2.5
运算符和表达式59例:a
b/c–1.5+'a'–de;提示:关于运算符的优先级和结合方向详见附录C。一般运算规则:先按运算符的优先级别高低次序执行;若在运算对象两侧的运算符有相同的优先级,则按规定的结合方向顺序处理。基本算术运算符的结合方向:左结合性(单目运算符是右结合性)2.5
运算符和表达式60赋值运算符和赋值表达式简单赋值运算符符号:=格式:变量标识符=表达式作用:将一个数据(常量或表达式)赋给一个变量复合赋值运算符格式:变量双目运算符=表达式
变量=变量运算符表达式种类:+=-=*=/=%=<<=>>=&=^=|=a+=2a=a+2x*=y+zx=x*(y+z)x%=3x=x%3例a=3;c=d+2;2.5
运算符和表达式61结合方向:自右向左优先级:14左侧必须是变量,不能是常量或表达式
赋值表达式的值与左侧变量值相等,且可嵌套
当赋值运算符两侧的类型不一致时,赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型例3=x-2*y;a+b=3;例
floatf;inti;i=10;f=i;则
f=10.0例inti;i=2.56;//结果i=2;例:a=b=c=5a=(b=5)a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2)//表达式值为5,a,b,c值为5//表达式值5,b=5,a=5//表达式值11,c=6,a=11//表达式值10,a=10,b=4,c=6//表达式值5,a=5,b=10,c=2说明(1)——对简单赋值运算符而言2.5
运算符和表达式622.5
运算符和表达式赋值运算中的类型转换 如果赋值运算符两边的类型不一致,则在赋值的时候要对右边表达式的类型进行转换,使之适应左边变量的要求,或者说用左边变量的类型去剪裁改造右边的表达式。为了便于上课的表达,做如下的约定:
[类型1]←(类型2)表示把类型2的值赋给类型1的变量。例赋值运算类型转换#include<stdio.h>intmain(){unsignedshortintui;shortinti;unsignedcharch1='\376';charch2='\376';i=ch1;printf("(int)=(unsignedchar)\'\\376\',i=%d\n",i);i=ch2;printf("(int)=(signedchar)\'\\376\',i=%d\n",i);2.5
运算符和表达式i=256;ch2=i;printf("(char)=(int)256,char=%d\n",ch2);ui=65535;i=ui;printf("(int)=(unsignedint)65535,int=%d\n",i);i=-1;ui=i;printf("(unsignedint)=(int)-1,unsignedint=%d\n",ui);return0;}2.5
运算符和表达式运算结果:(int)<=(unsignedchar)'\376',i=254(int)<=(char)'\376',i=-2(char)<=(int)256,char=0(int)<=(unsignedint)65535,int=-1(unsignedint)<=(int)-1,unsignedint=655352.5
运算符和表达式66
结合方向:自右向左优先级:12
左侧必须是变量,不能是常量或表达式
赋值表达式的值与左侧变量值相等,且可嵌套
赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型例:a=12;a+=a-=a*a;例:inta=2;a%=4-1;a+=a*=a-=a*=3;//a=-264等价于a=a+(a=a-(a*a))//a=0等价于a=a+(a=a*(a=a-(a=a*3)))说明(2)——对复合赋值运算符而言2.5
运算符和表达式67形式:表达式1,表达式2,……表达式n结合性:从左向右优先级:15(在所有运算符中级别最低)逗号表达式的值:等于表达式n的值用途:常用于循环for语句中例a=3*5,a*4a=3*5,a*4,a+5例x=(a=3,6*3)x=a=3,6*a例a=1;b=2;c=3;printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),b,c);//a=15,表达式值60//a=15,表达式值20//赋值表达式,表达式值18,x=18//逗号表达式,表达式值18,x=3//1,2,3//3,2,3逗号运算符和表达式例:#include<stdio.h>voidmain(){intx,y=7;floatz=4;x=(y=y+6,y/z);printf("x=%d\n",x);}运行结果:x=32.5
运算符和表达式C语句:表达式+分号分类表达式语句:a++;x=(a+b)/(ab);函数调用语句:由函数名、实际参数加分号“;”组成控制语句:条件判、循环执行、转向语句复合语句空语句:只有“;”{ x=y-z; a=b-c; printf(“x=%d,a=%d\n”,x,a);}2.6
C语言语句第三章数据输入与输出第三章数据输入与输出3.1数据输入3.2数据输出3.3顺序结构程序设计3.4程序举例格式:getchar()功能:从输入终端读入一字符返值:正常,返回读取的代码值;出错,返回EOF(-1)字符输入函数
例#include<stdio.h>intmain(){intc;printf("Enteracharacter:");c=getchar();printf("%c--->hex%x\n",c,c);
return0}运行结果:Enteracharacter:
A
A--->hex413.1数据的输入注意:按回车键以后,系统才开始接收字符。getchar()只能接收一个字符。当输入多个字符时,多余字符作废。用getchar()得到的字符可以赋给字符型变量、整型变量,或作为表达式的一部分。如c=getchar()+32;putchar(c);
若输入:A
则输出:a如果函数正常,将返回接收字符的ASCII值;如果出错,则返回EOF(即-1)。3.1数据的输入格式:scanf(“格式控制字符串”,地址表)功能:按指定格式从终端读入数据,并存入地址表所指定的内存空间返值:正常,返回输入数据个数地址表:变量的地址
形式:&变量名表示对变量名进行“取地址&”运算格式字符:d,i,o,x,u,c,s,f,e例inta;
scanf(“%d”,&a);
输入:10
则a=10例inta;scanf(“%x”,&a);printf(“a=%d”,a);
输入:11
则a=17格式输入函数注意:“格式控制”后面是变量地址,而不是变量名。
scanf(“%d%d”,&a,&b)scanf(“%d%d”,a,b)//不合法3.1数据的输入程序3-2scanf()函数#include<stdio.h>intmain(){inta,b,c;printf("Inputa,b,c:");scanf("%d%d%d",&a,&b,&c);printf("a=%d,b=%d,c=%d\n",a,b,c);return0;}输出结果:Inputa,b,c:112233a=11,b=22,c=33格式控制字符串格式为:“%[输入数据宽度][长度]类型”
(其中方括号“[]”项为任选项)1.类型:符号意义d输入十进制形式的整数x输入十六进制形式的整数o输入八进制形式的整数u输入十进制无符号整数c输入单个字符s输入字符串e以指数形式输入单精度浮点数f以小数形式输入单精度浮点数输入数据类型字符和意义3.1数据的输入//程序3-3#include<stdio.h>intmain(){inta,b,c;charch;printf("Inputa,b,c,ch:");scanf("%d%o%x%c",&a,&b,&c,&ch); printf("a=%d,b=%d,c=%d,ch=%d,ch=%c\ n",a,b,c,ch,ch); return0;}运算结果:Inputa,b,c,ch:111111aa=11,b=9,c=17,ch=97,ch=a例:scanf("%6d",&i);输入:123456789123456i//程序3-4#include<stdio.h>intmain(){ intyear,month,day; charch; printf("Inputyearmonthday:"); scanf("%4d%2d%2d",&year,&month,&day); printf("year=%d,month=%d,day=%d\n",year, month,day); return0;}运行结果:Inputyearmonthday:20100803year=2010,month=8,day=33.1数据的输入格式控制字符串2.宽度:
宽度是用十进制整数指定输入数值的宽度(即字符数)。长度格式符:“h”和“l”,如“%lf”)例:“%lf”和“ll”//程序3-5#include<stdio.h>intmain(){longlongintcount;doublesum;printf("Inputlongint,double:");scanf("%lld%lf",&count,&sum);printf("count=%lld,sum=%15.12lf\n",count,sum);return0;}运行结果:Inputlongint,double:42949672953.14159265358979count=4294967295,sum=3.1415926535903.1数据的输入3.长度:
scanf()函数应注意:(1)scanf()函数要求给出变量地址,如果指定变量名,则会出错(2)scanf()函数不能控制精度。(3)输入多个数值时,若没有作输入数据间隔的非格式字符,则可以用空格、Tab键或回车键作为数据之间的间隔。(4)对于有非格式字符,输入时也要输入对应的非格式字符。例:scanf("%d",a);×scanf("%d",&a);√例:scanf("%3.2f",&price);×例:scanf("%d,%d",&a,&b);输入形式;“1,2”3.1数据的输入#include<stdio.h>intmain(){ intyear,month,day; inthour,minute,second;
printf("Inputyear-month-day:"); scanf("%d-%d-%d",&year,&month,&day); printf("year=%d,month=%d,day=%d\n",year,month,day);
fflush(stdin); printf("Inputhour:minute:second:"); scanf("%d:%d:%d",&hour,&minute,&second); printf("hour=%d,minute=%d,second=%d\n",hour,minute,second); return0;}//程序3-6输入数据中含非格式字符运行结果:Inputyear-month-day:2010-8-3year=2010,month=8,day=3Inputhour:minute:second:12:30:36hour=12,minute=30,second=363.1数据的输入scanf()函数应注意:(5)如果输入的数据存在非法数据,则输入结束。(6)输入字符数据时,若“格式控制字符串”中无非格式字符,则所有输入的字符均为有效字符,空格和转义字符也作为有效字符输入。例:scanf("%d",&start);
123x结束输出:start=1233.1数据的输入//程序3-7输入字符数据#include<stdio.h>intmain(){charch1,ch2;printf("inputtwochar:");scanf("%c%c",&ch1,&ch2);printf("ch1=%c,ch2=%c(%d)\n",ch1,ch2,ch2);fflush(stdin);printf("inputtwochar:");scanf("%c%c",&ch1,&ch2);printf("ch1=%c,ch2=%c\n",ch1,ch2);return0;}运行结果:inputtwochar:xych1=x,ch2=(32)inputtwochar:xych1=x,ch2=yscanf()函数应注意(7)如果输入数据与输出类型不一致,可能会导致结果错误。//程序3-8输入数据与输出数据类型不一致。#include<stdio.h>intmain(){inta;longlongb;printf("Inputaint:");scanf("%d",&a);printf("%lld\n",a);printf("Inputalonglongint:");scanf("%lld",&b);printf("%lld\n",b);
return0;}运行结果:Inputaint:429496729511539550627168255Inputalonglongint:429496729542949672953.1数据的输入scanf()函数应注意:(8)scanf()读取遇到回车形成“垃圾”字符的情况。“fflush(stdin);”3.1数据的输入//程序3-9清除回车字符#include<stdio.h>#include<stdio.h>intmain(){intx;charch;scanf("%d",&x);ch=getchar();printf("x=%d,ch=%d\n",x,ch);
scanf("%d",&x);fflush(stdin);ch=getchar();printf("x=%d,ch=%d\n",x,ch);return0;}运行结果:Inputaint:429496729511539550627168255Inputalonglongint:42949672954294967295格式:putchar(c)参数:c为字符型常量、变量或整型变量功能:向显示器输出字符c返值:正常,输出c的值;出错,返回EOF(-1)C语言无I/O语句,I/O操作由函数实现默认的输入设备:键盘默认的输出设备:显示器
字符输出函数
使用标准输入输出库函数即在程序开头加入#include<stdio.h>或#include“stdio.h”EOF就是文件结束的标识符(用来区分有效的数据输入和输入结束符),一般被编译器定义为-1
3.2数据的输出字符输出函数putchar()程序3-10:字符输出函数#include<stdio.h>intmain(){charch='A';intx=65;putchar('A');putchar(x);putchar(ch);putchar('\101');putchar('\\');return0;}运行结果:AAAA\3.2数据的输出格式:printf(“格式控制串”,输出表列)功能:按指定格式向终端输出数据返值:正常,返回输出字节数;出错,返回EOF(-1)输出表列:要输出的数据(常量、变量或表达式)
输出表可以没有;也可同时输出多个并以“,”分隔格式控制字符串:用双引号括起来的字符串,包含两种信息
格式说明字符串:“%[修饰符]格式字符”,用于指定输出格式
非格式说明字符串:需要原样输出的区别:putchar只能输出字符,且只能是一个字符;而printf可以输出多个数据,且为任意类型。3.2数据的输出格式输出函数程序3-11:格式输出函数#include<stdio.h>intmain(){inta=88,b=89;printf("%d%d\n",a,b);printf("%d,%d\n",a,b);printf("%c%c\n",a,b);printf("a=%d,b=%d\n",a,b);return0;}输出结果:888988,89XYa=88,b=89d,ix,Xoucse,Efg,G%%十六进制无符号整数不带符号十进制整数十进制整数指数形式输出实数单一字符字符串八进制无符号整数小数形式输出实数e和f中较短一种百分号本身inta=987;printf(“%d”,a);inta=-1;printf(“%x”,a);inta=65;printf(“%o”,a);inta=-56;printf(“%u”,a);chara=65;printf(“%c”,a);printf(“%s”,“ABC”);floata=567.789;printf(“%e”,a);floata=567.789;printf(“%f”,a);floata=567.789;printf(“%g”,a);printf(“%%”);987ffffffff1014294967240AABC5.677890e+002567.789000567.789%说明: 格式字符除了X、E、G外,必须要用小写格式字符与输出项个数应相同,按先后顺序一一对应输出转换:格式字符与输出项类型不一致,自动按指定格式输出1.格式类型例:inti=5;
floatf=32.345;
printf(“i=%3df=%5.1f\n”,i,f);//输出:i=5f=32.3格式输出函数举例程序3-12:格式输出函数格式类型。include<stdio.h>intmain(){inti=99;doubled=3.14;inta=-1;printf("i=%d,i=%i,i=%o,i=%x,i=%c\n",i,i,i,i,i);printf("d=%e,d=%f,d=%g\n",d,d,d);printf("a=%d,a=%o,a=%x,a=%u\n",a,a,a,a);
return0;}运行结果:i=99,i=99,i=143,i=63,i=cd=3.140000e+000,d=3.140000,d=3.14a=1,a=37777777777,a=ffffffff,a=42949672953.2数据的输出格式输出函数输出最小宽度
用一个十进制整数来指定输出数据的最少位数,若实际位数多于指定宽度,则按实际位数输出,若实际位数少于指定宽度,则补以空格或0(由是否有标志“0”决定)。
精度精度以“.”开头,后跟一个十进制整数,其意义是:如果输出数值,则表示数值小数部分的位数(四舍五入);如果输出字符串,则表示输出字符的个数;若实际位数大于指定精度,则截去超出的部分。标志标志符号有“”、“+”、“”(空格)、“0”、“#”这5种。3.2数据的输出格式输出函数符号功能-输出数据左对齐,右边填空格(默认为右对齐)+输出正负号,在有符号数的正数前显示正号(+)(空格)输出值为正数时显示空格,为负数时显示负号0输出数值右对齐时,左面的空位置自动填0,默认为空格。#在八进制数和十六进制数前分别显示前导“0”和“0x”;对于实型数,当结果有小数时,才给出小数点长度长度符号有“h”、“l”两种。符号功能h按短整型量输出l对于整型数,指定输出精度为long型对于实型数,指定输出精度为double型//程序3-14#include<stdio.h>intmain(){longlonga=4294967296;floatf=123.1234567;doubled=123456789.123456789;printf("a=%lld,a=%d\n",a,a);printf("f=%f,f=%lf,f=%5.4lf,f=%e\n",f,f,f,f);printf("d=%lf,d=%f,d=%8.1lf\n",d,d,d);return0;}运行结果:a=4294967296,a=0f=123.123459,f=123.123459,f=123.1235,f=1.231235e+002d=123456789.123457,d=123456789.123457,d=123456789.13.2数据的输出.n对实数,指定小数点后位数(四舍五入)修饰符功能m输出数据域宽,数据长度<m,左补空格;否则按实际输出输出数据在域内左对齐(缺省右对齐)-指定在有符号数的正数前显示正号(+)+输出数值时指定左面不使用的空位置自动填00在八进制和十六进制数前显示前导0,0x#在d,o,x,u前,指定输出精度为long型在e,f,g前,指定输出精度为double型l附加格式说明符(修饰符)对字符串,指定实际输出位数例4.1#include<stdio.h>main(){unsignedshortinta=65535;printf("a=%d,%o,%x,%u\n",a,a,a,a);}输出结果是:a=65535,177777,ffff,65535练习:输出结果?#include<stdio.h>main(){inti=6,j=8;printf("%d%d\n",i,j);}68#include<stdio.h>main(){inti=6,j=8;printf("%d,%d\n",i,j);}练习:输出结果?6,8#include<stdio.h>main(){inti=6,j=8;printf("%d;%d\n",i,j);}练习:输出结果?6;8#include<stdio.h>main(){inta=8,b=10;printf("%3d,%4d\n",a,b);}练习:输出结果?8,10结构化程序设计基本思想:任何程序都可以用三种基本结构表示,限制使用无条件转移语句(goto)结构化程序:由三种基本结构反复嵌套构成的程序优点:结构清晰,易读,提高程序设计质量和效率三种基本结构顺序结构ABAB流程图N-S图先执行A,再执行B.3.3
顺序结构程序设计PAB真假PBA真假kA1A2AiAnk=k2k=k1k=knk=ki......二分支选择结构多分支选择结构
选择结构存在某条件P,若P为真,则执行A,否则执行B。根据表达式k的值进行选择3.3
顺序结构程序设计当型循环结构直到型循环结构PA假真当P为真AAP真假A直到P为真注:A,B,A1….An可以是一个简单语句,也可以是一个基本结构循环结构
当P条件成立时(T),反复执行A,直到P为“假”时才停止循环.先执行A,再判断P,若为假(F),再执行A,如此反复,直到P为F.3.3
顺序结构程序设计
已证明:上述三种结构组成的程序可以解决全部的问题,所以任何一种高级语言都具备上述三种结构。3.3
顺序结构程序设计程序3-15:顺序结构程序设计,输入长方形的两个边长,计算长方形的周长和面积。3.3
顺序结构程序设计程序如下:#include<stdio.h>intmain(){doublelength,width;doubleperimeter,area;printf("Inputrectanglelength:");scanf("%lf",&length);printf("Inputrectanglewidth:");scanf("%lf",&width);perimeter=(length+width)*2;area=length*width;printf("Rectangleperimeter:%lf\n",perimeter);printf("Rectanglearea:%lf\n",area);return0;}运行结果:Inputrectanglelength:5.2Inputrectanglewidth:2.5Rectangleperimeter:15.400000Rectanglearea:13.0000003.3
顺序结构程序设计3.4程序示例程序3-16:求方程的根,a、b、c由键盘输入,输入时应满足。由输入的a、b、c值,可求出,,则,。#in
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 车辆质押合同模板10篇
- 营养师案例试题及答案
- 学校校园安全隐患大排查大整治实施方案
- 浙江省杭州市萧山区2026年中考模拟英语试卷附答案
- 2025年临床执业医师《临床》卷
- 药品质量管理制度试题及答案
- 医疗机构XX管理制度
- 中职日常考试试题及答案
- 医疗器械经营质量管理规范(GSP)内审培训试题及答案
- 183红色喜庆福字背景的“金龙献瑞”龙年新年主题模板 2
- 大学舞蹈鉴赏全套课件
- 2023年大学生就业力调研报告-智联招聘
- DASB六型无菌包装机培训
- 人物头像色彩写生
- a320飞机刹车系统原理及故障分析
- GB/T 3452.3-2005液压气动用O形橡胶密封圈沟槽尺寸
- GB/T 3102.3-1993力学的量和单位
- 漆包线质量初级培训课件
- 2023年枣庄科技职业学院单招综合素质考试笔试模拟试题及答案解析
- 钻孔灌注套管(咬合)桩钻进施工记录
- CQI17焊锡系统评估培训教学课件
评论
0/150
提交评论