在C语言中字符串就是用双引号引起来的一串字符**
#include
int main()
{
"abcdefg";//它就是一个字符串
return 0;
}
数组是一组相同类型的元素
#include
#include
int main()
{
char arr[] = "hello";
char arr1[] = "abc";
char arr2[] = { 'a', 'b', 'c' };
int len = strlen("abc");
printf("%d\n", len);//打印结果:3
printf("%d\n", strlen(arr1));//打印结果:3
printf("%d\n", strlen(arr2));//打印结果:15,是随机值
return 0;
}
转义字符就是转变了一个字符原来的意思
#include
int main()
{
printf("c:\test\test.c");
printf("c:\\test\\test.c");//打印结果:c:\test\test.c
printf("ab\ncd");
printf("%c\n", '\'');//运行结果为一个单引号
printf("\a\a\a");
return 0;
}
上述代码中:
\ddd:ddd表示1~3个八进制数字,如\130=X
\xdd :dd表示2个十六进制数字,如:\x30=0
#include
int main()
{
printf("%c\n", '\130');//打印结果:X(它的ASCII码值是88).
//8进制的130是十进制的多少呢?
// 1 3 0
// 8^2 8^1 8^0=1*8^2+3*8^1+0*8^0=64+24+0=88.
printf("%c\n", '\101');//A(它的ASCII码值是65),8进制的65是:101
printf("%c\n", '\x30');//打印结果:字符0
//3*16^1+0*16^0=48
//48对应的ASCII码值为0
练习:下列字符串的长度为多少?
#include
int main()
{
printf("%d\n", strlen("c:\test\328\test.c"));//结果:14
return 0;
}
注释:是用来解释复杂代码的
“//”:是C++的注释风格:它可以注释一行也可以注释多行
/**/:是C语言的注释风格:它不支持嵌套注释
int mian()
{
//int b = 0;
/*int b = 0;*/
}
#include
int main()
{
int input = 0;
printf("学习IT:>\n");
printf("不学IT (1/0)>:");
scanf("%d", &input);
if (input == 1)
{
printf("多挣钱!!\n");
}
else
{
printf("少挣钱……\n");
}
return 0;
}
注意:当只有一句话时if语句中可以不用写大括号,超过一句话时就需要写大括号,其他语句也一样。
#include
int main()
{
int line = 0;
while (line < 30000)
{
printf("每天写代码:%d\n",line);
line++;
}
if (line == 30000)
{
printf("拿到一个好offer\n");
}
return 0;
}
两个数普通相加
#include
int main()
{
//定义两个变量并赋初值
int num1 = 0;
int num2 = 0;
scanf("%d%d", &num1, &num2);
int sum = num1 + num2;
printf("sum=%d\n", sum);
return 0;
}
用函数方式实现两个数相加
int Add(int x,int y)
{
int z = 0;
z = x + y;
return z;
}
int main()
{
//定义两个变量并赋初值
int num1 = 0;
int num2 = 0;
scanf("%d%d", &num1, &num2);
int sum=Add(num1, num2);
printf("sum=%d\n", sum);
return 0;
}
数组:是一组相同类型的元素的集合
#include
int main()
{
int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int i = 0;
while (i < 10)
{
printf("%3d", arr[i]);
i++;
}
//创建一个字符数组,[5]存放5个字符,但{ 'a', 'b', 'c' }只有三个字符,这是不完全初始化,剩余的默认为0.
char ch[5] = { 'a', 'b', 'c' };
return 0;
}
上述代码解析:
C语言中有很多操作符
下面结合代码演示对常用操作符进行讲解
1.算术操作符:+、-、*、/、%
#include
int main()
{
int a = 9 / 2;//运行结果:4
int a = 9 / 2.0;//运行结果:4.5
int a = 9 % 2;//运行结果:1
printf("%d\n", a);
return 0;
}
代码注解:
2.移位操作符:>>(右移操作符) <<(左移操作符)
#include
int main()
{
int a = 2;
int b = a << 1;
printf("%d\n", b);//运行结果为:4
return 0;
}
上述代码解析:
3.位操作符
4.赋值操作符:= 、+= 、-= 、*= 、/= 、&= 、^=、|=、 >>= 、<<=
int main()
{
int a = 2;// =是赋值,把2赋给a
a = a + 5;
a += 5;// +=复合赋值,a += 5;等于 a=a + 5;
a = a - 3;
a -= 3;
a = a % 3;
a %= 3;
}
5.单目操作符
! : 逻辑反操作
-:负值
+:正值
&:取地址
~ :对一个数的二进制位按位取反
–:前置、后置–
++:前置、后置++
“*” :间接访问操作符(解引用操作符)
(类型):强制类型转换
sizeof :操作数的类型长度(以字节为单位)
单目操作符中!操作符讲解
int main()
{
int a = 10;//a为真
printf("%d\n", !a);//!a(非a);把a变为假; 运行结果:0
if (a)
{
//如果a为真,做事
}
if (!a)
{
//如果a为假,做事
}
return 0;
}
单目操作符中~操作符讲解
~:表示对一个二进制位按位取反
拓展补充:整数在内存中存储的是补码,一个整数的二进制表示有三种
原码:是一种计算机中对数字的二进制定点表示方法,其最高位为符号位,符号位整数位0,负数为1,其余位表示数值的大小;
已知原码求反码:符号位不变,其余的1变为0,0变为1;
已知反码求补码:反码的二进制序列加1;
已知补码求原码:补码-1得到反码,反码再符号位不变,其他位按位取反得原码。
#include
int main()
{
int a = 0;
printf("%d\n", ~a);//运行结果:-1
return 0;
}
根据上述代码讲解~操作符
疑问:为什么打印结果为-1?
答:二进制和补码都是内存里面的值,%d打印出的真实的值是原码。
单目操作符中前置++ 后置++操作符讲解
前置++
#include
int main()
{
int a = 10;
int b = ++a; //前置++,先++,再使用,即a先++,b再使用。
printf("%d\n", b);//打印结果:11
printf("%d\n", a);//打印结果:11
return 0;
}
后置++
int main()
{
int a = 10;
int b = a++; //后置++,先使用,再++,即b先使用,a再++。
printf("%d\n", b);//打印结果:10
printf("%d\n", a);//打印结果:11
return 0;
}
单目操作符中“强制类型转换”操作符讲解
int main()
{
int a = (int)3.14;
printf("%d\n", a);
return;
}
上述代码中:
int main()
{
int a = 10;
printf("%d\n", sizeof(int));//求类型大小
printf("%d\n", sizeof a);//求变量大小
return 0;
}
sizeof计算一个数组的大小
int main()
{
int arr[10] = { 0 };
printf("%d\n", sizeof(arr)); //运行结果:40
printf("%d\n", sizeof(arr[0])); //运行结果:4
int sz = sizeof(arr) / sizeof(arr[0]);
printf("%d\n", sz);//运行结果:10
return 0;
}
上述代码中:
6.关系操作符
=
<
<=
!= //用于测试“不相等”
== //用于测试“相等”
7.逻辑操作符
&& 逻辑与
|| 逻辑或
int main()
{
int a = 3;//真
int b = 4;//真
int c = a&&b;//真
printf("%d\n", c);//运行结果:1
return 0;
}
|| 逻辑或:只要有一个真就为真,两个都为假才是假
int main()
{
int a = 0;//假
int b = 0;//假
int c = a||b;//假
printf("%d\n", c);//运行结果:0
return 0;
}
8.条件操作符
exp1 ?exp2 :exp3
条件操作符也叫三目操作符
exp1 ? exp2 : exp3
表达式1 ? 表达式2 : 表达式3 三个操作数
解释:exp1(表达式1)如果成立,exp2计算,整个表达式的结果就是exp2的结果
exp1(表达式1)如果不成立,exp2不计算,exp3计算,整个表达式的结果是exp3的结果
int main()
{
int a = 0;
int b = 3;
int max = 0;
if (a > b)
max = a;
else
max = b;
printf("%d\n", max);//打印结果为3
return 0;
}
//用条件操作符写
int main()
{
int a = 0;
int b = 3;
int max = 0;
max = a > b ? a : b;
printf("%d\n", max);//打印结果为3
return 0;
}
9.逗号表达式
是逗号隔开的一串表达式,就是逗号表达式
exp1,exp2,exp3,expN
int main()
{
//(2, 4 + 5, 6);//逗号表达式
int a = 0;
int b = 3;
int c = 5;
int d = (a = b + 2, c = a - 4, b = c + 2);//逗号表达式是从左向右依次计算的,整个表达式的结果是最后一个表达式的结果
printf("%d\n", d);//运行结果;3
return 0;
}
10.下标引用、函数调用和结构成员
下标引用操作符:[]
函数调用操作符:()
.
->
下标引用操作符:[]
int main()
{
int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
printf("%d\n", arr[5]);//[]就是下标引用操作符,打印结果;6
return 0;
}
函数调用操作符:()
调用函数的时候,函数名后面的()就是函数调用操作符
int main()
{
printf("hehe\n");//printf后面的()就是函数调用操作符,里面有一个操作数
printf("%d", 100);//它里面有两个参数,即两个操作数,函数调用操作符可以传多个参数,也可以一个不传。
return 0;
}