【C语言】真·零基础小白入门C语言语法

前言

这篇文章记录的是作者对于C语言的理解,适合完全没有C语言基础的人阅读,我认为最开始学习C语言的时候先理解这些内容,后面知识的学习才不会很吃力。如果有错别字或者内容理解错误,还请指正。

1. 第一个C语言程序 – 打印Hello world!

打印Hello world的整个程序如下:

#include <stdio.h>

int main()
{
    
    
	printf("Hello world!\n");
	return 0;
}

我将分别从中英文符号的注意事项main函数printf函数解释打印Hello world!的程序。

1.1. 中英文符号

符号都得用英文的符号,在程序里用中文的符号会报错。比如中文的()和英文的()长的就不一样。
除了printf函数中的双引号里可以使用中文的符号。

1.2. main函数(主函数)

只要是一个完整的C语言代码,就一定会有main函数,固定格式如下:

int main()
{
    
    
	//程序代码部分:这一行包含了整个程序的具体实现
	return 0;
}

int:int是integer(整数)的缩写,表示main函数返回值类型是整形(整数类型)。

main:main函数是程序的入口且main函数有且仅有一个

main函数后面的括号()里放的是参数,什么都没放就是没有参数。

一对大括号{ }里是函数体,因为这是主函数的函数体,所以叫做主函数体。主函数体中的程序代码部分是主函数体的核心,它包含了程序的具体实现。
Alt

两个//表示后面的内容是注释,程序运行的时候会忽略//后面的注释。

函数体中的语句前面都要有缩进(四个空格,相当于一个Tab键)。

retrun 0; :return 0表示程序正常结束,返回值为0。这个0与int相呼应, return后面跟着是整数,函数的返回值类型就是int。注意return 0后面有分号;

分号 ; 表示一条语句的结束。在C语言中,每条语句必须以分号结尾,否则编译器会报错。

1.3. printf函数

我先打个比方:假如你想用一支笔写字,但是你没有笔,你又不能自己造出一把笔,你只能向同桌借笔使用。同桌的桌上有一个笔盒,里面装有很多种文具,你向同桌借笔总得先询问一声再从他的笔盒里拿笔使用吧。
而printf函数就像我想要用的笔,但是我自己写不出来printf函数(或者我自己懒得写printf函数。。。开玩笑的),所以我要向一个叫stdio.h的文件先打个招呼再使用该文件里面的东西。这就能解释为什么程序的第一行要写#include <stdio.h>了,为了调用C语言本身就有的printf函数

#include <stdio.h> :意思是包含一个叫stdio.h的文件,std – standard(标准),i – input (输入) ,o – output(输出),.h表示头文件。printf是stdio.h文件中的一种函数

printf(" "); : print function的简称 ,意思是输出函数,专门用来打印数据的。printf是一个库函数–也就是C语言本身提供给我们的函数。
函数后面要紧跟着括号 ( ),括号中包含一对双引号 “ ”,在双引号中可以自由输入你想让程序输出的文字,数字或者符号(注意这里的数字还只表示字符,怎么输出整数小数在3.6中会提到)。最后的分号不要忘记 。分号代表这行语句的结束。

1.4. 补充: Hello world!后面的’ \n ’

’ \n ’ 是换行符,意思是换行,是转义字符中的一种。加上一个斜杠 \ 转变了原来的意思,不再是小写的字符’n’。

2. 数据类型

数据类型和变量常量一起理解效果最佳。

生活中有不同类型数据,比如身份证上的姓名,身份证号,出生年月,地址等。姓名是用文字表示,出生年月是用数字表示的。计算机想要知道不同类型的数据,就要对数据进行分类。比如字符 ‘0’ 和 数字0是不一样的,数字0在计算机中存储的就是0,而字符 '0’在计算机中存储的是48。如果没有数据类型区分数据,整数的48和字符 ‘0’ 会混淆。
Alt

2.1. 数据类型的分类

数据类型分为C语言内置的数据类型自定义类型,自定义类型会在结构体当中提到,所以这里主要说的是内置的数据类型。
alt

2.2. 内置类型中常见的数据类型

char是字符类型。在键盘上能打出来的一个一个的字都是字符,比如:‘y’ , ‘&’ , ‘3’ , ‘=’。一个汉字占2个字符。 字符的本质是字符的ASCII值,ASCII码值是整型,所以字符类型在归类的时候,是可以划分到整型家族的。注意字符要加上单引号,没有加单引号就不是字符了!!!

int是整型。整形就是整数类型,包括正整数,负整数,数字0。但是int类型的整数是有范围的(-21亿到21亿左右,当然每个数据类型都是有范围的,一块内存空间本来就有限)。
short是短整型。比int类型的范围要小。
long是长整型。比int类型的范围要大。

float是单精度浮点型。浮点数类型,就是小数类型。
double是双精度浮点型。 比float类型精度更高。

问:为什么整型还要分为长整型和短整型,浮点型还要分为单精度和双精度呢?
答:为了合理分配内存空间,比如存储int类型的1所占的空间肯定比存储long类型的1要小,节省了一定的空间。

2.2.1 各个数据类型所占的内存空间

Alt

问:为什么long和long long类型的内存空间都是大于等于4呢?
答:C语言只是规定内存空间:long long类型 >= long类型 >= int 类型,在不同的编译器和操作系统下会分配不同的内存空间。

对于内存空间的解释:
Alt

计算机的单位换算:
Alt

3. 变量和常量

3.1. 变量是什么?

变量:C语言中的变量和数学函数中的变量不同,C语言中的变量是一块内存空间,用于存储数据,至于存储的是什么类型的数据就要看该变量的数据类型了。

下面用代码举个例子:

int main()
{
    
    
	int a;//定义一个名字为a的变量,变量a的数据类型是int类型,也就是说变量a能存储一个整型数据。
	return 0;
}

画图解释 int a; 这行代码:
Alt

3.2. 变量的命名规则和建议

命名规则:

  • 只能由大小写英文字母或者下划线 _ 或者数字组成
  • 不能以数字开头
  • 区分大小写
  • 变量名不能与 关键字 相同

变量命名举例:

int main()
{
    
    
	int char;//error,char是关键字
	long Char;//OK,因为大小写区分
	
	float 2B;//error,因为以数字开头了
	double _2B;//OK
	
	char !1@E$;//error,符号除了下划线 _ 都不能出现在变量名上
	
	return 0;
}

变量命名的建议:
取名取的要有意义,比如想存储一个年龄,那么定义变量的时候可以把变量命名为age:

int main()
{
    
    
	int age;//定义一个整形变量,变量名是age
	return 0;
}

3.3. 常量是什么?

常量:常量就是不变的量,是一种数据。比如字符 ‘a’,整数123,小数6.66。打个比方:如果变量是一个眼镜壳,那么常量就是能放在眼镜壳里的一副眼镜。

3.4. 如何让一个变量存储一个数据(常量)

以上面一个变量名age来举例:

int main()
{
    
    
	int age;//定义一个整形变量,变量名是age
	age = 18;//把常量18赋值给变量age,此时的变量age储存的是18
	return 0;
}

还可以定义一个变量的同时给这个变量赋值,上下代码是等价的。

int main()
{
    
    
	int age = 18;//定义整型变量age的同时把18赋值给age,此时的变量age储存的是18
	return 0;
}

3.5. 赋值运算符 ’ = ’

C语言中的等号 ’ = '不是数学意义上两边相等,而是赋值的意思,也就是给一个变量(等号左边)赋予一个数据(等号右边)。
等号的左边必须是一种变量
等号的右边可以是一种数据(常量),表示的是等号右边的数据赋值给左边的变量,如果这个变量在赋值之前已经存储了一个数据,那么在赋值之后原来的数据会被替换。
等号的右边也可以是另一种变量,表示右边变量里存储的数据赋值给左边的变量。

举例:

int main()
{
    
    
	int a = 10;
	int b = 20;
	//在下面a=b执行之前,变量a存储的是10,变量b存储的是20
	a = b; 
	//a=b执行之后,变量a里的10被替换成20,变量b里的数据还是20不变
	return 0;
}

图解:
Alt

3.6. 怎么输出变量里面的数据?

#include<stdio.h>
int main()
{
    
    
	char alphabet = 'a';//定义了一个名为alphabet的字符变量,并把字符'a'赋值给变量alphabet.
	int number = 123;

	printf("%c\n", alphabet);
	printf("%d\n", number);
	printf("%c %d",alphabet,number);
    return 0;
}

程序运行结果:
Alt
与 printf("“Hello world!”); 比较, 后面多加了逗号和变量名,双引号里面有%c %d这样的格式(3.6.1详细介绍),不同的格式会输出不一样的结果。比如下面的例子:

#include<stdio.h>
int main()
{
    
    
	char alphabet = 'a';//定义了一个名为alphabet的字符变量,并把字符'a'赋值给变量alphabet.
	printf("%c\n",alphabet);
	printf("%d\n",alphabet);
	return 0;
}

程序运行结果:
Alt

%c就是该变量以字符的形式输出,%d指的是该变量以整数的形式输出。
明明都是输出alphabet变量里面的数据,可是输出的结果不同,一个是字符’a’,一个是整数97,就是受双引号中格式控制的影响。

3.6.1. 对各个数据的常见的格式控制

Alt

3.7.scanf函数

之前的例子都是在程序中写好的数据赋值给变量,就不能程序运行的过程中用键盘敲数据吗?有printf输出函数就有scanf输入函数。同样的,在调用scanf函数之前,程序的最上方包含#include<stdio.h>。

例子:

#include<stdio.h>
int main()
{
    
    
	int age;
	printf("请输入你的年龄:");
	scanf("%d",&age);
	printf("你的年龄是%d岁",age);
	return 0;
}

程序运行:
Alt
后面的光标会一直闪烁直到你用键盘输入整数,输完敲下回车程序会继续运行:
Alt

scanf函数中双引号里面的是格式控制,因为定义的是整型变量age,输入年龄的时候用整型的格式控制。
scanf函数中逗号后面除了要有变量,变量前面还要有取地址符&,得知道age变量的地址,你输入的数据才能存储到age变量中。

猜你喜欢

转载自blog.csdn.net/weixin_73276255/article/details/131234573