# include <stdio.h>
# include<string.h>
int main()
{
/*
// 1、四种常量
//(1)字面常量
3;
100;
3.14;
*/
/*
//(2)const 修饰的常变量
const int num = 4; //const具有常属性,但仍然是变量;
printf("num = %d\n",num);
//此时num的值不能被修改了
//num = 8;
//printf("%d\n",num);
*/
/*
//(3)#define 定义的标识符常量
#define MAX 10
int arr[MAX] = {0};
printf("MAX = %d\n",MAX);
*/
/*
//(4)枚举常量
//枚举就是一一列举的意思;枚举关键字-enum
enum Sex
{
MALE,
FEMALE,
SECRET
};
enum Sex s = FEMALE; //其中s可以改变,但是FEMALE不能改变的,默认是1
printf("%d\n",MALE);
printf("%d\n",FEMALE);
printf("%d\n",SECRET);
*/
// 2、字符串,转义字符,注释
/*
// (1)字符串
//“”双引号里面的是字符串,字符串的结束标志是‘\0’,但是'\0'不能算字符串内容。
char arr1[] = "abc"; // 数组的形式储存
// “abc”= 'a', 'b', 'c', '\0' ('\0'的值是0(阿斯克码)) ('\0'是字符串的结束标志)
//ASCII编码,因为电脑只能识别二进制的数字,故需要将每个字母符号等对应数字;
char arr2[] = {'a', 'b', 'c', '\0'}; //此种形式需要主要添加0表示字符串的结束标志;
char arr22[] = {'a', 'b', 'c', 0};
char arr23[] = {'a', 'b', 'c'};
printf("%s\n",arr1);
printf("%s\n",arr2);
printf("%s\n",arr22);
printf("%d\n",strlen(arr1));// strlen 字符串的长度
printf("%d\n",strlen(arr2));
printf("%d\n",strlen(arr23));// 此时字符串没有结束标志,长度为随机值
*/
/*
//(2)转义字符
//转义字符-转变原来的意思
// \n换行;\t水平制表符;\\反斜杠,防止他被解释为一个转义序列符;
// \ddd ddd表示1-3个八进制的数字。如\130 130是八进制转化为十进制是88,ASCII对应的是X;
// \xdd dd表示2个十六进制数字。如\x30 同理对应的是0;
printf("%c\n",'\130');
printf("%c\n",'\x30');
*/
//(3)注释
//
/* */
/*
//3、选择语句(分支语句)
int input = 0;
printf("加入比特\n");
printf("你要好好学习吗?(1/0)>:");
scanf("%d",&input);
if(input == 1)
printf("恭喜你,好offer\n");
else
printf("回家卖红薯吧!\n");
*/
/*
// 4、循环语句
int line = 0;
printf("加入比特\n");
while(line <= 2000)
{
printf("第%d行代码\n",line);
line++;
}
if (line>=2000)
printf("恭喜你,好offer");
*/
/*
//5、函数
int a = 1;
int b = 2;
int Add(int x, int y)
{
int z = x + y;
return z;
}
printf("%d\n",Add(a, b));
*/
//6、数组: 一组相同类型元素的集合;
/*
int arr1[10] = {1,2,3,4,5,6,7,8,9,10}; //定义一个存放10个整数数字的数组;
//char arr2[20];
//float arr3[15];
//printf("%d\n",arr1[4]);//用下标的方式访问数组的元素,下标从0开始;
int i = 0;
while(i<10)
{
printf("%d ", arr1[i]);
i++;
}
*/
//7、操作符
//(1)算术操作符: +(加) -(减) *(乘) /(除,只取商的整数) %(只取余)
//(2)移位操作符:<<左移 >>右移 //移动的是二进制位
/*int a = 1;
int b = a << 1;
int c = a << 2;
printf("%d\n",b);
printf("%d\n",c);*/
//(3)位(二进制)操作 &按位与 |按位或 ^按位异或
/*
int a= 3; //011
int b= 5; //101
int c = a&b; //001 与操作就是同时为1才是1
int d = a|b; //111 或操作就是只要有1就是1
int e = a^b; //110 异或:对应的二进制位相同就是0,相异就是1;
printf("%d\n",c); // 此时c为001
printf("%d\n",d); // 此时d为111
printf("%d\n",e); // 此时e是110
*/
//(4)赋值操作符 = += -= *= /= %= &= |= ^= >>= <<=
/*
int a = 5;
int b = 5;
a = a+10;
b += 10; // 以上此两种写法是一样的;
printf ("%d\n%d\n",a,b);
*/
//(5)单目操作符 双目操作符 三目操作符
// c语言中,0表示假,其他一切非0表示真;
// ! 逻辑反操作
// - 负值
// + 正值
// & 取地址
// sizeof 操作数的类型长度(以字节为单位)
// ~ 对一个数的二进制按位取反
// -- 前置、后置(后置++,先赋值,再++,)(前置++,先++,再赋值)
// ++ 前置、后置(同上)
// (类型) 强制类型转换 eg: int a = (int)3.14; 将3.14转换为int类型;
/*
int a = 0; //000000000000000000000000
int b = ~a; //111111111111111111111111 按位取反,原来是0就是1;
int c = 5;
int d = c++; //此时d=5;c=6
int e = ++d; //此时d=6,e=6
int arr1[5] = {1, 2, 3, 4, 5};
int arr2[] = {1, 2, 3, 4, 5};
printf("%d\n",a);
printf("%d\n",!a);// ! 逻辑反操作
printf("%d\n",b); // 打印的是这个数的原码
//(原码 反码 补码)只要是整数,内存中存储的都是二进制的补码
//对于正整数,原码反码补码三码统一,负数存储的是补码,转换规则如下;
//补码 111111111111111111111111 补码减1得到反码
//反码 111111111111111111111110 符号位不变,其他位相反得到原码
//原码 100000000000000000000001 (第一位为符号位,1位负,0位正)得到-1
printf("c = %d\n",c);
printf("d = %d\n",d);
printf("e = %d\n",e);
printf("数组大小是%d\n",sizeof(arr1)); //数组元素个数 * int的字节数4
printf("数组arr2有%d个元素\n",sizeof(arr2)/sizeof(arr2[0]));
*/
//(6)关系操作符
// >大于 <小于 >=大于等于 <=小于等于 !=用于测试不相等 ==用于测试相等
//(7)逻辑操作符
//(C语言中表示真假:0表示假;一切非0表示真;)
// && 逻辑与
// || 逻辑或
/*
int a = 0;
int b = 5;
int c = 3;
int d = a && b;//a为假 b为真 d=0
int e = a || b;//a为假 b为真 e=1
int f = b && c;//b为真 c为真 f=1
int g = b || c;//b为真 c为真 g=1
printf("d=%d\n",d);
printf("e=%d\n",e);
printf("f=%d\n",f);
printf("g=%d\n",g);
*/
//(8)条件操作符
//exp1 ? exp2 : exp3 (三目操作符)
/*
int a = 10;
int b = 20;
int max = 0;
max = (a > b ? a : b);
printf("max = %d\n",max);
*/
//(9)逗号表达式
// exp1,exp2,exp3 .....
// (10)下标引用,函数调用和结构成员;
// []下标引用 ()函数调用 . ->
//比如数组里面访问元素就是用下标
//(8)关键字
return 0;
}