1.1入门
打印hello,world
#include <stdio.h> //包含标准库的信息 main() //定义名为main的函数,不接受参数值 { printf("hello, world\n"); //调用printf函数以显示字符序列 \n代表换行符 }
代码中用双引号括起来的字符序列叫字符串或字符串常量 "hello, world\n"
printf函数不会自动换行,如果需要换行需要加\n
\t 制表符
\b 表示回退符
\" 双引号
\\ 反斜杠本身
1.2变量与算术表达式
打印华氏温度和摄氏温度表
#include <stdio.h> main() { float fahr,celsius; int lower,upper,step; lower = 0; //温度表下限 upper = 300; //温度表上限 step = 20; //步长 fahr = lower; while(fahr <= upper){ celsius = 5.0*(fahr-32.0)/9.0; printf("%3.0f\t%6.1f\n",fahr,celsius); fahr += step; } }
printf中的转换说是%3.0f 表明打印浮点数至少占3个字符宽,且不带小数点和小数部分
%6.1f表明至少占6个字符宽,且小数后面有一位数字
int和float类型的取值范围取决于具体的机器。对于int类型,通常为16位,范围在-32768~+32767之间,也有用32位表示的int
float通常为32位,它至少有6位有效数字,取值范围一般在10的-38次方~10的+38次方
%d按照十进制整形打印
%6d按照十进制整形打印,至少6个字符宽
%f按照浮点数打印
%6f按照浮点数打印,至少6个字符宽
1.3for语句
#include <stdio.h> main() { int fahr; for(fahr=0;fahr<=300;fahr+=20) printf("%3d\t %6.1f\n",fahr,(5.0/9.0)*(fahr-32)); }
1.4符号常量
#define 指令可以把符号名定义为一个特定的字符串
#define 名字 替换文本
#include <stdio.h>
#define LOWER 0
#define UPPER 300
#define STEP 20
main()
{
int fahr;
for(fahr=LOWER;fahr<=UPPER;fahr+=STEP)
printf("%3d\t%6.1f\n",fahr,(5.0/9.0)*(fahr-32));
}
符号常量通常用大写字母
注意,#define指令行的末尾没有分号
1.5字符输入/输出
getchar函数从文本流中读入下一个输入字符,并将其作为结果值返回
putchar(c)打印一个字符
1.5.1文件复制
#include <stdio.h> main() { int c; c=getchar(); while(c != EOF){ putchar(c); c=getchar(); } }
字符在键盘、屏幕或其他任何地方无论以什么形式表现,它在机器内部都是以位模式存储的
char类型专门用于存储这种字符型数据,当然任何整形也可以用于存储字符型数据。因为某些潜在的重要原因,我们在些使用int类型
EOF( end of file,文件结束)定义在头文件<stdio.h>中,是一个整形数.具体是什么不重要,只要它和任何char类型的值都不相同即可.
1.5.2字符计数
#include <stdio.h> main() { long nc; nc=0; while(getchar!=EOF) ++nc; printf("%ld\n",nc); }
ctrl+d 可以输入EOF
1.5.3行计数
#include <stdio.h> main() { int c,nl; nl=0; while((c=getchar())!=EOF){ if(c=='\n') nl++; } printf("%d\n",nl); }
单引号中的字符表示一个整形值,该值等于此字符在机器字符集中对应的数值,叫字符常量
1.6数组
声明一个数组
数据类型 数组名[数组长度];
int arr[10]; //声明一个10个整形构成的数组。
在C语言中数组下标是从0开始
1.7函数
函数定义的一般形式为:
返回值类型 函数名(0个或多个参数声明)
{
声明部分
语句序列
}
函数定义可以以任意次序出现在一个源文件或多个源文件中,但同一函数不能分割存放在多个文件中
我们通常把函数定义中圆括号内出现的变量叫形式参数,而把函数调用中与形式参数对应的值叫实际参数
return 后面可以跟任何表达式,
return 表达式函数不一定都有返回值,不带表达式的return语句将控制权返回给调用者,但不返回有用的值
main本身也是函数,因此也可以向其调用都返回一个值,该调用者就是程序的执行环境,一般来说,返回值为0表示正常终止,返回值为非0表示出现异常情况或出错结束
1.8参数 --传值调用
在C语言中,所有函数参数都是"通过值"传递的.
如果是数组参数,传递给函数的值是数组起始元素的位置或地址---它并不复制数组元素本身。在被调用函数中,可以通过数组下标访问或修改数组元素的值
1.9字符数组
字符数组是C语言中最常用的数组类型
字符数组以字符 '\0'(空字符,其值为0)标记字符串的结束
1.10外部变量与作用域
main函数中的变量是main函数的私有变量或局部变量
由于它们是在main函数中声明的,因此其他函数不能直接访问它们,其它函数中声明的变量也一样
函数中的每个局部变量只在函数被调用时存在,在函数执行完毕退出时消失,这也是其他语言通常把这类变量称为自动变量的原因
除自动变量外,还可以定义所有函数的外部变量,也就是说,在所有函数中都可以通过变量名访问这种类型的变量
外部变量必须定义在所有函数外,且只能定义一次,定义后编译程序将为它分配存储单元
在每个需要访问外部变量的函数中,必须声明相应的外部变量
声明时可以用 extern显式声明,也可以通过上下文隐式声明
如果外部变量的定义出现在使用它的函数之前,那么在那个函数中就没有必须extern声明
如果程序在多个源文件中,而某变量在file1文件中定义,在file2和file3文件中使用,那么需要使用extern声明
人们通常把变量和函数的extern声明放在一个单独的文件中(习惯上叫头文件),并在每个源文件的开头使用#include把所要用的头文件包含进来
后缀为.h约定为头文件的扩展名
定义表示创建变量或分配存储单元,而"声明"指的是说明变量的性质,但并不分配存储单元