初试c语言之第二次笔记

初试c语言之第二次笔记,第1张

初识c语言之第二次笔记 一:常量 1:字面常量
#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中stdio.h的含义么?
std代表standard 标准,i代表input 输入,o代表output 输出
#include也叫标准输入输出头文件

3:#define 定义的标识符常量
#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)。

3:注释

三:选择语句

如果你好好学习,校招时拿一个好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 是 *** 作符,是计算所占内存空间的大小

(3):++ –

前置++与- -:先使用(打印),后++,- -
后置++与- -:先++,- -,后使用(打印)

=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:下标引用、函数调用和结构成员
[]    ()     .    ->

其中一部分 *** 作符涉及二进制的问题,我们先跳过

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1325021.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-12
下一篇2022-06-12

发表评论

登录后才能评论

评论列表(0条)

    保存