《C程序设计语言》笔记 (一)导言

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约定为头文件的扩展名

定义表示创建变量或分配存储单元,而"声明"指的是说明变量的性质,但并不分配存储单元

原文地址:https://www.cnblogs.com/dafume/p/7780923.html