c语言学习第二天常量 字符串 转义字符 操作符 标识符 枚举 选择语句 循环语句 函数 数组

常量const 常属性

#include<stdio.h>
int main() 
{
    
      
//const常属性
//const常量的属性,变量num前面加了const之后就不能变了 const修饰的常量变量
//这里的num还是变量只是具有了常量的属性
//中国人拿到了美国国籍,但是本质上还是中国人
	const int num = 5;
	printf("%d\n",num);
	num = 8;
	printf("%d\n",num);
	return 0;    

标识符常量

#include<stdio.h>
#define MAX 10 
//define定义的标识符常量
int main()
{
    
    
	int  arr[MAX] = {
    
     0 };
	//标识符define 定义的常量可以存放在数组里
	printf("%d\n", MAX);
	return 0;

枚举常量

//枚举常量
//枚举一一列举出来就是枚举
//性别-男,女,其他
//三原色-红,黄,蓝
//星期1,2,3,4,5,6,7
//枚举关键字--enum
#include<stdio.h>
enum Sex //Sex性别
{
    
    
	MALE, //男
	FEMALE,//女
	SECRET	//其他
};
//MALE , FEMALE ,SECRET    这些就是枚举常量
//这些枚举常量是有值的,而且不能改变,
int main()
{
    
    
	enum Sex s = MALE;//枚举的用法
	printf("%d\n",MALE); //打印值是0
	printf("%d\n",FEMALE);//打印值是1
	printf("%d\n",SECRET);//打印值是2

	return 0;
}
#include<stdio.h>
enum Color
{
    
    
	RED,
	YELLOW,
	BLUE
};
int main()
{
    
    
	enum Color color = BLUE;//枚举的用法
	return 0;
}

字符串 转义字符\0

#include<stdio.h>
int main()
{
    
    
	char arr1[] = "abc";//数组
	//	"abc" -- 'a' 'b' 'c' '\0' --  
   //'\0'是字符串的结束标志,
 //  \0的值是0所以这里用0或'\0'都可以 	
	//"abc"里面有一个隐藏的\0
	char arr2[] = {
    
     'a', 'b', 'c' ,'\0'};
	//'a' 'b'  'c' 数组里面需要自己加上一个\0(字符串的结束标志)
	//数组里面没有隐藏的的\0
	printf("%s\n", arr1);
	printf("%s\n", arr2);
	//注意:字符串的结束标志是一个\0的转义字符,在计算字符串长度的时候\0这是结束标志,不能算字符串的内容
	return 0;
}

计算字符串长度 strlen

strlen 就是string -length

#include<stdio.h>
#include<string.h>  用来strlen就必须要用这个头文件
int main()
{
    
    
	char arr1[] = "abc";
	//"abc后面会有一个隐藏的'\0'"
	char arr2[] = {
    
     'a', 'b', 'c', '\0'};
	//这个后面没有隐藏的'\0'所以要自己加一个\0
	//strlen - string length-计算字符串长度的
	printf("%d\n",strlen(arr1)); 
	//它的字符串长度为3
	printf("%d\n",strlen(arr2));
	//它的字符串长度没加\0之前是随机值,但加了\0之后就是3个
	return 0;

转义字符

转义字符 释义
\? 在书写连续多个问号时使用,防止他们被解析成三字母词
\’ 用于表示常量字符’
\’’ 用来表示一个字符串内部的双引号
\\ 用来表示一个反斜杠,防止它被解释为一个转义序列表。
\a 警告字符,蜂鸣
\b 退格符
\f 进纸符
\n 换行
\ r 回车
\ t 水平制表符
\v 垂直制表符
\ddd ddd表示1~3个八进制的数字。如:\130
\xdd 表示2个16进制的数字.如\x30 0

转义字符\ddd

八进制转十进制

#include<stdio.h>
#include<string.h>
int main()
{
    
    
//strlen - string length-计算字符串长度的
printf("%d\n",strlen("c:\test\32\test.c"));
//下面的32可以理解为3和2
//32 -- 32是2个8进制数字
//32作为8进制代表的那个十进制数字,作为ASCII值对应的字符
//32是两个八进制转化为十进制就是26方法下图所示
//26对应的ASCII值就是 向右的箭头(-->)
printf("%c\n",'\32');
//上面结果就是-->
//所以/32是一个转义字符 它的长度只能算一个
}

8进制转10进制

\xdd 16进制数字转10进制数字

#include<stdio.h>
int main()
{
    
    
	printf("%c\n",'\x61');
	//61 就是两个16进制可以看成6和1
	//转化的结果看下图
	//这里的执行结果是 97对应的ASCII就是 a
	//所以\x61它的长度就是1个字符
	
	return 0;
}

16进制转10进制

选择语句 if else

如果好好学习,那么就会找到好工作
否则 , 那么就只能回家种地

#include<stdio.h>
int main()
{
    
    
	int input = 0;
	printf("你要好好学习?(1/0)>:");
	printf("请选择1或者0\n");
	scanf("%d", &input);
	if (input == 1)
	{
    
    
		printf("offer\n");
	}
	else
	{
    
    
		printf("完了\n");
	}
	return 0;
}

数组

要存储1~10的数字咋样存储?

c语言种给了数组的定义:一组相同类型元素的集合

#include<stdio.h>
int main()
{
    
    
	int arr[10];
	//定义一个存放10个整数数字的数组
	char ch[20];
	//定义20个字符数组
	return 0;
}

数组的赋值和下标

#include<stdio.h>
int main()
{
    
    
	 //数组的赋值就是下面这样
	int arr[10] = {
    
    1,2,3,4,5,6,7,8,9,10};
//下标默认从0开始   0 1 2 3 4 5 6 7 8 9
//下标的目的是访问这个数组中的某个元素
	printf("%d\n",arr[4]);结果是5
	/*arr[4]就是找到下标为4对应的元素
	这里的下标4对应的结果是5
	下标的方式访问元素 arr[下标]
	*/
	
	return 0;
}

打印数组所有元素方法

#include<stdio.h>
int main()
{
    
    
	int i = 0;
	int arr[] = {
    
     1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	//定义一个存放十个整数数字的数组
	while (i < 10)
	{
    
    
	printf("第%d次的值是%d\n ",i+1,arr[i]);
	//下标的方式访问元素  arr[下标]
	i++;
    }
	return 0;	
}
//数组arr[]		1	2	3	4	5	6	7	8	9	10
//数组的下标    0	1	2	3	4	5	6	7	8	9
//从0开始的,最重点的是访问数组的元素

算术操作符处识

+
_
*
/
% 取模

主要介绍一下%取模符号

#include<stdio.h>
int main()
{
    
    
	int a = 5%2;
	printf("%d\n",a);//结果是1  取模就是去余数
	
	return 0;
}

移位操作符 << 左移 和 >> 右移

移动的是二进制位

<< 左移位操作符
>> 右移位操作符

下面是左移位操作符

#include<stdio.h>
int main()
{
    
    
	//移(2进制)位操作符
	//<< 左移
	//>> 右移
	int a = 1;
	//1的二进制是01
	//整型占了4个字节32个比特位
	//00000000000000000000000000000001
	a << 1;//就是把上面二进制向左移动一位
	//移动过程下图所示
	//移动之后就变成了00000000000000000000000000000010
	//10的十进制就是2
	int b = a << 1;
	printf("%d\n",b);
	
	//所以结果就变成了2
	printf("%d\n",a);
	/*a的结果还是1所以说对a进行移位操作
      a值的本身是不会发生变化*/
	return 0;
}

移动过程下图所示

左移位操作符移动过程
向做移动几位就要给后面补几个0
同理有移动也一样可以参照上面方式

位操作符

& 按位与
^ 按位异或
| 按位 或

#include<stdio.h>
#include<string.h>
int main()
{
    
    
	//都是(2进制)位操作
	//&按位与
	//|按位或
	//^按位异或

	/*  按位与
	int a = 3;
	int b = 5;
	int c = a&b; 
	
		3的二进制是              0   1   1
		5的二进制是				 1   0   1
         a&b只要有0就是假       假  假  真     上下比较
		c语言种假0真1所以 
	
	printf("%d\n",c);//c=1
     a&b 结果是 001  转为10进制是1
	*/	

	/* 按位或
	int a = 3;
	int b = 5;
	int c = a|b;
	3的二进制是              0   1   1
	5的二进制是				 1   0   1
	a|b只要有一个1就是真     1   1   1    上下比较
	printf("%d\n",c);//c=7
	a|b 结果是 111  转为10进制是7
	*/

	/* ^按位异或
	int a = 3;
	int b = 5;
	int c = a^b;//^不是次方的意思  而是按位异或
	a^b的计算规律是
	对应的二进制位相同,则为0
	对应的二进制位相反,则为1
	3的二进制是              0   1   1
	5的二进制是				 1   0   1
	      a^b是              1   1   0   
		  printf("%d\n",c);//c=6
	 a^b 结果是 110 转为10进制是6
	*/

	
	printf("%d\n", c);
	return 0;
}
/*
	二进制       1            1             1              1
	          1*2^3         1*2^2          1*2^1           1*2^0
	           8             4               2              1
    十进制
	 6          0             1               1              0  这4+2是0+4+2+0所以六的2进制是 0110
	 8          1             0               0              0   这是8+0+0+0所以8的二进制数是 1000
	 13         1             1               0              1    这是8+4+0+1所以13的二进制是1101
*/

赋值操作符

= 赋值
+=
-+
*=
/=
&=
^=
|=
>>=
<<=

具体看下面代码


#include<stdio.h>
#include<string.h>
int main()
{
    
    
	int a = 10;  // =赋值  ==判断相等
	a = 20;
	a = a + 10;
	a += 10;
	a = a - 10;
	a -= 10;
	a = a & 2;
	a &= 2;
	//复合赋值符
   return 0;
}

双目操作符

#include<stdio.h>
int main()
{
    
    
	int a = 10;
	int b = 20;
	a + b;//  +有两个操作数叫双目操作符
	return 0;
}

单目操作符

逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度
~ 对一个数二进制按位取反
前置,后置–
++ 前置,后置++
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换

! 的用法

#include<stdio.h>
int main()
{
    
    
	/*  !用法
	c语言中我们表示真假,0就是假 ,非0就是真一般用1来表示
	! 把真的变成假的,把假的变成真的
	*/
	
	int a = 10;
	printf("%d\n",a);//结果是10
	printf("%d\n",!a);//结果是0
	return 0;
}

sizeof 计算的是变量/类型 所占空间大小,单位是字节

sizeof用法

#include<stdio.h>
int main()
{
    
    
	//计算数组的元素个数
	//数组的总大小(字节)/每个元素的大小(字节)
	int arr[10] = {
    
    0};
	int sz = 0;
	printf("%d\n", sizeof(arr));
	//总大小是40 因为一个int是4个字节那么10个int就是40
	sz = sizeof(arr) / sizeof(arr[0]);//sizeof(arr)大小是40字节  sizeof(arr[0])一个元素是四个字节
	printf("%d\n", sz);

	int arr[10] = {
    
    0};
	printf("%d\n", sizeof(arr));	
	int a = 10;
	//sizeof 计算的是变量/类型所占空间的大小,单位是字节	
	printf("%d\n", sizeof(a));
	printf("%d\n", sizeof(int));
	//printf("%d\n", sizeof a);
	return 0;
}

~ 对一个数二进制按位取反

#include<stdio.h>
int main()
{
    
    
	int a = 0;//4个字节,32bit位
	int b = ~a;
	// ~ --按(2进制)位取反
	//00000000000000000000000000000000
	//按位取反
	//11111111111111111111111111111111
	printf("%d\n",b);
	//结果就是-1
	//因为上面111111111111111符号位是1所以
	//是负数,负数在内存中存的是二进制的补码,
	//反码是11111111111111111111111110
	//源码时10000000000000000000000001
	//1是符号位表示负数-
	//所以结果是-1
	return 0;
}

- - 操作符 和 ++操作符

后置 a++

#include<stdio.h>
int main()
{
    
    
	int a = 10;
	int b = a++;
	//后置++   a先给b使用,使用完了在自增
	printf("a=%d,b=%d\n",a,b);
	//所以结果是b=10,a=11;
	return 0;
}

前置 ++a

#include<stdio.h>
int main()
{
    
    
	int a = 10;
	int b = ++a;
	//前置++ a先完成自增,然后在给b使用
	printf("a=%d,b=%d\n", a, b);
	//所以结果是 a= 11; b=11;都是11
	return 0;
}

后置a- -

#include<stdio.h>
int main()
{
    
    
	int a = 10;
	int b = a--;
	//后置a--先给b使用然后在自减
	printf("a=%d,b=%d\n",a,b);
	//所以结果是a=9; b =10;
	return 0;
}

前置 --a

#include<stdio.h>
int main()
{
    
    
	int a = 10;
	int b = --a;
	//--a是先自己自减,然后在给b使用
	printf("a=%d,b=%d\n",a,b);
	//所以结果是:a= 9;b=;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_52495715/article/details/117450537