注释:ctrl+/
编译:gcc 编译的文件名称
默认生成一个a.out的文件
执行:./a.out
gcc 文件名 -o 生成新文件的名称
计算机的存储单位:
位(bit)、字节(byte)
1字节 = 8 位
1KB=1024byte
1MB=1024KB
1GB=1024MB
1TB=1024GB
数据类型:
int 整型 :整数 4个字节
short 短整型:整数 2个字节
float 单精度浮点型 :小数 4个字节
double:双精度浮点型 :小数 8个字节
char 字符型:用单引号引起来的字母或者是符号或者数字都是一个字符 1个字节
' ':单引号 'a':字符a '1':字符1 '#':字符井号
" ":双引号 字符串 "hello world "
变量:
概念:在程序运行当中会发生变化的量
定义格式:存储类型(一般省略不写 默认取值auto) 数据类型 变量名;
例:int a=10;定义了一个名字叫a的整型变量并且赋值为10
char b='0';
标识符:
命名规则:
- 由数字 字母 下划线组成
- 不能以数字开头
- 不能和关键字重名
- 见名知义
练习:x y sum a100 01a 78b* _A7b_3x (abc)
输入输出语句:
输出:printf();
功能:向终端输出内容
参数(写在小括号内的):第一个参数的位置必须是一个字符串
格式:
%d int 整型
%f float 单精度浮点型
%lf double 双精度浮点型
%c char 字符型
%s 字符串类型
%p 地址
%f---》%0.2f:保留两位小数 %.2f
输入语句:scanf();
功能:从终端输入内容;
参数(写在小括号内的):第一个参数的位置必须是一个字符串
注意:scanf中不要使用\n 或者特殊符号 ,/
返回值:正确输入字符的个数 -- int %d
运算符:
算数运算符 逻辑运算符 位运算符 关系运算符 赋值运算符 三目运算符
算数运算符 :+ - * / % ++ --
/ :除法 整数相除 向下取整(丢弃小数位)
9/2=4
9.0/2=4.5
%:取模 (取余)
10%3=1
10%2=0
++:在自身的基础上加一
int a=1;
a++;--->a=a+1;
输出:a=2
a++;
输出:a=3
++会出现的几种情况:输入语句中 赋值语句中 单独成句
输入语句中:
注意:
++在前:前置++ 先+1 后进行输出或者赋值
++在后:后置++ 先进行输出或者赋值 后+1
赋值语句中 :
单独成句:
单独成句时都会发生数值的变化
--:同理
【练习】:
1. 以下程序输出结果是
#include <stdio.h>
int main(int argc, char *argv[])
{
int a = 6
int b = a++; //b=6 a=7
int c = a + b; //c =13
int d = (b++) +c; // b=7 6+13=d
printf("d = %d\n",d);
return 0;
} [单选题] *
A. d = 17
B. d = 19
C. d = 21
- . d = 22
答案:B
2. 以下程序输出结果是
#include <stdio.h>
int main(int argc, char *argv[])
{
int a = 10;
int b =++a; //b=11 a=11
int c = a + (b++); //a=11 b=11--->12 c=22
int d = b+c; //d =12+22=34
printf("%d\n",d);
return 0;
} [单选题] *
A. d = 31
B. d = 32
C. d = 33
D. d = 34
答案:D
逻辑运算符: && (逻辑与) ||(逻辑或) !(逻辑非 取反)
&& (逻辑与) :全真则真 一假则假
真假用数字0和1表示:1---真 0----假
10>x>0-----> x>0&&x<10 x=2---》真
x=20 -----》假
||(逻辑或):一真则真 全假则假
a>10||a<5 a=4----》真
!(逻辑非 取反):非真即假 非假即真
2<5---->真
!(2<5)----->假
练习:
1.100>1&&'a'>'b' ----》0
2.100>1||'a'>'b'----》1
- !(100>1)----》0
截断法则:
逻辑或运算中:如果前面的表达式为真,则后面的表达式就不会执行
逻辑与运算中:如果前面的表达式为假,则后面的表达式就不会执行
或真不执行 假执行
与假不执行 真执行
【例1】:
#include <stdio.h>
int main()
{
int a=5,b=6,c=7,d=8,m=2,n=2;
(m=a<b)||(n=c>d);----->m=a<b=1
printf("%d %d",m,n);//m=1, n=2
}
例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);//m=0 n=2
}
例3:
int a = 5, b = 6, c = 7, d = 8, m = 2, n = 2,t=10;
(m = a > b) || (n = c < d)||(t=11);
printf("%d %d %d", m, n,t);//m=0 n=1 t=10
位运算符 : &(位与) |(位或) ^(异或) ~(取反) <<(左移) >>(右移)
&(位与) :全1则1 有0则0
|(位或):全0则0 有1则1
^(异或):不同为1 相同为0
~(取反):按位取反 0---》1 1---》0
原码 反码 补码
原码 | 反码 | 补码 | |
正数 | 二进制数本身 | 二进制数本身 | 二进制数本身 |
负数 | 二进制数本身 | 除符号位按位取得到 | 反码的基础上+1 |
-5----》101
原码:10000000 00000000 00000000 00000101
反码:11111111 11111111 11111111 11111010
补码:11111111 11111111 11111111 11111011
最左边的位置(最高位):符号位 正数:0 负数:1
&(位与):
int a=5;
int b=-2;
int c=a&b;
5:
原码 反码 补码:00000000 00000000 00000000 00000101
-2:---》10
原码:10000000 00000000 00000000 00000010
反码:11111111 11111111 11111111 11111101
补码:11111111 11111111 11111111 11111110
00000000 00000000 00000000 00000101
a&b:00000000 00000000 00000000 00000100----》4
例:
int a=-3;
int b=-2;
int c=a&b;
-2:补码:11111111 11111111 11111111 11111110
-3:
原码:10000000 00000000 0000000 00000011
反码:11111111 11111111 11111111 11111100
补码:11111111 11111111 11111111 11111101
a&b:11111111 11111111 11111111 11111100
反码:11111111 11111111 11111111 11111011
原码:10000000 00000000 0000000 00000100----》-4
11.6作业:
1.
int a = 6
int b = a++; // b=6 a=7
int c = a--; // c=7 a=6
--c;//c=6
int d = (b++) +c; //d=12 b=7
a=? 6 b=? 7 c=? 6 d=?12
- 9&-2结果
#include <stdio.h>
int main()
{
int a=0,b=0,c=0,d=0,m=0,n=0;
(m=!a)&&(n=10>d)||(d=10);
printf("%d %d %d",m,n,d);
}