零基础入门C语言(上)


1、什么是计算机的编程语言(计算机语言)?

人和计算机交流的语言。

2、什么是C语言?

在上千种计算机语言中,C语言只不过是其中的一种;
C语言是一门通用的计算机编程语言,广泛应用于底层开发

编程语言的发展历史

1、二进制语言
2、汇编语言(助记符)
3、B语言
4、C语言、C++、Java 等高级语言
-------------------------------------------------------------------------------------------------计算机语言发展的发展历史

补充:计算机的底层和上层结构
计算机的底层和上层结构

3、C语言最初的标准

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

4、第一个C语言程序(打印hello world )

补充一些关于注释的内容

注释是对代码的说明编译器会忽略注释,
也就是说,注释对实际代码没有影响。
注释是给程序员⾃⼰,或者其他程序员看的。
好的注释可以帮我们更好地理解代码,
但是也不要过度注释不要写没必要的注释。
当然不写注释可能会让后期阅读代码的⼈抓狂。

注释的语法格式

1、第⼀种⽅法是将注释放在 /* */ 之间,内部可以分⾏。
2、第⼆种写法将注释放在双斜杠 // 后,从双斜杠到⾏尾都属于注释。这种注释只能是单⾏,
可以放在⾏⾸,也可以放在⼀⾏语句的结尾。这是 C99 标准新增的语法。

  • 代码展示:
//#include <stdio.h> 就是包含 stdio.h这个头文件
//stdio -- standard input output 标准输入输出头文件

#include<stdio.h>

//第一个 C语言程序
//打印 hello world 

//main函数叫做主函数,是程序的入口,
//在一个C语言项目中,有且仅有一个主函数!!!

int main()
{
	//printf 是库函数,
	//可以在屏幕上输出打印所要的东西
	//需要调用 #include<stdio.h> 这个头文件
	
	// \n是转义字符,代表换行的意思
	//本篇博客后面我会写到的
	
	printf("hello world\n");

	//return 是返回的意思,
	// 0 与 int main() 中的 int(整型)对应
	return 0;
}
  • 输出结果:

5、C语言中各个内置数据类型的大小

先介绍一下 sizeof

sizeof 是一个操作符,是计算变量的大小的。

补充:
C语言的数据类型


  • 代码展示:
//C语言中各个数据类型的大小

int main()
{
	printf是打印函数,
	// \n是转义字符,代表换行的意思
	//后面我会写到

	//%zd 是占位符,因为 sizeof 是 返回的 无符号整型数字,
	// sizeof 是计算变量的大小的。
	//大小只有 正数,即就是 无符号的
	//具体的操作符详解,以后的博客我会写到的

	//注意:sizeof 是一个操作符!!!

	// char 代表 字符型
	printf("%zd\n", sizeof(char));
	// short 代表 短整型
	printf("%zd\n", sizeof(short));
	// int 代表 整型
	printf("%zd\n", sizeof(int));
	// long 代表 长整型
	printf("%zd\n", sizeof(long));
	// long long 代表更加长的整型
	printf("%zd\n", sizeof(long long));
	// float 代表 单精度浮点数
	printf("%zd\n", sizeof(float));
	// double 代表 双精度浮点数
	printf("%zd\n", sizeof(double));
	
	return 0;
}
  1. 输出结果:

6、计算机中常见的存储单位

单位含义单位换算
bit比特(计算机最小的存储单位)1 bit(1个比特位)
byte字节 (最常用的单位)1 byte = 8 bit
KB千字节1 KB = 1024 byte = (2)^10 byte
MB兆字节1 MB = 1024 KB = (2)^10 KB
GB吉字节1 GB = 1024 MB = (2)^10 MB
TB太字节1 TB = 1024 GB =(2)^10 GB
PB拍字节1PB = 1024 TB = (2)^10 TB

7、变量的命名规则

1、只能由字母(包括大写和小写)数字下划线(_)组成;
2、不能以数字开头;
3、长度不能超过63个字符;
4、变量名中区分大小写
5、变量名不能使用关键字

补充

  • C语言中常见的关键字(32个)
   auto break case char const continue default do 
   double else enum extern float for goto if 
   int long register return short signed sizeof static
   struct switch typedef union unsigned void volatile while 
  • 按照对应类别进行分类
  • 数据类型
auto char const  double  enum  float int  long  short 
signed(有符号的) unsigned(无符号的) 
static struct typedef union void
  • 循环语句:
break continue do while  for  
  • 分支语句:
switch case continue default  if else  goto  
  • 函数
return
  • 声明外部符号:
extern
  • 寄存器:
register
  • 计算所占内存的大小
sizeof
  • 其他
volatile 

8、变量和常量的概念

常量:生活中有些值是不变的(比如:圆周率,性别、身份证号码、血型等等)
变量:有些值是可变的(比如:年龄、体重、薪资等等)

9、变量的分类

(1)局部变量
  • 代码展示:
#include<stdio.h>

//局部变量是定义中函数体内部的,即是定义在大括号{}内的
//下面举一个例子

int main()
{
	//定义一个局部变量 a,并进行初始化(定义并且赋值)
	int a = 10;

	return 0;
}
(2)全局变量
  • 代码展示:
#include<stdio.h>

//全局变量在函数(包括主函数)的外面,
//即全局变量不在任何的函数内部,
//即不被定义在大括号{}内的

//定义一个全局变量 b,并进行初始化(定义并且赋值)
int b = 20;

int main()
{

	return 0;
}
(3)局部变量和全局变量名字冲突的时候,局部优先;

局部变量全局变量名字冲突的时候,局部优先;
建议大家尽量不要冲突!!!

  • 代码展示:
#include <stdio.h>
//全局变量 num
int num = 10;

int main()
{
	//局部变量 num
    int num = 1;
    //输出打印
    printf("num = %d\n", num);
	return 0;	
}
  • 输出结果:
(4)变量的应用

写一个代码:计算两个整数的和

  • 代码展示:
//写一个代码:计算两个整数的和

int main()
{
	//定义两个整型变量,用于接受输入的两个整型数
	int num1 = 0;
	int num2 = 0;
	//定义一个sum整型变量,接受两个数之和
	int sum = 0;

	//输入
	//注意:& --> 这是一个取地址的操作符(后面我会介绍的)
	// scanf 也是一个库函数,
	//可以从键盘中接受数据
	//跟库函数 printf是“一对的”
	//以后的博客 我会专门介绍这两个函数( printf scanf )

	scanf("%d %d", &num1, &num2);
	
	//计算求和
	sum = num1 + num2;
	//输出打印
	printf("num1 + num2 = %d\n", sum);
	return 0;
}
  • 输出结果:

10、一个小的注意点(scanf函数的注意点)

#define _CRT_SECURE_NO_WARNINGS 1 

上面的这一行代码是
因为 scanfVS2022这个集成开发环境提示不安全
为了能够正常使用,我们在**.c文件的第一行**,
加上: #define_CRT_SECURE_NO_WARNINGS 1 就可以了

11、变量的作用域和生命周期

作用域:是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。
a、局部变量的作用域是局部变量所在的局部范围;
b、全局变量的作用域是整个工程。

生命周期:变量的生命周期是指变量的创建到变量的销毁之间的一个时间段。
a、局部变量的生命周期是:进入作用域 生命周期开始,出作用域 生命周期结束;
b、全局变量的生命周期是:整个程序的生命周期。

11、常量

(1)字面常量
//字面常量
11;
66.6
'A'
(2)const 修饰的常变量
//const 修饰的常变量
const int a = 10;
a = 20;//err 不能修改!!!

注意一下
const 修饰的常变量本质上还是变量,只不过它是不能修改的变量

(3)#define 定义的标识符常量
  • 代码展示:
#include<stdio.h>

int main()
{
	//#define 定义的标识符常量 PI
	#define PI 3.14
	//定义一个整型变量 R,存放圆的半径
	int R = 2;
	//定义一个双精度浮点数的变量 s
	double s = PI * R * R;
	//输出打印
	//% lf 是双精度浮点数的 占位符 
	printf("半径为2的圆的面积s = %lf\n", s);
	return 0;
}
  • 输出结果:
(4)枚举常量
  • 代码展示:
//枚举常量
//三原色RGB
//枚举常量
//三原色RGB

#include<stdio.h>

enum Color
{
	//不同的枚举常量用逗号(,)隔开
	//之后的博客我会详细介绍枚举常量的
	RED,//红色
	GREEN,//绿色
	BLUE//蓝色
};//分号不要忘记了哦

int main()
{
	//输出打印枚举常量 RED 的值
	printf("枚举常量 RED 的值为 %d\n", RED);	
	//输出打印枚举常量 GREEN的值
	printf("枚举常量 GREEN 的值为 %d\n", GREEN);
	//输出打印枚举常量 BLUE的值
	printf("枚举常量 BLUE 的值为 %d\n", BLUE);
}

  • 输出结果:

12、转义字符(本来就是字符)

转义:转变原来的意义。

常见的转义字符:
序号转义字符含义
1\?在书写连续多个问号是使用,防止它们被解析成三字母词(有些编译器支持,但是VS2022是不支持的)
2\ ’用于表示字符常量 ’
3\"用于表示一个字符串内部的双引号
4\\用于表示一个反斜杠,防止它被解释为一个转义序列符
5\a警告字符,蜂鸣
6\b退格符
7\f进纸符 (几乎用不到)
8\n换行符
9\r回车符
10\t水平制表符
11\v垂直制表符(几乎用不到 )
12\dddddd表示1~3个八进制的数字。如:\130
13\xdddd表示2个十六进制的数字。如:\x30

13、字符串

(1)定义

形如:"hello world",
这种由双引号(Double Quote)引起来的一串字符串称为字符串字面值(String Literal),或者简称为字符串

(2)使用
  • 字符串的打印格式可以使⽤ %s 来指定,也可以直接打印如下
  • 代码展示:
#include <stdio.h>

int main()
{
	//使用 %s 的指定格式来输出打印
	printf("%s\n", "hello C");
	
	//直接输出打印
	printf("hello c");

	 return 0 ;
}
  • 输出结果:

注意

字符串的结束标志是一个\0的转义字符
在计算字符串长度的时候,
\0 是结束标志,
不算作字符串内容的


(a)验证 \0 是结束标志
  • C语⾔中也可以把⼀个字符串放在⼀个字符数组中,我们在这⾥利⽤下⾯的代码验证⼀下 ‘\0’ 的功能。
  • 代码展示:
#include <stdio.h>
int main()
{
 	//arr1数组中存放3个字符
 	char arr1[] = {'a', 'b', 'c'};
 	
 	//arr2数组中存放字符串
 	char arr2[] = "abc"; 
 	
 	//输出打印 字符数组 arr1
 	printf("%s\n", arr1);
 	
 	//输出打印 字符数组 arr2
 	printf("%s\n", arr2);
 
 	return 0;
}
  • 输出结果:

    数组arr1和arr2数组产生不同的结果的原因是

arr1 字符数组在打印的时候,
打印了 a 、 b 、 c 后还打印了⼀些随机值,
这就是 因为 arr1 在末尾的地⽅没有 \0
\0 字符作为结束标志,在打印的时候没有停⽌。


  • 如果我们在arr1数组中单独放⼀个 ‘\0’ 字符会怎么样呢?
  • 代码展示:
#include <stdio.h>

int main()
{
    //arr1数组中存放4个字符,'a', 'b', 'c', '\0'
    char arr1[] = { 'a', 'b', 'c', '\0' };
    //arr2数组中存放字符串 "abc"
    char arr2[] = "abc";
    //输出打印 字符数组 arr1
    printf("%s\n", arr1);
    //输出打印 字符数组 arr2
    printf("%s\n", arr2);
    //输出打印字符串 "abc\0def" 
    printf("%s\n", "abc\0def");
    return 0;
}
  • 输出结果:

  • arr1 和 arr2 数组实际存放的数据的展示

看到三次打印的结果是⼀样的了,
都是打印到 \0 的时候就停⽌了
那从上述的例⼦我们确实能够观察到 \0 的作⽤和重要性的。


(a)验证 \0 不算作字符串内容的

补充

//strlen -- C语言中的库函数,可以计算字符串的长度,
//统计的是 \0之前的字符的个数
//需要包含头文件 #include <string.h>

//验证 \0 不算作字符串内容的

#include <stdio.h>

#include <string.h>

int main()
{
    //arr1数组中存放4个字符,'a', 'b', 'c','\0'
    char arr1[] = { 'a', 'b', 'c','\0' };

    //arr2数组中存放字符串 "abc"
    char arr2[] = "abc";

    //输出打印 字符数组 arr1的长度大小
    printf("%zd\n", strlen(arr1));

    //输出打印 字符数组 arr2的长度大小
    printf("%zd\n", strlen(arr2));
 
    return 0;
}
  • 输出结果:

end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值