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  强制类型转换

 双目操作符 :

&&逻辑与

三目操作符:

c语言入门(1)_c语言学习

c语言入门(1)_c语言学习_02

上图来源网站

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);