1.环境搭建-创建项目
创建新项目-->空项目-->源文件创建.c文件
2.main
main函数是有且只有一个,为入口函数
int main()
{return 0;}
3.printf(输出函数)
printf("hello world");
4.scanf(输入函数)
scanf("%d",a);
5.头文件
#include<stdio.h> //对函数声明
6.注释
单行注释 //后跟注释内容
快注释 /* 注释内容 */
7.进制
二进制:0b1010
十进制:10
十六进制:0xa
八进制:012
//以上进制都表示阿拉伯数字10
8.进制转化
二进制-->十进制 //要从右到左用二进制的每个数去乘以2的相应次方
十进制-->二进制 //采用"除2取余,逆序排列
二进制-->十六进制 //二进制数每四位一组,转换为相应的十六进制数,10为a,11为b...15为f
十六进制-->二进制 //通过除二取余得二进制数,每个十六进制为四个二进制,不足左边补零
9.数据在内存中是以补码形式存储的
对于正数来说,其原码,反码,补码是相同的
对于负数来说
原码为:1+数值位 //首位1为符号位,表示负数
反码为:1+按位取反的数值位
补码为:1+反码数值位+1
10.数据类型
整型:
short(短整型,占2字节,打印类型为%hd)
int(整型,占四字节,打印类型为%d)
long(长整型,占四字节,打印类型为%ld)
longlong(长长整型,占八字节,打印类型为%lld)
unsigned(无符号整型)//只表示数据量,无正负,首位不是符号位
浮点型:
float(单精度浮点型,占4字节,打印类型为%f)//标识在数后加F,比如f=3.14F
double(双精度浮点型,占8字节,打印类型为%lf)//无标识默认为此类型
浮点型比较有俩种方法
第一种:f=3.14F //目的是让单精度和单精度相比
第二种: fabs(f-3.14)<0.000001 //差值过小认为相等
字符型
char(字符型,占1字节,打印类型为%c)
char a;
a=’A' //定义字符必须为单引号,可以直接赋值ASCLL码
ASCLL码 :A的ascll码为65 大写A+32=小写a,即a的ascll码为97
char c;
c = 'A';
c = 65;
printf("%c--%d \n", c,c); //值为A--65
char c2 = '\n'; //转义字符
printf("%c", c2); //输出一个空行
布尔类型: 保存逻辑值 是true 1(非0的数) 否false(0)
c99 c语言中加入了布尔类型 bool,跟其他语言的布尔类型对比不完善
所以使用应该为:_Bool b; //vs对c99支持不完善,vs中的布尔类型_Bool
11.sizeof //计算数据类型或变量所占字节个数
printf("%u",sizeof(short)); //结果为2
short(取值范围为-2^15-----2^15-1)
#include<stdint,h> //定义整型大小
int16_t(占了16字节)
#include<limts.h>SHRT_MAX
12.转义字符
\n换行符 \r回车符 \t水平制表符 \\表示一个反斜线字符\
13.运算符
算数运算符
+加 -减 *乘 /除(整除整,结果只为整数) %取余(只能对整型取余)
判断一个数是不是偶数:
int n;
scanf_s("%d", &n);
if (n % 2 == 0) // 表示是否相等
{
printf("偶数\n");
}
else
{
printf("奇数\n");
}
赋值运算符
= += -= *= /= %=
比较运算符(用于比较,并返回一个真值或者假值,即结果只为1或0)
> >= < <= == !=
逻辑运算符
&& 1&&1 -->1 必须全部满足,与
|| 0||0--->0 只满足一个,或
! 颠倒黑白,非
短路问题
int x, y;
x = 0;
y = 1;
x && y++;//x为0 整个表达式结果已经为0了 计算机不会在继续往后计算 y++不会执行
x=0,y=1
y++&& x;//0; y=2
y || x--; 同理x--不执行
y=1,x=0
位运算
<< 左移 ,在一定范围内 ,左移n位 相当于是 a * 2^n
>> 右移 ,左右移动有范围,缺少部分补零
& 按位与 1&1 == 1 1&0 == 0
| 按位或 1|0 == 1 0|0 == 0
^ 按位异或 1 ^ 0 == 1 1^ 1 == 0 0^0 == 0
~ 按位取反
short a = 3;
printf("%hd\n", a << 4); //值为48
0000 0000 0000 0011-->0000 0000 0011 0000
printf("%hd\n", a << 14); //值为-16384
0000 0000 0000 0011-->1100 0000 0000 0000 //首位为1,表示负数
a++ 先用 再自增
++a 先自增 再用
A: a=5; b=++a; // 相当于a=a+1;b=a; 结果是a=6,b=6
B: a=5; b=a++; // 相当于b=a;a=a+1; 结果是a=6,b=5
C语言有这样一个规则:每一个符号应该包含尽可能多的字符。也就是说,编译器将程
序分解成符号的方法是,从左到右一个一个字符地读入,如果该字符可能组成一个符号,
那么再读入下一个字符,判断已经读入的两个字符组成的字符串是否可能是一个符号的组
成部分;如果可能,继续读入下一个字符,重复上述判断,直到读入的字符组成的字符串
已不再可能组成一个有意义的符号。这个处理的策略被称为“贪心法”。