初始C语言1 C语言本身特点 数据类型 常量变量 字符串+转

这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战

@[TOC]

闲话少说,先上思维导图。

如图所示,现在还是初识C语言的第一部分,本次只介绍了C语言本身特点,数据类型,常量变量,字符串转义字符注释,选择循环语句,函数,数组。   


接下来请和我一起粗略地探讨其中内涵所在。  

C语言本身特点

这是C语言的定义:

C语言是一门通用计算机编程语言,广泛应用于底层开发。  

C语言提供了许多低级处理的功能,仍然保持良好跨平台特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译。

为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。

C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。

但总结其特点就是1.底层开发,2.国际标准 ANSI C,3.面向过程 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
arduino复制代码#include <stdio.h>
//stdio-标准输入输出 standard input & output headfile

//int -整型-整数的类型
//主函数
//main函数是程序的入口
//唯一性有且仅有一个

int main()
{
//库函数-打印函数-输出函数
printf("hello world!\n");
printf("hello world!\n");
printf("hello world!\n");


return 0;
}

//这种写法明确告诉你,main函数不需要传参
int main(void)
{

}

//这种写法有用,但不是重点
int mian(int argc, char* argv[])
{

}

数据类型

C语言主要有六种数据类型,分别为
  • 字符型 char
  • 短整型 short
  • 整形 int
  • 长整型 long
  • 单精度浮点型 float
  • 双精度浮点型 double
这六种分别有自己的字符长度即其所建变量所占的空间,char最小只要1个字节,short占2个,int占4个,long一般是4个,也有可能是8个,反正只要满足long的字节长度大于等于int就可以了。两个浮点型的最为特殊,分别是4和8,显然双精度的精度更高。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
c复制代码int main()
{
//如何计算一个类型创建的变量所占空间的大小
//sizeof();
printf("%d\n", sizeof(char));//1个字节
printf("%d\n", sizeof(short));//2个字节
printf("%d\n", sizeof(int));//4个字节
printf("%d\n", sizeof(long));//4个字节
printf("%d\n", sizeof(long long));//8个字节
printf("%d\n", sizeof(float));//4个字节
printf("%d\n", sizeof(double));//8个字节

return 0;
}

)

常量变量

变量分类

显而易见的是,分为两类变量和常量讲述。


变量又分两类,一是局部变量,二是全局变量。


顾名思义,局部变量是定义在一对大括号内的,显然我们平时在main函数里创建的都是局部变量,全局变量则为定义在大括号外面的变量。


当二者同名时,局部变量优先,当然,这种代码谁写谁sb。

使用小建议

在程序中使用scanf函数,若程序为 scanf(“%d%d”);

%d%d之间不管有没有空格,输入变量时都要用空格隔开,若二者之间有逗号则逗号隔开。

生命周期作用域

对这二者讨论他们的作用域和生命周期的话,
  • 全局变量
+ 作用域为整个工程文件,若想在其他.c文件中使用则需要extern声明一下。
+ 生命周期则是整个工程的生命周期,也就是main函数的生命周期。
  • 局部变量
+ 作用域为其定义的大括号{ }内,进作用域生命开始,出则结束。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
c复制代码//验证局部变量的作用域 
int main()
{
int b = 100;//主函数任意位置
{
int a = 10;//局部变量作用域:局部所在范围
printf("a=%d\n", a);
printf("b=%d\n", b);
}
//printf("a=%d\n", a);
printf("b=%d\n", b);



return 0;
}


//验证全局变量的作用域为整个工程
int a = 200;

void test()
{
printf("test:%d\n", a);
}
int main()
{
test();
printf("main:%d\n", a);//全局变量可以任意使用

return 0;
}

//全局变量在其他源文件的使用
//转到test1.c文件查看

int g_val = 110;


//验证局部变量的生命周期为进作用域到出作用域
int main()
{
{
int a = 100;
printf("%d\n", a);
}
printf("%d\n", a);//出作用域即生命周期结束

return 0;
}


//全局变量的生命周期为整个工程即main函数生命周期

int main()
{
printf("%d\n", g_val);


return 0;
}

常量分类及其特点

常量呢,大致分为四种,
  1. 字面常量
  2. const修饰的常变量
  3. #define定义的标识符常量
  4. 枚举常量
  • 第一种,字面常量就是随便写出来的一个数,如3.14就是一个字面常量。
  • 第二种,const修饰的常变量,即在创建变量时加上const修饰,如const int a=0;这样变量a就具有了常属性,不可被修改。但值得注意的是,常变量一词,它仍然是个变量,不可用于定义数组。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
c复制代码//const修饰的变量
int main()
{
//局部变量
int a = 200;

//不可被改变的属性,常属性

const int a = 110;
a = 100;
printf("%d\n", a);

//const修饰的变量不可定义数组
//(常变量)
int n = 110;
int arr[n] = { 0 };//数组



return 0;
}

  • 第三种,#define定义的常量,写法如 #define N 10,这是真真正正的常量,可以用来定义数组。同样也是不可修改的(常量当然不可被修改)。
1
2
3
4
5
6
7
8
9
10
11
12
13
c复制代码#define PAI 314
int main()
{
int a = PAI;
printf("a=%d\n", a);

//MAX = 300;//#define定义的变量不可被修改

//可用于定义数组
int arr[PAI] = { 0 };

return 0;
}

  • 第四种,枚举常量,具体使用方法像enum sex {MALE,FEMALE,SECRET};这样就得到了枚举常量,各自都是有初值的,分别为0,1,2依次类推,当然也可以自己赋值。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
c复制代码//枚举常量 SEX性别举例

//可以一一列举的值,性别,三原色
enum Sex
{
//枚举的可能取值
MALE=3,//赋初值
FEMALE=8,
SECRET//向后延一个为9

};

int main()
{
//FEMALE = 99;//ERR 枚举变量值不可修改

enum Sex a=MALE;
enum Sex s = FEMALE;

printf("%d\n", MALE);
printf("%d\n", FEMALE);
printf("%d\n", SECRET);

return 0;
}

​字符串+转义字符+注释

字符串

单引号引起来的,如'w','r'是字符,被双引号引起来的"yyx","abcdef"是字符串。


字符串一般以'\0'结尾隐含在字符串的末尾。既然'\0'为字符串结束标志,在计算字符串长度时当然不算作字符串内容。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
c复制代码//字符,字符串
int main()
{
//'a', ' ' , 'X' - 字符
//"abc" "123" - 字符串
//"abcdef"; //字符串字面值

//①
char ch1[] = "abcdef";//初始化字符数组
//a ,b ,c ,d ,e ,f ,\0
//%s - 打印字符串
//strlen - 打印字符串长度,(遇\0则停止,本身不算)\0是字符串结束标志
printf("%s\n", ch1);
//abcdef
printf("%d\n", strlen(ch1));//6

//②
char ch2[] = { 'a','b','c','d','e','f' };
//a ,b ,c ,e ,f
printf("%s\n", ch2);
//abcdef烫烫烫烫烫abcdef
printf("%d\n", strlen(ch2));//22,找不到\0

//③
char ch3[] = { 'a','b','c','d','e','f','\0' };
//a ,b ,c ,d ,e ,f ,\0
printf("%s\n", ch3);
//abcdef
printf("%d\n", strlen(ch3));//6


return 0;
}

转义字符

  • 防止单引号,双引号,反斜杠被转移的’ ‘ ‘ , ‘ “ ‘,’ \ ‘ 。
  • 警告,蜂鸣的’ \a ‘
  • 退格符’ \b ‘
  • 进纸符’ \f ‘
  • 换行符’ \n ‘
  • 回车符’ \r ‘
  • 水平制表符’ \t ‘
  • 垂直制表位’ \v ‘
  • 八进制数字’ \ddd ‘
  • 十六进制数字’ \xdd ‘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
c复制代码#include <stdio.h>
int main()
{
printf("c:\code\test.c\n");//c:code est.c
printf("c:\code\test.c\n");//c:\code est.c
//单个\是转义序列符,但这里又没有\c的转义字符,所以系统自动忽略该\
//想要出现该\,则必须要搭配两个\,防止其被转义


return 0;
}

// ?
//三字母词
// ??) --> ] ??( --> [

//' "
int main()
{
printf("%c\n", 'a');
printf("%c\n", 'b');
printf("%c\n",''');//在’前面加上\,以单纯的将其视为字符'
printf("%s\n", """);// "

return 0;
}
//\a \b \f \v \t \n \r

//\ddd八进制数字 \xdd十六进制数字
int main()
{
printf("%c\n", '\165');
//打印八进制数字065转化为十进制数字53所代表的字符(ASCII码)
printf("%d\n", '\165');
//打印八进制数字065转化为十进制数字53

printf("%c\n", '\x15');
printf("%d\n", '\x15');//21

return 0;
}

两种注释

C++的风格 //xxxxx

这种只能注释一行。

C语言的风格 /xxxxx/

不可嵌套注释。

)

选择循环语句

选择语句,实现分支,有if..else..语句和switch语句。循环语句,有while循环,do…while循环和for循环。

1
2
3
4
5
ini复制代码具体情况为 
if ( 条件 ) 
{ 语句 };    
else ( 条件 ) 
  { 语句 };

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
c复制代码int main()
{
int i = 0;
printf("加入比特\n");
printf("要好好敲代码吗(1/0)?\n");
scanf("%d", &i);
if (i == 1)
{
printf("好offer\n");
}
else
{
printf("药丸\n");
}

return 0;
}

int main()
{
int line = 0;
printf("加入比特\n");

while (line<20000)
{

printf("敲%d了代码\n",line);
line++;

}
printf("牛逼坏了拿到了好offer\n");

return 0;
}

函数

函数主要是,传参类型和返回值类型还有名称要对应。如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
c复制代码int ADD(int num1, int num2)
{
scanf("%d %d", &num1, &num2);
int sum = num1 + num2;
return sum;

}
int main()
{
int num1 = 0;
int num2 = 0;

////输入
//scanf("%d %d", &num1, &num2);
////相加
//int sum = num1+num2;
////输出
//printf("sum=%d\n", sum);


//int output = ADD(num1,num2);
//printf("%d\n", output);

printf("%d\n", ADD(num1, num2));


return 0;
}

数组

定义:一组相同类型的元素组成的集合。

数组的使用是根据下标来的,从0开始数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
c复制代码int main()
{
//数组 - 相同元素的集合
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int i = 0;
for (i = 0; i < 10; i++)
{
printf("%3d", arr[i]);

}
printf("\n");
for (i = 9; i >= 1; i--)
{
printf("%3d", arr[i]);
}

return 0;
}

)

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%