c语言谭浩强第五版复习梳理4

第三章

3.3运算符和表达式

3.3.2 基本的算术运算符

运算符含义举例结果
+正号运算符(单目运算符)+aa的值
-负号运算符(单目运算符)-aa的算术负值
*乘法运算符a*ba和b的乘积
/除法运算符a/ba除以b的商
%求余运算符a%ba除以b的商
+加法运算符a+ba和b的和
-减法运算符a-ba和b的差

两个实数相除的结果是双精度实数,两个整数相除的结果为整数,如5/3的结果为整数,
如5/3的结果值为1,舍去小数部分。但如果除数或被除数中有一个是负值,则舍入的方向为不固定的。多数C编译系统,采取“向零取整”的方法,即5/3=1,-5/3=-1,取整后向零靠拢。

%运算符要求参加运算的运算对象(即操作数)为整数,结果也是整数。
除%以外的运算符的操作数都可以是任何算术类型。

3.3.3 自增(++)、自减(–)运算符

++i,–i(在使用i之前,先使i的值加(减)1)
i++,i–(在使用i之后,使i的值加(减)1)
建议使用自增自减符时,只使用最简单的形式,使程序易懂。

3.3.4 算术表达式和运算符的优先级和结合性

用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子成为C算术表达式。运算对象包括常量、变量、函数等。
例:a*b/c-1.5+‘a’
算术运算符的结合方向都是“自左至右”,即先左后右。

3.3.5 不同类型数据间的混合运算

如果一个运算符两侧的数据类型不同,则先自动进行类型转换,使二者成为同一种类型,然后进行运算。
整型、实型字符型数据间可以进行混合运算,
(1)+、-、*、/运算中如果有float和double,结果为double型,原因为系统将所有float型数据都先转换为double。
(2)如果int型和float或double型进行运算,先把int和float转换为double型。
(3)字符(char)型数据与整型数据进行运算,就是把字符的ASCII代码于整型数据进行运算。
例3.3 给定一个大写字母, 要求用小写字母输出

#include<stdio.h>
int main()
{
	char c1,c2;
	c1='A';
	c2=c1+32;
	printf("%c\n",c2);
	printf("%d\n",c2);
	return 0;
}

运行结果:

a
97

--------------------------------
Process exited after 0.02171 seconds with return value 0
请按任意键继续. . .

3.3.6 强制类型转换运算符

(类型名)(表达式)
如果只写成(int)x+y,则只将x转换成整型,然后与y相加。
在强制转换类型转换时,得到一个所需类型的中间数据,而原来变量不发生变化
例如a=(int)x
如果已定义x为float,a为int,则a得到x的整数部分,x的类型和值都不变化,这个临时值在赋值后就不再存在。

3.4 C语句

一个函数包含声明部分和执行部分,执行部分是由语句组成的,语句的作用是向局算计系统发出操作指令,要求执行相应的操作。
声明部分不是语句,它不产生机器指令,只是对有关数据的声明。
C语句分为5类
(1)控制语句
1.if else 条件语句
2.for 循环语句
3. while 循环语句
4. do while 循环语句
5. continue 结束本次循环语句
6. break 中止执行switch或循环语句
7. switch 多分支选择语句
8. return 从函数返回语句
9. goto 转向语句,结构化程序中基本不用
(2)函数调用语句
一个函数调用加分号
(3)表达式语句
一个表达式加一个分号
例如
a=3是赋值表达式,a=3;是赋值语句
一个表达式最后加一个分号就成一个语句。
(4)空语句
可以用来作为流程的转向点(流程从程序其他地方转到此语句处),也可以用来作为循环语句中的循环体(循环体是空语句,表示循环体什么也不做)。
(5)复合语句
可以用{}把一些语句和声明括起来成为复核语句(又称为语句块)。

3.4.2 最基本的语句-----赋值语句

例3.4 p58
程序如下

#include<stdio.h>
#include<math.h>
int main()
{
	double a,b,c,s,area;
	scanf("%lf,%lf,%lf",&a,&b,&c);
	s=(a+b+c)/2;
	area=sqrt(s*(s-a)*(s-b)*(s-c));
	printf("三角形边是%lf,%lf,%lf的面积是%lf",a,b,c,area);
	return 0; 
 } 

运行结果:

4,4,5
三角形边是4.000000,4.000000,5.000000的面积是7.806247
--------------------------------
Process exited after 4.082 seconds with return value 0
请按任意键继续. . .

1.赋值运算符

=就是赋值运算符,它的作用是把一个数据赋值给一个变量。

2.复合的赋值运算符

例如 a+=3 等价于a=a+3
x*=y+8 等价于 x=x*(y+8)
C语言采用这种复合运算符,一是为了简化程序,是程序精炼,二是为了提高编译效率,能产生质量较高的目标代码。

3.赋值表达式

变量 赋值运算符 表达式
赋值表达式的作用就是讲一个表达式的值赋值给一个变量

左侧是一个可修改值“左值“,并不是任何形式的数据都可以作为左值的,左值应当为存储空间,并可以被赋值。
能出现在赋值运算符右侧的表达式称为“右值”。
左值也可以出现在赋值运算符右侧,凡是左值都可以作为右值。

4.赋值过程中的类型转换

(1)浮点型数据赋值给整形数据时,先对浮点数取整,舍弃小数部分。
(2)整形数据赋值给单、双精度变量,数值不变,以浮点数形式存储到变量中。
(3)double数赋值给float型时,先将双精度转换成单精度,即保留6~7位有效数字。双精度数值大小不能超过单精度变量的数值范围。
float数赋值给double时,数值不变,在内存中以8个字节存储,有效位数扩展为15位。
(4)字符型数赋值给整型时,为ASCII码形式。
(5)讲一个占字节多的整形数据赋给一个占字节少的整型变量或字符变量时,只把低字节原封不动地赋值给变量(截断)。可能发生失真。
只要知道整形数据之间的赋值,按存储单元中的存储形式直接传送。

5.赋值表达式和赋值语句

一个表达式中可以包含一个或多个赋值表达式,但是不能包括赋值语句(带分号的是赋值语句)

6.变量赋初值

一般变量初始化不是在编译阶段完成的(只有在静态存储变量和外部变量的初始化是在编译阶段完成的),而是在程勋运行时执行本函数时赋予初值的,相当于执行一个赋值语句。

3.5 数据的输入输出

3.5.1

例3.5 p64
代码如下

#include<stdio.h>
#include<math.h>
int main()
{
	double a,b,c,disc,x1,x2,d;
    scanf("%lf%lf%lf",&a,&b,&c);
	printf("方程为%lfx^2+%lfx+%lf=0\n",a,b,c);
	disc=pow(b,2)-4*a*c;
	d=sqrt(disc);
	printf("b^2-4ac的值为%lf\n",disc);
	if(disc<0)
	{printf("函数无解");
	return 0;
	}
	if(disc=0)
	{printf("函数只有一个解");
	printf("解为%lf",(-b+sqrt(disc))/2*a);
	}
	else
	{printf("函数有两个解\n");
	printf("两个解分别为x1=%lf,x2=%lf",(-b+d)/2*a,(-b-d)/2*a);
	}
	return 0;
 } 

运行结果

1
3
2
方程为1.000000x^2+3.000000x+2.000000=0
b^2-4ac的值为1.000000
函数有两个解
两个解分别为x1=-1.000000,x2=-2.000000
--------------------------------
Process exited after 1.919 seconds with return value 0
请按任意键继续. . 

3.5.2 有关数据输入输出的概念

(1)所谓输入输出是以计算机主机为主体而言的,计算机向输出设备(如显示器、打印机等)输出数据称为输出,从输入设备(如键盘、光盘、扫描仪等)向计算机输入数据称为输入。
(2)C语言本身不提供输入输出语句,输入和输出是由C标准函数库中的函数来实现的。
printf和scanf不是C语言关键字,只是库函数的名字
。实际上可以不用这两个名字,而另外编写一个输入函数和一个输出函数,实现输入输出功能。
C提供的标准函数以库的形式在C的编译系统中提供,它们不是C语言文本中的组成部分。
不把输入输出作为C语句的目的是使C语言编译系统简单精炼,因为将语句翻译成二进制的指令是在编译阶段完成的,没有输入输出语句可以避免在编一阶段处理与硬件有关的问题,可以使编译系统简化,而且通用性强,可移植性好。
(3)要在程序文件的开头用预处理指令#include把有关头文件放在本程序中
#include指令还有一种形式,头文件用双撇号,如
#include"stdio.h"
区别是,用尖括号<stdio.h>时,编译系统从存放C编译系统的子目录中去找索要包含的文件,这称为彼岸准方式。如果用双撇号,编译系统现在用户当前目录(一般是用户存放源程序文件的子目录)中寻找,如果找不到再按照标准方式。
如果用户想包含的头文件不是系统提供的相应他欧文静,而是用户自己编写的文件,这时用过用双撇号,如果头文件没在当前目录中,可以在双撇号中写出文件路径,如:#inluce"C:\temp|filel.h|")

3.5.3 用printf函数输出数据

1.printf函数的一般格式
printf(格式控制,输出表列)
(1)“格式控制”是用双撇号括起来的字符串,称为格式控制字符串,简称格式字符串
1.格式声明。由%和格式字符组成。它的作用是将输出的数据转换为指定的格式后输出。
2.普通字符.普通字符即需要在输出时原样输出的字符。
(2)
输出表列是程序需要输出的一些数据,可以是常量、变量或表达式。

2.格式字符

(1)d格式符
可以在格式声明中指定输出数据的域宽(所占的列数)
例如
printf(“5%d\n%5d\n”,12,-345);
输出结果为
12 (前面有3个空格)
-345(前面有1个空格)
(2)c格式符
输出一个字符
(3)s格式符
输出一个字符串
(4)f格式符
输出实数以小数形式,有%f,%m.nf,%-m.nf(左对齐)
(5)e格式符
指数形式输出
不指定输出数据所占的宽度和数字部分的小数位数,许多C编译系统会自动给出数字部分的小数位数为6,指数部分占5列

例如printf("%e",123.456)
输出如下
1.234560 e+002
6列(2到0) 5列
(6)其他格式符
1.i格式符 作用与d相同,十进制整数数据实际长度输出
2.o格式符 以八进制整数形式输出
3.x格式符 十六进制输出
4.u格式符 输出无符号数据,以十进制整数形式舒服
5.g格式符,用来输出浮点数,系统自动选择f格式或e格式,选择其中长度较短的格式,不输出无意义的0
除X,E,G外,其他格式必须用小写字母。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值