c语言萌新,记录一下学习c语言的进程。
跟着比特讲师学的!感谢老师
第一节课介绍了一下基本概念,比较简单,主要还是了解一下啦。
一.二进制和存储
字节:计算机中单位。
bit 比特位:一个比特位只能存放二进制中的一个位,即0或1。
byte 字节:8个比特位
kb:1024个字节
gb:1024个kb
tb:1024个gb
pb:1024个tb
数据在电脑中的存储方式为二进制,01两个数字构成了计算机丰富的世界,计算机主要以补码的形式储存。
1、正整数的原码、反码、补码完全一样,即符号位固定为0,数值位相同
2、负整数的符号位固定为1,由原码变为补码时,规则如下:
(1)原码符号位1不变,整数的每一位二进制数位求反,得到反码
(2)反码符号位1不变,反码数值位最低位加1,得到补码
二.字符
char //字符数据类型
short int //短整型
int //整形
long //长整型
long long //更长的整形
float //单精度浮点数
double //双精度浮点数
char ch = 'A' ; //向内存申请1个字节=8个bit位,用来存放字符A
printf("%c \n",ch); //%c--打印字符格式的数据,以字符的形式打印ch,打印显示A
int age=20;//整形数据,占位4个字节,太大了浪费,改成short int age=20;短整型数据,占位2个字节,2^16-1=65535。
printf(“%d \n”, age);//%d--打印整形十进制数据,打印显示20
float f = 5.0;
printf("%f \n, f"); //%f 打印浮点型,显示5.000000
double d =3.14;
printf("%lf \n", d); //%lf 打印双精度浮点型,显示3.140000
三.转义字符
\t -水平制表符
\n -换行
??+任意字符 - 在早期c语言里表示三字母词,会被解析成另一字符
\? - 在书写多个问号时,防止被解析成三字母词
\\ - 表示一个反斜杠,防止它被解释为一个转义符
\ddd- ddd表示1~3个八进制数字
\xdd - dd表示2个十六进制数字
四.不同的字符在空间内占用不同的大小
int main()
{
printf("%d\n", sizeof(char)); //1个字节
printf("%d\n", sizeof(short)); //2
printf("%d\n", sizeof(int)); //4
printf("%d\n", sizeof(long)); //可能是4或8。c语言规定:sizeof(long)>=sizeof(int)
printf("%d\n", sizeof(long long)); //8
printf("%d\n", sizeof(float)); //4
printf("%d\n", sizeof(double)); //8
return 0;
}
五.变量分类
局部变量和全局变量的名字建议不要相同,会有误会,产生bug
int main ()
{
int num1= 10; //局部变量。当局部变量与全局变量名字相同,以局部变量为先。
return 0;
}
int main ()
{
{
int num1= 10; //局部变量。
}
printf("%d\n", num1); //编译错误,无法打印num1的值。
return 0;
}
下面就是简单的代码示例啦
//计算两个数的和
int main()
{
int num1=1;
int num2=2;
int sum=0; //c语言语法规定,变量要定义在当前代码块的最前面
//输入数据-使用输入函数scanf
scanf("%d%d",&num1,&num2); //取地址符号&
sum = num1+num2;
printf("sum=%d\n",sum);
return 0;
}
变量的作用域和生命周期:
局部变量的作用域是变量所在的局部范围;
全局变量的作用域是整个工程。
局部变量的生命周期是:进入作用域到出作用域。
全局变量的生命周期是:整个程序的生命周期。
六.常量
常量包含:字面常量、const修饰的常变量、#define定义的标识常变量、枚举常量。
1.字面常量、const修饰的常变量
nt main()
{
int num=4;
3;//字面常量
const int num=2;//const-常属性。num不能更改,num为const修饰的常变量。
return 0;
}
//注意数组符号[]内应为常量
int n=10;
int arr[n]={0}; //编译错误,[]内应为常量
const int n=10; //n本质仍为变量
int arr[n]={0}; //编译错误,[]内应为常量
2.#define定义的标识常变量
#define MAX 10 //#define定义的标识常变量,MAX为10。
int main()
{
int arr[MAX]={0};
printf("%d\n",MAX);//打印结果10
return 0;
}
3.枚举常量
//枚举关键字-enum
enum Sex
{
MALE,
FEMALE,
SECRET //MALE, FEMALE,SECRET-枚举常量
}; //大括号后的分号不可缺!
int main()
{
enum Sex s=MALE; //s为具体性别值
printf("%d\n",MALE); //打印显示0
printf("%d\n",FEMALE); //打印显示1
printf("%d\n",SECRET); //打印显示2
return 0;
}
enum Color
{
RED,
GREEN,
BLUE
};
int main()
{
enum Color color=BLUE;
color = YELLOW; //编译成功,color可以更改,显示YELLOW。Color不能更改。
BLUE=6; //编译错误,枚举常量不能更改
return 0;
}
七.字符串
字符串的结束标志是 \0转义字符,在计算字符串长度的时候 \0不算做内容。
每个字符都有一个值,'\0'-0,'a'-97, 'A'-65 (依据ASCII码)
""; //空字符串
int main()
{
char arr1[]="abc"; //数组 “abc”--'a', 'b', 'c', '\0' -- '\0'字符串的结束标志
char arr2[]={'a' , 'b', 'c',0}; //单引号字符,双引号字符串。
//或者
// char arr2[]={'a' , 'b', 'c','\0'}; 如果不加0,会出现abc后乱码。
printf("%s\n",arr1); //编译成功。%s打印数组。
printf("%s\n",arr2); //
return 0;
}
#include
#include
int main()
{
char arr1[]="abc";
cher arr2[]={'a' ,'b' , 'c'};
printf("%d\n" , strlen(arr1)); //strlen-string length-计算字符串长度,编译结果3
printf("%d\n" , strlen(arr2)); //编译结果为随机值,因为没有\0转义符,在后面随机值找到0后才截止。
return 0;
}
printf("%c\n", '\' '); //转义符\的存在,打印结果为'
#include
#include
int main()
{
printf("%d\n",strlen("c:\test\32\test.c")); //打印结果为13。 \t为一个字符。\32为一个字符。其中32作为8进制代表的那个十进制数字是ascii码值,对应的字符。
//32转化为十进制26,查ascii码为向右箭头符号。
return 0;
}
八.选择语句
先简单了解一下
int main()
{
int input = 0;
printf("你好(1/0)> : ");
scanf("%d",&input);//输入函数
if(input ==1)
printf("好"\n);
if(input == 0)
printf("不好"\n);
}
九.循环语句
int main()
{
int line =0;
while(line < 20000)
{
printf("敲代码:%d",line);
line++;
}
if(line >=20000)
printf("好!\n");
return 0 ;
}
十.函数
int main()
{
int num1=1;
int num2=2;
sum= Add(nu1+num2); //函数调用()
printf("%d\n",sum);
return 0;
}
//加法函数
int Add(int x, int y)
{
int z=x+y;
return z;
}
运算符与表达式:
2进制 位操作:
&按位与
| 按位或
^按位异或
int a = 3; //011
int b = 5; //101
int c = a&b; //001 显示c=1
int d = a|b; //111 显示 d=7
int e = a^b; //对应的二进制位相同,则为0;对应的二进制位相异,则为1; 110 显示6
赋值语句:
a +=10; //a= a+10;
a -=10; //a=a-10;
int a = 10;
int b = a++;//后置++,先使用,再++,显示b=10,a=11;
int c = ++a; //前置++,先++,再使用
单目操作符:
! 逻辑反操作
sizeof 计算变量或类型所占空间的大小,单位是字节
~ 二进制位取反
(类型)强制类型转
int a=0 ;
int b = 5;
int c = a&&b;
printf("%d\n", c); //显示c=0;ab中有假即为假
int d=a | | b;
printf("%d\n",d);//显示d=1;ab中有真即为真
int a= (int)3.14; //double --> int 强制类型转换
双目操作符 :
&&逻辑与
三目操作符:
上图来源网站
int a = 0;
printf("%d\n", a);
printf("%d\n", !a); //显示a=1;
printf("%d\n", ~a); //显示a=-1;
/*
a :4个字节,32个bit位
00000000 00000000 00000000
11111111 11111111 11111111
11111111 11111111 11111110
10000001 00000000 00000001
原码、反码、补码(反码+1得到补码)
负数在内存中存储的时候,存储的是二进制的补码
打印的是这个数的原码
*/
printf("%d\n", sizeof(a)); //4
printf("%d\n", sizeof(int)); //4
printf("%d\n", sizeof a); //4
int arr[10] = {0}; //十个整型元素的数组
int sz= 0;
//计算数组的元素个数。个数=数组总大小/每个元素的大小
sz= sizeof(arr)/sizeof(arr[0]);
printf("sz= %d\n",sz);