从零开始学习c语言(1)

本文介绍了C语言的基础知识,包括其起源、学习所需工具(如VS2022、XCode等)、基本概念(如源文件、main函数、printf和库函数),以及字符、ASCII码、字符串处理、转义字符和C语言的语句分类(空语句、表达式语句等)。
摘要由CSDN通过智能技术生成

C语言是什么?

C 语言是一种通用的、面向过程式的计算机程序设计语言。1972 年,为了移植与开发 UNIX 操作系统,丹尼斯·里奇在贝尔电话实验室设计开发了 C 语言。
在 1978 年,布莱恩·柯林汉(Brian Kernighan)和丹尼斯·里奇(Dennis Ritchie)制作了 C 的第一个公开可用的描述,现在被称为 K&R 标准。

学习C语言需要什么?

软件的应用

  1. VS2022集成了MSVC(功能齐全,缺点是安装包较大,是微软旗下的IDE编译器)
  2. XCode集成了clang(苹果电脑上的开发工具)
  3. DevC++集成了gcc(适合竞赛,安装包小,但不适合养成代码风格如今也不再更新)
  4. 小熊猫C++集成了gcc(在DevC++上所开发的编译器)

软件的下载链接

  1. VS2022:link
  2. XCode:link
  3. DevC++:link
  4. 小熊猫C++:link

C语言的基本概念

  1. C语言是一门简单的编译型语言,它的功能也十分强大,C语言源代码都是文本文件,必须通过编译和链接才能生成二进制的可执行文件,所有后缀为(.c)都为C语言。
  2. test.c的文本文件想要变可执行文件首先要经过编译器的编译生成test.obj文件再经过链接器的链接最终生成了二进制的可执行文件。
    在这里插入图片描述
  1. 每个源⽂件(.c)单独经过编译器处理⽣成对应的⽬标⽂件(.obj为后缀的⽂件);
  2. 多个⽬标⽂件和库⽂件经过链接器处理⽣成对应的可执⾏程序(.exe⽂件)。

3.第一个C语言程序

#include<stdio.h>

int main()
{
	printf("hello C\n");
	return 0;
}

4.main函数

每个C语⾔程序不管有多少⾏代码,都是从 main 函数开始执⾏的, main 函数是程序的⼊⼝,main 函数也被叫做:主函数。

  1. main函数是程序的入口
  2. main函数在程序中有且仅有一个
  3. 即使有再多的.c文件main函数也有且仅有一个(因为程序的入口只需要一个)

5. printf和库函数

printf("hello C\n");

代码中使⽤了 printf 函数,实现了在屏幕上的信息的打印.
printf 是⼀个库函数,它的功能是在标准输出设备(⼀般指屏幕)上进⾏信息的打印。上⾯的代码是使⽤ printf 函数打印字符串。只要把想要打印的⼀串字符放在双引号中并传递给printf函数就可以打印。

例如:

int main()
{
	int n = 65;
	
	printf("%d\n", n);//打印整型
	printf("%c\n", n);//打印字符型

	return 0;
}

这里的%c,%d是占位符,会被后面的值替换的
使用库函数的时候,需要包含头文件比如:printf的头文件是stdio.h

那什么是库函数?

库函数是为提升程序员的开发效率的,是为了不重复的实现常见代码,C语言标准所规定的一组函数,而这些函数是要一些厂商来根据C语言标准实现在他们的编译器当中来提供给程序员来使用。这些函数组成了一个库,被称为”标准库“,这些函数组也称为“库函数”。
库函数有很多,想提前了解可以通过这个链接
Cpulsplus:link

6.关键字介绍

C语言中保留了一些名字和字符,如我们常用的int,char,short等等这些名字被称为关键字或者保留字。
C语⾔的32个关键字如下:

autobreak
casechar
constcontinue
defaultdo
doubleelse
enumextern
floatfor
gotoif
intlong
registerreturn
shortsigned
sizeofstatic
structswitch
typedefunion
unsignedvoid
volatilewhile

注:C语言的全部关键字介绍link

7.字符和ASCII码

在键盘上输入的a,b,c,d,@,#它们都是字符,C语言中想要使用它们就需要单引号括起来’a’,‘b’‘#’。

我们知道计算机存储的数据是以二进制的形式来的,那哪些字符怎么存储呢?
如果我们每个人都自己给这些字符进行二进制的排序,那就会造成一些不必要的混乱和相互通信,后来美国国家标准学会(ANSI)出台了⼀个标准ASCII编码,C语⾔中的字符就遵循了ASCII编码的⽅式。
在这里插入图片描述
记ASCII码表的方法

  1. ASCII码中A~Z的值是65 ~ 90
  2. ASCII码中a~z的值是97 ~ 122
  3. ASCII码中大写字母和小写字母相差32
  4. ASCII码中数字0 ~ 9的值是48 ~ 57
  5. 0 ~ 32的字符在ASCII码中是无法打印在屏幕上的
  6. \n的ASCII码值是 10

打印单个字符是%c打印字符串的是%s

int main()
{
	char a = 65;
	putchar(a);
	return 0;
}

打印结果:在这里插入图片描述

8.字符串和\0

我们知道C语言中字符是单引号引起来如’a’,那么字符串怎么表示呢?
使用双引号引起来的一串字符的字符称为字符串如"abcdefg"。
字符串的打印是%s
例如:

int main()
{
	char ch[] = "abcdefg";
	printf("%s\n", ch);
	return 0;
}

打印结果:在这里插入图片描述
C语言字符串有一个特殊的知识,就是每个字符串中最后的位置隐藏了一个\0字符,这个\0字符表示字符串的结束标志。
我们通过代码来看看

int main()
{
	char arr1[] = "abcd";
	char arr2[] = { 'a','b','c','d' };
	printf("%s \n%s", arr1, arr2);
	return 0;
}

打印结果:
在这里插入图片描述
那为什么打印结果中arr1和arr2的不同呢?而arr2的打印结果为什么是打印完abcd后还有其他的乱码呢?
我们进入调试模式看看
在这里插入图片描述
我们可以看到, arr2 字符数组在打印的时候,打印了 a 、 b 、 c 、d后还打印了⼀些随机值,这就是因为 arr2 在末尾的地⽅没有 \0 字符作为结束标志,在打印的时候没有停⽌。而arr1打印就是正常的这是因为arr1的末尾有\0,所以arr1的打印就是正常的。
如果我们给arr2中加个\0结果会是什么呢?

int main()
{
	char arr1[] = "abcd";
	char arr2[] = { 'a','b','c','d','\0'};
	printf("%s \n%s", arr1, arr2);
	return 0;
}

在这里插入图片描述
这样arr1和arr2的结果就相同了。

9.转义字符

C语言中的转移字符有:

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

下面是它们的使用方法
?:
在某些编译器下 ,会将 “ ??) ” 解析成 三字母词 “ ] ” 。
但是三字母词在现在的编译器已经无法实现了。
\`:

int main()
{
	printf("%c", '\`');
	return 0;
}

在这里插入图片描述
\":

int main()
{
	printf("%c", '\"');
	return 0;
}

在这里插入图片描述

\\:

int main()
{
	printf("%c", '\\');
	return 0;
}

在这里插入图片描述
\a:在打印 \a 时会触发电脑上的蜂鸣器.。

\ddd和\xdd:

int main()
{
	printf("八进制结果 = %d 十六进制结果 = %d", '\120', '\x50');
	return 0;
}

在这里插入图片描述
转义字符的进阶玩法

int main()
{
	printf("c:\test\test.c");
	printf("\n");
	printf("c:\\test\\test.c");
	return 0;
}

上面的结果会是什么呢?

在这里插入图片描述
结果为什么不一样呢?
这是上面的 \t 会被编译器解析为水平制表符,下面的\t的\会被编译器解析为\,这样它们的结果就不一样了。
我们也可以搭配strlen来玩。

10.语句和语句分类

C语⾔的代码是由⼀条⼀条的语句构成的,C语⾔中的语句可为以下五类:

  1. 空语句
  2. 表达式语句
  3. 函数调用语句
  4. 复合语句
  5. 控制语句
10.1空语句

空语句是五类语句中最简单的语句,一个分号就是一个空语句

int main()
{
	;//空语句
	return 0;
}
10.2表达式语句

表达式语句就是在表达式的后边加上分号

int main()
{
	int a = 10;
	int b = 20;
	int c = a + b;//表达式语句
	return 0;
}
10.3函数调用语句

函数调⽤的时候,也会加上分号,就是函数调⽤语句。

int Add(int a, int b)
{
	return a + b;
}

int main()
{
	int a = 10;
	int b = 20;
	int c = Add(a, b);

	return 0;
}
10.4复合语句

复合语句其实就是代码块,成对括号中的代码就构成⼀个代码块,也被称为复合语句

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	for (int i = 0; i < sz; i++)
	{
	    //for循环的循环体的⼤括号中的就是复合语句
		printf("%d", arr[i]);
	}
	return 0;
}
10.5控制语句

控制语句⽤于控制程序的执⾏流程,以实现程序的各种结构⽅式(C语⾔⽀持三种结构:顺序结构、选择结构、循环结构),它们由特定的语句定义符组成。
C语言有九种语句:
主要分三类

  1. 条件判断语句也叫分⽀语句:if语句、switch语句;
  2. 循环执⾏语句:dowhile语句、while语句、for语句;
  3. 转向语句:break语句、goto语句、continue语句、return语句。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值