#include<stdio.h>
int main()
{
int num,money,total; /*声明整型变量num、money、total,分别存放红包数量、每个红包的金额和
红包总金额*/
printf("输入红包数量:");
scanf("%d",&num); /*给变量num输入数据*/
printf("输入每个红包金额(元):");
scanf("%d",&money); /*给变量money输入数据*/
total=num*money; /*计算总金额(total=num*money)*/
printf("红包总金额: %d元\n",total); /*输出总金额total*/
return 0;
}
程序运行结果: 输入红包数量:3 输入每个红包金额(元):5 红包总金额: 15元
语句的分类 C语言程序的基本组成单位是函数,而函数由语句构成,所以语句是C语言程序的主要表现形式。每一条语句都是用户向计算机发出的一条完整的指令,语句经编译后产生若干条机器指令,最终用于完成一定的操作任务。在C语言中,每条语句都以分号结尾C语言的语句可以分为声明语句、表达式语句、复合语句、控制语句和空语句五大类。 1.声明语句在C语言编程中起核心作用。通过声明变量和函数,可以在检查程序潜在的错误以及把程序翻译成目标代码两个方面为编译器提供至关重要的信息。在C语言中,任何用户自定义的函数、变量和符号常量都必须遵循“先声明,后使用”的原则。变量的声明有两种:一种是需要建立存储空间的,这种声明是“定义性声明(definingdeclaration)”,即“变量定义”:另一种是不需要建立存储空间的,只是告诉编译器变量已在别处定义,此处只是引用该变量,这种声明是“引用性声明(referencingdeclaration)”。声明语句一般位于一个函数的最前面,语法格式如下: 数据类型 用户标识符; 如上面例子中的语句int num,money,total ; //定义整型变量,遵循“先声明,后使用”原则就是声明语句。该语句定义了3个整型变量,所以在其下面的语句就可以合法使用这些变量。 2.表达式语句是进行数据运算或处理的语句。如上例中完成数据的输入/输出和给变量赋值功能的语句 scanf(); printf(); total=num*money;都属于表达式语句。 3.复合语句由一对花括号({ })把多条语句括起来形成的复合语句,可在语法上作为一个整体来看待,相当于一条语句。复合语句也称为语句块,其格式如下: { 语句1 语句2 ...... 语句n } 4.控制语句用于对程序流程的选择、循环、转向和返回等进行控制。控制语句有4类,共10种,包括13个关键字。 (1)选择语句:if...else和switch(包括case和default)。 (2)循环语句:for、while和do...while。 (3)转向语句:continue、break和goto。 (4)返回语句:return。 5.空语句 C语言中的空语句是指单独由一个分号“;”构成的语句。空语句执行时不产生任何动作。程序设计时有时需要加一个空语句来表示存在一条语句,以产生延迟。空语句有时用来作流程的转向点(流程从其他地方转到此语句处),也可以用作循环语句中的循环体(当需循环执行的动作已全部由循环控制部分完成时,需要一个空语句的循环体,表示循环什么也不做)。例如: ;
运算符 C语言的运算符非常丰富,可按不同方式分类:根据所需操作数的个数可分为单目运算符、双目运算符和三目运算符;按照功能可分为算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符、条件运算符、逗号运算符等(参见附录)。使用运算符需要注意以下几点。 (1)运算符的功能。有些运算符的含义和数学中的含义一致,如+、-、*、/运算符的功能分别为加、减、乘、除算术运算;有些运算符则是C语言中特有的,如++、一等。 (2)对操作数(即运算对象)的要求。 1)操作数的个数。如果运算符需要两个运算对象参加运算,则称为双目运算符;如果运算符只需要一个运算对象,则称为单目运算符。 2)操作数的数据类型。例如取模运算符(%)要求参加运算的两个数据对象都是整型数据。 (3)运算符的优先级。如果不同的运算符同时出现在表达式中,则先执行优先级高的运算符。例如,乘、除运算符的优先级高于加、减运算符的优先级,即在表达式运算中,先运算乘(除),后计算加(减)。优先级有15级(参见附录),第1级最高,第15级最低。当然,也可以用括号(())改变运算的优先级。 (4)运算的结合方向——从左至右或从右至左。如果一个操作数左右两侧有相同优先级别的运算符,则按结合方向顺序运算。如4*5/6,在5的两侧分别为*和/,根据“从左向右”的原则,5先和其左侧的运算符结合,这就称为“从左向右”的结合性。 (5)运算结果。不同类型的数据进行运算时,要进行数据类型的转换,同时要特别注意运算结果值的数据类型。
1.算数运算符 算数运算符是最常用的数值运算符。基本算数运算符有6个。如下表:
| 运算符 | 含义 | 操作数要求 | 优先级 | 结合方向 | 运算实例 | 运算结果 |
| - | 取相反数 | 1个(一元) | 2 | 从右向左 |
-1 -(-1) |
-1 1 |
|
* / % |
乘法 除法 求余 | 2个(二元,%运算对象都是整型数据) | 3 | 从左往右 |
12/5 12.0/5 11%5 11%(-5) (-11)%5 |
2(整型) 2.4 1 1 -1 |
|
+ - |
加法 减法 | 2个(二元) | 4 | 从左往右 |
5+1 5-1 |
6 4 |
为避免因误用运算符的优先 级而导致计算错误,可以使用圆括号来控制运算的先后顺序。
2.自增和自减运算符 自增(++)和自减(--)运算符是两个特殊的单目运算符。他们可以改变操作数(变量)的值,++使操作数加1,--使操作数减1。自增和自减可以出现在操作数之前,称为前置;也可以放在操作符之后,称为后置。如下表:
| 运算符 | 含义 | 操作数要求 | 优先级 | 结合方向 | 运算实例 | 运算结果 |
| ++ | 变量的值增1 | 1个(一元) | 1(后置) | 从左向右 | m=n++; |
m=n; n=n+1; |
| 2(前置) | 从右向左 | m=++n; |
n=n+1; m=n; | |||
| -- | 变量的值减1 | 1(后置) | 从左向右 | m=n--; |
m=n; n=n-1; | |
| 2(前置) | 从右向左 | m=--n; |
n=n-1; m=n; |
3.赋值运算符 在C语言中,符号“=”不是表示数学上“相等的含义”,而是一个赋值运算符。其作用是将一个数据值赋给一个变量,如下表:
| 运算符 | 含义 | 操作数要求 | 优先级 | 结合方向 | 运算实例 | 运算结果 |
| = | 给变量赋值 | 2个(二元),左侧的运算对象只能是单个变量,右侧应该是一个能计算出确定的值的表达式(可以是常量、变量) | 14 | 从右向左 |
a=20; a=b=c=0; |
将值20赋给变量a a=(b=(c=0)) |
为了简化程序并提高编译效率,C语言允许在赋值运算符(=)之前加算术运算符和位运算符,组成复合赋值运算符。复合赋值运算符共10种:+=、-=、*=、/=、%=、<<=、>>=、&=、|=、^=。其中后5种是有关位运算的。复合赋值运算符的优先级与赋值运算符的优先级相同,且结合方向一致。如下表:(以 int a=5;为例)
| 运算符 | 含义 | 操作数要求 | 优先级 | 结合方向 | 运算实例 | 运算结果 |
| += | 复合赋值运算 | 2个(二元) | 14 | 从右向左 | a+=2+3 | 10(a=a+(2+3=10) |
| -= | a-=3 | 2 (a=a-3=2) | ||||
| *= | a*=2 | 10 (a=a*2=10) | ||||
| /= | a/=2 | 1 (a=a/2=2) | ||||
| %= | a*=a+=a%=2 | 4 (a=a*(a=a+(a=a%2))=4 |
复合赋值运算符使用的一般形式如下: <变量><双目运算符>=<表达式> 等价于: <变量>=<变量><双目运算符><表达式> 例如:n+=1 (等价于 n=n+1) x*=y+1 (等价于 x=x*(y+1)) k>>=i+k (等价于 k=k>>(i+k))
注意:复合赋值运算符右侧的表达式是一个运算整体,不能把它们分开。例如, x*=y+1 表示x=x*(y+1) ,而不是x=x*y+1。
4.逗号运算符 在C语言种,逗号(,)除了作为分隔符使用以外,还可以作为一种运算符使用。可以用它将两个或更多个表达式连接起来,其使用格式如下: 表达式1,表达式2,……,表达式n 求解过程:从左至右依次执行每个子表达式,先求表达式1的值,再求表达式2的值,……,最后求解表达式n的值。表达式n的值为整个逗号表达式的值,如下表:
| 运算符 | 含义 | 操作数要求 | 优先级 | 结合方向 | 运算实例 | 运算结果 |
| , | 逗号运算符 | 2个或多个 | 15 | 从左向右 |
x=(a=3,6*3) x=a=3,6*a |
x的值为18,表达式值为18 x的值为3,表达式值为18 |
5.位运算符 C语言提供了如表1所列的6种运算符。其中,只有按位取反运算符为单目运算符,其他运算符都是双目运算符。除“<<”和“>>”以外的位运算符的运算规则(真值表) 这6种位运算符可分为两大类:为逻辑运算(&按位与、|按位或、^按位异或、~按位取反)和位移动运算(<<左移位、>>右移位)。
| 运算符 | 含义 | 操作数要求 | 优先级 | 结合方向 | 运算实例 | 运算结果 |
| ~ | 按位取反 | 1个(一元) | 2 | 从右至左 | ~5 | -6 |
| << | 左移位 | 2个(二元) | 5 | 从左至右 | 4<<2 | 16 |
| >> | 右移位 | -5>>2 | -2 | |||
| & | 按位与 | 8 | 5&6 | 4 | ||
| ^ | 按位异或 | 9 | 5^6 | 3 | ||
| | | C | 10 | 5|6 | 7 |
| a | b | ~a(按位取反) | a&b(按位与) | a|b(按位与) | a^b(按位异或) |
| 1 | 1 | 0 | 1 | 1 | 0 |
| 1 | 0 | 0 | 0 | 1 | 1 |
| 0 | 1 | 1 | 0 | 1 | 1 |
| 0 | 0 | 1 | 0 | 0 | 0 |
下面对这些运算符的使用逐一进行解释说明: (1)按位取反运算。其功能是把运算对象的内容按位取反,即每一数字位上的0变1,1变0;
(2)左移运算。其功能是把“<<”左侧的运算数的二进制全部左移若干位。移动的位数由“<<”右侧的书指定。移动过程中高位丢弃,低位补0。
(3)右移运算。其功能是把“>>”左侧的运算数的二进制全部右移若干位。移动的位数由“>>”右侧的数指定。与左移运算符不同的是,移动方向相反,右移时,右端移出的二进制舍弃;左端移入的二进制分两种情况,对于无符号整数和正整数,高位补0,对于负数,高位补0还是1,取决于所用的计算机。
(4)按位与运算。其功能是参与运算的两个数与各对应的二进制相与。只有对应的两个二进制位均为1是,结果才为1,否则为0。参与运算的数以补码的数出现。
(5)按位异或运算。其功能是参与运算的两个数与各对应的二进制位相异或,当对应的个二进制位相同时,异或后结果为0,不同则结果为1。
(6)按位或运算。其功能是将参与运算的两个数各对应的二进制位相或,只有对应的两个二进制位中有1个为1,则结果为1,参与运算的两数均以补码形式出现。
6.其他运算符
(1)“sizeof0”运算符,单目运算,优先级为2,结合方向是从右至左。该运算符的功能是计算数据类型所占的字节数。使用格式如下:sizeof(变量名|数据类型标识符|表达式) (2)“()”运算符,优先级为1,结合方向是从左至右。该运算符的功能是改变表达式中其他运算符计算的优先顺序。另外,0也可用于表示函数参数列表。 (3)“”运算符,优先级为1,结合方向是从左至右。该运算符的功能是表示数组元素下标。 (4)“&”运算符,取地址运算符,优先级为2,结合方向是从右至左。在程序运行时,所有的程序和数据都存放在内存中。内存是以字节为单位的连续的存储空间,每个内存单元都有一个编号,这个编号称为内存地址。每个变量都有自己的内存地址,可以使用&运算符获取该地址。运算符&只能用于普通变量,不能用于表达式或常量。 (5)“*”运算符,指针运算符,优先级为2,结合方向是从右至左。该运算符的功能是取指针(地址)所对应的存储单元的内容。 (6)“(类型说明符)”运算符,强制类型转换运算符,优先级为2,结合方向是从右至左。该运算符的功能是将运算对象转换为括号中说明的类型。 (7)“>”运算符,优先级为1,结合方向是从左至右。该运算符的功能是通过结构体指针引用结构体成员。 (8)“”运算符,优先级为1,结合方向是从左至右。该运算符的功能是通过结构体变量引用结构体成员。
表达式
运算符提供了对数据的最基本操作,这些基本操作可以组合生成更复杂的数据处理,即表达式。表达式由运算符与数据对象组合而成。由于运算符的种类很多,因此对应的表达式也有很多种,如算术表达式、关系表达式、逻辑表达式和赋值表达式等。数据对象可以是多种类型的常量、变量、函数,也可以是表达式,从而组合成更复杂的表达式。 表达式运算后只会产生一个结果,该结果是具有某种数据类型的数值。表达式的值与运算符的种类和运算对象的类型有关。 当表达式中包含多个运算符时,运算的执行顺序对表达式的值有相当重要的影响。在C语言中,运算符执行顺序通常由运算符的优先级和结合方向控制。优先级较高的运算符先于优先级较低的运算符执行,如生活中常说的先乘除后加减。结合方向则控制具有相同优先级的多个运算符的执行顺序,如表达式3*4/5,“*”与“/”优先级相同,将按结合方向从左至右进行运算,计算结果为2,而不是0。 C语言的表达式与数学表达式差不多,但是必须注意其与通常数学表达式的区别。 (1)所有字符必须写在一条水平线上,不允许出现上、下角标和分数线等。 (2)所有运算分量之间必须有运算符,如a乘b不能写成ab,必须写成a*b。 (3)适当加括号可使多个运算一同出现时层次清楚。C语言中的表达式、运算符以及运算的优先级较复杂,使用括号可以增加程序的可读性。

被折叠的 条评论
为什么被折叠?



