PZK学C语言之数据类型,进制转换,输入输出,运算符, 分支语句ifelse
文章目录
一、写第一个c语言
1.创建c语言流程
a.打开终端,创建.c文件
b编辑.c文件
vi +文件名 ; gedit +文件名.c
c.写c语言代码
d. 编译 gcc xxx.c -o 可执行程序名字
e. ./可执行程序名 默认是a.out**
2.解释c语言代码
#include <stdio.h> 预处理:头文件-包含函数定义。
//第一个c语言程序 注释--给人看,编译器当做空白,多行注释 /*xx*/
int main() 入口函数(main函数)--程序执行的入口
{
int i = 0; 定义变量----定义一个i变量
printf("hello world\n"); 打印--屏幕上照常输出
return 0; 返回值: 返回给main的外部
}
---------------------------------------------------------------------------------------------------------------------------------------------------------------
二、常量
1.常量:不可以改变的量,不可以修改的量 (建筑物高度,地球直径)
一般时候,常量是给变量赋值使用。
2.整形常量: -1 , 0 ,100 所有的值都是整数
表示方式:10进制-满10进1, 16进制满16进1,用0到9+ABCDEF组成,加前缀0x或者H后缀。2进制常量只有1和0,8进制1到7表示,一般用0的前缀
3.浮点型常量:表示小数 -1.2, 1.0, 12.56 ,在内存中存储方式特殊。有误差。浮点型和0比较 float x =0; 不可以 x == 0
4.字符型常量: ‘a’, ‘1’, ‘\0’, ascii表
5.指针常量:指向某一个位置的常量(以后重点)
6.字符串常量: 多个字符用双引号
---------------------------------------------------------------------------------------------------------------------------------------------------------------
三、2进制计算
1.进制关系
十进制: 用0到9表示,满10进1,9+1=10,99+1=100 ,100-1 =99
二进制:用0和1表示:满2进1,借1当2. 10 -1 = 1; 1 + 1 = 10
十六进制:用0到9和ABCDEF表示,满16进1, 9 +1=0XA F+1=0X10
八进制:用0到7表示,满8进1,借1当8 ;7+1=10;7-1=6 ;77+1=100
**
2.二进制计算
**
移位运算:算数左移 < ,把左边第一个删除,右侧添加0
10010010 < 1 = 00100100
10010010 < 8 = 0
10010010 < 3 = 10010000
算数右移: > ,把右侧删除一个,左侧添加0
10010010 > 3 = 00010010
与: & ,相同位上都是1则结果为1,否则为0. (有0则0)
10010 & 1011 00010010
& 00001011
------------------
00000010
或: | ,相同位上有1则结果位1,否则为0,(有1则1)案例: 10010 | 1011 = 11011
取反:~,如果是1则取反的结果位0,如果是0则取反的结果位1,案例 ~100110 = 011001
3.进制转换
十六进制和二进制转换
2进制转16进制:二进制的4个位,表示16进制中的1位。 案例:1000 1001 = 0x89
案例: 11011 --> 0001 1011 =0x1B
16进制转2进制:一个16进制位表示4个2进制位 案例: 0xA0B = 1010 0000 1011
十六进制和10进制转换:
10进制 0~9 10 11 12 13 14 15 16
16进制 0~9 A B C D E F 0X10
8进制和2进制的计算
2进制转8进制,3个2进制位转换成1个8进制位
011 011 010 --> 332
8进制转2进制,1个8进制位转换成3个二进制位
7024 = 111 000 010 100
10进制转换成2进制,把10进制短除法2后直到商0后得到的余数从下往上写就是2进制
2进制转10进制,用1 2 4 8 16 1101011 = 64+32 + 8+ 2+1 = 107
---------------------------------------------------------------------------------------------------------------------------------------------------------------
四、变量:可以变的量,可以修改的量(64为系统)
1、整形是 int ,表示整数如-20, 0, 1。 总共是4字节可以用sizeof(int)打印,表示的数值范围是-21亿~+21亿
短整形 short ,表示短整数。 总共是2字节16位,表示的数值范围是65535
长整形 long, 表示长整数。 总共是8字节。对long类型赋值,需要在常量后加L ,long x = 10L;
2.浮点型: float ,单精度,表示6位小数,表示小数类型,1.2,-2.3, 0.0,总共多少位,给float类型复制需要加f。
double,双精度,表示12位小数,总共多少位
3.字符类型: char ,表示字符如‘a’,‘b’, 在内存中占1个字节。范围是0~255,sizeof(char) = 1;
ascii:是把字符和整形对应的一个表 ‘0’—48 ,‘A’—65, ‘a’—97, ’ '—32 , ‘\0’—0
转义字符: 和原本意思不一样了。 \n —换行 \t----teb \—一个\ %%—表示一个% " ----表示双引号
4.字符串类型:没有对应变类型,“aa”,char* p = “asdfgasdg”;
5.每个类型都分为有符号和无符号
正数是无符号,负数是有符号,如果只想表示正数则用无符号。关键字 unsigned
例如:unsigned int x = 123;
补充: 1字节 = 8位
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
1EB = 1024TB
---------------------------------------------------------------------------------------------------------------------------------------------------------------
五、输入和输出 加上#include<stdio.h>
1.在屏幕上输出,printf
格式: printf("照常输出部分 占位符 ",变量);
格式: printf("照常输出 %d %c\n",变量1,变量2);
printf("int = %10d \nfloat = %10.5f\n",x,z);
占位符: %d--------打印int整形的值 ,%10d 总共显示10位,不够的部分用空格替换,右对齐
%o(字母o) 打印8进制
%x---------打印16进制
%hd--------打印short的值
%ld--------打印long的值
%u---------打印无符号数据的值
%c-------- 打印字符类型
%f-------- 单浮点型,%5.3f总共5位,小数点占3位。
%lf--------双精度浮点型
%s---------字符串
%p---------指针
2.输入 scanf
格式: scanf("占位符",&变量);
scanf("占位符,占位符",&变量1,&变量2);如果是逗号,则输入的时候也要用逗号隔开
scanf("占位符 占位符",&变量1,&变量2);如果是空格,输入的时候也是空格隔开
---------------------------------------------------------------------------------------------------------------------------------------------------------------
六、运算符
1.算数运算符
+加法 计算两个数的和,例如 int a = 10 ;int b = 20; a + b ,其中a和b的值不变,a+b得到的是a和b的结果。如果a修改需要赋值
- 减法 同上
*乘法 同上
/ 除法 整除,所有的小数部分丢弃。 12/21 = 0 12 / 4 = 3; 12/5=2
% 取模,余数,得到相除后的余数 12%21=12 ,12%4 = 0; 12%5=2 ,值1%值2把结果限定在值2范围内,123%5=3
2.赋值运算符
格式: 左值= 右值; 把右值给到左值
复合赋值运算符:+= ,*= ,-=,/= ; %=; |= ; &=; >>=;<<= (算数运算符,二进制运算符)
例如: int x = 10; int y = 20; y =x+2; 等价于 y = y(x+2);是240
注意: 左值不可以是常量 ,只可以是变量。不可以有其他的运算。
3.关系运算符
关系运算符的结果只有两个,真或者假,非0为真,0表示假。
> 如果左值大于右值,结果为真,否则为假
>= 如果左值大于或者等于右值,结果为真
< 如果左值小于右值结果为真
<= 如果左值小于等于右值,结果为真
== 如果左值和右值相同则结果为真,否则为假
!= 如果左值和右值不相同则结果为真
注意:一般情况用于判断语句,比如说if语句中。
在比较运算符==时候,需要把常量放前面,以防出现赋值运算符
关系运算符连用是不正确的,例如:10 < time < 15
4.逻辑运算符:(双目)
&& : 表达式左值和右值都为真则结果为真,否则为假 。&表示按位与
|| :表达式左值或者右值有一个为真则结果为真。|表示安位或。
! :逻辑非,如果表达式为真则结果为假, !(2>6)
注意:&&有截取功能,如果第一个表达式(左值)为假,右侧的值不计算。
|| 也有截取功能,如果第一个表达式为真,则第二个表达式不会计算。
案例1:请输入你的年龄,和金钱。如果年龄小于18岁,并且钱大于10000,则是高富帅,否则为屌丝。(代码day01/gaofushuai.c)
练习2:输入三个数,请判断哪个值最大,打印出最大值。
5.自增自减运算符 (单目)
前加加:++x; 表示x= x+1;是先自己加1后再做其他事情
后加加:x++; 表示x = x+1;是先计算完其他操作再自己加1(暂时理解遇到分号加1)
前减减:–x:
后减减:x–:表示x = x-1;是先计算完其他操作再自己减1(暂时理解遇
到分号减一)
6.三目运算符 (运算符有三个值)
格式: 表达式1 ? 表达式2:表达式3
执行:如果表达1为真则执行表达式2,如果表达式1为假则执行表达式3.
三目运算符可以代替简单的if语句使用。并且三目运算符可以嵌套使用。
7.运算符的优先级
优先级:先计算的运算符优先级高,否则优先级低
优先级顺序:括号–>单目–>算术运算符–>移位运算符–>关系运算符–>位运算符–>逻辑运算符–>三目运算符–>赋值运算符–>逗号运算符。
---------------------------------------------------------------------------------------------------------------------------------------------------------------
七、分支语句
1.if分支语句
if格式:
if(条件判断)
{
语句1;
}
else
{
语句2;
}
执行:如果条件1满足则执行语句1,不满足执行语句2;
2.格式2:
if(条件判断1)
{
语句1;
}
else if(条件判断2)
{
语句2;
}
else
{
语句3;
}
执行: 先判断条件1是否满足,
如果满足则执行语句1后结束if语句,
如果条件1不满足继续判断条件2,
如果条件2满足则执行语句2,否则执行语句3;
注意:有if不一定有else if和else 但有else必定有if ,有else if也必定有if。
练习: 判断某一个数是不是回文:12321 22222,32123 (day01/10same.c)