版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章最简单的C程序设计3.1顺序程序设计举例3.2数据的表现形式及其运算3.3C语句3.4数据的输入输出3.1顺序程序设计举例
例3.1有人用温度计测量出用华氏法表示的温度(如F,今要求把它转换为以摄氏法表示的温度(如C)。解题思路:找到二者间的转换公式f代表华氏温度,c代表摄氏温度算法:输入f的值输出c的值
例3.1有人用温度计测量出用华氏法表示的温度(如F,今要求把它转换为以摄氏法表示的温度(如C)。N-S图#include<stdio.h>intmain(){floatf,c;f=64.0;c=(5.0/9)*(f-32);printf("f=%f\nc=%f\n",f,c);return0;}定义f和c为单精度浮点型变量指定f的值计算c的值输出f和c的值
例3.2计算存款利息。有1000元,想存一年。有三种方法可选:(1)活期,年利率为r1(2)一年期定期,年利率为r2(3)存两次半年定期,年利率为r3
请分别计算出一年后按三种方法所得到的本息和。解题思路:确定计算本息和的公式。从数学知识可知:若存款额为p0,则:活期存款一年后本息和为:
p1=p0(1+r1)一年期定期存款,一年后本息和为:
p2=p0(1+r2)两次半年定期存款,一年后本息和为:
算法:输入p0,r1,r2,r3的值计算p1=p0(1+r1)计算p2=p0(1+r2)计算p3=p0(1+)(1+)输出p1,p2,p3#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运算符和表达式3.2.1常量和变量1.常量:在程序运行过程中,其值不能被改变的量整型常量:如1000,12345,0,-345实型常量十进制小数形式:如0.34-56.790.0指数形式:如12.34e3(代表12.34103)字符常量:如’?’转义字符:如’\n’字符串常量:如”boy”定义格式:#definePI3.1416例:符号常量的使用
#definePRICE30
#include<stdio.h>
voidmain()
{
intnum,total;
num=10;
total=num*PRICE;
printf(″total=%d\n″,total);
}符号常量:用一个标识符代表一个常量。符号常量的值在其作用域内不能改变,也不能再被赋值。运行结果:
total=300说明:
程序中用#define命令行定义PRICE代表常量30,此后凡在本文件中出现的PRICE都代表30,可以和常量一样进行运算。说明:如再用赋值语句给PRICE赋值是错的
PRICE=40;/*错误,不能给符号常量赋值*/表示在程序运行过程中可改变的量,C语言表现为存储器中的一个存储单元地址。2、变量:变量编译程序根据变量定义为其分配指定字节的内存单元…...地址inta=1,b=-3,c;abc2字节2字节2字节地址地址…...内存1-3随机数变量概念:其值可以改变的量变量名与变量值变量定义的一般格式:
数据类型变量1[,变量2,…,变量n];<>变量初始化:定义时赋初值例:inta,b,c;floatdata;决定分配字节数和数的表示范围合法标识符例:inta=2,b,c=4;floatdata=3.67;charch=‘A’;intx=1,y=1,z=1;
intx=y=z=1;变量的使用:先定义,后使用例1intstudent;stadent=19;//Undefinedsymbol‘statent’infunctionmain
例2floata,b,c;c=a%b;//Illegaluseoffloatingpointinfunctionmain
变量定义位置:一般放在函数开头voidmain(){inta,b=2;floatdata;a=1;data=(a+b)*1.2;printf(“data=%f\n”,data);}变量定义可执行语句voidmain(){inta,b=2;a=1;floatdata;data=(a+b)*1.2;printf(“data=%f\n”,data);}变量名
变量值3存储单元
a3.常变量:constinta=3;#definePRICE30//定义符号常量constinta=3;//定义常变量符号常量:是预编译指令,含义清楚,一改全改,不占内存常变量:有类型,占存储单元,使用更方便4.标识符定义:用来标识变量、常量、函数等的字符序列组成:只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线大小写敏感(A跟a不同)不能使用关键字(37个关键字)长度:取8个字符(TurboC允许32个字符)命名原则:见名知意不宜混淆如o与0;例:判断下列标识符号合法性sumSumM.D.JohndayDate3daysstudent_name#33lotus_1_2_3chara>b_above$123M.D.John3days#33char$123a>b大小写字母是不同的字符3.2.2数据类型所谓类型,就是对数据分配存储单元的安排,包括存储单元的长度(占多少字节)以及数据的存储形式不同的类型分配不同的长度和存储形式C语言允许使用的数据类型:基本类型整型类型基本整型短整型长整型双长整型字符型布尔型浮点类型单精度浮点型双精度浮点型复数浮点型C语言允许使用的数据类型:基本类型枚举类型空类型派生类型指针类型数组类型结构体类型共用体类型函数类型算术类型纯量类型:值可以以数字来表示3.2.3整型数据1.整型数据的分类最基本的整型类型基本整型(int型):占2个或4个字节短整型(shortint):VC++6.0中占2个字节长整型(longint):VC++6.0中占4个字节双长整型(longlongint):C99新增的,占8个字节3.2.3整型数据1.整型数据的分类2.整型变量的符号属性整型变量的值的范围包括负数到正数可以将变量定义为“无符号”类型扩充的整形类型:扩充的整型类型:有符号基本整型[signed]int;无符号基本整型unsignedint;有符号短整型[signed]short[int];无符号短整型unsignedshort[int];有符号长整型[signed]long[int];无符号长整型unsignedlong[int]有符号双长整型[signed]longlong[int];无符号双长整型unsignedlonglong[int]表:整数类型的有关数据的存储空间和值的范围类型类型说明符长度数的范围基本型int
2字节-32768~32767
短整型short2字节-215~215-1
长整型long4字节-231~231-1
无符号整型unsigned2字节0~65535
无符号短整型unsignedshort2字节0~65535
无符号长整型unsignedlong4字节0~(232-1)双长整型longlong8字节-263~263-1无符号双长整型unsignedlonglong8字节0~264-11、整型常量的表示方法
整型常量即整常数。在C语言中,整型常数可用以下三种形式表示:(1)十进制整数。
如:123,-456,4(2)八进制整数。以0头的数是八进制数。
如:0123表示八进制数123,等于十进制数83,-011表示八进制数-11,即十进制数-9。(3)十六进制整数。以0x开头的数是16进制数。
如:0x123,代表16进制数123,等于十进制数291。-0x12等于十进制数-10。
3.2.3整型数据2、整型变量整型数据在内存中的存放形式:以整数的补码形式存放的。正数的补码:跟该数的原码(该数的二进制形式)相同负数的补码:将该数的绝对值的二进制形式,按位取反再加1。
<>例如:inti;/*定义为整型变量*/i=10;/*给i赋以整数10*/<>i10(a)i0000000000001010(b)图数据在内存中的存放<>
例如求-10的补码的方法是:①取-10的绝对值10;②10的二进制形式为1010;③对1010取反得1111111111110101;④再加1得1111111111110110;注意:十进制数10的二进制形式为1010,TurboC2.0和TurboC++3.0为一个整型变量在内存中分配2个字节的存储单元(不同的编译系统为整型数据分配的字节数是不相同的,VC++6.0则分配4个字节)。
3.3整型数据(2)整型变量的分类共六种有符号基本整型有符号短整型有符号长整型无符号基本整型无符号短整型无符号长整型(signed)int(signed)short(int)(signed)long(int)unsignedintunsignedshort(int)unsignedlong(int)
注意:括号表示其中的内容是可选的.例如:整数13在内存中实际存放的情况:(3)整型变量的定义:
C规定在程序中所有用到的变量都必须在程序中定义,即“强制类型定义”。
例如:
inta,b(指定变量a、b为整型)
unsignedshortc,d;(指定变量c、d为无符号短整型)
longe,f;(指定变量e、f为长整型)例:整型变量的定义与使用
#include<stdio.h>
voidmain()
{inta,b,c,d;/*指定a、b、c、d为整型变量*/
unsignedu;/*指定u为无符号整型变量*/
a=12;b=-24;u=10;
c=a+u;d=b+u;
printf(″a+u=%d,b+u=%d\n″,c,d);
}说明:
可以看到不同种类的整型数据可以进行算术运算运行结果:a+u=22,b+u=-14
#include<stdio.h>
voidmain()
{inta,b;
a=32767;
b=a+1;
printf(“%d,%d\n”,a,b);
}
运行结果:32767,-32768-32768327670111111111111111说明:数值是以补码表示的。一个整型变量只能容纳-32768~32767范围内的数,无法表示大于32767或小于-32768的数。遇此情况就发生“溢出”。溢出不报错a:b:1000000000000000例:整型数据的溢出#include<stdio.h>
#include<math.h>
voidmain()
{
inta,b,c,d;
a=32767;
c=pow(2,31)-1;
b=a+1;
d=c+1;
printf("%d\n%d\n",a,b);
printf("%d\n%d\n",c,d);
}
整型常量的类型
(1)一个整数,如果其值在-32768~+32767范围内,认为它是int型,它可以赋值给int型和longint型变量,longlongint型变量。
(2)一个整数,如果其值超过了上述范围,而在-2147483637~+2147483647范围内,则认为它是长整型,分配4个字节。可以将它赋值给一个longint型变量。
定义够用为好,不要都写为long型,会降低运算速度(4)一个整常量后面加一个字母u或U,认为是unsignedint型,如果写成-12345u,则先将-12345转换成其补码53191,然后按无符号数存储。(3)在一个整常量后面加一个字母l或L,则认为是longint型常量。
例如:123l、432L、0L
用于函数调用中。如果函数的形参为longint型,则要求实参也为longint型。3.2.4字符型数据字符是按其代码(整数)形式存储的C99把字符型数据作为整数类型的一种字符型数据在使用上有自己的特点3.2.4字符型数据1.字符与字符代码大多数系统采用ASCII字符集字母:A~Z,a~z数字:0~9专门符号:29个:!”#&‘()*等空格符:空格、水平制表符、换行等不能显示的字符:空(null)字符(以‘\0’表示)、警告(以‘\a’表示)、退格(以‘\b’表示)、回车(以‘\r’表示)等字符型数据1、字符常量定义:用单引号括起来的单个普通字符或转义字符.
字符常量的值:该字符的ASCII码值<转义字符及其含义:转义字符含义\n\v\r\a\’\033\t\b\f\\\’’\0xee转义字符含义换行垂直制表回车响铃单引号2位8进制数代表的字符水平制表退格换页反斜线双引号2位16进制数代表的字符如‘\101’-----------‘A’‘\012’-----------’\n’‘\376’-----------’’‘\x61’-----------’a’例:‘A’-------’\101’-------’\x41’--------65<如‘A’——65,‘a’——97,
‘0’——48,‘\n’——10如‘a’‘A’‘?’‘\n’‘\101’转义字符:反斜线后面跟一个字符或一个代码值表示<转义字符及其含义:转义字符含义\n\v\r\a\’\ddd\t\b\f\\\’’\xhh转义字符含义换行垂直制表回车响铃单引号3位8进制数代表的字符水平制表退格换页反斜线双引号2位16进制数代表的字符<例转义字符举例(ch2_001.c,ch2_004.c)
#include<stdio.h>voidmain(){printf(“~ab~c\t~de\rf\tg\n");printf(“h\ti\b\bj~k\n");}运行结果:fab~c~~~gdeh~~~~~~jik屏幕显示结果:f~~~~~~~gdeh~~~~~~j~k(1)用单引号包含的一个字符是字符型常量(2)只能包含一个字符例‘a’,’A’,‘1’‘abc’、“a”字符’1’和整数1是不同的概念:字符’1’只是代表一个形状为’1’的符号,在需要时按原样输出,在内存中以ASCII码形式存储,占1个字节整数1是以整数存储方式(二进制补码方式)存储的,占2个或4个字节0011000100000000000000012、字符变量字符型变量用来存放字符常量,注意只能放一个字符。字符变量的定义形式如下:charc1,c2;
可以用下面语句对c1,c2赋值:
c1=‘a’;c2=‘b’
;在所有的编译系统中都规定以一个字节来存放一个字符,因此,一个字符变量在内存中占一个字节。
<>注:单引号只是作为定界符使用,并不是字符常量的组成部分3.2.4字符型数据例如:charc=’?’;
系统把“?”的ASCII代码63赋给变量cprintf(”%d%c\n”,c,c);输出结果是:63?字符数据在内存中的存储形式及其使用方法一个字符常量存放到一个字符变量中,实际上并不是把该字符的字型放到内存中去,而是将该字符的相应的ASCII代码放到存储单元中。这样使字符型数据和整型数据之间可以通用。注意:
一个字符数据既可以以字符形式输出,也可以以整数形式输出。例:向字符变量赋予整数。
#include<stdio.h>
voidmain()
{charc1,c2;
c1=97;
c2=98;
printf(“%c%c\n”,c1,c2);
printf(“%d%d\n”,c1,c2);
}
说明:在第3和第4行中,将整数97和98分别赋给c1和c2,它的作用相当于以下两个赋值语句:
c1=′a′;c2=′b′;因为′a′和′b′的ASCII码为97和98运行结果:ab
9798例:大小写字母的转换
#include<stdio.h>
voidmain()
{charc1,c2;
c1=’a’;
c2=’b’;
c1=c1-32;
c2=c2-32;
printf(“%c%c″,c1,c2);
}说明:程序的作用是将两个小写字母a和b转换成大写字母A和B。从ASCII代码表中可以看到每一个小写字母比它相应的大写字母的ASCII码大32。C语言允许字符数据与整数直接进行算术运算。
运行结果:AB
字符类型存储空间和值的范围说明:有些系统(如TurboC)将字符变量定义为signedchar型。其存储单元中的最高位作为符号位,它的取值范围是-128~127。如果在字符变量中存放一个ASCII码为0~127间的字符,由于字节中最高位为0,因此用%d输出字符变量时,输出的是一个正整数。如果在字符变量中存放一个ASCII码为128~255间的字符,由于在字节中最高位为1,用%d格式符输出时,就会得到一个负整数,用c%输出则参照附录B。
类型字节数取值范围signedchar1-27~27-1(-128~127)unsignedchar10~28-1(0~255)字符常量与字符串常量不同字符串常量定义:用双引号(“
”)括起来的字符序列存储:每个字符串尾自动加一个‘\0’作为字符串结束标志hello\0例字符串“hello”在内存中a
a\0例‘a’“a”例空串“
”\0例:charch;ch=“A”;
例:charch;ch=‘A’;
3.2.5浮点型数据float型(单精度浮点型)编译系统为float型变量分配4个字节浮点型数据是用来表示具有小数点的实数1、浮点型常量的表示方法两种表示形式小数形式:指数形式:0.1233e-3十进制小数形式:(必须有小数点)如0.123,123.0,0.0,123.指数形式:(用字母e和E代表以10为底的指数;e或E之前必须有数字;e后面的指数必须为整数)如12.3e3,123E2,1.23e4,e-5,1.2E-3.51、浮点型常量的表示方法两种表示形式小数形式:指数形式:0.1233e-3注意:字母e(或E)之前必须有数字,且e后面的指数必须为整数1e3、1.8e-3、-123e-6、-.1e-3e3、2.1e3.5、.e3、e
标准化(规范化)的指数形式:把小数部分中小数点前的数字为0,小数点后第1位数字不为0的表示形式称为规范化指数形式。例如:123.456可以表示为:
123.456e0,12.3456e1,1.23456e2,0.123456e3,0.0123456e4,0.00123456e
其中的0.123456e003称为“标准化(规范化)的指数形式”。标准化(规范化)的指数形式:把小数部分中小数点前的数字为0,小数点后第1位数字不为0的表示形式称为规范化指数形式。实数在计算机内存中按照标准化指数形式存储。因为系统存储实数时,会为该位开辟一段固定大小的空间,如果允许该位为0,则表明系统白白浪费了这部分空间,不利于提高所存储数据的精确度和表示范围。例如:123.456可以表示为:
123.456e0,12.3456e1,1.23456e2,0.123456e3,0.0123456e4,0.00123456e
其中的0.123456e003称为“标准化(规范化)的指数形式”。规范化的指数输出形式:
在字母e(或E)之前的小数部分中,小数点左边应有一位(且只能有一位)非零的数字.一个实数在用指数形式输出时,是按规范化的指数形式输出的。例如,指定实数1234.56按指数形式(%e格式)输出,输出的形式只能是1.23456+003,而不会是0.123456e+004或12.3456e+002.2、浮点型变量(1)浮点型数据在内存中的存放形式
一个浮点型数据一般在内存中占4个字节(32位)。与整型数据的存储方式不同,浮点型数据是按照指数形式存储的。系统把一个浮点型数据分成小数部分和指数部分,分别存放。指数部分采用规范化的指数形式。编译系统确定各自占的位数小数部分占的越多,精度越高,指数部分占的越多,范围越大类型位数数的范围有效数字float32
0及1.2*10-38~3.4*1038
6-7位double型64
0及2.3*10-308~1.7*10308
15-16位longdouble640及2.3*10-308~1.7*1030815-16位(2)浮点型变量的分类浮点型变量分为单精度(float型)、双精度(double型)和长双精度型(longdouble)三类形式。
1280及3.4*10-4932~1.1*10493219位longdouble浮点型数据的舍入误差
#include<stdio.h>
voidmain()
{floata,b;
a=123456.789e5;
b=a+20;
printf(“%e\n”,b);
}
说明:一个浮点型变量只能保证的有效数字是6-7位有效数字,后面的数字是无意义的,并不准确地表示该数。应当避免将一个很大的数和一个很小的数直接相加或相减,否则就会“丢失”小的数运行结果:1.234568e+010浮点型常量的类型
C编译系统将浮点型常量作为双精度来处理。
例如:f=2.45678*4523.65
系统先把2.45678和4523.65作为双精度数,然后进行相乘的运算,得到的乘也是一个双精度数。最后取其前7位赋给浮点型变量f。如是在数的后面加字母f或F(如1.65f,654.87F),这样编译系统就会把它们按单精度(32位)处理。3.2.6怎样确定常量的类型整型常量:不带小数点的数值系统根据数值的大小确定int型还是long型等字符常量:由单撇号括起来的单个字符或转义字符浮点型常量:凡以小数形式或指数形式出现的实数C编译系统把浮点型常量都按双精度处理分配8个字节C运算符算术运算符:(+-*/%++--)关系运算符:(<<===>>=!=)逻辑运算符:((!&&||)位运算符:(<<>>~|^&)赋值运算符:(=及其扩展)条件运算符:(?:)逗号运算符:(,)指针运算符:(*&)求字节数:(sizeof)强制类型转换:(类型)分量运算符:(.->)下标运算符:([])其它:(()-)<>3.2.7运算符和表达式学习运算符应注意:运算符功能与运算量关系要求运算量个数要求运算量类型运算符优先级别结合方向结果的类型<>算术运算符和算术表达式基本算术运算符:+-*/%结合方向:从左向右优先级:----->*/%----->+-(2)(3)(4) 说明:“-”可为单目运算符时,右结合性两整数相除,结果为整数;有负值时,采取“向零取整”方法;%要求两侧均为整型数据参加+、-、*、/运算的两个数中若有一个数为实型,则结果是double型;例5/2=-5/2=5/2.0=例5%2=1%10=
5%1=5.5%2<>例
5/2=2
-5/2=-25/2.0=2.5例5%2=1
1%10=
1
5%1=
05.5%2()2、自增、自减运算符++--作用:使变量值加1或减1种类:前置
++i,--i等价于i=i+1(先执行i+1或i-1,再使用i值)后置
i++,i--等价于i=i+1(先使用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)例-i++-(i++)i=3;printf(“%d”,-i++);//-3
例-i++i=3;printf(“%d”,-i++);
3、
算术表达式和运算符的优先级与结合性:
用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子,称为C算术表达式。运算对象包括常量、变量、函数等。
例如:
a*b/c-1.5+′a′
是一个合法的表达式。C语言规定了运算符的优先级和结合性。在表达式求值时,先按运算符的优先级别高低次序执行,例如先乘除后加减。C规定了各种运算符的结合方向(结合性)
算术运算符的结合方向为“自左至右”,即先左后右。隐式转换什么情况下发生运算转换------不同类型数据混合运算时赋值转换------把一个值赋给与其类型不同的变量时输出转换------输出时转换成指定的输出格式函数调用转换------实参与形参类型不一致时转换运算转换规则:不同类型数据运算时先自动转换成同一类型<>4.不同类型数据间的混合运算:(1)+、-、*、/运算的两个数中有一个数为float或double型,结果是double型。系统将float型数据都先转换为double型,然后进行运算(2)如果int型与float或double型数据进行运算,先把int型和float型数据转换为double型,然后进行运算,结果是double型(3)字符型数据与整型数据进行运算,就是把字符的ASCII代码与整型数据进行运算doublefloatlongunsignedintchar,short低高说明:必定的转换运算对象类型不同时转换例charch;inti;floatf;doubled;ch/i+f*d-(f+i)intintdoubledoubledoubledoubledoubledoubleintintdoubledoubledoubledoubledoubledouble10+‘a’+i*f-d/l例inti;floatf;doubled;longl;<>
例3.3给定一个大写字母,要求用小写字母输出。解题思路:关键是找到大、小写字母间的内在联系同一个字母,用小写表示的字符的ASCII代码比用大写表示的字符的ASCII代码大32#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中用字符形式输出用十进制形式输出5.强制类型转换运算符显式转换(强制转换)一般形式:(类型名)(表达式)例(int)(x+y)(int)x+y(double)(3/2)(int)3.6说明:强制转换得到所需类型的中间变量,原变量类型不变例voidmain(){floatx;inti;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);}结果:x=3.600000,i=3精度损失问题较高类型向较低类型转换时可能发生<>6.C运算符(1)算术运算符
(+-*/%++--)(2)关系运算符
(><==>=<=!=)(3)逻辑运算符
(!&&||)(4)位运算符
(<<>>~|∧&)(5)赋值运算符
(=及其扩展赋值运算符)(6)条件运算符
(?:)(7)逗号运算符
(,)(8)指针运算符
(*和&)(9)求字节数运算符
(sizeof)(10)强制类型转换运算符
((类型))(11)成员运算符
(.->)(12)下标运算符
([
])(13)其他
(如函数调用运算符())求字节数运算符
(sizeof)用法#include<stdio.h>voidmain(){ inta; floatb; doublec; chard;printf("%d\n%d\n%d\n%d\n",sizeof(a),sizeof(b),sizeof(c),sizeof(d));}知识回顾标识符的命名要求满足什么条件?如何定义一个整型变量a?int、char、float在VC++6.0系统中各占多少个字节?int表示数的范围?整型数据在内存中如何存放?12.3456e3是否是规范化的指数形式?3.3C语句3.3.1C语句的作用和分类3.3.2最基本的语句----赋值语句图3.14C程序结构图3.3.1 C语句的作用和分类一个C程序可以由若干个源程序文件组成一个源文件可以由若干个函数和预处理命令以及全局变量声明部分组成一个函数由函数首部和函数体组成函数体由数据声明和执行语句组成C语句分为5类控制语句函数调用语句表达式语句空语句复合语句(一)控制语句完成一定的控制功能
(1)if(
)…else…
条件语句
(2)for(
)…
循环语句
(3)while(
)…
循环语句
(4)do…while(
)
循环语句
(5)continue
结束本次循环语句
(6)break中止执行switch或循环语句
(7)
switch()多分支选择语句
(8)
return从函数返回语句(9)
goto转向语句上面9种语句中的括号“()”表示括号中是一个判别条件,“…”表示内嵌的语句。例如:“if()…else…”的具体语句可以写成:“if(x>y)z=x;elsez=y;”(二)函数调用语句由一个函数调用加一个分号构成。
printf(“ThisisaCstatement.”);例:(三)表达式语句由一个表达式加一个分号构成。
a=3;例:分号赋值表达式表达式语句+=(四)空语句只有一个分号的语句
;
(什么也不做)用来做流程的转向点用来作为循环语句中的循环体(五)复合语句用一对{}括起来的语句
{ z=x+y; t=z/100; printf(“%f”,t); }例:3.3.2最基本的语句----赋值语句在C程序中,最常用的语句是:赋值语句输入输出语句其中最基本的是赋值语句解题思路:假设给定的三个边符合构成三角形的条件关键是找到求三角形面积的公式公式为:其中s=(a+b+c)/2
例3.4给出三角形的三边长,求三角形面积#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位置调用数学函数加此行1、赋值运算符和表达式1)简单赋值运算符符号:=格式:变量标识符=表达式作用:将一个数据(常量或表达式)赋给一个变量2)复合赋值运算符种类:+=-=*=/=%=《=》=&=^=|=含义:exp1op=exp2
exp1=exp1opexp2a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3<>例a=3;d=func();c=d+2;为便于记忆,可以这样理解:①a+=b(其中a为变量,b为表达式)②a+=b(将有下划线的“a+”移到“=”右侧)
|___↑③a=a+b(在“=”左侧补上变量名a)注意:如果b是包含若干项的表达式,则相当于它有括号。如:
①x%=y+3
②x%=(y+3)|__↑
③x=x%(y+3)(不要错写成x=x%y+3)
凡是二元(二目)运算符,都可以与赋值符一起组合成复合赋值符。C语言规定可以使用10种复合赋值运算符:+=,-=,*=,/=,%=,<<=,>>=,&=,∧=,|=赋值表达式的写法由赋值运算符将一个变量和一个表达式连接起来的式子称为“赋值表达式”。一般形式为:
<变量><赋值运算符><表达式>
例如:“a=5”是一个赋值表达式
对赋值表达式求解的过程是:
①求赋值运算符右侧的“表达式”的值;②赋给赋值运算符左侧的变量。例如:赋值表达式“a=3*5”的值为15,执行表达式后,变量a的值也是15。
注意:一个表达式应该有一个值
左值(lvalue)
:赋值运算符左侧的标识符变量可以作为左值;而表达式就不能作为左值(如a+b);常变量也不能作为左值,
右值(lvalue)
:出现在赋值运算符右侧的表达式
左值也可以出现在赋值运算符右侧,因而左值都可以作为右值。
赋值表达式中的“表达式”,又可以是一个赋值表达式。例如:a=(b=5)
分析:括弧内的“b=5”是一个赋值表达式,它的值等于5。执行表达式“a=(b=5)”相当于执行“b=5”和“a=b”两个赋值表达式。赋值运算符按照“自右而左”的结合顺序,因此,“(b=5)”外面的括弧可以不要,即“a=(b=5)”和“a=b=5”等价。请分析下面的赋值表达式∶(a=3*5)=4*3分析:先执行括弧内的运算,将15赋给a,然后执行4*3的运算,得12,再把12赋给a。最后a的值为12,整个表达式的值为12。可以看到∶(a=3*5)出现在赋值运算符的左侧,因此赋值表达式(a=3*5)是左值注意:在对赋值表达式(a=3*5)求解后,变量a得到值15执行(a=3*5)=4*3时,实际上是将4*3的积12赋给变量a,而不是赋给3*5。不能写成:a=3*5=4*3赋值表达式也可以包含复合的赋值运算符。
如:a+=a-=a*a分析:此赋值表达式的求解步骤如下∶①先进行“a-=a*a”的运算,它相当于a=a-a*a,a的值为12-144=-132。②再进行“a+=-132”的运算,相当于a=a+(-132),a的值为-132-132=-264。
将赋值表达式作为表达式的一种,使赋值操作不仅可以出现在赋值语句中,而且可以以表达式形式出现在其他语句(如输出语句、循环语句等)中。如:printf("%d",a=b);
分析:如果b的值为3,则输出a的值(也是表达式a=b的值)为3。在一个语句中完成了赋值和输出双重功能。
4、赋值过程中的类型转换
如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时要进行类型转换。①将浮点型数据(包括单、双精度)赋给整型变量时,舍弃浮点数的小数部分。如:i为整型变量,执行“i=3.56”的结果是使i的值为3,以整数形式存储在整型变量中.
②将整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中
如:
将23赋给float变量f,即执行f=23,先将23转换成23.00000,再存储在f中。将23赋给double型变量d,即执行d=23,系统将23补足有效位数字为23.00000000000000,然后以双精度浮点数形式存储到变量d中。
③将一个double型数据赋给float变量时,截取其前面7位有效数字,存放到float变量的存储单元(4个字节)中。但应注意数值范围不能溢出。
如:floatf;doubled=123.456789e100;f=d;
就出现溢出的错误。
如果将一个float型数据赋给double变量时,数值不变,有效位数扩展到16位,在内存中以8个字节存储④字符型数据赋给整型变量时,由于字符只占1个字节,而整型变量为2个字节,因此将字符数据(8个二进位)放到整型变量存储单元的低8位中。第一种情况:低位对应、高位补零
若所用系统将字符处理为无符号字符类型,或程序已将字符变量定义为unsignedchar型,则将字符的8位放到整型变量低8位,高8位补零。例如:将字符‘\376’赋给int型变量i第二种情况:符号扩展
若所用系统(如TurboC++)将字符处理为带符号(signedchar)时,若字符最高位为0,则整型变量高8位补0;若字符最高位为1,则高8位全补1。这称为“符号扩展”,这样做的目的是使数值保持不变,如变量c(字符‘\376’)以整数形式输出为-2,i的值也是-2。⑤将一个int、short、long型数据赋给一个char型变量时,只将其低8位原封不动地送到char型变量(即截断)。例如:inti=289;charc=′a′;c=i;c的值为33,如果用“%c”输出c,将得到字符“!”!的ASCII码为33。
赋值情况:将带符号的整型数据(int型)赋给long型变量时,要进行符号扩展,将整型数的16位送到long型低16位中:如果int型数据为正值(符号位为0),则long型变量的高16位补0;如果int型变量为负值(符号位为1),则long型变量的高16位补1,以保持数值不改变。反之,若将一个long型数据赋给一个int型变量,只将long型数据中低16位原封不动地送到整型变量(即截断)。例如:inta;longb=8;a=b;
赋值情况如下
:如果b=65536(八进制数0200000),则赋值后a值为0。⑦将unsignedint型数据赋给longint型变量时,不存在符号扩展问题,只需将高位补0即可。将一个unsigned类型数据赋给一个占字节数相同的非unsigned型整型变量(例如:unsignedint->int,unsignedlong->long,unsignedshort->short),将unsigned型变量的内容原样送到非unsigned型变量中,但如果数据范围超过相应整型的范围,则会出现数据错误。例如:unsignedinta=65535;intb;b=a;将a整个送到b中,由于b是int,第1位是符号位,因此b成了负数。根据补码知识可知,b的值为-1,可以用printf(″%d″,b);来验证。
⑧将非unsigned型数据赋给长度相同的unsigned型变量,也是原样照赋(符号位也作为数值一起传送)。例:有符号数据传送给无符号变量。
#include<stdio.h>
voidmain()
{unsigneda;
intb=-1;
a=b;
print(″%u\n″,a);
}
说明:“%u”是输出无符号数时所用的格式符。如果b为正值,且在0~32767之间,则赋值后数值不变。运行结果:65535
说明:结合方向:自右向左优先级: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//b=5;a=5//表达式值11,c=6,a=11//表达式值10,a=10,b=4,c=6//表达式值5,a=5,b=10,c=2赋值运算符和赋值表达式小结例:
inta;
a=2;a+=a*=3;例:
inta=2;a%=4-1;a+=a*=a-=a*=3;<>//a=12等价于a=a+(a=a*3)等价于a=a+(a=a*(a=a-(a=a*3)))//a=2//a=05、赋值语句赋值语句是由赋值表达式加上一个分号构成例:a=100赋值表达式
a=100;赋值语句if条件中不能含有赋值语句,但是赋值表达式可以包含于条件表达式中,例:if(a=b)t=a;合法
if((a=b)>0)t=a;正确
if((a=b;)>0)t=a;错误1:C语言中的赋值号“=”是一个运算符,在其他大多数语言中赋值号不是运算符。2:其他大多数高级语言没有“赋值表达式”这一概念。问题:c语言中的赋值语句与其他高级语言的赋值语句有什么不同点?
(1)C语言允许在定义变量的同时使变量初始化。如:inta=3;
floatf=3.56;
charc=‘a’;
(2)可以使被定义的变量的一部分赋初值。如:
inta,b,c=5;表示指定a、b、c为整型变量,但只对c初始化,c的初值为5(3)如果对几个变量赋以同一个初值,应写成:inta=3,b=3,c=3;表示a、b、c的初值都是3。
不能写成∶
inta=b=c=3;
注意:初始化不是在编译阶段完成的,而是在程序运行时执行本函数时赋初值的,相当于有一个赋值语句。
例如:inta=3;相当于inta;a=3;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由键盘输入
设
>0解题思路:首先要知道求方程式的根的方法。由数学知识已知:如果
≥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程序都包含输入输出输入输出是程序中最基本的操作之一(一)所谓输入输出是以计算机主机为主体而言的输出:从计算机向外部输出设备(显示器,打印机)输出数据。输入:从输入设备(键盘,鼠标,扫描仪)向计算机输入数据。(二)C语言本身不提供输入输出语句,输入和输出操作是由C函数库中的函数来实现的。例如:字符输入函数:getchar字符输出函数:putchar格式输入函数:scanf
格式输出函数:printf字符串输入函数:gets
字符串输出函数:puts(三)在使用系统库函数时,要用预编译命令“#include”将有关的“头文件”包括到用户源文件中。例如:
在调用标准输入输出库函数时,文件开头应该有:
#include“stdio.h”或#include<stdio.h>
stdio.h是standardinput&output的缩写,它包含了与标准I/O库有关的变量定义和宏定义。
头文件3.4.3用printf函数输出数据在C程序中用来实现输出和输入的,主要是printf函数和scanf函数这两个函数是格式输入输出函数用这两个函数时,必须指定格式3.4.3用printf函数输出数据1.printf函数的一般格式printf(格式控制,输出表列)例如:printf(”i=%d,c=%c\n”,i,c);格式声明功能:按指定格式向终端输出若干个任意类型的数据返值:正常,返回输出字节数;出错,返回EOF(-1)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);可以是常量、变量或表达式2.常用格式字符d格式符。用来输出一个有符号的十进制整数可以在格式声明中指定输出数据的域宽printf(”%5d%5d\n”,12,-345);%d输出int型数据%ld输出long型数据2.常用格式字符c格式符。用来输出一个字符charch=’a’;printf(”%c”,ch);或printf(”%5c”,ch);输出字符:a2.常用格式字符s格式符。用来输出一个字符串printf(”%s”,”CHINA”);输出字符串:CHINA不包含双引号2.常用格式字符f格式符。用来输出实数,以小数形式输出①不指定数据宽度和小数位数,用%f
例3.6用%f输出实数,只能得到6位小数。doublea=1.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 全新事业单位解除聘用合同协议书模板下载3篇
- 2024年度航天器研制发射合同
- 2024年度墙面装修工程安全防护协议
- 2024年度离婚证券资产分割协议:证券投资权益分配合同2篇
- 2024年度终止信息技术公司网络安全服务合同的协议
- 2024年度甲方购买乙方生产的新型环保材料的购销合同包括产品规格、数量、价格、交货期限等详细内容2篇
- 房租补缴合同范本
- 2024年度墙面装修工程款支付合同2篇
- 2024年度电子信息工程合同
- 二零二四年度计算机软件开发与许可使用合同
- 街道火灾事故检讨
- 最新班组安全管理安全生产标准化培训课件
- 《一粒种子成长过程》的课件
- 学好语文贵在三个“多”:多读、多背、多写-浅谈语文学法指导
- 助人为乐-主题班会(课件)
- 桂林电子科技大学高等数学期末测试
- 一年级上册数学教案-8.1 小明的一天(认识整时和半时) ︳北师大版
- 麻醉科护师晋升副主任医师高级职称专题报告病例分析(麻醉诱导后喉痉挛急救与护理)
- 关键装置、重点部位
- 安全文明施工措施费用检查表
- 2022小说精读批注海明威小说《一天的等待》附阅读试题答案解析
评论
0/150
提交评论