版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章最简单的C程序设计3.1顺序程序设计举例3.2数据的表现形式及其运算3.3C语句3.4数据的输入输出3.1顺序程序设计举例
例3.2计算存款利息。有1000元,想存一年。有三种方法可选:(1)活期,年利率为r1(2)一年期定期,年利率为r2(3)存两次半年定期,年利率为r3
请分别计算出一年后按三种方法所得到的本息和。3.1顺序程序设计举例解题思路:确定计算本息和的公式。从数学知识可知:若存款额为p0,则:活期存款一年后本息和为:
p1=p0(1+r1)一年期定期存款,一年后本息和为:
p2=p0(1+r2)两次半年定期存款,一年后本息和为:
3.1顺序程序设计举例算法:输入p0,r1,r2,r3的值计算p1=p0(1+r1)计算p2=p0(1+r2)计算p3=p0(1+)(1+)输出p1,p2,p33.1顺序程序设计举例#include<stdio.h>intmain(){floatp0=1000,r1=0.0036,r2=0.0225,r3=0.0198,p1,p2,p3;p1=p0*(1+r1);p2=p0*(1+r2);p3=p0*(1+r3/2)*(1+r3/2);printf(”%f\n%f\n%f\n”,p1,p2,p3);return0;}定义变量同时赋予初值3.2数据的表现形式及其运算3.2.1常量和变量3.2.2数据类型3.2.3整型数据3.2.4字符型数据3.2.5浮点型数据3.2.6怎样确定常量的类型3.2.7运算符和表达式4.标识符定义:用来标识变量、常量、函数等的字符序列组成:只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线C语言的关键字不能用作变量名大小写敏感长度:有效长度为32个字符。随系统而异,但至少前8个字符有效命名原则:变量名和函数名中的英文字母一般用小写,以增加可读性
见名知意不宜混淆如l与l,o与0
在TC2.0及BC3.1中,变量名(标识符)的有效长度为1~32个字符,缺省值为32,但在VC中其长度可达到255例:判断下列标识符号合法性sumSumM.D.JohndayDate3daysstudent_name#33lotus_1_2_3chara>b_above$123M.D.John3days#33char$123a>b
.字符非法
数字3不可作首字符
#字符非法
char是关键字
>字符非法
$不可作首字符3.2.1常量和变量1.常量:在程序运行过程中,不占据任何存储空间,其值不能被改变的量。符号常量:#definePI3.1416直接常量整型常量:如1000,12345,0,-345实型常量十进制小数形式:如0.34-56.790.0指数形式:如12.34e3(代表12.34103)字符常量:如’?’转义字符:如’\n’字符串常量:如”boy”宏定义
符号常量:用标识符来代表常量。 其定义格式为:
#define符号常量常量
#defineNUM20#definePI3.1415926
#include<stdio.h>#definePRICE30voidmain(){intnum,total;num=10;total=num*PRICE;printf("total=%d",total);}
运行结果:total=300
行尾不能有分号
define前面一定要有#
符号常量名最好使用大写符号常量名最好有意义
不能被重新赋值
【例】符号常量举例PRICE=10;变量1.变量的概念在程序运行过程中,其值可以被改变的量称为变量。在内存中占据一定的存储空间。
2.变量的两个要素(1)变量名。每个变量都必须有一个名字──变量名,变量命名遵循标识符命名规则。(2)变量值。在程序运行过程中,变量值存储在内存中。在程序中,通过变量名来引用变量的值。3.2常量和变量3.变量的定义与初始化及使用在C语言中,要求对所有用到的变量,必须先定义、后使用;声明变量即定义了变量,意味着给变量分配了内存空间。在定义变量的同时进行赋初值的操作为变量初始化。(1)变量定义的一般格式数据类型
[变量1,变量2,…,变量n];注意:在同一语句里不能混合定义不同类型的变量。变量定义位置:一般放在函数开头例:inta,b,c;floatdata;例:inta,b,c,floatdata;例:inta,b,c;floatdata;决定分配字节数和数的表示范围合法标识符一条语句声明多个同一类型变量时,变量使用逗号分割例:inta=2,b,c=4;floatdata=3.67;charch=‘A’;intx=1,y=1,z=1;(2)变量初始化的一般格式数据类型变量名[=初值][,变量名2[=初值2]……];(3)变量的使用:先定义,后使用变量就是一个存储对象,必须在声明之后才能使用;声明变量即定义了变量,意味着给变量分配了内存空间;…...地址inta=1,b=-3,c;abc2字节2字节2字节地址地址…...内存1-3随机数编译程序根据变量定义为其分配指定字节的内存单元<>例1intstudent;stadent=19;//Undefinedsymbol‘statent’infunctionmain
main(){inta,b=2;floatdata;a=1;data=(a+b)*1.2;printf(“data=%f\n”,data);}变量定义可执行语句main(){inta,b=2;a=1;floatdata;data=(a+b)*1.2;printf(“data=%f\n”,data);}3.2.2数据类型所谓类型,就是对数据分配存储单元的安排,包括存储单元的长度(占多少字节)以及数据的存储形式不同的类型分配不同的长度和存储形式C数据类型基本类型构造类型指针类型空类型void定义类型typedef字符类型char枚举类型enum整型实型单精度型float双精度型double数组结构体struct共用体union短整型short长整型long整型int数据类型决定:1.数据占内存字节数2.数据取值范围3.其上可进行的操作本章所介绍的数据类型3.2.2数据类型C语言允许使用的数据类型:基本类型枚举类型空类型派生类型指针类型数组类型结构体类型共用体类型函数类型算术类型纯量类型3.2.3整型数据1.整型数据的分类最基本的整型类型基本整型(int型):占2个或4个字节短整型(shortint):VC++6.0中占2个字节长整型(longint):VC++6.0中占4个字节双长整型(longlongint):C99新增的1.分类根据占用内存字节数的不同,整型变量又分为4类:(1)基本整型(类型关键字为int)。(2)短整型(类型关键字为short[int])。(3)长整型(类型关键字为long[int])。(4)有符号双长整型[signed]longlong[int];无符号整型。无符号型又可与上述四种类型匹配而构成:无符号基本型:类型说明符为unsignedint或unsigned。无符号短整型:类型说明符为unsignedshort。无符号长整型:类型说明符为unsignedlong无符号双长整型unsignedlonglong[int]注:各种无符号类型量所占的内存空间字节数与相应的有符号类型量相同。但由于省去了符号位,故不能表示负数。
基本数据类型<>类型符号关键字数的表示范围所占位数整型字符型实型有无(signed)int16-32768~32767320~4294967295unsignedlongunsignedshort160~65535有float323.4e-38~3.4e38有double641.7e-308~1.7e308有char8-128~127无unsignedchar80~255说明:数据类型所占字节数随机器硬件不同而不同,上表以IBMPC机为例:(signed)short16-32768~32767(signed)long32-2147483648~2147483647160~65535unsignedint3.3简单数据类型与表示范围3.3.1整型数据
1.整型常量
十进制整数:由数字0~9和正负号表示
.
如:123,-456,0八进制整数:由数字0开头,后跟数字0~7表示.如:0123,011十六进制整数:由0x或0X开头,后跟0~9,a~f,A~F表示.如0x123,0Xff思考题:下列整型常量哪些是非法的?
012,oX7A,00,078,0x5Ac,-0xFFFF,0034,7B。首字符不能是字母o八进制数中不能有数字8
十进制数中不能有字母B
数值的表示方法——原码、反码和补码原码:最高位为符号位(0:正数,1:负数),其余各位为数值本身的绝对值2原=00000010(-2)原=10000010反码:正数:反码与原码相同负数:负数的反码是其原码的符号位不动,其它位取反(-2)反=11111101补码:正数:原码、反码、补码相同负数:负数的补码是其反码+1(-2)补=11111110<>例:用原码、补码分别计算7-6=?(用一字节表示数)原码结论:计算机中采用补码形式存储数据000001117-6结果=-1310000110100011
01000001117补码-6补码结果=111111010000000
01补码7+(-6)=?3.3整型数据3.整型数据的溢出#include<stdio.h>main(){inta,b;a=32767;b=a+1;printf(“%d”,”%d”,a,b);}结果32767-327680111111111111111327671000000000000000-32768数据溢出运行不报错3.3整型数据3.整型数据的溢出#include<stdio.h>main(){unsigneda,b;a=65535;b=a+1;printf(“%u”,”%d”,a,b);}结果655350655350最高位为数值111111111111111100000000000000004.整数常量的分类
根据其值所在范围确定其数据类型。在TC2.0或BC3.1下,如果整型常量的值位于-32768~32767之间,C语言认为它是int型常量;如果整型常量的值位于-2147483648~2147483647之间,C语言认为它是long型常量。
整型常量后加字母l或L,认为它是longint型常量。比如123L、45l、0XAFL。
无符号数也可用后缀表示,整型常数的无符号数的后缀为U或u。例如:358u,0x38Au,235Lu均为无符号数。3.2.4字符型数据字符是按其代码(整数)形式存储的C99把字符型数据作为整数类型的一种字符型数据在使用上有自己的特点数字化信息编码
字符编码:规定在计算机内部,字符用怎样的二进制码来表示。标准ASCII码:用7位二进制码来表示字母、数字和专用符号。如:字母”A”在计算机内部表示成01000001(字节的最高位为0)扩充ASCII码:用8位二进制码(称为一个字节)来表示符号,且最高位为1。常用字符的ASCII码大写字母A:65B:66C:67...Z:90小写字母a:97b:98c:99...z:122数字0:481:492:50...9:57其它<空格>:32
注:存储一个西文字符(字母、数字、标点及常用符号)
占用一个字节。存储一个汉字占2个字节
3.2.4字符型数据1.字符与字符代码大多数系统采用ASCII字符集字母:A~Z,a~z数字:0~9专门符号:29个:!”#&‘()*等空格符:空格、水平制表符、换行等不能显示的字符:空(null)字符(以‘\0’表示)、警告(以‘\a’表示)、退格(以‘\b’表示)、回车(以‘\r’表示)等3.2.4字符型数据字符’1’和整数1是不同的概念:字符’1’只是代表一个形状为’1’的符号,在需要时按原样输出,在内存中以ASCII码形式存储,占1个字节整数1是以整数存储方式(二进制补码方式)存储的,占2个或4个字节0011000100000000000000013.2.4字符型数据2.字符变量用类型符char定义字符变量charc=’?’;
系统把“?”的ASCII代码63赋给变量cprintf(”%d%c\n”,c,c);输出结果是:63?30字符常量定义:用单引号括起来的单个普通字符或转义字符.
字符常量的值:该字符的ASCII码值转义字符:反斜线后面跟一个字符或一个代码值表示如‘a’‘A’‘?’‘\n’‘\101’如‘A’——65,‘a’——97,
‘0’——48,‘\n’——10<转义字符及其含义:转义字符含义\n\v\r\a\‘\ddd\t\b\f\\\“\xhh转义字符含义换行垂直制表回车响铃单引号3位8进制数代表的字符水平制表退格换页反斜线双引号2位16进制数代表的字符例:‘A’-------’\101’-------’\x41’--------65【例3-4】转义字符举例
#include<stdio.h>voidmain(){printf("\101\x42C\n");printf("\\CProgram\\\n");printf("Visual\'C\'");}运行结果:(屏幕显示)ABC\CProgram\Visual‘C’如‘\101’-----------‘A’‘\012’-----------’\n’‘\376’-----------’’‘\x61’-----------’a’‘\60’-----------’0’‘\483’----------()3.5字符型数据字符变量每个字符变量被分配一个字节的内存空间,因此只能存放一个字符。字符值是以ASCII码的形式存放在变量的内存单元之中的。例:x的十进制ASCII码是120,y的十进制ASCII码是121。对字符变量a,b赋予'x'和'y'值:a='x';b='y';实际上是在a,b两个单元内存放120和121的二进制代码:0111100001111000a:b:所以字符看成是整型量。整型变量也可以赋以字符值。字符串常量
定义:用双引号(“”)括起来的字符序列
存储:每个字符串尾自动加一个‘\0’作为字符串结束标志例1:字符串“HELLO”在内存中0x480x450x4C0x4C0x4F0低地址高地址‘H’‘E’‘L’‘L’‘O’‘\0’字符串结束标志例2:空串“”\0
字符常量与字符串常量不同0x41
0x41\0例‘A’“A”例:charch;ch=“A”;例:charch;ch=‘A’;没有字符串变量,用字符数组存放字符常量与字符串常量区别所占字节数不同存放内容个数不同,字符常量只能放单个字符定义方式不同0x41
0x41\0例‘A’“A”‘abc’“abc”例:charch;ch=“A”;例:charch;ch=‘A’;没有字符串变量,用字符数组存放3.2.5浮点型数据浮点型数据是用来表示具有小数点的实数float型(单精度浮点型)编译系统为float型变量分配4个字节数值以规范化的二进制数指数形式存放参见主教材图3.11(1)浮点型常量也叫实数3.浮点型常量(2)它只有十进制形式,全部是有符号数(3)两种表示形式①一般形式②指数形式
(规范化的指数形式)由整数部分、小数点和小数部分组成-123.45+1.33-0.150.234由尾数、字母e或E和指数部分(只能为整数,可以带符号)组成.其一般形式为:aEn其中:a为十进制数,n为十进制整数,都不可缺少。其可表示为a×10n0.25e+53.84E-23.浮点型常量(4)注意事项①采用一般格式时,若整数部分或小数部分为0,可以不写②采用指数形式时,尾数必须有,指数必须是整数③实型常量的默认类型为double,可以在常量后面加f或F,指定为float型e4/*不合法,没有尾数*/.e3/*不合法,没有尾数*/8.7e3.9/*不合法,指数不是整数*/-.15/*合法的浮点型常量,整数部分为0*/172./*合法的浮点型常量,小数部分为0*/0./*double型常量0.0*/3.146f/*float型常量3.146*/3.实数类型的舍入误差实型变量是用有限的存储单元存储的,因此能提供的有效数字是有限的,有效位外的数据将被舍去,由此产生舍入误差。例1:main(){floata;doubleb;a=33333.33333;b=33333.33333333333333;printf("%f\n%f\n",a,b);例2:书例3.4输出:33333.3333333.333333从本例可以看出,由于a是单精度浮点型,有效位数只有七位。而整数已占五位,故小数二位后之后均为无效数字。b是双精度型,有效位为十六位。但TurboC规定小数后最多保留六位,其余部分四舍五入。3.2.6怎样确定常量的类型字符常量:由单撇号括起来的单个普通字符或转义字符整型常量:不带小数点的数值系统根据数值的大小确定int型还是long型等浮点型常量:凡以小数形式或指数形式出现的实数C编译系统把浮点型常量都按双精度处理分配8个字节3.2.7C语言的运算符与表达式
变量用来存放数据,运算符则用来处理数据。用运算符将变量和常量连接起来的符合C语法规则的式子被称为表达式。运算符的分类:单目运算符:只带一个操作数的运算符。如:++、--运算符。双目运算符:带两个操作数的运算符。如:+、-运算符。三目运算符:带三个操作数的运算符。如:?运算符。
学习运算符时应注意:
运算符的功能:该运算符主要用于做什么运算。与运算量关系:要求运算量的个数及运算量的类型。运算符的优先级:表达式中包含多个不同运算符时运算符运算的先后次序。运算符的结合性:同级别运算符的运算顺序(指左结合性还是右结合性)。运算结果的类型:表达式运算后最终所得到的值的类型。C运算符算术运算符:(+-*/%++--)关系运算符:(<<===>>=!=)逻辑运算符:((!&&||)位运算符:(<<>>~|^&)赋值运算符:(=及其扩展)条件运算符:(?:)逗号运算符:(,)指针运算符:(*&)求字节数:(sizeof)强制类型转换:(类型)分量运算符:(.->)下标运算符:([])其它:(()-)运算符的优先级与结合性(1)C语言规定了运算符的优先级C语言中,运算符的运算优先级共分为15级。1级最高,15级最低。在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。
(2)结合性它是指,当一个操作数两侧的运算符具有相同的优先级时,该操作数是先与左边的运算符结合,还是先与右边的运算符结合。自左至右的结合方向,称为左结合性。反之,称为右结合性。结合性是C语言的独有概念。除单目运算符、赋值运算符和条件
运算符是右结合性外,其它运算符都是左结合性。基本算术运算符:
+-*/%
结合方向:从左向右优先级:----->*/%----->+-
(2)(3)(4)
说明:
“-”可为单目运算符时,右结合性两整数相除,结果为整数
%要求两侧均为整型数据例:
5/2=-5/2.0=例:
5%2=-5%2=1%10=
5%1=5.5%23.4.3算术运算符、算术表达式
2-2.51-110()除法运算求余数运算3.2.7运算符和表达式说明两个整数相除的结果为整数如5/3的结果值为1,舍去小数部分如果除数或被除数中有一个为负值,舍入方向不固定。例如,-5/3,有的系统中得到的结果为-1,在有的系统中则得到结果为-2VC++采取“向零取整”的方法
如5/3=1,-5/3=-1,取整后向零靠拢自增、自减运算符++--作用:使变量值加1或减1种类:前置++i,--i(先执行i+1或i-1,再使用i值)后置i++,i--(先使用i值,再执行i+1或i-1)例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;<>//k=4,j=4//k=3,j=4//4//3//c=20,a=4//c=15,a=4自增、自减运算符++--作用:使变量值加1或减1种类:前置++i,--i(先执行i+1或i-1,再使用i值)后置i++,i--(先使用i值,再执行i+1或i-1)说明:++--不能用于常量和表达式,如5++,(a+b)++++--结合方向:自右向左优先级:-++-------->*/%----->+-(2)(3)(4)例j+++k;(j++)+k;j+(++k)赋值运算符和表达式简单赋值运算符符号:=格式:变量标识符=表达式作用:将一个数据(常量或表达式)赋给一个变量复合赋值运算符种类:+=-=*=/=%=《=》=&=^=|=含义:exp1op=exp2
exp1=exp1opexp2a+=3a=a+3x*=y+8x=x*(y+8)<>例a=3;d=func();c=d+2;3.3.2
赋值运算符、赋值表达式
x=x*y+8×说明:结合方向:自右向左优先级:14赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型例floatf;inti;i=10;f=i;则f=10.0;例inti;i=2.56;//结果i=2;例:inta=2;a%=4-1;4-1=3a%=a%3=2%3=2即a=23.3.2
赋值运算符、赋值表达式
赋值语句“=”左边必须是变量名,不能是常量或其它表达式。例如:30=a;b+2=5;都是错误的。“=”表示赋值
“==”表示相等,二者切勿混淆!例如:a=b;a==b;a=b=c=10;对inta=b=c=10;错注意例2:a=12;a+=a-=a*a;//a=-264等价于a=a+(a=a-(a*a))a*a144从左到右2.a-=a*a从右到左
a=a-a*a
=12-144=-1323.a+=a-=a*a
a=a+(-132)
=-132-132=-264注意:a=-1323.3.2
赋值运算符、赋值表达式
逗号运算符和表达式形式:表达式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数据类型转换强制转换自动转换输出转换------输出时转换成指定的输出格式运算转换------不同类型数据混合运算时不同类型数据运算时先自动转换成同一类型赋值转换------把一个值赋给与其类型不同的变量时发生函数调用转换------实参与形参类型不一致时转换3.4.2
强制类型转换符
自动转换
(1)短长度的数据类型→长长度的数据类型
方法:直接将无符号短长度的数据类型的数据作为长长度的数据类型数据的低位部分,长长度的数据类型数据的高位部分补零。
无符号短长度的数据类型→无符号或有符号长长度的数据类型xx………x无符号短长度的数据类型长长度的数据类型xx………x00.....0.....高位部分补03.4.2
强制类型转换符
自动转换
(1)短长度的数据类型→长长度的数据类型
方法:直接将有符号短长度的数据类型的数据作为长长度的数据类型数据的低位部分,然后将低位部分的最高位(即有符号短长度数据的符号位)向长长度的数据类型数据的高位部分扩展。
有符号短长度的数据类型→无符号或有符号长长度的数据类型zx………x有符号短长度的数据类型长长度的数据类型zx………xz符号位向高位部分扩展………zz符号位例如:
charch=2;inta=-2;intb;unsignedlongu;b=ch;
//b的值将是2
u=a;
//u的值将是0xfffffffe3.4.2强制类型转换符
自动转换
(2)长长度的数据类型→短长度的数据类型
方法:直接截取长长度的数据类型数据的低位部分(长度为短长度的数据类型的长度)作为短长度数据类型的数据。
xx………x短长度的数据类型长长度的数据类型yy………yxx………x例如:
inta=-32768;//假设int数据为16位
unsignedlongb=0xffffaa00;charch;intc;ch=a;
//ch的值将是0c=b;
//c的值将是0xaa00隐式转换什么情况下发生运算转换------不同类型数据混合运算时赋值转换------把一个值赋给与其类型不同的变量时输出转换------输出时转换成指定的输出格式函数调用转换------实参与形参类型不一致时转换运算转换规则:不同类型数据运算时先自动转换成同一类型<>显式转换(强制转换)一般形式:(类型名)(表达式)例(int)(x+y)(int)x+y(double)(3/2)(int)3.6说明:强制转换得到所需类型的中间变量,原变量类型不变例main(){floatx;inti;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);}结果:x=3.600000,i=3精度损失问题较高类型向较低类型转换时可能发生<>x=2.8,y=3.1(int)(x+y)结果=5(int)x+y结果=5.13.4.5算术运算符中数据类型转换规则
低高doublefloatlongunsignedintchar,shortlongdouble说明:必定的转换运算对象类型不同时转换例:
charch;inti;floatf;doubled;ch/i+f*d-(f+i)intintdoubledoubledoubledoubledoubledouble10+‘a’+i*f-d/l例:
inti;floatf;doubled;longl;intintdoubledoubledoubledoubledoubledouble【例3-8】不同类型数据间的算术运算#include<stdio.h>voidmain(){floata,b,c;a=7/2;//计算7/2得int型值3,因此a的值为3.0b=7/2*1.0;//计算7/2得int型值3,再与1.0相乘,因此b的值为3.0c=1.0*7/2;//先计算1.0*7得double型的结果7.0,然后再计算
7.0/2,因此c的值是3.5printf("a=%f,b=%f,c=%f",a,b,c);}a=3.000000,b=3.000000,c=3.5000003.2.7运算符和表达式4.不同类型数据间的混合运算:+、-、*、/运算的两个数中有一个数为float或double型,结果是double型。系统将float型数据都先转换为double型,然后进行运算(2)如果int型与float或double型数据进行运算,先把int型和float型数据转换为double型,然后进行运算,结果是double型(3)字符型数据与整型数据进行运算,就是把字符的ASCII代码与整型数据进行运算3.2.7运算符和表达式
例3.3给定一个大写字母,要求用小写字母输出。解题思路:关键是找到大、小写字母间的内在联系同一个字母,用小写表示的字符的ASCII代码比用大写表示的字符的ASCII代码大323.2.7运算符和表达式#include<stdio.h>intmain(){charc1,c2;c1=’A’;c2=c1+32;printf("%c\n",c2);printf(”%d\n”,c2);return0;}将字符‘A’的ASCII代码65放到c1中将65+32的结果放到c2中用字符形式输出用十进制形式输出练习若有定义:int
x=3,y=2;float
a=2.5,b=3.5;则表达式
(x+y)%2+(int)a/(int)b的值为()
13.3C语句3.3.1C语句的作用和分类3.3.2最基本的语句----赋值语句C程序的执行部分是由语句组成的。程序的功能也是由执行语句实现的。C语句可分为以下五类:表达式语句函数调用语句控制语句复合语句空语句3.3.1 C语句的作用和分类1. 表达式语句:
表达式语句由表达式加上分号“;”组成。其一般形式为:表达式;执行表达式语句就是计算表达式的值。
例如:
x=y+z;赋值语句;
y+z;加法运算语句,但计算结果不能保留,无实际意义;
i++;自增1语句,i值增1。函数调用语句:由函数名、实际参数加上分号“;”组成。其一般形式为:
函数名(实际参数表);执行函数语句就是调用函数体并把实际参数赋予函数定义中的形式参数,然后执行被调函数体中的语句,求取函数值例如:printf(“CProgram”);调用库函数,输出字符串。sum=add(x,y);调用add函数求两数和。add为自定义函数。
/*example1.1calculatethesumofaandb*/#include<stdio.h>/*Thisisthemainprogram*/main(){inta,b,sum;a=10;b=24;sum=add(a,b);printf(”sum=%d\n",sum);}/*Thisfunctioncalculatesthesumofxandy*/intadd(intx,inty){intz;z=x+y;return(z);}控制语句:控制语句用于控制程序的流程,以实现程序的各种结构方式。它们由特定的语句定义符组成。C语言有九种控制语句。可分成以下三类:1)条件判断语句:if语句、switch语句;2)循环执行语句:dowhile语句、while语句、for语句;3)转向语句:break语句、goto语句、continue语句、
return语句。4.1C语句概述
复合语句:把多个语句用括号{}括起来组成的一个语句称复合语句。例如:
{x=y+z;a=b+c;printf(“%d%d”,x,a);
}是一条复合语句。注意:在程序中应把复合语句看成是单条语句,而不是多条语句。复合语句内的各条语句都必须以分号“;”结尾,在括号“}”外不能加分号。4.1C语句概述
5.空语句:只有分号“;”组成的语句称为空语句。空语句是什么也不执行的语句。在程序中空语句可用来作空循环体。例如
while(getchar()!='\n')
;本语句的功能是:只要从键盘输入的字符不是回车则重新输入。这里的循环体为空语句。3.3.2最基本的语句----赋值语句
例3.4给出三角形的三边长,求三角形面积。3.3.2最基本的语句----赋值语句解题思路:假设给定的三个边符合构成三角形的条件关键是找到求三角形面积的公式公式为:其中s=(a+b+c)/2#include<stdio.h>#include<math.h>intmain(){doublea,b,c,s,area;a=3.67;b=5.43;c=6.21;s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c));printf("a=%f\tb=%f\t%f\n",a,b,c);printf("area=%f\n",area);return0;}对边长a、b、c赋值计算s计算area#include<stdio.h>#include<math.h>intmain(){doublea,b,c,s,area;a=3.67;b=5.43;c=6.21;s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c));printf("a=%f\tb=%f\t%f\n",a,b,c);printf("area=%f\n",area);return0;}数学函数,计算平方根调用数学函数加此行#include<stdio.h>#include<math.h>intmain(){doublea,b,c,s,area;a=3.67;b=5.43;c=6.21;s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c));printf("a=%f\tb=%f\t%f\n",a,b,c);printf("area=%f\n",area);return0;}转义字符,使输出位置跳到下一个tab位置调用数学函数加此行3.4数据的输入输出3.4.1输入输出举例3.4.2有关数据输入输出的概念3.4.3用printf函数输出数据3.4.4用scanf函数输入数据3.4.5字符数据的输入输出3.4.1输入输出举例例3.5求
方程的根。a、b、c由键盘输入
设
>03.4.1输入输出举例解题思路:首先要知道求方程式的根的方法。由数学知识已知:如果
≥0,则一元二次方程有两个实根:若记#include<stdio.h>#include<math.h>intmain(){doublea,b,c,disc,x1,x2,p,q;
scanf("%lf%lf%lf",&a,&b,&c);disc=b*b-4*a*c;p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;
printf("x1=%7.2f\nx2=%7.2f\n",x1,x2);return0;}程序中调用数学函数sqrt输入a,b,c的值#include<stdio.h>#include<math.h>intmain(){doublea,b,c,disc,x1,x2,p,q;
scanf("%lf%lf%lf",&a,&b,&c);disc=b*b-4*a*c;p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;
printf("x1=%7.2f\nx2=%7.2f\n",x1,x2);return0;}输入的是双精度型实数#include<stdio.h>#include<math.h>intmain(){doublea,b,c,disc,x1,x2,p,q;
scanf("%lf%lf%lf",&a,&b,&c);disc=b*b-4*a*c;p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;
printf("x1=%7.2f\nx2=%7.2f\n",x1,x2);return0;}要求输入3个实数自动转成实数后赋给a,b,c#include<stdio.h>#include<math.h>intmain(){doublea,b,c,disc,x1,x2,p,q;
scanf("%lf%lf%lf",&a,&b,&c);disc=b*b-4*a*c;p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;
printf("x1=%7.2f\nx2=%7.2f\n",x1,x2);return0;}输出数据占7列,其中小数占2列3.4.2有关数据输入输出的概念几乎每一个C程序都包含输入输出输入输出是程序中最基本的操作之一3.4.2有关数据输入输出的概念(1)所谓输入输出是以计算机主机为主体而言的从计算机向输出设备(如显示器、打印机等)输出数据称为输出从输入设备(如键盘、磁盘、光盘、扫描仪等)向计算机输入数据称为输入3.4.2有关数据输入输出的概念(2)C语言本身不提供输入输出语句输入和输出操作是由C标准函数库中的函数来实现的printf和scanf不是C语言的关键字,而只是库函数的名字putchar、getchar、puts、gets3.4.2有关数据输入输出的概念(3)在使用输入输出函数时,要在程序文件的开头用预编译指令#include<stdio.h>或#include″stdio.h″3.4.3用printf函数输出数据在C程序中用来实现输出和输入的,主要是printf函数和scanf函数这两个函数是格式输入输出函数用这两个函数时,必须指定格式3.4.3用printf函数输出数据1.printf函数的一般格式printf(格式控制,输出表列)例如:printf(”i=%d,c=%c\n”,i,c);格式声明3.4.3用printf函数输出数据1.printf函数的一般格式printf(格式控制,输出表列)例如:printf(”i=%d,c=%c\n”,i,c);普通字符3.4.3用printf函数输出数据1.printf函数的一般格式printf(格式控制,输出表列)例如:printf(”i=%d,c=%c\n”,i,c);可以是常量、变量或表达式一般格式printf("格式控制字符串",表达式1,表达式2,…,表达式n);功能按照“格式控制字符串”的要求,将表达式1,表达式2,…,表达式n的值显示在计算机屏幕上。
说明格式控制字符串用于指定输出格式。它包含两类字符:
常规字符:包括可显示字符和用转义字符表示的字符。
格式控制符:以%开头的一个或多个字符,以说明输出数据的类型、形式、长度、小数位数等。其格式为:%[修饰符]格式转换字符例:
longintx=0x8AB6;printf(“TheValueofxis%ld\n”,x);常规字符常规字符(转义符)格式控制符(修饰符)格式控制符(格式转换符)main(){inta=88,b=89;printf("%d%d\n",a,b);printf("%d□%d\n",a,b);printf("%d,%d\n",a,b);printf("%c,%c\n",a,b);printf("a=%d,b=%d",a,b);}88□89888988,89X,Ya=88,b=89
printf函数中的格式转换字符及其含义
格式转换符含义对应的表达式数据类型%d或%i以十进制形式输出一个整型数据。例如:inta=20;printf("%d",a);//输出20有符号整型%x,%X以十六进制形式输出一个无符号整型数据。例如:inta=164;printf("%x",a);//输出a4printf("%X",a);//输出A4无符号整型%o(字母o)以八进制形式输出一个无符号整型数据。例如:inta=164;printf("%o",a);//输出244无符号整型%u以十进制形式输出一个无符号整型数据。例如:inta=-1;printf("%u",a);//BC下输出65535,VC下4294967295无符号整型%c输出一个字符型数据。例如:charch='A';printf("%c",ch);//输出A字符型例2:inta=-1printf(“%d,%o”,a,a);1111111111111111177777输出:-1,177777例3:unsignedintb=-1;printf(“b=%d,%o,%x,%u”,b,b,b,b);输出:-1,177777,ffff,65535例4:unsignedintb=65535;
inta;
a=b:
printf(“%d”,a)输出:-13.4.3用printf函数输出数据2.常用格式字符c格式符。用来输出一个字符charch=’a’;printf(”%c”,ch);或printf(”%5c”,ch);输出字符:a3.4.3用printf函数输出数据2.常用格式字符s格式符。用来输出一个字符串printf(”%s”,”CHINA”);输出字符串:CHINA3.4.3用printf函数输出数据2.常用格式字符f格式符。用来输出实数,以小数形式输出①不指定数据宽度和小数位数,用%f
例3.6用%f输出实数,只能得到6位小数。doublea=1.0;printf(”%f\n”,a/3);dx,Xoucse,Efg%%1.格式字符:十六进制无符号整数不带符号十进制整数十进制整数指数形式浮点小数单一字符字符串八进制无符号整数小数形式浮点小数e和f中较短一种百分号本身inta=567;printf(“%d”,a);inta=255;printf(“%x”,a);inta=65;printf(“%o”,a);inta=567;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(“%%”);567ff101567AABC5.677890e+02567.789000567.789%此外,在使用printf函数时还要注意以下几点:格式控制字符串后面表达式的个数一般要与格式控制字符串中的格式控制符的个数相等。格式转换符中,除了X、E、G以外,其它均为小写。表达式的实际数据类型要与格式转换符所表示的类型相符,printf函数不会进行不同数据类型之间的自动转换。象整型数据不可能自动转换成浮点型数据,浮点型数据也不可能自动转换成型数数据
2.附加格式说明符(修饰符).n对实数,指定小数点后位数(四舍五入)对字符串,指定实际输出位数修饰符功能m输出数据域宽,数据长度<m,左补空格;否则按实际输出输出数据在域内左对齐(缺省右对齐)-指定在有符号数的正数前显示正号(+)+输出数值时指定左面不使用的空位置自动填00在八进制和十六进制数前显示前导0,0x#在d,o,x,u前,指定输出精度为long型l
类型转换字符d──以带符号的十进制整数形式输出。
[例1]类型转换字符d的使用。
main(){intnum1=123;longnum2=123456;/*用3种不同格式,输出int型数据num1的值*/printf("num1=%d,num1=%5d,num1=%-5d,num1=%2d\n",num1,num1,num1,num1);/*用3种不同格式,输出long型数据num2的值*/printf("num2=%ld,num2=%8ld,num2=%5ld\n",num2,num2,num2);
} num1=123,num1=□□123,num1=123□□,num1=123num2=123456,num2=□□123456,num2=1234563.4.3用printf函数输出数据2.常用格式字符f格式符。用来输出实数,以小数形式输出②指定数据宽度和小数位数。用%m.nf
printf("%20.15f\n",1/3);
printf("%.0f\n”,10000/3.0);3.4.3用printf函数输出数据2.常用格式字符f格式符。用来输出实数,以小数形式输出②指定数据宽度和小数位数。用%m.nffloata;a=10000/3.0;printf("%f\n",a);3.4.3用printf函数输出数据2.常用格式字符f格式符。用来输出实数,以小数形式输出③输出的数据向左对齐,用%-m.nf3.4.3用printf函数输出数据2.常用格式字符f格式符。用来输出实数,以小数形式输出float型数据只能保证6位有效数字double型数据能保证15位有效数字计算机输出的数字不都是绝对精确有效的
2)类型转换字符f──以小数形式、按系统默认的宽度,输出单精度和双精度实数。main(){floatf=123.456;doubled1,d2;d1=1111111111111.111111111;d2=2222222222222.222222222;printf("%f,%12f,%12.2f,%-12.2f,%.2f\n",f,f,f,f,f);printf("d1+d2=%f\n",d1+d2);}
程序运行结果如下:
123.456001,□□123.456001,□□□□□□123.46,123.46□□□□□□,123.46d1+d2=3333333333333.333010 注意:%f不指定字段宽度,由系统使整数部分全部输出,并输出6位小数例5:charc=‘a’;
inti=97;
printf(“%c,%d,%3c”,c,c,c);
printf(“%c,%d”,i,i);
printf(“%s,%3s,%7.2s,%.4s,%-5.3s”,“china”,“china”,“china”,“china”,“china”,);a,97,□□aa,97china,china,□□□□□ch,chin,chi□□输出占m列,但只取字符串左边n个字符,这n个字符输出在m列的右侧,左补空格(若前面有负号,n个字符数处在m列的左侧,右补空格)3.4.3用printf函数输出数据2.常用格式字符e格式符。指定以指数形式输出实数%e,VC++给出小数位数为6位
指数部分占5列
小数点前必须有而且只有1位非零数字printf(”%e”,123.456);
输出:1.234560
e+0023.4.3用printf函数输出数据2.常用格式字符e格式符。指定以指数形式输出实数%m.neprintf(”%13.2e”,123.456);
输出:1.23e+002(前面有4个空格)3.4.4用scanf函数输入数据1.scanf函数的一般形式scanf(格式控制,地址表列)含义同printf函数3.4.4用scanf函数输入数据1.scanf函数的一般形式scanf(格式控制,地址表列)可以是变量的地址,或字符串的首地址格式输入函数格式:scanf(“格式控制串”,地址表)功能:按指定格式从键盘读入数据,存入地址表指定的存储单元中,并按回车键结束返值:正常,返回输入数据个数地址表:变量的地址,常用取地址运算符&格式字符:d,i,o,x,u,c,s,f,e例scanf(“%x”,&a);
输入:11
则a=173.4.4用scanf函数输入数据2.scanf函数中的格式声明与printf函数中的格式声明相似以%开始,以一个格式字符结束,中间可以插入附加的字符scanf("a=%f,b=%f,c=%f",&a,&b,&c);3.4.4用scanf函数输入数据3.使用scanf函数时应注意的问题scanf(”%f%f%f”,a,b,c);错scanf(”%f%f%f”,&a,&b,&c);对对于scanf("a=%f,b=%f,c=%f",&a,&b,&c);
132↙
错
a=1,b=3,c=2↙
对
a=1b=3c=2↙
错scanf("%5.2f",&a);
scanf("%5f",&a);
附加格式说明符(修饰符)l修饰符功能hm*用于d,o,x前,指定输入为short型整数用于d,o,x前,指定输入为long型整数用于e,f前,指定输入为double型实数指定输入数据宽度,遇空格或不可转换字符则结束抑制符,指定输入项读入后不赋给变量例scanf(“%4d%2d%2d”,&yy,&mm,&dd);
输入19991015
则19
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 单位管理制度范例汇编【职工管理】十篇
- 《市场进入和效率》课件
- DBJ51-T 040-2021 四川省工程建设项目招标代理操作规程
- 超高层商住楼转换层施工方案#模板工程#钢筋工程#混凝土工程
- 《小数点移动》课件2
- 《宝马销售流程》课件
- 《电动力学chapter》课件
- 印刷包装行业市场营销经验分享
- 电脑设备销售员工作总结
- 玩具模型销售工作总结
- 《幼儿安全》安安全全坐火车
- 国家开放大学-法学专业-2023年秋季《法律文化》形成性考核作业答案
- 中班语言活动《我长大了》课件
- TB 10012-2019 铁路工程地质勘察规范
- 智慧水务系统市场分析及行业前景展望报告
- 2024年济南历城区九年级中考化学一模考试试题(含答案)
- GB/T 19923-2024城市污水再生利用工业用水水质
- 护理组长述职演讲
- 2024年生开心果市场需求分析报告
- 现代材料分析测试技术课件
- 2022-2023学年北京市海淀区高一(上)期末地理试卷
评论
0/150
提交评论