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