#include2: const 修饰常变量int main() { //字面常量 3.14; "abcdef"; 'a'; return 0; }
注意:常变量不是常量,是常~变量
一开始不加const的时候,num被定义后可以直接修改变量
#includeint main() { int num = 100; num = 200; printf("%d ",num);//200 return 0; }
加了const之后
#includeint main() { const int num = 100; num = 200; printf("%d ",num);//err 不能直接修改 return 0; }
上面例子上的 num 被称为 const 修饰的常变量, const 修饰的常变量在C语言中只是在语法层面限制了变量 num 不能直接被改变,但是num本质上还是一个变量的,所以叫常变量。
插个小知识点——你知道头文件#include
std代表standard 标准,i代表input 输入,o代表output 输出
#include
#include#define MAX 1000 int main() { int a = MAX; printf("%dn ",MAX); //1000 MAX = 2000;//err return 0; }
上述例子上的MAX被称为define定义的标识符常量,与const结果一样,define定义之后,MAX不能直接被改变。
4:enum 枚举常量枚举常量比较少见,但还是稍微提一下。
生活中的枚举就是一一列举
#includeenum Sex//一一列举 { //注:枚举类型中列举的可能取值都是枚举常量 MALE,//内部储存为0 FEMALE,//内部储存为1 SECRET//内部储存为2 };//本代码的括号中MALE,FEMALE,SECRET是枚举常量 int main() { //枚举常量演示 printf("%dn", MALE); printf("%dn", FEMALE); printf("%dn", SECRET); return 0; }
注意:枚举常量的默认是从0开始,依次向下递增1。如果把上述例子中的MALE,改成MALE=4,则FEMALE SECERT向下递增,打印出来的MALE FEMALE SECRET分别为4 5 6。
二:字符串、转义字符与注释 1:字符串"hello world" "a" " "
这种由双引号引起来的一串字符称为字符串字面值,或者简称字符串。C语言没有字符串对应的数据类型。
注:字符串的结束标志是一个 的转义字符。在计算字符串长度的时候 只是结束标志,不算作字符串的内容。
下面的知识点是易错点!!! 体现出了 的重要性
#include2:转义字符#include //strlen库函数的头文件 int main() { char arr1[]="abcdef"; char arr2[]={'a','b','c','d','e','f'}; //这两个数组定义一的方式一样吗? printf("%sn",arr1); printf("%sn",arr2); printf("%dn", strlen(arr1)); printf("%dn", strlen(arr2)); //strlen是一个库函数,string strlen的缩写,用来求字符串长度,统计的是 之前出现了多少个字符 //输出: //abcdef //(abcdef后面的部分随机(直到找到 才停下来)) //6 //(随机值) //原因:arr1数组第7个元素为 ,而arr2数组只存储了6个字符,第一个可以找到 //字符串的结束标志,而第二个找不到,只能不断地往后找直到找到 ,strlen函数以也以 为结束的标志,但其不计算 ,原理相同 return 0; }
#includeint main() { // ? 在书写连续多个问号时使用,防止他们被解析成三字母词 printf("(are you OK??)n"); //三字母词: ??) -> ] //输出:(are you OK] printf("(are you OK??)n"); //如果改成(are you OK??)就将??转义为?? //输出即为(are you OK??) // ' 用于表示字符',而不再被作为表示字符的符号 // " 用于表示一个字符串内部的双引号, // \ 用于表示一个反斜杠,防止它被解释为一个转义序列符。 printf("%c",'''); //输出:' printf("""); //输出:" printf("\n"); //输出:n //这里的将特殊字符转义为普通的字符,加上表示转义后面的字符 // a 警告字符,蜂鸣,电脑会发出声音 printf("a"); // n 换行 printf("n"); // r 回车 // t 水平制表符 相当于键盘上的tab键 // ddd ddd表示1~3个八进制的数字。 如:130 printf("%c",'130');//注意这是一个字符 // xdd dd表示2个十六进制数字。 如:x30 printf("%c",'x63');//注意这也是一个字符 return 0; }
易错题:
printf("%d", strlen("c:test628test.c"));
最后输出结果是14 因为t是算一个字符, 62算一个字符,注意:在八进制中没有8(易错!!).
二进制:(0~1),
八进制:(0~7),
十进制:(0~9)
十六进制:(0~15)。
如果你好好学习,校招时拿一个好offer,走上人生巅峰。
如果你不学习,毕业等于失业,回家卖红薯。
这就是选择!
#include四:循环语句int main() { int coding = 0; printf("你会去敲代码吗?(选择1 or 0):>"); scanf("%d", &coding); if(coding == 1) { prinf("坚持,你会有好offern"); } else { printf("放弃,回家卖红薯n"); } return 0; }
有些事必须一直做,比如我们,日复一日的学习。
在C语言中如何实现循环呢?
while语句-这里简单提一下
for语句(后期讲)
do … while语句(后期讲)
//while循环的实例 #include五:函数int main() { printf("加入比特n"); int line = 0; while(line<=20000) { line++; printf("我要继续努力敲代码n"); } if(line>20000) printf("好offern"); return 0; }
#includeint main() { int num1 = 0; int num2 = 0; int sum = 0; printf("输入两个操作数:>"); scanf("%d %d", &num1, &num2); sum = num1 + num2;//这个代码只能写两个数相加之和 比较有局限性,写成函数形式就比较方便 printf("sum = %dn", sum); return 0; } //上述代码,写成函数如下: #include int Add(int x, int y)//int表示返回类型为整型,Add表示函数名,int x与int y表示形参的类型和命名 { int z = 0; z = x + y; return z; } int main() { int num1 = 0; int num2 = 0; int sum = 0; printf("输入两个操作数:>"); scanf("%d %d", &num1, &num2); sum = Add(num1, num2); printf("sum = %dn", sum); return 0; }
我们用生活中的例子来理解函数
上述例子中 num1与num2表示输入数据,Add表示函数,最后经过函数处理产出了一个结果z放到sum(产品)里面去。
那么函数是怎么调用的呢?
当代码走到了sum = Add(num1,num2);的时候 往int Add(int x,int y)那里走,把num1传递给x,把num2传递给y,算出x+y的值放到z里面,z再返回,将返回的值放到sum里面去,然后再打印。
六:数组 1:数组的定义要存储1-10的数字,怎么存储?
C语言中给了数组的定义:一组相同类型元素的集合。
int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个整形数组,最多放10个元素
2:数组的下标
C语言规定:数组的每个元素都有一个下标,下标是从0开始的。
数组可以通过下标来访问的。
int arr[10] ={0};
//int表示这个数组的每个元素都是整型
//arr为数组名,[10]表示数组中共有10个元素
//={0}表示对数组进行初始化,使数组的第一个元素等于零
3:数组的使用
char ch1[5] = {0};//不完全初始化,剩余的默认为初始化为0
char ch2[] = {'a','b','c'};
char ch3[] = {0};//ch3里面只有一个元素——0
char ch = 0;//这个0实际上是 ,ASCII码值为0
int arr1[10] = {1,2,3,4,5,6,7,8,9,10};
printf("%d ", arr1[8]);//9
printf("%dn", arr1[18]);//越界访问
int arr2[18] = {1,2,3,4,5,6,7,8,9,10};
printf("%dn", arr[10]);//0,因为不完全初始化导致10后面全为0
输入10个值给数组
#include七:操作符 1:算术操作符int main() { int arr[] = {0}; int i = 0; //while循环 while(i < 10) { scanf("%d ",&arr[i]); i++; } i = 0;//i再次初始化 while(i < 10) { printf("%d ",arr[i]); i++; } return 0; }
+ - * / %
#include2:移位操作符int main() { int a = 7/2; //七除二得三余一,结果为三 int b = 7%2; //取模就相当于取余且取模操作符的左右数字只能是整数 printf("%dn",a); printf("%dn",b); //输出: //3 //1 //此时得到的a与b均为整数运算得到的值 float a = 7.0/2; //当我们输入2.0这样的浮点型常量时,编译器会默认其为double类型 float b = 7/2.0; //当我们需要进行小数运算时,只需要除号的左右的数字其一为浮点数即可 printf("%.1fn",a); printf("%.2fn",b); //%f用于打印float类型的数据,前面的.1表示小数点后保留一位,.2表示保留两位 //输出: //3.5 //3.50 return 0; }
两个大于和两个小于 >> <<3:位操作符
& ^ |4:赋值操作符
= += -= *= /= &= ^= |= >>=
我们这里暂时只提部分
#include5:单目操作符int main() { int a = 10; a = 20; a += 5;//a加等于5,即表示a = a + 5; printf("%d",a);//25 a -= 5;//a减等于3,即表示a = a - 5; printf("%d",a);//20 a *= 2;//等于a = a * 2; return 0; }
其与双目操作符的区别
比如 2 + 3,2被称为左操作数,3被称为右操作数,有两个操作数我们就叫它双目操作符,单目操作符实际上只有一个操作数
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
-- 前置、后置--
++ 前置、后置++
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换
(1):!逻辑反操作符
在c语言中,如何表示真假?
答:0表示假,非0表示真
#include(2):sizeofint main() { int a = 10; if(a)//如果a为真 printf("hehen");//非0为真,因此打印出hehe return 0; }
#includeint main() { int arr[10]={0}; printf("%dn",sizeof(arr));//这里用%zu更严谨,%d也是可以的 //计算整个数组的大小 40 printf("%dn",sizeof(arr[0])); //计算数组一个元素的大小 4 printf("%dn",sizeof(arr)/sizeof(arr[0])); //计算数组元素的个数 10 int a = 0; printf("%d",sizeof(a));//这个地方的()是可以省略的,计算a的大小 4 printf("%d",sizeof a);//这个代码也是正确的,内容一致 4 //如果sizeof为函数则必须加上括号,这里不加括号也是正确的,因此sizeof只是一个操作符而不是函数 printf("%dn",sizeof(int)); //这个操作符也可以计算类型的大小 4 //printf("%dn",sizeof int);是不对的必须加括号 return 0; }
strlen 与 sizeof 的区别:
strlen 是库函数,只能针对字符串,求字符串长度,计算字符串中 之前的字符个数
sizeof 是操作符,是计算所占内存空间的大小
前置++与- -:先使用(打印),后++,- -
后置++与- -:先++,- -,后使用(打印)
#include(4):(类型)强制类型转换int main() { int a = 10; int b = a++;//先使用后++,表示先把10赋给b然后在在a的基础上加1 // b=a;然后a=a+1; printf("%d %dn",a,b);//11 10 a = 10; int c = a--;//同样,先使用后--,表示先把10赋给c然后在在a的基础上减1 // c=a;然后a=a-1; printf("%d %dn",a,c);//9 10 a = 10; int d = ++a;//先++后使用,表示先在a的基础上加1再把11赋给b printf("%d %dn",a,d);//11 11 // a=a+1;然后d=a; a = 10; int e = --a;//同样,先--后使用,表示先在a的基础上减1再把9赋给b printf("%d %dn",a,e);//9 9 // a=a-1;然后e=a; a = 10; printf("%dn",a--);//先使用,再--,所以打印出10 printf("%dn",a);//,减完之后为9,所以打印出9 return 0; }
#include6:关系操作符int main() { int a = 3.14//err,int是整型 //强制转换 int a = (int)3.14;//指把3.14这个double类型的常量强制转化为int类型并赋值给变量a printf("%dn",a);//打印3,浮点数强制类型转换为整数会丢失精度 return 0; }
特意强调下两个字符串的比较大小
#includeint main() { char arr1[] = "abcdef"; char arr2[] = "abcdef"; //两个字符串大小相等是不能用==的,应该用strcmp函数 if(strcmp(arr1,arr2) == 0) printf("==n"); else printf("!=n"); }
大于:> 大于等于:>= 小于:< 小于等于:<=下标引用、函数调用和结构成员: 不相等:!= 相等:==7:逻辑操作符
逻辑与: && 逻辑或: ||8:条件操作符
如果第一个表达式exp1为真,则整个表达式的值为表达式exp2的值,否则整个表达式的值为表达式exp3的值
exp1 ? exp2 : exp3
#include9:逗号表达式int main() { int a = 10; int b = 5; printf("%d",a > b ? a : b);//a > b,a,b对应三个表达式 //a>b成立,表达式的值为a的值 //类似于选择语句,找出其中的较大值,输出为10 a = 1;//此时我们改变a的值 printf("%d",a > b ? a : b); //a>b不成立,表达式的值为b的值 //输出为5 return 0; }
特点:从左向右依次计算,整个表达式的值是最后一个表达式的结果
exp1, exp2, exp3, …expN
#include10:下标引用、函数调用和结构成员int main() { int a = 3; int b = 5; int c = 0; int d = (a += 2,b = b - c + a,c = a + b); // a = 5, b = 10, c = 15 -> d printf("%dn",d);//15 return 0; }
[] () . ->
其中一部分操作符涉及二进制的问题,我们先跳过



