从零开始学C语言
@阆苑祁寒
写在前面:本文从一个初学者的角度,给出了对C语言的简单理解。如有谬误,敬请指出!
Week1
1 #include
2 int main(void)3 {4 printf("Hello, world! /n");5 return 0;6 }
基本语法解释:
stdio 系统文件库,除stdio有诸多类型的库函数,stdio中最常用的是printf()函数。
.h 头文件
#include 预处理器导入头文件,可python的inform和latex的\usepackage是一个道理.
<> C标准库,写成""表示自定义的库,常见的有标准数据传输库和数学库,具体参考相关附录.
int 返回一个整数,表示整型数据结构,还有其他种类的数据结构,如浮点float等,具体参考相关附录.
main 所有C文件有且只有一个主函数(入口函数),在C++中main()表示不需要参数,在C中main(void)表示不需要参数(当然前一种情况也可以运行),注意没有void main这种说法,int main(int argc, char *argv[])表示需要参数,argc为给程序的参数的个数,argv中保存的是给函数的参数,都是字符串。
printf() 输出到屏幕,必须调用头文件,是标准数据传输库下两个最重要的函数(另外一个是scanf,格式与printf类似,只是参量表前需要加地址符&),其调用格式是 printf("", ); ,库函数的声明是 int printf(const char *format, ...) ,其中字符串format包含了要被写入到标准输出 stdout 的文本,可以包含嵌入的 format 标签,其标签属性是 %[name][flags][width][.precision][length]specifier ,可被随后的附加参数中指定的值替换,并按需求进行格式化。注意每一个printf()可以有多个format标签,写成 %[name]%[name] 格式,中间无需逗号。(注:scanf函数可以识别的数据类型是 [number] [number] 和 [number]\n[number] ,中间如果是逗号则不能识别。)更多内容参考相关附录。下表摘录自附录。
name意义
d
以十进制形式输出带符号整数(正数不输出符号)
o
以八进制形式输出无符号整数(不输出前缀0)
x,X
以十六进制形式输出无符号整数(不输出前缀Ox)
u
以十进制形式输出无符号整数
f
以小数形式输出单、双精度实数
e,E
以指数形式输出单、双精度实数
g,G
以%f或%e中较短的输出宽度输出单、双精度实数
c
输出单个字符
s
输出字符串
p
输出指针地址
lu
32位无符号整数
llu
64位无符号整数
flags意义
-
在给定的字段宽度内左对齐,默认是右对齐(参见 width 子说明符)。
+
强制在结果之前显示加号或减号(+ 或 -),即正数前面会显示 + 号。默认情况下,只有负数前面会显示一个 - 号。
空格
如果没有写入任何符号,则在该值前面插入一个空格。
#
与 o、x 或 X 说明符一起使用时,非零值前面会分别显示 0、0x 或 0X。
与 e、E 和 f 一起使用时,会强制输出包含一个小数点,即使后边没有数字时也会显示小数点。默认情况下,如果后边没有数字时候,不会显示显示小数点。
与 g 或 G 一起使用时,结果与使用 e 或 E 时相同,但是尾部的零不会被移除。
0
在指定填充 padding 的数字左边放置零(0),而不是空格(参见 width 子说明符)。
width意义
(number)
要输出的字符的最小数目。如果输出的值短于该数,结果会用空格填充。如果输出的值长于该数,结果不会被截断。
*
宽度在 format 字符串中未指定,但是会作为附加整数值参数放置于要被格式化的参数之前。
.precision意义
.number
对于整数说明符(d、i、o、u、x、X):precision 指定了要写入的数字的最小位数。如果写入的值短于该数,结果会用前导零来填充。如果写入的值长于该数,结果不会被截断。精度为 0 意味着不写入任何字符。
对于 e、E 和 f 说明符:要在小数点后输出的小数位数。
对于 g 和 G 说明符:要输出的最大有效位数。
对于 s: 要输出的最大字符数。默认情况下,所有字符都会被输出,直到遇到末尾的空字符。
对于 c 类型:没有任何影响。
当未指定任何精度时,默认为 1。如果指定时不带有一个显式值,则假定为 0。
.*
精度在 format 字符串中未指定,但是会作为附加整数值参数放置于要被格式化的参数之前。
length意义
h
参数被解释为短整型或无符号短整型(仅适用于整数说明符:i、d、o、u、x 和 X)。
l
参数被解释为长整型或无符号长整型,适用于整数说明符(i、d、o、u、x 和 X)及说明符 c(表示一个宽字符)和 s(表示宽字符字符串)。
L
参数被解释为长双精度型(仅适用于浮点数说明符:e、E、f、g 和 G)。
return 0 参量为空时结束循环(为了使代码严谨,必须要加)。return表示返回一个函数的值,在C中没有真假值一说,与python不同,即没有return false和return ture。
/n 在C语言中的转义字符,借助简单符号表达一些功能。下表摘录自附录。
C标识符 区分大小写,不允许出现标点字符(如 @、$ 和%),通常由字母、下划线和数字组成。
C注释 单行可以用\\注释,多行可以用\*和*\注释,后者更为规范,其本质是预编译时以一个空格代之(搜索\*和*\,也是不能嵌套的原因)。
; C语句结束语。
C关键字 不能作为常量名、变量名或其他标识符名称。下表摘录自附录。
auto
声明自动变量
break
跳出当前循环
case
开关语句分支
char
声明字符型变量或函数返回值类型
const
声明只读变量
continue
结束当前循环,开始下一轮循环
default
开关语句中的"其它"分支
do
循环语句的循环体
double
声明双精度浮点型变量或函数返回值类型
else
条件语句否定分支(与 if 连用)
enum
声明枚举类型
extern
声明变量或函数是在其它文件或本文件的其他位置定义
float
声明浮点型变量或函数返回值类型
for
一种循环语句
goto
无条件跳转语句
if
条件语句
int
声明整型变量或函数
long
声明长整型变量或函数返回值类型
register
声明寄存器变量
return
子程序返回语句(可以带参数,也可不带参数)
short
声明短整型变量或函数
signed
声明有符号类型变量或函数
sizeof
计算数据类型或变量长度(即所占字节数)
static
声明静态变量
struct
声明结构体类型
switch
用于开关语句
typedef
用以给数据类型取别名
unsigned
声明无符号类型变量或函数(正数)
union
声明共用体类型
void
声明函数无返回值或无参数,声明无类型指针
volatile
说明变量在程序执行中可被隐含地改变
while
循环语句的循环条件
空格 描述空白符、制表符、换行符和注释,空格分隔语句的各个部分,让编译器能识别语句中的某个元素(如int)在哪里结束,下一个元素在哪里开始。
除主函数main之外的其他函数,需要命名为除main之外的名字以便识别,常见写法为“函数名(需要返回的数据类型和参量)”(C99之后的存储类型没有必要写出),这里的参量与函数内局部声明的参量不同(需要返回!),这也是当参量为空时写return 0的原因。
单引号 单引号表示字符,双引号表示字符串(指针),前者被编译为字符编码,后者被编译为内存,更多内容在后续指出。
更多基础内容期待补充,非常感谢www.runoob.com。C语言的第一课与其说是认识C语言,不如说是认识最基本的语句helloword里的所有语法及其附录!
Week2
程序的灵魂是算法,算法的核心是逻辑,语言只是表达给机器的工具(尤其是C,既面向机器,又面向用户)。不同于其他语言,C面向过程,只能实现函数与函数的互相调用,而不能嵌套,其逻辑本质可以平延到高级语言对包的调用。C中最常见的语句列表如下。
常用语句解释:
顺序结构
表达式语句:赋值和调用函数。
复合语句:if语句和循环语句。
空语句:例如连续输入字符,遇到a则停止,可用getchar表示, while(getchar()!='a'); 。
选择结构