说明:写这个专栏主要是为了巩固C语言基础知识。本模块是与全国计算机等级考试——二级C语言接轨。具有重基础、概念、系统、全面的特点。适合没有语言基础的小白同学参考。若有大佬不小心点进此专栏,请移步,不然您会见笑的(哈哈哈哈哈)。
目录
1.算术运算符
介绍:
算术运算符是对数值类型的变量进行运算的。
算术运算符一览表
运算符 | 运算 | 范例 | 结果 |
+ | 正号 | +3 | 3 |
_ | 负号 | b=4;-b | -4 |
+ | 加 | 5+5 | 10 |
_ | 减 | 6-4 | 2 |
* | 乘 | 3*4 | 12 |
/ | 除 | 5/5 | 1 |
% | 取模 | 7%5 | 2 |
++ ++ | 自增(前):先运算后取值 自增(后):先取值后运算 | a=2;b=++a; a=2;b=a++; | a=3,b=3; a=3,b=2 |
-- -- | 自减(前):先运算后取值 自减(后):先取值后运算 | a=2;b=--a a=2;b=a-- | a=1;b=1 a=1;b=2 |
案例演示
#include<stdio.h>
void main(){
//处理的流程10/4=2.5==截取整数==>2=>2.00000
double d1=10/4;//
doubled2=10.0/4;
//如果希望保留小数,参与运算数必须有浮点数
//给大家一个取模的公式
//a%b=a-a/b*b
int res1=10%3;//求10/3的余数1
int res2=-10%3;//=-10-(-10)/3*3=-10-(-3)*3=-10+9=-1
int res3=10%-3;//10-10/(-3)*(-3)=10-9=1
int res4=-10%-3;//?-1//++的使用
int i=10;
int j=i++;//运算规则等价是int j=i;i=i+1;==>j=10,i=11
int k=++i;//运算规则等价i=i+1;int k=i;===>i=12,k=12
printf("\ni=%d j=%d",i,j);
//i=12 j=10
printf("\ni=%d k=%d",i,k);//i=12k=12
printf("\nd1=%f d2=%f res1=%d res2=%d res3=%d res4=%d",d1,d2,res1,res2,res3,res4);
//++或者--还可以独立使用,就相当于自增
//k++等价于k=k+1//++k等价于k=k+1//如果独立使用++k和k++完全等价k++;//k=13
++k;//k=14
printf("\nk=%d",k);//k=14
getchar();}
细节说明
1)对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。例如:int x=10/3,结果是3
2)当对一个数取模时,可以等价a%b=a-a/b*b,这样我们可以看到取模的一个本质运算。
3)当自增当做一个独立语言使用时,不管是++i;还是i++;都是一样的,等价
4)当自增当做一个表达式使用时j=++i等价i=i+1;j=i;
5)当自增当做一个表达式使用时j=i++等价j=i;i=i+1;
2.关系运算符(比较运算符)
介绍:
1)关系运算符的结果要么是真(非0表示),要么是假(0表示)
2)关系表达式经常用在if结构的条件中或循环结构的条件中
关系运算符一览表
运算符 | 运算 | 范例 | 结果 |
== | 相等于 | 4==3 | false 0 |
!= | 不等于 | 4!=3 | true 非0 |
< | 小于 | 4<3 | false 0 |
> | 大于 | 4>3 | true 非0 |
<= | 小于等于 | 4<=3 | false 0 |
>= | 大于等于 | 4>=3 | true 非0 |
案例演示
#include <stdio.h>
int main() {
int a=1;
int b=2;
printf("\n a>b=%d",a>b);//0
printf("\n a>=b=%d",a>=b);//0
printf("\n a<b=%d",a<b);//1
printf("\n a<=b=%d",a<=b);//1
printf("\n a==b=%d",a==b);//0
printf("\n a!=b=%d",a!=b);//1
//结论:比较运算符的结果如果为0,则为假;如果为1,则为真
return 0;
}
细节说明
1)关系运算符的结果要么是真(非0表示,默认使用1),要么是假(0表示)
2)关系运算符组成的表达式,我们称为关系表达式。a>b
3)比较运算符"=="(关系运算符)不能误写成"="(赋值)
3.逻辑运算符
介绍:
用于连接多个条件(一般来讲就是关系表达式),最终的结果要么是真(非0表示),要么是假(0表示)
逻辑运算符一览表
下表显示了C语言支持的所有逻辑运算符。假设变量A的值为1,变量B的值为0,则
运算符 | 描述 | 实例 |
&& | 称为逻辑与运算符。如果两个操作数都为非零(真),则条件为真,否则结果为0(假) | (A&&B)为假 |
|| | 称为逻辑或运算符。如果两个操作数中任意一个非零(真),则条件为真。 | (A||B)为真 |
! | 称为逻辑或运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假 | !(A&&B)为真 |
案例演示
1)短路逻辑与现象
#include <stdio.h>
int main() {
double score=70;
if(score>=60&&score<=80){
printf("及格");
}
int a=10,b=99;
//说明:
//(1)在进行 && 操作时,如果第一个条件为false,则后面的条件不在判断
//(2)该现象成为 短路现象。所以,逻辑与也称为 短路逻辑与
if( a<2 && ++b>99){
printf("\nok100");
}
printf("b=%d\n",b);
//由于if语句中的第一个条件为假,由于短路现象++b不会执行,因此b=99
return 0;
}
2)短路逻辑或现象
#include <stdio.h>
int main() {
int a=10,b=99;
//说明:
//(1)在进行 || 操作时,如果第一个条件为ture,则后面的条件不在执行判断
//(2)该现象成为 逻辑或短路现象。所以,逻辑或也称为 短路逻辑或
if( a>2 || ++b>99){
printf("\nok100");
}
printf("\nb=%d",b);
//由于if语句中的第一个条件为真,由于短路逻辑或++b不会执行,因此b=99
return 0;
}
4.赋值运算符
介绍:
赋值运算符就是将某个运算后的值,赋给指定的变量
赋值运算符一览表
案例演示
#include <stdio.h>
int main() {
//+=的案例,其它的类似-= *= /= %=
int c = 12;
int a2 = 10;
//有两个变量,a和b,要求将其进行交换,最终打印结果
int a = 10;
int b = 20;//思路是通过一个临时变量来实现a,b值的交换
int temp = a;
a = b;
b = temp;
c += 3;
//等价c=c+3;//c+=b;//等价c=c+b;a2+=1.7;
printf("\na=%d b=%d c=%d a2=%d", a, b, c, a2);
//a=20,b=10 c=15 a2=11
return 0;
}
赋值运算符特点
1)运算顺序从右往左
2)赋值运算符的左边只能是变量,右边可以是变量、表达式、常量值
3)复合赋值运算符等价于下面的效果比如:a+=3;等价于a=a+3;
4)注意在运算时,可能截断小数点后面的部分
int a=10;
a+=1.7; //a=a+1.7=>11.7=>11
a=11
5.位运算符
介绍
位运算符用于位并逐位执行操作。
位运算符一览表
位运算比较复杂,放在后面的二进制之后单独说
6.三元运算符
基本语法
条件表达式子 ? 表达式 1,:表达式 2 ;
1)如果条件表达式为非0(真)运算后的结果是表达式1;
2)如果条件表达式为0(假),运算后的表达式2;
案例演示
#include <stdio.h>
int main() {
int a=10;
int b=99;
int res= a>b ? a++ : b--;
int n1=a>b ? 1.1:2.2;
printf("\n a=%d b=%d res=%d n1=%d",a,b,res,n1);
//输出 a=10 b=98 res=99 n1=2
return 0;
}
7.运算符优先级
运算符优先级一览表
优先级 | 运算符 | 名称或含义 | 使用形式 | 结合方向 | 说明 |
1 | [] | 数组下标 | 数组名[常量表达式] | 左到右 |
|
() | 圆括号 | (表达式) |
| ||
. | 成员选择(对象) | 对象.成员名 |
| ||
-> | 成员选择(指针) | 对象指针->成员名 |
| ||
2 | - | 负号运算符 | -表达式 | 右到左 | 单目运算符 |
(类型) | 强制类型转换 | (数据类型)表达式 |
| ||
++ | 自增运算符 | ++变量名 | 单目运算符 | ||
-- | 自减运算符 | --变量名 | 单目运算符 | ||
* | 取值运算符 | *指针变量 | 单目运算符 | ||
& | 取地址运算符 | &变量名 | 单目运算符 | ||
! | 逻辑非运算符 | !表达式 | 单目运算符 | ||
~ | 按位取反运算符 | ~表达式 | 单目运算符 | ||
sizeof | 长度运算符 | sizeof(表达式) |
| ||
3 | / | 除 | 表达式 / 表达式 | 左到右 | 双目运算符 |
* | 乘 | 表达式*表达式 | 双目运算符 | ||
% | 余数(取模) | 整型表达式%整型表达式 | 双目运算符 | ||
4 | + | 加 | 表达式+表达式 | 左到右 | 双目运算符 |
- | 减 | 表达式-表达式 | 双目运算符 | ||
5 | << | 左移 | 变量<<表达式 | 左到右 | 双目运算符 |
>> | 右移 | 变量>>表达式 | 双目运算符 | ||
6 | > | 大于 | 表达式>表达式 | 左到右 | 双目运算符 |
>= | 大于等于 | 表达式>=表达式 | 双目运算符 | ||
< | 小于 | 表达式<表达式 | 双目运算符 | ||
<= | 小于等于 | 表达式<=表达式 | 双目运算符 | ||
7 | == | 等于 | 表达式==表达式 | 左到右 | 双目运算符 |
!= | 不等于 | 表达式!= 表达式 | 双目运算符 | ||
8 | & | 按位与 | 表达式&表达式 | 左到右 | 双目运算符 |
9 | ^ | 按位异或 | 表达式^表达式 | 左到右 | 双目运算符 |
10 | | | 按位或 | 表达式|表达式 | 左到右 | 双目运算符 |
11 | && | 逻辑与 | 表达式&&表达式 | 左到右 | 双目运算符 |
12 | || | 逻辑或 | 表达式||表达式 | 左到右 | 双目运算符 |
13 | ?: | 条件运算符 | 表达式1? 表达式2: 表达式3 | 右到左 | 三目运算符 |
14 | = | 赋值运算符 | 变量=表达式 | 右到左 |
|
/= | 除后赋值 | 变量/=表达式 |
| ||
*= | 乘后赋值 | 变量*=表达式 |
| ||
%= | 取模后赋值 | 变量%=表达式 |
| ||
+= | 加后赋值 | 变量+=表达式 |
| ||
-= | 减后赋值 | 变量-=表达式 |
| ||
<<= | 左移后赋值 | 变量<<=表达式 |
| ||
>>= | 右移后赋值 | 变量>>=表达式 |
| ||
&= | 按位与后赋值 | 变量&=表达式 |
| ||
^= | 按位异或后赋值 | 变量^=表达式 |
| ||
|= | 按位或后赋值 | 变量|=表达式 |
| ||
15 | , | 逗号运算符 | 表达式,表达式,… | 左到右 |
|
运算符优先级小结
1)结合的方向只有三个是从右向左,其余都是从左向右
2)所有的双目运算符中只有赋值运算符的结合方向是从右向左
3)另外两个从右向左的结合运算符,一个是单目运算,还有一个是三目运算()
4)逗号的运算符优先级最低
5)说一下优先级的大概的顺序算术运算符>关系运算符>逻辑运算符(逻辑非!除外)>赋值运算符>逗号运算符
运算符优先级注意事项和细节
8.标识符
标识符
1)C语言对各种变量、函数等命名时使用的字符序列称为标识符
2)凡是自己可以起名字的地方都叫标识符
标识符命名规则
1)由26个英文字母大小写,0-9,_或$组成
2)数字不可以开头。
3)不可以使用关键字和保留字,但能包含关键字和保留字。
4)C语言中严格区分大小写,长度无限制。
5)标识符不能包含空格
判断下列标识符是否合法
标识符命名规范
1)程序中不得出现仅靠大小写区分的相似的标识符int x,X;变量x与X容易混淆
2)所有宏定义、枚举常数、常量(只读变量)全用大写字母命名,用下划线分隔单词比如:const double TAX_RATE=0.08;//TAX_RATE只读变量#define FILE_PATH "/usr/tmp"
3)定义变量别忘了初始化。定义变量时编译器并不一定清空了这块内存,它的值可能是无效的数据,运行程序,会异常退出.
4)变量名、函数名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz[驼峰法,小驼峰,比如short stuAge=20;]比如:tankShotGame大驼峰[TankShotGame]
9.关键字
10.键盘输入语句
1)include<stdio.h>
2)使用scanf函数
3)使用适当的格式参数接收输入
#include <stdio.h>
void main() {
//使用字符数组接收名
char name[10] = "";
int age = 0;
double sal = 0.0;
char gender = ' ';
//提示用户输入信息
printf("请输入名字:");
//scanf("%s", name) 表示接收 一个字符串,存放到 name字符数组
scanf("%s", name);
printf("请输入年龄:");
scanf("%d", &age); // 因为我们将得到输入存放到 age 变量指向地址,因此需要加 &
printf("请输入薪水:");
scanf("%lf", &sal); //接收一个double 时,格式参数 %lf
printf("请输入性别(m/f):");
scanf("%c", &gender); //这里是接收到了上面的回车字符
scanf("%c", &gender); //等待用户输入.
//输出得到信息
printf("\nname %s age %d sal %.2f gender %c", name, age, sal, gender);
getchar();//接收到一个回车
getchar();//这个getchar() 才会让控制台暂停
}