目录
【1】运算符
1.算术运算符
+ - * / % ++ --
/:整数相除,向下取整
int a = 5/2; // a=2;
float b = 5/2; // b = 2.000000
float c = 5/2.0;// c=2.500000
%:只能用于整数运算
10%3 == 1
123
百位:123/100==1
十位:123/10%10==2
个位:123%10==3
++:运算时注意++前后位置,来判断先运算还是先取值
a++或++a: == a=a+1
情形一:
赋值运算:
int a=3; //定义了一个变量a,并赋值为3
1)int b= ++a; //4,++在前,先让a自加1,然后取a的值赋值给b
2)int b = a++; //3,++在后,先取a的值赋值给b,然后a自加1
情形二:
打印语句:
int a = 3;
1)printf("%d\n",a++);//3 ++在后,先打印a,然后a自加
2)printf("%d\n",++a);//4 ++在前,先自加,然后打印的是自加后的a
情形三:
独立成句:
int a=3;
1)a++; //a=a+1;
printf("%d\n",a); //4
2)++a; //a=a+1;
printf("%d\n",a); //4
练习:以下程序输出结果是
#include <stdio.h>
int main(int argc, char *argv[])
{
int a = 10;
int b = a++; //b=10,a=11
int c = a + b; //c=21
int d = (b++) +c;//d=31,b=11
printf("%d = \n",d);
return 0;
}
A. d = 31
B. d = 32
C. d = 33
D. d = 34
练习:以下程序输出结果是
#include <stdio.h>
int main(int argc, char *argv[])
{
int a = 10;
int b = ++a; //b=11,a=11
int c = a + (b++); //c=22,b=12
int d = b+c; //34
printf("%d\n",d);
return 0;
}
A. d = 31
B. d = 32
C. d = 33
D. d = 34
2. 逻辑运算符
&& || !
运算法则:
&&(逻辑与) :全真则真,一假则假
||(逻辑或) :一真则真,全假则假
!(逻辑非) :非真即假,非假即真
截断法则:
在逻辑与运算中,如果前面的表达式为假,则后面的表达式不执行
在逻辑或运算中,如果前面的表达式为真,则后面的表达式不执行
#include <stdio.h>
int main()
{
int a=5,b=6,c=7,d=8,m=2,n=2;
(m=a<b)||(n=c>d);
printf("%d %d",m,n);
}
//答案:1 2
#include <stdio.h>
int main()
{
int a=5,b=6,c=7,d=8,m=2,n=2;
(m=a>b)&&(n=c>d);
printf("%d %d",m,n);
}
//答案:0 2
3. 位运算符
& | ~ ^ << >>
&:位与
全1则1,有0则0
0xab & 0x3c
0xd4 & 0x3e=>0001 0100
|:位或
有1则1,全0则0
^:异或
不同为1,相同为0
0xab ^ 0x3c
~:取反
按位取反:0变1,1变0
//正数的补码和原码相同
//负数的原码取反码+1变补码
-12:
原码:1000 0000 0000 0000 0000 0000 0000 1100
反码:1111 1111 1111 1111 1111 1111 1111 0011
补码:1111 1111 1111 1111 1111 1111 1111 0100
<<:左移
向左移动几位,右边补几个0
8<<2=32
>>:右移
右移几位,左边补几个符号位
负数符号位1,正数符号位0
8>>2=2
置位问题:置零用与,置一用或
将4的1位置一 4|(1<<1)
将数a的n位置一: a|(1<<n)
将6的1位置零: 6&(~(1<<1))
将数a的n位置零: a&(~(1<<n))
4. 关系运算符
> < >= <= == !=
5. 赋值运算符
= += -= *= /= %=
a+=4 => a=a+4
6. 三目运算符(条件运算符)
表达式1?表达式2:表达式3
执行顺序:
先判断表达式1是否成立,
如果成立就执行表达式2,
否则执行表达式3
int a=3;
int b = 5;
int c = a<b?a++:++b; //c=a++;
c=? //3
运算符优先级:
//从高到底分别是
单目运算符 ! ~ ++ --
算术运算符 * / % + -
移位运算符 << >>
关系运算符 < <= > >= == !=
位与运算符 &
异或运算符 ^ |
逻辑运算符 && ||
条件运算符 ?:
赋值运算符 = += *= /= %= ...
7. 其他
分隔符:
换行 空格 TAB
标点符号:
分号 逗号 大括号 小括号 中括号
【2】变量
概念:在程序运行中其值发生变化的量
存储类型 数据类型 变量名;
int b ;
| 数据类型 | 名称 | 字节数(32位) | 取值范围 |
| char | 字符型 | 1 | -2^7~2^7-1 |
| short | 短整型 | 2 | -2^15~2^15-1 |
| int | 整形 | 4 | -2^31~2^31-1 |
| long | 长整型 | 4 | -2^31~2^31-1 |
| float | 单精度浮点型 | 4 | 有效数据位数6-7位 |
| double | 双精度浮点型 | 8 | 有效数据位数15-16位 |
变量的分类:局部变量与全局变量
| 局部变量 | 全局变量 | |
| 定义位置 | 定义在函数体内部 | 定义在函数体外部 |
| 初值 | 未赋初值时为随机值 | 未赋初值时为0 |
| 存储位置 | 栈区 | 全局区 |
| 生命周期 | 随函数的结束而结束 | 随程序的结束而结束 |
| 作用域 | 作用于函数内部 | 作用于整个程序 |
【3】常量
概念:在程序运行中其值不会发生变化的量
分类:
1)字符型常量
字符:'a' 'b' 'c'
转义字符:'\x41' '\101'
打印字符A:'A' 65 '\101' '\x41'
2)字符串常量
"hello"
字符串的末尾会补\0
3)整型常量
100 123
4)浮点型常量
3.1415926
5)指数常量
3*10^8 =》3e8
2*10^-2 =>2e-2
6)标识常量
宏定义:起标识作用
格式:#define 宏名 常量或表达式
一般会把宏名大写
特点:原样替换
练习:
#define N 2
#define M N+3
#define NUM N+M/2+1
void main()
{
int a = NUM;
printf("%d\n",a); //6
}
【4】输入输出
函数三要素:功能、参数、返回值
打印函数
int printf(const char *format, ...);
功能:按指定格式向终端输出
参数:format:字符串
%d int
%c char
%f float
%lf double
%s 字符串
%#x 十六进制
%#o 八进制
%p 地址
%e 指数
%u 无符号
%-m.nf 含义:
-:代表左对齐,一般默认右对齐
m:位宽:m>实际位宽,按m宽输出 m<实际位宽,按实际位宽输出
.nf :保留小数点后n位
...:不定参数
返回值:返回输出字符的个数
输入函数
int scanf(const char *format, ...);
功能:按照指定格式输入
参数:同printf
...:变量的地址
#include<stdio.h>
int main(int argc, char const *argv[])
{
int num;
scanf("%d",&num);
printf("%d\n",num);
return 0;
}
返回值:返回正确输入数据的个数 如果第一个数据输入错误,直接返回0
任务:
用三目运算符实现两个数求最大值
#include <stdio.h>
#define BIG(A,B) ((A)>(B)?(A):(B))
int main() {
int num1 = 10;
int num2 = 20;
int max = BIG(num1, num2);
printf("The maximum number is: %d\n", max);
return 0;
}
一个水分子的质量约为3.0*10^-23g,1夸脱水大约有950g,
编写一个程序,要求输入水的夸脱数,然后显示这么多水中包含多少水分子。 表示:3.0e-23 打印格式:%f或%e
#include <stdio.h>
int main() {
double waterWeight = 950.0; // 每夸脱水的质量(g)
double waterMoleculeMass = 3.0e-23; // 水分子的质量(g)
double numQuarts; // 输入的夸脱数
double numMolecules; // 包含的水分子数量
// 输入夸脱数
printf("请输入水的夸脱数:");
scanf("%lf", &numQuarts);
// 计算水分子数量
numMolecules = (numQuarts * waterWeight) / waterMoleculeMass;
// 显示结果
printf("在%.2f夸脱水中包含的水分子数量为:%e\n", numQuarts, numMolecules);
return 0;
}
2929

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



