C程序设计总结(第五版-谭浩强)

post on 2021-12-02 13:43:16
C语言
C程序设计
0960

第一章-程序设计和C语言

1.程序:一组计算机能够识别和执行的指令

2.指令:使计算机执行特定的操作,如加法指令使计算机执行一次加法运算。

3.计算机语言:计算机和人都能识别的语言,作为沟通的桥梁。

4.计算机语言的分类:

低级语言、高级语言(面向过程的语言、面向对象的语言)

低级语言高级语言的区别:低级语言更加贴近计算机,也就是用0和1表示为主。高级语言则更接近人们习惯,如直接用英文表示。

面向过程面向对象的区别:面向过程更注重实现过程中的细节,而面向对象更注重实现过程的对象,如对象的属性和方法。

源程序:是编写好的算法,保存后的文件。目标程序:是编译后的文件。可执行文件:当目标程序加上库函数时就成了可执行文件,也就是可以运行的出结果的文件。

第二章-算法

  • 程序=算法+数据结构
  • 数据结构:对数据的描述。也就是在程序中要指定用到的数据,以及数据的类型和数据的组织形式。
  • 算法:对操作的描述。描述计算机进行的操作步骤。

算法的五大特性:有穷性、有效性、确定性、输入、输出

算法的四大表示方法:自然语言、流程图、结构化流程图、伪代码、

  • 结构化程序设计的方法:自顶向下、逐步细化、模块化设计、结构化编程

  • 三种基本结构:顺序结构、选择结构、循环结构

第三章-循序程序设计

  • 标识符:标识符即为一个对象的名字。只能由字母数字下划线中一种或多种组合而成,且第一个字符必须为字母或下划线。

  • 基本数据类型:整型类型(int、char、bool)、浮点类型(float、double)

  • 派生类型:指针、数组、结构体、函数

  • 补码的求法:正数直接用二进制数表示;负数则取反加一。

    5的补码:

    0000000000000101

    -5的补码:

    1111111111111010(取反)

    1111111111111011(加一)

  • i++与++i的区别;i++先使用原值i进行操作,再对i+1,而++i直接对i+1,再参与运算。

    #include <stdio.h>
    int main() {
        int i = 0;
        printf("%d\n", i++);
    }
    

    运行结果为0

    #include <stdio.h>
    int main() {
        int i = 0;
        printf("%d\n", ++i);
    }
    

    运行结果为1

  • 低精度自动向高精度转化:使用(int)x可将x转化为int类型。

  • getchar接收字符,putchar输出字符。

    #include <stdio.h>
    int main() {
        char x, y, z;
        x = getchar();
        y = getchar();
        z = getchar();
        
        putchar(x);
        putchar(y);
        putchar(z);
        
        return 0;
    }
    

第四章-选择结构程序

  • 选择语法:if语句与switch语句。

    两者区别:if可以用于处理复杂的判断条件,if语句的括号内支持复杂的表达式;switch语句则适用于单个变量的多分支选择,且变量的类型必须是整型类型.

  • 双目运算符与单目运算符的区别:

    双目运算符序号两个操作对象来参与运算;单目运算符只需要有一个操作对象参与运算,如:!(x>y)。

  • 三目运算符:表达式1?表达式2:表达式3

    作用相当于一个简化的if() {} else {} 语句

    如判断两个整型数字中谁最大

    #include <stdio.h>
    int main() {
        int x, y, z;
        scanf("%d, %d", &x, &y);
        z = (x>y)?x:y;
        printf("the max number is %d", z);
        return 0;
    }
    

第五章-循环结构程序设计

  • 为何需要循环结构?

    有了顺序结构和选择结构能够满足日常的程序设计,但是会存在很多重复的处理流程。如:输出全班所有同学的名字,为了避免多次重复的输出代码的编写,使用循环结构可以方便的进行重复操作,简化了代码的同时方便了设计,避免了代码的冗余。

  • 常见的循环结构有哪些

    while循环、for循环。两者可互相转化。

  • break与continue的区别

    break语句只能放在循环语句和switch语句中,不能单独使用,break的作用是结束循环。

    continue语句则是结束本次循环,接着执行下层循环。

第六章-数组

  • 为何需要数组?

    为了解决变量过多而造成的繁琐,同时彰显其内在的联系(相同数据类型的集合)。

  • 数组的基本特征是什么?

    数组是一组相同数据类型的集合

  • 如何定义数组

    一维数组:数组类型 数组变量[数组大小];例如:int a[10];

第七章-函数

  • 为何使用函数?

    实现模块化编程,便于维护和后续开发。

    一个C程序由一个或多个程序模块组成,每个程序模块都作为一个源程序文件。

  • 如何实现函数?

    声明、定义、调用。

  • 函数的种类:库函数与用户自定义的函数

  • 局部变量与全局变量

    两者作用域不同,一个作用局部,一个作用全局。

  • 动态存储方式与静态存储方式

    静态存储方式:指程序运行期间由程序分配固定的存储空间存储,容易造成浪费。

    动态存储方式:在程序运行期间根据需要进行动态的分配存储空间,节约空间。

  • 自动变量(auto)、静态局部变量(static)、寄存器变量(register)这3种局部变量为何?主要区别?

    存储地址不同

    自动变量存储在动态存储区

    静态局部变量存储在静态存储区

    寄存器存储在cpu中的寄存器中

第八章-指针

  • 何为指针?

    指针即地址。

    地址的定义:系统根据定义的变量类型,分配一定的长度空间,内存区的每一个字节都有一个编号,这就是地址。通过地址能够找到所需要的变量单元,可以说,指针指向该变量单元,将地址形象化地称之为指针。C语言中的地址包括位置信息和它所指向的数据类型信息。

  • 何为指针变量?

    存放地址的变量是指针变量,它用来指向另一个对象

  • 何为空指针?

    指指针变量的值是不确定的或都是无效的,这种指针叫野指针。

    使用野指针不一定会出现问题,但是可能会出现一下问题:

    • 一切正常
    • 段错误
    • 脏数据
  • 数组与指针有什么关系?

    数组名就是一个指针(常指针)

    数组名与数组首地址是映射关系*p=arr是指向关系(&*p是有一个地址的)

    由于数组名就是指针,所以数组名可以使用指针的解引用运算符,而指针可以使用数组。

第九章-用户建立自己的数据类型

  • 为何需要自己定义数据类型?

    一方面由于常见的数据变量之间存在相互的联系,如:学生的学号与姓名之间存在联系。

  • 那为何不采用数组将其存储在一起,使其相互联系?

    数组只能存放类型相同的变量,例如全部存放int型的数据,或者全部存放char型的数据,不可以随意存储。而自己建立的数据类型就可以避免此问题,可以存放不同类型的数据。

  • 如何定义?

    struct student {
        int number;
        char name[20];
        char sex;
    };
    
说点什么...
评论支持MarkDown格式

 / 1