文章目录
前言
希望本文能帮助初学C语言的人群快速对C语言的一些较为基础且重要的概念有一些整体的认识,一些复杂的概念没有展开。主要介绍了main函数、库函数(包含头文件的知识)、数据类型、关键字、语句和注释等知识。
1.C语言是什么?
人与人之间交流的语言称为对话语言,例如:中文,英文等
那人与计算机是如何交流的呢? 使用计算机语言。
目前已知有上千种计算机语言,人们使用计算机语言写程序,给计算机下达指令,指挥计算机工作。而C语言就是众多计算机语言中的一种。
2.写下第一个C语言程序
代码如下:
#include <stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
运行代码的结果:在屏幕上打印了hello world
为什么会产生此效果?C语言代码是如何构成的呢?接下来进行详细解答:
2.1 main函数
每个 C 语言程序不管有多少行代码,都是从 main 函数开始执行的, main 函数是程序的⼊⼝,main 函数也被叫做:主函数。
需要注意的是:⼀个项目中可以有多个.c文件,但是只能有⼀个main函数(因为程序的入口只能有⼀个)
int main()
{
...... // 编辑自己想写的代码内容
return 0;
}
main 前面的 int 表示 main 函数执行结束的时候返回⼀个整型类型的值。所以在 main 函数的最后写 return 0; 正好前后呼应。
值得注意的是,C99标准1中又引入了一种特殊的main函数形式,即void类型的返回值。
void main()
{
...... // 编辑自己想写的代码内容
}
void main()
{
...... // 编辑自己想写的代码内容
return; //有return,但不返回任何值
}
把void修饰的函数作为无返回值的函数,所以void类型的main函数中不需要用到return,就算是用也必须是return;如果返回了一个值,程序就会报错。
2.2 printf函数和库函数
在上⾯的代码中有⼀句代码如下:

printf("hello world\n");
代码中使⽤了 printf 函数,实现了在屏幕上的信息的打印。
这⾥简单的介绍⼀下 printf , printf 是⼀个库函数,它的功能是在标准输出设备(⼀般指屏幕)上进⾏信息的打印。上⾯的代码是使⽤ printf 函数打印字符串。只要把想要打印的⼀串字符放在双引号中并传递给printf函数就可以打印。
同时我们在使用库函数的时候,是需要包含头⽂件的,⽐如: printf 函数需要包含的就是stdio.h 这个头文件,具体的方法就是:
#include <stdio.h>
那什么是库函数呢?
为了不再重复实现常见的代码,让程序员提升开发效率,C语⾔标准规定了⼀组函数,这些函数再由不同的编译器厂商根据标准进行实现,提供给程序员使用。这些函数组成了⼀个函数库,被称为标准库,这些函数也被称为库函数。在这个基础上⼀些编译器厂商可能会额外扩展提供部分函数(这些函数其他编译器不⼀定支持)。
⼀个系列的库函数⼀般会声明在同⼀个头⽂件中,所以库函数的使⽤,要包含对应的头⽂件。
以下是C标准库中包含的一些头文件:
每个头文件中都包含了一个系列或几个不同系列的库函数提供给程序员使⽤。例如:
<stdio.h>头文件提供标准输入输出函数,如printf、scanf、puts、gets等。<string.h>头文件提供字符串处理函数,如strcpy、strcat、strlen、strcmp等。
要想使用特定的库函数,我们必须要在代码的开头用 #include 包含对应的头文件。
3.数据类型和变量
3.1 数据类型介绍
C语⾔提供了丰富的数据类型来描述⽣活中的各种数据。
使⽤整型类型来描述整数,使⽤字符类型来描述字符,使⽤浮点型类型来描述小数。
所谓“类型”,就是相似的数据所拥有的共同特征,编译器只有知道了数据的类型,才知道怎么操作
数据。
类型分类:
char //字符类型
short //短整型
int //整型
long //长整型
long long //更长的整型
float //单精度浮点数
double //双精度浮点数
3.2 各种数据类型的长度
每⼀种数据类型都有自己的⻓度,使⽤不同的数据类型,能够创建出长度不同的变量,变量长度的不同,存储的数据范围就有所差异。我们可以使用操作符sizeof来求出不同数据类型所占用的内存大小。
3.2.1 sizeof 操作符
sizeof 是⼀个专门用来计算数据类型⻓度的操作符,单位是字节。
sizeof 操作符的操作数可以是类型,也可是变量(计算变量的类型的长度)或者表达式(计算表达式结果的类型长度)。
sizeof( 类型 )
sizeof(表达式)
sizeof 表达式
sizeof(变量)
sizeof 变量
注:sizeof 的操作数如果不是类型,是表达式或者变量的时候,可以省略掉后边的括号的(从这一点就可以看出sizeof不是函数,因为函数是不能删去后面紧跟着的括号的)。
sizeof 后边的表达式是不真实参与运算的,根据表达式结果的类型来得出大小。
下面我们使用sizeof操作符来计算各数据类型的长度:
#include <stdio.h>
int main()
{
printf("%zd\n", sizeof(char));
printf("%zd\n", sizeof(short));
printf("%zd\n", sizeof(int));
printf("%zd\n", sizeof(long));
printf("%zd\n", sizeof(long long));
printf("%zd\n", sizeof(float));
printf("%zd\n", sizeof(double));
return 0;
}
从sizeof操作符计算出来的结果中可以看出短整型short(2字节),整型int(4字节)和更长的整型long long(8字节)在内存中所占用的大小是不一样的。
为什么都是用来表达整数的数据类型要划分出这么多种长度不同的数据类型呢?
几种整数类型的长度不一样,所表达的整数范围就不一样。短整型short所表达的整数范围比较小,整型int所表达的整数范围适中,更长的整型所表达的整数范围最大。
如果我们只有int一种整数类型,那么我们用int定义一个变量,然后使用这个变量去存储一个较小的整数,这时我们就会发现内存空间被浪费;但如果使用这个变量去存储一个很大的整数,又发现它存不下。
所以为什么会存在这么多种整数类型的答案逐渐清晰,为了方便程序员根据不同的整数大小灵活创建不同类型的整型变量,为了使内存空间得到充分利用。
3.3 变量的创建
了解清楚了数据类型,我们使⽤类型做什么呢?类型是⽤来创建变量的。
什么是变量呢?C语⾔中把经常变化的值称为变量,不变的值称为常量。
变量创建的语法形式:
数据类型 变量名;
char bbc;
int age;
double weight;
变量名的命名规则:
(1)变量名只能由字母、数字和下划线组成。
(2)变量名不能以数字开头,第一个字符必须是字母或下划线。
(3)变量名区分大小写,因此"test"和"Test"被视为两个不同的变量名。
(4)变量名不能是C语言中的关键字,如break、case、char、int、float等。
变量在创建的时候就给⼀个初始值,就叫初始化:
char bbc = 'a';
int age = 18;
double weight = 56.0;
4.关键字介绍
C语⾔中有⼀批保留的名字的符号,⽐如: int 、 if 、 return ,这些符号被称为保留字或者关键
字。
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
注:我们定义的用户标识符2不能与关键字相同,否则会出现错误。
可以将关键字理解为具有特殊含义的标识符,它们已经被系统使用,我们不能再使用了。
5.语句和语句分类
C语言的代码是由⼀条⼀条的语句构成的,C语⾔中的语句可为以下五类:
• 空语句
• 表达式语句
• 函数调⽤语句
• 复合语句
• 控制语句
5.1 空语句
空语句是最简单的,⼀个分号就是⼀条语句,是空语句。如下所⽰:
#include<sydio.h>
int main()
{
;//空语句
return;
}
空语句,⼀般出现的地⽅是:这里需要⼀条语句,但是这个语句不需要做任何事,就可以写⼀个空语
句。
5.2 表达式语句
表达式语句就是在表达式的后边加上分号。如下所示:
#include<sydio.h>
int main()
{
int a = 5;
int b = 10;
int c = 0;
b = a + b;//表达式语句
c = a * b;//表达式语句
return;
}
5.3 函数调用语句
函数调⽤的时候,也会加上分号,就是函数调⽤语句。
#include<sydio.h>
int add(int x, int y)
{
int d = x + y;
return d;
}
int main()
{
int a = 5;
int b = 10;
int c = add(a,b);//函数调用语句,调用的是用户自定义函数
printf("%d",c);//函数调用语句,调用库函数
return;
}
5.4 复合语句
复合语句其实就是代码块,成对括号中的代码就构成⼀个代码块,也被称为复合语句。
#include <stdio.h>
int add(int x, int y) //函数的⼤括号中的代码构成了复合语句
{
int d = x + y;
return d;
}
int main()
{
int a = 5;
int b = 10;
int c = add(a,b);
if(c>10)//if语句的⼤括号中的就是复合语句
{
int i = c % 10;
printf("%d",i);
}
else
printf("%d",c);
return;
}
5.5 控制语句
控制语句⽤于控制程序的执⾏流程,以实现程序的各种结构⽅式(C语⾔⽀持三种结构:顺序结构、选择结构、循环结构),它们由特定的语句定义符组成,C语⾔有九种控制语句。
可分成以下三类:
(1). 条件判断语句也叫分⽀语句:if语句、switch语句;
(2). 循环执⾏语句:do while语句、while语句、for语句;
(3). 转向语句:break语句、continue语句、goto语句、return语句。
6.注释是什么?为什么写注释?
注释是对代码的说明,编译器会忽略注释,也就是说,注释对实际代码没有影响。 注释是给程序员⾃⼰,或者其他程序员看的。
好的注释可以帮我们更好的理解代码,但是也不要过度注释,不要写没必要的注释。当然不写注释可能会让后期阅读代码的⼈抓狂。
6.1 注释的2种形式
C 语⾔的注释有两种表示方法。
6.1.1 /**/ 的形式
第⼀种方法是将注释放在 /**/ 之间,内部可以分行,也就是可以注释多行。
/*注释内容*/
/*
注释内容
*/
实际在代码中应用:
(1)在此处注释起到的作用是对代码进行一些必要的补充说明,便于代码的阅读及理解。
#include <stdio.h>
int main()
{
printf("%15d\n", 0XABCDEF);/*printf可以使用使用格式控制串“% md”输出域宽为m的十进制整数。*/
return 0;
}
#include <stdio.h>
int main()
{
printf("%15d\n", 0XABCDEF);
/*printf可以使用使用格式控制串“% md”输出域宽为m的十进制整数。*/
return 0;
}
(2)因为编译器在编译代码过程中会忽略注释,所以我们也可以利用注释来隐藏一些暂时不需要用到的代码段。当我们再次需要用到这些代码段时,只需要把注释符号删去即可。
#include <stdio.h>
int main()
{
int a, b;
scanf("%d", &a);
/*while (a)
{
b = a % 10;
a = a / 10;
printf("%d", b);
}*/
return 0;
}
6.1.2 // 的形式
第二种写法是将注释放在双斜杠 // 后面,从双斜杠到行尾都属于注释。这种注释只能是单行,可以放在行首,也可以放在⼀行语句的结尾。这是 C99 标准1新增的语法。
//注释内容
实际在代码中应用:
(1)在此处注释起到的作用是对代码进行一些必要的补充说明,便于代码的阅读及理解。
#include <stdio.h>
int main()
{
printf("%15d\n", 0XABCDEF);//printf可以使用使用格式控制串“% md”输出域宽为m的十进制整数。
return 0;
}
#include <stdio.h>
int main()
{
printf("%15d\n", 0XABCDEF);
//printf可以使用使用格式控制串“% md”输出域宽为m的十进制整数。
return 0;
}
(2)用注释来隐藏一些暂时不需要用到的代码段。当我们再次需要用到这些代码段时,只需要把注释符号删去即可。注意与使用/**/注释方法隐藏代码段的区别,因为 //注释方法 每次只能注释单行,所以需要注释的每行代码都需要使用 //注释符号。
#include <stdio.h>
int main()
{
int a, b;
scanf("%d", &a);
//while (a)
//{
// b = a % 10;
// a = a / 10;
// printf("%d", b);
//}
return 0;
}