1.Hello World
1.1 Hello World示例
- 学习一门新程序设计语言的惟一途径就是使用它编写程序。对于所有语言的初学者来说, 编写的第一个程序几乎都是相同的:
#include <stdio.h>
int main()
{
printf("Hello World\n");
return 0;
}
- 一个 C 语言程序,无论其大小如何,都是由函数和变量组成的。
- 函数中包含一些语句,以指定所要执行的计算操作;
- 变量则用于存储计算过程中使用的值。
- 在本例中,函数的名字为 main。通常情况下,函数的命名没有限制,但 main 是一 个特殊的函数名——每个程序都从 main 函数的起点开始执行,函数中的语句用一对花括号{}括起来。
- 主函数是必须有的,每一个C语言程序都有main函数,哪怕是空的。
- 主函数是程序的入口,也就是程序开始运行的地方。
int main()
{
return 0;
}
/*
int: 返回值类型,代表主函数最终的执行结果是一个整型数据
main: 函数的名字,这个名字不能变
(void):函数的参数列表,代表程序运行时不需要参数,等价于(),此处void可以省略
return 0:函数的返回值,代表主函数最终返回一个 0 给上级进程(称为父进程)。
一般而言,函数正常退出返回0,非正常退出返回非0。
*/
- 本例中的 main 函数仅包含下面一条语句:
printf("hello, world\n");
- printf 是一个用于打印输出的库函数,在此处, 它打印双引号中间的字符串,"\n"表示换行的意思。
- 头文件
#include <stdio.h>
1.为什么要包含头文件?
2.为什么在这个程序里要包含stdio.h这个头文件?
- C语言程序中,任何符号(包括变量和函数)的使用,都是需要提前声明的
- 经过声明的符号,编译器才能正确识别和编译,否则编译器不认识,无法编译
- 如果程序用到了系统库函数,那么就需要包含相应的系统头文件来进行声明
1.2 man手册
- 手册类别
- Shell命令(默认已安装)
- 系统调用
- 库函数
- 特殊文件(通常出现在/dev目录下)
- 文件的特殊格式或协定(例如/etc/passwd的格式)
- 游戏
- 杂项(例如一些宏定义)
- 系统管理员命令(通常只能由管理员执行)
- 非标准内核例程
- 查询man手册(按 q退出)
cam@ubuntu:~$ man -f printf
printf (1) - format and print data
printf (1posix) - write formatted output
printf (3) - formatted output conversion
printf (3posix) - print formatted output
cam@ubuntu:~$ man 3 printf
1.3 printf
int printf(const char *format, ...);
- printf 的格式有四种:
printf("字符串\n");
printf("Hello World!\n"); // 其中 n 是“new line”的缩写,即“新的一行”
printf("输出控制符",输出参数);
#include <stdio.h>
int main(void)
{
int i = 10;
printf("%d\n", i); /* %d是输出控制符,d 表示十进制,后面的 i 是输出参数 */
return 0;
}
- 这句话的意思是将变量 i 以十进制输出。
- %x就是以十六进制的形式输出
- %o就是以八进制的形式输出
printf("输出控制符1 输出控制符2…", 输出参数1, 输出参数2, …);
#include <stdio.h>
int main(void)
{
int i = 10;
int j = 3;
printf("%d %d\n", i, j);
return 0;
}
- 输出控制符 1 对应的是输出参数 1,输出控制符 2 对应的是输出参数 2
- %d 和 %d之间有空格,那么输出10 和 3 之间就有空格,printf 中双引号内除了输出控制符和转义字符\n外,所有其余的普通字符全部都原样输出
printf("输出控制符 非输出控制符",输出参数);
- 输出控制符如下:
十进制整数:%d
printf("%d\n", 123); // 整数用%d输出,'\n'回车换行
八进制整数:%o
printf("%#o\n", 8); // 整数用%#o输出,显示前缀
==> 010
十六进制整数:%x
printf("%#x\n", 10); // 整数用%#x输出,显示前缀'\n'回车换行
==> 0xa
字符:%c
printf("%c\n", 'x'); // 输出字符
字符串:%s
printf("%s\n", "abcd"); // 输出字符串
- 注意:指定输出数据宽度的,在%和表示类型的字符中间加上数字表示输出的宽度
#include <stdio.h>
int main()
{
char ch = 'x';
int n = 123456;
printf("|%5c|\n", ch); // 整个宽度是5个字符,右对齐
printf("|%5c|%-5c|\n", ch, ch); // 数字前面加负号表示左对齐,数字前面加正号是右对齐
printf("%3d\n", n); // 当指定的宽度小于数据的实际宽度的时候,按照数据值的实际宽度输出
return 0;
}
输出:
| x|
| x|x |
123456
1.4 scanf
- 键盘是系统的标准输入设备,从键盘中输入数据被称为标准输入
int scanf(const char *format, ...);
int b, c;
char a[10];
scanf("%d", &b); // 这里使用&
scanf("%d %d", &b, &c)
scanf("%d", a); // 这里不用使用&
2.关键字和保留标识符
- 标识符:用来表示某种含义的符号(如同我们生活中的名字一样)。在C语言中,定义符号常量,变量,数组,结构体,枚举,函数等都需要一个名称,我们把这名称成为标识符。
- 标识符的命名规则
- 标识符只能由字母,数字,下划线,美元($)符号组成
- 严格区分大小写
- 不能以数字开头
- 不能与C中的关键字同名
- 关键字:关键字又称保留字,就是程序发明者规定的有特殊含义的单词,不能作为常量名、变量名或其他标识符名称
- 分隔符:
- 分号 ; 用来结束语句
- 大括号{ }用来表示作用域,函数体,数组之中等等
- 圆括号 () 用在运算的优先级上,或者用在函数时包含参数列表
- 方括号 []主要用在和数组相关时
- 逗号 ,用于函数的参数列表分隔
- 点号. 用于点语法 -- 结构体章节会介绍
3.代码编写风格
- 缩进:凡是有代码块的地方都必须缩进,一对大括号 { } 代表一个代码块
- 空格:标点符号后面,一般加空格
- 空行:不同逻辑段落中间,一般加空行
- 符号命名:尽量能一望便知,做到顾名思义,避免使用无意义字符
- 华为c语言编程规范:华为C语言编程规范 | wiki