版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章C语言基础及顺序结构程序设计【问题2】已知圆的半径为r,用C语言编程计算圆的周长c和面积s。分析:①数学模型:圆周长c=2πr,圆面积s=πr2
②数学上,2是整数,π是实数,二者值固定,是常量;圆半径r可以取任意的正数,圆周长和面积为实数。③在程序中,需要考虑:常量(2和π)如何表示?半径如何输入?如何按公式计算,计算结果如何保存、如何输出等?在C中,不同类型的数据其表示、存储、加工的方法各不相同,输入输出的格式也不相同。
第2章基础知识
2.1
几个基本概念
2.2数值型数据及其输入与输出
2.3字符型数据及其输入与输出
2.4C语言的运算符和表达式
2.5不同类型数据间的混合运算和转换
2.6顺序结构程序设计
第2章基础知识2.1
几个基本概念
2.1.1
C的数据类型
2.1.2常量与变量的概念
2.1.3数据的输入与输出
2.1.4格式输入与输出函数简介
在学习C语言程序设计之前,需要掌握几个基本概念。2.1.1C的数据类型1.数据类型的概念表2-1学生个人信息数据项特征分析数据分类数据项及特征常进行的加工处理方式数值型数据年龄——整数考试成绩——整数或实数学习生活费——整数或实数加、减、乘、除等数学运算字符型数据姓名——一串字符
性别——单个字符家庭住址——一串字符查找、比较等数据的这种特定的表现形式和加工处理方法的属性称为数据的数据类型。第2章基础知识2.1.1C的数据类型2.C的数据类型单精度型float双精度型doubleC数据类型基本类型构造类型指针类型空类型void定义类型typedef字符类型char整型实型枚举类型enum数组结构体struct共用体union短整型short长整型long整型int数据在计算机中所占用的内存字节数被称为数据的“数据长度”。数据类型决定:
1.数据占内存字节数
2.数据取值范围
3.其上可进行的操作2.1.1常量与变量的概念
【问题2】的解答:求圆周长和面积,用C语言编写的程序如下:#definePI3.14159
/*定义符号常量PI代表圆周率*/main(){floatr,c,s;
/*声明r,c,s为实型变量*/
printf("r=");
/*输出提示信息:r=*/
scanf(“r=%f”,&r);
/*从键盘输入半径值给r*/
c=2*PI*r;/*计算圆周长*/
s=PI*r*r;
/*计算圆面积*/
printf("r=%f,c=%.2f,s=%.2f\n",r,c,s);
}2和3.14159是常数,直接写出r、c、s用于存放半径、周长和圆面积,这些称为“变量”PI称为“符号常量”例:符号常量举例(ch2_1.c)#definePRICE30main(){intnum,total;num=10;total=num*PRICE;
printf(“total=%d“,total);}整型常量如:123实型常量如:1.23字符常量如:’A’字符串常量如:”abcd”1.常量>>>>(1)定义:程序运行时其值不能改变的量,即常数。(2)分类:定义格式:#define
符号常量常量如:#definePRICE30(3)符号常量:用标识符代表的常量。运行结果:total=3002.变量
(1)变量及其作用:在程序的执行过程中,其值可以发生变化的量,称为变量。通常,变量用于保存程序执行过程中输入的数据、计算的中间结果以及最终结果。变量的名字称为变量名。变量名代表了内存中指定的存储单元,在这些存储单元中,存放的是变量的值。程序通过变量名访问变量的存储单元,从而得到变量的值。变量、存储单元与变量的值之间的关系如图2-2所示:图2-212变量名a变量的值存储单元(2)变量名及变量的值:标识符的命名规则如下:①以字母或下划线开头。②在第一个符号的后面,可以跟字母、数字或下划线。③区分字母的大、小写。④长度一般不超过8个字符。⑤C语言的保留字不能作为标识符使用。给变量命名时,尽量做到“见名知义”,建议用小写字母表示。例如:sum、name、age等。(3)变量的命名规则:应遵循标识符的命名规则【例2-1】试判断下面所给出的字符序列,哪些是合法的C语言变量名。
x_01A1B_1C.1int_1aa1
ab?a-5b_1a2.ca1.txt1.doc1a__a1
解:上述字符序列里,合法的变量名是:
x_01A1B_1_1aa1b_1_a1变量的数据类型可以是C中的任何一种数据类型。基本类型:整型、实型、字符型。没有字符串变量。整型数据带符号整数整型int4B短整型short2B长整型longint4B无符号整数无符号整型unsignedint4B无符号短整型unsignedshort2B无符号长整型unsignedlong4B实型数据单精度float4B双精度double8B长双精度longdouble10B字符类数据字符型char1B(4)变量的类型(5)变量的定义变量定义的一般格式:
数据类型变量名1,变量名2,…,变量名n;决定了变量占用的内存字节数必须是合法的标识符各变量之间用逗号隔开,最后是分号例:
inta,b,c;floatdata;
(6)变量的初始化定义变量时给变量赋初值,可给部分变量赋初值,也可给所有变量赋初值。
例:
inta=2,b,c=4;floatdata=3.67;charch=‘A’;
intx=1,y=1;
intx=y=1;例如,设有:int
a=1,b=-3,c;编译程序时,其变量内存分配情况示意如下:在C程序中,变量必须先定义,后使用。ab1-3地址…...地址c4字节…...内存b地址a1001031101131201234字节4字节不确定输入输出通过调用系统库函数scanf()、printf()实现。提供了丰富的库函数,每个函数实现特定的功能,可直接调用。C系统对库函数进行了分类存放,同一类函数放在一个文件中,此类文件称为“头文件”。在编程时,用户需要哪个函数,必须用包含命令将包含该函数的头文件包含在用户源程序的开头。包含头文件的命令格式为:
#include<头文件名>
或#include″头文件名″2.1.3数据的输入与输出
1.数据输入输出的概念输入外部数据计算机内(主机)键盘、鼠标、磁盘等外部设备主机中的数据输出2.C语言中数据输入输出实现的方法2.1.4格式输入与输出函数简介1.格式输出函数——printf()(1)函数的作用:按指定格式向显示器输出数据(2)调用的一般格式:
printf("格式控制字符串",输出项表列);
例如:printf("%d,%d\n",a,b);printf("sum=%d\n",a+b);printf("a=%d,b=%3d,s=%5.2f\n",a,b,(a+b)/2.0);
(3)函数的执行过程:
①先按照自右向左的顺序依次计算输出项表列;②再按照格式控制字符串中指定的格式自左向右依次输出各输出项的值。要输出的数据项,当为多个时用逗号隔开(4)使用说明:指定各输出项的输出格式,由格式字符串和非格式字符串组成格式字符串:以%开头的字符串。说明输出项的类型、长度等。非格式字符串:需要原样输出的字符。用于提示、间隔数据。
注意:格式字符与输出项的类型、个数要匹配,一一对应。2.格式输入函数——scanf()(1)函数的作用:按指定的格式从键盘输入数据到变量中。(2)调用的一般格式:
scanf("格式控制字符串",变量地址表列
);例如:
scanf("%d,%d",&a,&b);
scanf("a=%d,b=%d",&a,&b);
scanf("%d%d%f",&a,&b,&s);
(3)函数的功能:按照“格式控制字符串”中指定的格式从键盘读取输入的数据,顺序存入“变量地址表列”中对应的各变量中。scanf()函数和printf()函数中的“格式控制字符串”意义基本相同。
3.格式输入函数与输出函数的常用格式printf()和scanf()函数的常用格式及简单应用,见表2-3所示。格式字符说明举例输出整型数带符号%d十进制
inta=567;printf("%d",a);567无符号%u十进制
inta=567;printf("%u",a);567%o八进制
inta=65;printf("%o",a);101%x,%X十六进制
inta=255;printf("%x",a);ff长整型%ld、%lu、%lo、%lx
inta=567321;printf("%ld",a);567321字符单个字符%c单个字符
chara=65;printf("%c",a);A字符串%s字符串
printf("%s","ABC");ABC实型数单、双精度%f,%lf十进制小数形式
floata=567.789;printf("%f",a);567.789000单精度%e,%E十进制指数形式
floata=567.789;printf("%e",a);5.677890e+02%ge和f中较短一种
floata=567.789;printf("%g",a);567.789%%%本身
printf("%%");%2.2数值型数据及其输入与输出【案例2-2】编程求解一个简单问题:10+20的和。整型数据包括短整型、整型和长整型三种。在程序中常以整型常量和整型变量的形式出现。2.2.1
整型数据的表示及其输入与输出程序如下:main(){ints;/*定义s为整型变量*/s=10+024;/*计算两个整数的和并赋给变量s*/
printf("10+20=%d\n",s);/*输出和*/}运行结果:10+20=30s为整型变量10、024为整型常量1.整型常量及其表示方法值为整数的常量称为“整型常量”。包括正整数、零和负整数。分为基本整型和长整型。(2)长整型常量及其表示方法数值范围超出了整数的范围,或在整数的后面加后缀字母“l”或“L”的整数,称为长整型常量。有十进制、八进制、十六进制三种表示方法。例:12为基本整型
12L为长整型
(1)基本整型常量及其表示:有三种方法十进制整数:十进制整数。如:12,-15,0八进制整数:以0开头的八进制整数。只能用数字0~7。如:014十六进制整数:以0x开头的十六进制整数。只能用数字0~9,
字母a~z或A~Z。如:0xc,0Xf课堂练习:012=()100x12=()1020=()1610170x14(3)说明:不同版本的C编译系统,整型数据的长度、数值范围不一样。2.整型变量及其定义方法
(1)整型变量的类型:
分为带符号整型和无符号整型两大类。见表2-5所示。无符号整型
带符号整型数据类型数据类型标识符字节数数据类型数据类型标识符字节数无符号短整型无符号整型无符号长整型unsignedshortunsignedintunsignedlong244带符号短整型带符号整型带符号长整型shortintlong244注:若不指定一个数为无符号数,则默指带符号数。
表2-5整型变量的类型及字节数3.整型数据在内存中的存放形式
(1)无符号整数的存放:存储字节的全部二进制位用于存放数据。(2)带符号整数的存放:存储字节的最高位用作符号位,0—正数,1—负数,其余二进制位作为数值位—存放数的大小(用补码)。
短整型数据在内存中占2个字节,最高位用作符号位后,所表示的数值范围(用十进制数表示)为:-32768~+32767;长整型数据在内存中占4个字节,表示的数值范围(用十进制数表示)为:-231~+231-1。例如,设有以下语句:(以Turboc为例)
unsignedshorta=9;shortb=9;
intc=-9;则变量a、b、c在内存中存放的数据形式如下所示。(注:加下划线的位为符号位):无符号短整型变量a:900000000000010012字节带符号短整型变量b:+900000000000010012字节整型变量c:-9111111111111111111111111111101114字节(3)整型数据输出的附加格式字符
%md——按m位(或列)输出整数。按右对齐输出整数。
%-md——按m位(或列)输出整数。按左对齐输出整数。(2)无符号整型数据的输出
%u——以十进制无符号形式输出整数
%o——以八进制无符号形式输出整数
%x或%X——以十六进制无符号形式输出整数。
%x格式—用小写字母a~f;%X格式—用大写字母A~F%lu、%lo、%lx——分别以十、八、十六进制无符号形式输出长整型4.整型数据的输出
(1)带符号整型数据的输出
%d——以十进制形式输出带符号整数
%ld——以十进制形式输出带符号长整数说明:①若指定的m位>数据的实际位数,按m位输出,并按照左/右对齐方式,多余位留出空格。②若指定的m位<数据的实际位数,按数据的实际位数输出。【例2-4】阅读下面程序,请写出运行结果。程序如下:
#include<stdio.h>main(){inta=-1,b=011,s;s=a+b;
printf("%d+%d=%d\n",a,b,s);}运行结果:-1+9=8【例2-5】阅读下面程序,写出运行结果。程序如下:
#include<stdio.h>main(){inta=123,b=-123;
printf("%d,%2d@@“,a,b);
printf("%5d,%-5d,%d",a,b,a);} 【例2-6】请将20、-1分别按带符号数,无符号数的十、八、十六进制输出;程序如下:
#include<stdio.h>main(){inta=20,b=-1;
printf("20:%d,%u,%o,%x\n",a,a,a,a);
printf("-1:%d,%u,%o,%X\n",b,b,b,b);}运行结果(vc++6.0):20:20,20,24,14-1:-1,4294967295,37777777777,FFFFFFFF运行结果:123,-123@@123,-123,123【思考】若将a、b的初值改为:-0x1、11,程序的运行结果会是什么?运行结果:-1+11=105.整型数据的输入(1)带符号整数的输入:
%d——以十进制带符号形式输入整数(2)无符号整型数据的输入:
%u——以十进制无符号形式输入整数
%o——以八进制无符号形式输入整数
%x或%X——以十六进制无符号形式输入整数(3)整数常用输入格式及方法:以给整型变量a、b分别输入11、23为例:①scanf(“%d,%d”,&a,&b);正确的输入为:11,23↙②scanf("%d%d",&a,&b);正确的输入为:1123↙③scanf("a=%d,b=%d",&a,&b);正确的输入为:a=11,b=23↙④scanf("%d%d",&a,&b);正确的输入为:1123↙
或11Tab键23↙或11↙23↙
⑤scanf(“%2d%2d”,&a,&b);正确的输入为:1123或112345↙⑥scanf("%o,%x",&a,&b);正确的输入为:13,17↙说明:从键盘以%o、%x格式输入整数时,整数前不需要加前缀0或0x,即直接输入八进制或十六进制数据。【例2-7】请编程实现:从键盘以十进制输入任意两个整数,按加法表达式输出这两个整数及其和。例如:1+2=3。程序如下:
#include<stdio.h>main(){inta,b;
scanf("%d,%d“,&a,&b);
printf("%d+%d=%d\n",a,b,a+b);}运行程序,输入:1,2↙输出:1+2=3【思考】①若想计算12+34,请问如何正确输入数据?②若将语句scanf("%d,%d",&a,&b);
改为:scanf("%d%d",&a,&b);
数据如何正确输入?③若要按八进制或十六进制输入数据,语句如何修改、数据如何输入?2.2.2实型数据的表示及其输入与输出1.实型常量及其表示方法(1)十进制的一般形式:由+/-号、整数部分、小数点和小数部分组成,而且必须有小数点。(2)十进制的指数形式:用科学计数法表示实型常量。例如:12.245-123.45
0.618
.123
123.例如:数学上123.456可以表示成:1.23456×1022.实型变量(1)实型变量的分类:按存放数据的有效位分为三类
单精度(float)——4字节双精度(double)——8字节长双精度(longdouble)——10字节(2)实型变量的定义及初始化方法:举例如下:
floatx,y=12.34,s=0.0;doublef1=456.789,f2=1.23456e+7;在C程序中表示成:1.23456E+2
或1.23456E2例如:数学上-123.456可以表示成:-1.23456×102在C程序中表示成:-1.23456E+2
或-1.23456E2数学上:±尾数×10±2(+可省略)在C程序中:±尾数E±指数(+可省略,不能有空格,指数应为整数)【例2-9】设有下列数据需要存放,请按照需要定义变量并且完成初始化工作。
12,-23,45000,34.56,0.0 定义及初始化如下:
inta=12,b=-23;longc=45000;floatx=34.56,y=0.0;3.实型数据的输入与输出(1)实型数据的输入格式字符
%f——以十进制小数/指数形式输入实数给float类型变量
%lf——以十进制小数/指数形式输入实数给double类型变量
%e、%E、%g、%G——作用同%f(2)实型数据的输出格式字符
%f
或%lf——以十进制小数形式输出实数(单精度和双精度)
%e、%E——以十进制指数形式输出实数
%g、%G——自动选用%f
或%e
格式中输出宽度较短的一种(3)实型数据输出的附加格式字符
%m.nf——以十进制小数形式输出实数,数据的总宽度为m位,小数位为n位。若数据的实际位数大于m位时,整数部分按实际位数输出,小数位数仍按n位输出。说明:①若用%E、%G格式,输出时指数用大写字母E,否则用小写字母e表示。②实型数据在输入时,没有%m.nf格式。【例2-8】请编程实现:从键盘输入任意两个实数求其和。程序如下:
#include<stdio.h>main(){floata,b;
scanf("%f,%f",&a,&b);
printf("%f+%f=%f\n",a,b,a+b);}运行程序,输入:1.1,2.2↙输出:1.1+2.2=3.3000004.实型数据在内存中的存放形式及输出有效位实型数据在计算机中用二进制来表示,系统是将其转换成指数形式来存放的,指数部分和小数部分被分别存储。①单精度实型数据在内存中占4个字节,按指数形式存放,有效位7位,小数位保留6位(十进制数位)。②单精度实型数据若整数部分的位数>7位,保留前7位不变,第8位由其后数值四舍五入得来,第9位以后数字无意义(不确定的数字)。③单精度实型数据若整数部分的位数<7位,则整数位加上小数位共7位有效,第8位数仍由其后数值四舍五入得来。④单精度实数若数字<1为纯小数,此时保留6位小数,第6位小数由其后数值四舍五入得来。⑤双精度实型数据在内存中一般占8个字节,按指数形式存放,最多16
位有效位,6位小数。②例如:1234567890.0按单精度类型存储,则为:1234567936.000000(注:“36”两位不确定)。③例如:123.456708999按单精度类型存储,则为:123.456711【例2-10】阅读下面程序,写出运行结果。程序如下:
main(){floatx1=11.23,x2=1122.23456789,s;s=x1+x2;
printf("x1=%f,x2=%f,s=%e\n",x1,x2,s);}④例如:0.123456789按单精度类型存储,则为:0.123457运行结果:x1=11.230000,x2=1122.234619,s=1.133465e+0032.3字符型数据及其输入与输出
2.3.1字符型数据的表示及其输入与输出①只能是单个字符,只可以用单引号括起来。②可以是字符集中的任意字符。但数字被定义为字符常量之后,就不再表示原值。③在内存中占据一个字节的存储空间,在这个字节中,存放的是该字符的ASCII码值,而不是该字符本身。④大写字母和小字母是不同的字符常量。注意:''和''不同,''是空字符,''是空格字符......53...65...97...‘a’‘5’‘A’例如,5和‘5’不同。‘a’和‘A’不同。51.字符常量52.转义字符
对一些不可显示的字符,比如换行符、回车符、退格符等,还有一些有特殊意义的字符如单引号、双引号等,需要用转义字符来表示。转义字符ASCII码值含义\n10回车换行\t9横向跳到下一制表位置\v11竖向跳格\b8退格\r13回车\a7鸣铃\f12走纸换页\\92反斜线符"\"\'39单引号符\"34双引号符\ddd1~3位八进制数所代表的字符\xhh1~2位十六进制数所代表的字符强调:转义字符不论形式上有几个字符,其本质上是一个字符。所以,用单引号前后括住,也就形成了一个字符常量。3.字符变量及其定义方法
(1)字符变量:用于存放字符常量的变量称为字符变量。(2)字符变量类型声明符:char(3)一个字符变量在内存中占1字节,存放的是该字符的ASCII值。例如:
charc1='A',c2='4';...............‘A’65C1C2‘4’524.用scanf()和printf()函数输入输出字符型数据
常用格式符:
%c——输入或输出单个字符
%d——按十进制格式输出字符的ASCII码值【例2-12】将整数100和字符常量9按照十进制和字符两种格式输出。程序如下:
#include<stdio.h>main(){printf("l00:%d,%c\n",100,100);
printf("\'9\':%d,%c\n",'9','9');}运行结果:l00:100,d'9':57,95.字符型数据与整型数据之间的关系(1)一个字符型数据既可按字符格式输出,也可按整型格式输出。(2)允许对字符型数据进行算术运算,实际是按其ASCII码值进行算术运算。说明:大小写字母转换的一般方法为:大写字母+32转换为相对应的小写字母小写字母–32转换为相对应的大写字母【例2-11】把字符'A'、'a'和'A'+32的值按整型格式输出。程序如下:
main(){printf("'A'=%d,'a'=%d,'A'+32=%d\n",'A','a','A'+32);}【例2-12】从键盘输入一个任意的小写字符,输出该字符对应的大小写字符及ASCII码值。程序如下:
main(){charc1;
scanf("%c",&c1);
printf("%c,%c\n",c1,c1+32);
printf("%d,%d\n",c1,c1+32);}运行程序,输入:d↙运行结果:d,D100,68运行结果:'A'=65,'a'=97,'A'+32=976.字符输入与输出函数(1)putchar()
函数功能:输出一个字符到显示器的当前光标位置。调用格式:
putchar(c);
c可以是字符型或整型的常量、变量或表达式。(2)getchar()
函数功能:从标准输入设备(一般指键盘)输入一个字符。调用格式:
getchar();
该函数是无参函数。常用:c=getchar();
/*c为字符变量*/(3)说明:①使用putchar()和getchar()函数,应在源程序的开头加上文件包含命令:
#include<stdio.h>②getchar()函数只能接受一个字符(包括控制字符),得到的字符可以赋给一个字符型变量或整型变量,也可作为表达式的一部分。【例2-14】输入一个字符,然后输出该字符及其ASCII码值。程序如下:
#include<stdio.h>main(){charc;c=getchar();
putchar(c);putchar('\n');
printf("%c,%d\n",c,c);}运行程序,输入:A↙输出:AA,652.3.2字符串常量1.字符串常量(1)定义:用一对双引号括起来的一个字符序列,可以是0个或多个字符。(2)字符串常量的长度:字符串常量中所包含的有效字符个数。转义字符应当作一个字符来计算。(3)存放形式:在内存中占用一片连续的单元,按顺序依次存放,一个字符占一个字节,存放该字符的ASCⅡ值,最后放一个字符串结束标记‘\0’。‘\0’是一个ASCII码值为0的空操作符。字符串常量在内存中占用的字节数是:
字符串长度+1或有效字符个数+1
2.字符串的输入与输出使用printf()函数输出一串字符的方法:(1)使用非格式字符输出一串字符。(2)使用格式控制字符:%s——输出一串字符。【例2-15】分别用上述两种方法输出字符串。程序如下:#include<stdio.h>main(){printf("ABCDEF\n");
printf("%s\n","abcdef");
printf("%s=%d\n","12+34",12+34);}运行结果:ABCDEFabcdef12+34=46例如,"\\A\102"代表的字符串是"\AB",故它的长度为3。例如:"ABCD","China"、"1+2"等。在字符串常量中,可以使用转义字符。例如:“ABC0123”在内存中的存放如右图所示。...A65B66C67048149250351\00...2.4C语言的运算符和表达式我们将学到:(1)运算符(2)运算对象(3)运算规则(4)表达式及表达式的值(5)优先级(6)结合性
注意以下几点:①运算符的功能;②运算量的个数;③运算对象的类型;④运算符的优先级、结合性⑤运算结果的类型;2.4.1算术运算符和算术表达式1.基本算术运算符
(1)基本算术运算符:对象数目名称运算符运算规则运算对象类型运算结果类型结合性单目正+取正值整型或实型整型或实型自右向左负-取负值双目加+加法自左向右减-减法乘*乘法除/除法模%整除取余整型整型1)单目运算符(+/-):出现在运算对象的前面,称前缀运算符,运算规则同一般的正、负号。2)双目运算符中的+、-、*运算同数学上的加法、减法、乘法。3)双目除运算(/):运算结果与运算对象的数据类型有关。
①
整型数据/整型数据,做整除运算,结果取商的整数部分。②整型数据/实型数据
或
实型数据/整型数据
或
实型数据/实型数据做一般的除法,结果为实型。(2)基本算术运算说明例如:+5的运算结果是正整数5--5的运算结果也是正整数54)双目模运算(%):求两个整数相除之后的余数。
要求两个运算对象必须是整型,结果是整除后的余数,符号与被除数相同。5)优先级:
单目正、负号(+/-)高于双目运算符(*、/、%)高于
+、-6)结合性:
同级单目:自右向左;同级双目:自左向右。例如:14/3结果为414/(-3)结果为-414/3.0结果为4.666667例如:1+4%3-2*3+5/2结果为:-21+1-6+2例如:14%3结果为214%(-3)结果为2-14/3结果为-214%3.0错2.自增、自减运算符
前缀++i
:先使i值增1,后使用增1后的i值
--
i
:先使i值减1,后使用减1后的i值后缀i++
:先使用i的值,后使i值增1。
i--
:先使用i的值,后使i值减1。表达式运算前的值运算后的值运算后表达式的值abab++a344--a322b++787b--767a+(++b)373811(a++)-(--b)3746-3【例2-17】计算过程及结果自增、自减运算符是单目运算符优先级高于双目(+、-、*、/、%)结合性:自右向左
只能对变量,不能对常量和表达式。7++、(a+b)++【例2-17】设有:inta=3,b=7;下面表达式运算之后,表达式和变量的值各为多少?表达式:++a、--a、b++、b--、a+(++b)、(a++)-(--b)2.4.2赋值运算符和赋值表达式1.赋值运算符2.赋值表达式
“=”即赋值运算符,是一个双目运算符,进行的是赋值操作,而不是数学上的“等号”。 3.优先级和结合性
优先级较低,低于算术运算符、关系运算符和逻辑运算符。
结合性是自右向左变量=表达式3
左边只能是变量,右边可以是任意合法的C表达式。功能:先计算右边表达式的值,再把计算的结果赋给左边的变量。4.赋值表达式的值
赋值表达式的值取左边变量的值5.赋值语句变量=表达式3
;
例如:a=5s=a+ba=a+1s=s+x
a+b=2+510=2+x例如:a=5;s=a+b;a=a+1;s=a=5;
a=2+y=5a=2+(y=5)5.算术自反赋值运算符(复合运算符)运算符:+=、-=、*=、/=、%=【例2-22】设有:intx=8,y=8,z=8;执行了x-=y–z+3;语句后,变量x,y,z的值各是多少?运算规则,举例如下:
a+=b+c
等价于a=a+(b+c)
a-=b+c
等价于a=a-(b+c)
a*=b+c
等价于a=a*(b+c)
a/=b+c
等价于a=a/(b+c)
a%=b+c
等价于a=a%(b+c)注意:自反赋值运算符之间不能有空格。解:语句等同于:
x=x-(y-z+3);故3个变量的值为:
x=5,y=8,z=8。(1)逗号表达式:用逗号运算符把多个表达式“连接”起来,构成的一个完整表达式。(2)逗号表达式的一般形式为:【例2-25】执行下面程序后,输出结果是什么?main(){intx=10,y;y=(x+4,x+10);
printf("x=%d,y=%d\n",x,y);}2.4.3逗号运算符和逗号表达式【思考】若把y=(x+4,x+10);变成:y=x+4,x+10;程序的输出结果又是什么?表达式1,表达式2,表达式3,…,表达式n(3)逗号表达式的值:例如:a=5,b=2,s=0(逗号表达式)
a=(5,b=2,s=0)(赋值表达式)(4)逗号表达式的值:优先级最低,结合性为自左向右。注意:赋值表达式和逗号表达式的不同。逗号表达式的值取最后边表达式的值分析:
y=(x+4,x+10)的右边是一个逗号表达式,所以输出结果是:x=10,y=202.4.4常用数学函数和表达式1.常用数学及其它函数数学形式C语言形式函数原型函数功能头文件|x|abs(x)intabs(intx)求整数x的绝对值math.hfabs(x)doublefabs(doublex)求x的绝对值sqrt(x)doublesqrt(doublex)的值,x的值≥0exexp(x)doubleexp(doublex)求ex的值lnxlog(x)doublelog(doublex)求lnx的值sinxsin(x)doublesin(doublex)计算sinx的值(弧度)cosxcos(x)doublecos(doublex)计算cosx的值(弧度)timetime()time_ttime(NULL)取系统的当前时间time.h随机数rand()intrand(void)产生0~32767间的随机整数stdlib.h随机数种子数randomize()voidrandomize()产生一个随机数的种子数,可使rand()函数在每次运行程序时产生的随机数不同初始化随机数发生器srand()voidsrand(unsignedint)注:①在TurboC中,可以使用randomize()函数、srand()函数作随机数初始化发生器。②在VisualC++6.0中,使用srand()函数作随机数初始化发生器。③有关其它函数参见附录4。在使用这些函数时,要注意以下几点:函数的功能;函数的类型;函数形参的类型;函数形参的单位;函数的头文件。【例2-28】产生一个0~100之间的随机整数,输出这个数及它的平方根(保留小数2位)。程序如下:
#include<stdio.h>
#include<math.h>/*sqrt()函数的头文件*/#include<stdlib.h>/*rand()、srand()函数的头文件*/#include<time.h>/*time()函数的头文件*/main(){intx;floatx_sqrt;
srand((unsigned)time(NULL));x=rand()%100;
x_sqrt=sqrt(x);
printf("x=%d,x_sqrt=%.2f\n",x,x_sqrt);}运行结果:(仅供参考,因是随机数,每次的运行结果不一样)x=41,x_sqrt=6.402.将数学式子转化为C的合法表达式转换的原则大致如下:(1)当分子或分母是表达式时,要加圆括号;(2)函数转换时,自变量一定要加圆括号;(3)左右括号要对称,当有多重括号时,只能使用圆括号嵌套配对;(4)三角函数的自变量要变换为弧度;(5)适当转换数据类型,以免产生误差。【例2-30】将下列数学式子转化为C语言合法表达式。(1)
(2)
解:C语言合法表达式如下:(1)(x+y)/(4*(a+b))+(x+y)*sin(30*3.14159/180)(2)x1=(-b+sqrt(b*b-4*a*c))/(2*a)2.5不同类型数据间的混合运算和转换2.5.1表达式计算中的数据类型转换
C语言允许不同类型的数据混合运算,每个运算符两边的运算量必须是同一型。所以在表达式混合运算时存在着两种转换:隐式转换、显式转换。1.隐式转换当表达式中的运算存在混合运算时,系统会自动转换,这种转换被称为隐式转换。隐式转换的规则如下:(1)若参与运算的对象类型不同时,则先转换成同一类型。(2)转换时按数据长度长的类型进行转换,以保证精度不降低。(3)float型参与运算时,必须先转换成double型。(4)char型和short型参与运算时,必须先转换成int型,结果为int型。
double float 高
longunsigned
int char、short 低
2.强制类型转换
将一个表达式的值强制转换成指定类型,这种转换被称为显式转换。强制类型转换的一般形式为:
功能:把表达式的运算结果强制转换成类型说明符所表示的类型。例如:
(float)a——把a的值强制转换为实型
(int)(x+y)——把x+y的结果强制转换为整型,转换时不进行四舍五入
(int)x+y——把x的值强制转换为整型,然后加y的值有关强制转换运算的说明:①类型说明符和表达式都必须加括号,若表达式为一个常量或变量时可以不加括号。②把实型强制转换为整型时,不进行四舍五入。③无论是强制转换或是自动转换,都只是为了本次运算的需要而对数据进行的临时性转换,它产生一个临时的中间值去参与运算,而不改变原数据及其类型。例如:设有变量声明语句:floatx=3.78;则表达式:2+(int)x运算之后,表达式的值是5(为整型),变量x的值和类型不变,仍是3.78和float型。如(int)(x+y)与(int)x+y是完全不同的两种结果。【例2-32】强制类型转换的应用。
main(){floatf1=5.75,f2;f2=(int)f1;
printf("f1=%f,f2=%f,(int)f1=%d\n",f1,f2,(int)f1);}运行结果:f1=5.750000,f2=5.000000,(int)f1=5
(类型说明符)表达式2.5.2赋值运算中的数据类型转换
在进行赋值运算时,若“=”两边的数据类型不一致,系统会自动把“=”右边表达式的数据类型转换成左边变量的类型,然后赋给左边的变量。例如:
intx;
x=7.8;【例2-33】计算圆面积,把圆面积分别按整型、实型格式存储并输出。
#include<stdio.h>#definePI3.14159main(){intr=10,s1;floats2;
s1=r*r*PI;
s2=r*r*PI;
printf("s1=%d,s2=%f\n",s1,s2);}运行结果:s1=314,s2=314.15900x为int类型故将7.8转换为7(只取整,不四舍五入)然后赋给x,x的值为7将(r*r*PI)的结果(实型)int
类型赋值给S1变量(s1为int类型)S2变量为实型2.6顺序结构程序设计2.6.1结构化程序设计的三种基本结构
结构化程序设计,使程序具有良好的可读性、可靠性、可维护性以及良好的结构。结构化程序由顺序、选择、循环三种基本控制结构构造。1.顺序结构
顺序结构表示程序中的各操作是按照它们出现的先后顺序执行,程序从入口处开始,按顺序执行所有操作,直到出口处,所以称为顺序结构。2.选择结构
选择结构表示程序的处理步骤出现了分支,它需要根据某一特定的条件选择其中的一个分支执行,有单分支、双分支和多分支三种形式3.循环结构
循环结构表示在某一条件下反复执行一段程序的操作。循环结构有当型和直到型两种形式,根据条件的判定顺序每种又分前测型和后测型。成立不成立图2-5
选择结构条件P块A块B块A块B图2-4顺序结构条件P块A不成立成立
图2-
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中南林业科技大学《当代西方政治制度》2022-2023学年第一学期期末试卷
- 中南大学《熔融盐及其应用》2023-2024学年第一学期期末试卷
- 人教部编八年级语文上册《回忆我的母亲》示范公开教学课件
- 中南大学《地电场与电法勘探》2022-2023学年第一学期期末试卷
- 中南大学《包装设计》2021-2022学年第一学期期末试卷
- 安全部门各类培训
- 大学外语(四)学习通超星期末考试答案章节答案2024年
- 大学英语(四)(强化班)学习通超星期末考试答案章节答案2024年
- 叙事性讲述活动教案
- 中国劳动关系学院《媒介经营与管理》2023-2024学年第一学期期末试卷
- 一个冬天的童话 遇罗锦
- YY 0569-2005生物安全柜
- juniper防火墙培训(SRX系列)
- GB/T 13610-2020天然气的组成分析气相色谱法
- 心肌梗死后综合征
- 《彩虹》教案 省赛一等奖
- FLUENT6.3使用说明及例题
- 街道火灾事故检讨
- 最新班组安全管理安全生产标准化培训课件
- 《一粒种子成长过程》的课件
- 学好语文贵在三个“多”:多读、多背、多写-浅谈语文学法指导
评论
0/150
提交评论