**
1、C语言的具体结构和语法规范以hello_wolrd.c程序为例子,说明C语言程序的一般的结构。
#include//预处理过程,包含头文件 int main()//定义了一个返回类型为整数的函数main() { printf("hello,world\n"); return 0; }
需要了解的有两点,第一,了解C语言程序的基本组成。第二,一个C语言要运行,所需要经历的步骤有哪些?
C语言程序的组成和运行步骤 1.1 .1C语言程序的基本组成就像hello_world.c中反映的一样,一个C语言程序必须要包括预处理步骤和主函数,预处理步骤下面几种类型:预处理步骤类型和解释
宏定义:#define 指令定义一个宏,#undef 指令删除一个宏定义;
文件包含:#include指令导致一个指定文件的内容被包含到程序中;
条件编译:#if,#ifdef,#ifndef,,#elif,#else 和#dendif;
剩下的#error,#line和#pragma指令更特殊的指令,较少用到;
暂时只需要掌握文件包含就可以了,include的意思是包含其他的已经存在的文件,像此处的stdio.h指的就是标准输入和输出文件(可以理解为,standard input and output),h指的是文件类型(.c和,h本质上没有任何区别。 只不过一般:.h文件是头文件,内含函数声明、宏定义、结构体定义等内容,.c文件是程序文件,内含函数实现,变量定义等内容。).h与.c类型的理解
主函数是一个程序的入口,所以一个程序必须要有一个main()的主函数。可以在主函数中进行一些运算和操作并且可以引用其他的已定义的函数。int 对应的是return返回的类型,一般main函数默认返回值是整数0,因此int 和return可以省略。此时默认返回的函数值为0。main()的()是用来写参数的。
1.1.2 C语言的运行步骤C语言是一种高级程序语言,按照一般的使用习惯,C语言是一门编译型的语言,所以一个C语言程序一般要先编译为一个可执行文件,之后才能开始运行。与编译型语言对应的是解释型语言,例如Python就是一门解释型的语言,在Python的运行过程中,解释器编译一行就运行一行,所以一般C语言出现某些语法错误的时候在最初的编译阶段就可能出现异常,编译失败,而一个py文件运行时,错误行前面的代码应该已经运行了。
值得注意的是,虽然C语言是直接编译直接运行,但是可以在C语言的编译器中设置断点,来寻找错误的位置和类型,通过debug的方式来查看运行过程中各个数据的值,以此来检错和纠错。
关于代码格式的规范:
一般一个说明或者一个语句占一行;
函数体内的语句和某些结构内的语句要有明显的缩进。;
括号,引号,双引号要成对书写;
当一个可执行语句结束在末尾要加上分号,C语言中在引号之外的空格符号没有意义 ,因此计算机区分语句的标志包裹特殊的关键字和分号。
代码中所有的符号均为英文半角符号。
注释的规范:
//单行注释文本内容
标识符规范:
C语言标识符就是指变量名、文件名的名称
2、C语言的数据类型、变量储存类别 2.1 C语言的数据类型C语言规定,标识符可以由英文字符、数字和下划线组成,并且第一个字符必须是字母或者是下划线,需要注意的是:
1.标识符最好不要超过8位或者两个标志符最好不要使用前八位相同的字符;
2.标志符严格区分大小写;
3.标志符不要使用中文,最好能表示文件的用途或者其他的一些信息;
4.标志符不能是C语言的关键字。
基本数据类型的存储
| 数据类型 | 说明 | 字节 |
|---|---|---|
| int | 整型 | 2 |
| char | 字符 | 1 |
| float | 单精度浮点数 | 4 |
| double | 双精度浮点数 | 8 |
此处需要联系到计算机中数据的表示和计算,以char为例,在在计算机中有128个基本的数字,英文字母和特殊的控制和通信字符可以通过ASCII编码的体系,编码为一个字节长度的二进制数储存在,因此char的字节长度为1。另一方面需要注意字符串和字符是不一样的,和Python不同,字符串不是C语言的基本数据类型,在C语言中引用字符串用双引号但是引用字符用单引号。获取某个数据的长度可以用sizeof 操作符,注意是操作符,不是函数,不需要用括号。
2.1.1 整型数据的说明整型数据就是不包括小数的数据,可以分为三类int、short int、long int(整型数据的类型)下面表格中有一些对应关系。
数据类型 | 说明|字节
-------- | -----|-----|—
int |整型|2
short int| 短整型(int可以省略)|2
long int |长整型(int可以省略)|2
unsigned int|无符号整型|4
unsigned short int|无符号短整型|4
unsigned long int|无符号长整型|4
需要注意的是在C语言中整型的字节长度与编译环境和硬件等等因素有关,所以并不是绝对的以多少字节储存,而且长整型和整型或者短整型和整型也可能有着同样的字节数。实际上C语言对整型数据只是做了宽泛的限制
2.1.2 浮点数的说明short 至少占用2个字节。
int 建议为一个机器字长。32位环境下机器字长为4字节,64位环境下机器字长为8字节。
short的长度不能大于 int,long 的长度不能小于 int。
浮点数是与整型数据相对应的数据,是指带小数的数据。根据精度的不同可以分为三种浮点数
| 数据类型 | 说明 | 字节 |
|---|---|---|
| float | 单精度浮点数 | 4 |
| double | 双精度浮点数 | 8 |
| long double | 长双精度浮点数 | 16 |
| 需要说明的是,浮点数在C语言中的输入,输入和大小比较C语言浮点数详解 |
浮点数的输出:
float采用%f占位符。
double采用%lf占位符。double不可以用%f输入,但可以用%f输出,但是不建议采用%f,因为不同的编译器可能会有差别。
long double采用%Lf占位符,注意,L是大写。
浮点数输出缺省显示小数点后六位。
浮点数采用%lf输出,完整的输出格式是%m.nlf,指定输出数据整数部分和小数部分共占m位,其中有n位是小数。如果数值长度小于m,则左端补空格,若数值长度大于m,则按实际位数输出。
科学计数法表示
2.1.3 基本数据类型的自然转换和强制转换科学计数法采用%e或%E输出,完整的输出格式是%m.ne或%m.nE,指定输出数据整数部分和小数部分共占m位,其中有n位是小数。如果数值长度小于m,则左端补空格,若数值长度大于m,则按实际位数输出。
基本数据类型的自动转换和强制转换
1、自动类型转换
当C程序在进行赋值或运算时,精度小的类型自动转换为精度大的数据类型,这个就是自动类型转换。
2、强制类型转换
3、C语言的 格式化输入和输出函数 3.1格式化输出函数printf() 3.1.1printf()函数的基本形式将精度高的数据类型转换为精度小的数据类型。使用时要加上强制转换符(),但可能造成精度的降低或溢出,格外要注意。
printf("我是个C语言的新手,代号%d",a);
3.2格式化输入函数scanf() 3.2.1scanf()函数的基本形式其中引号里面的内容既可以是任意的文本内容,也可以格式化输出一些变量的值,printf里面的f就是formated格式化的意思。printf()函数用来在屏幕上打印“文本”。
scanf("%d,%d",&a,&b);
3.3格式化符号和转义字符scanf()函数是用来输入的函数,同样的也是需要格式化输入的函数,此处的&运算符是取地址的运算符,表示把scanf()获取到的值存到某个变量的地址,此处需要注意的是,两个%d之间的逗号,也可能是空格或者没有,空格和没有的情况对输入和输入没有特别的要求,只是要求手动输入的两个数据之间没有除了空格之外的字符,但是当%d之间是逗号的时候,手动输入时,必须要在两个数据之间输入一个逗号才能被计算机识别和储存。
####3.3.1 格式化字符的具体含义和用法格式化字符
| 格式化字符 | 含义 |
|---|---|
| %d | 十进制有符号整数 |
| %o | 以八进制形式输出无符号整数(不输出前缀O) |
| % x | 以十六进制形式输出无符号整数(不输出前缀0X) |
| %u | 以十进制形式输出无符号整数 |
| %f | 以小数形式输出单、双精度实数 |
| %e | 指数形式输出单、双精度实数 |
| %g | %f%e中较短的输出宽度输出单、双精度实数 |
| %c | 输出单个字符 |
| %s | 输出字符串 |
####3.3.2 转义字符C语言中的转义字符
| 转义字符 | 含义 |
|---|---|
| a | 响铃 |
| b | 退格BS,将当前位置移到前一列 |
| f | 换页FF,将当前位置移到下页开头 |
| n | 换行LF,将当前位置移到下一行开头 |
| r | 回车CR,将当前位置移到本行开头 |
| t | 水平制表HT,调到下一个TAB位置 |
| v | 垂直制表 |
| |代表一个反斜杠字符 | |
| ’ | 代表一个单引号或者撇号字符 |
| " | 代表一个双引号字符 |


