自学篇1-C编程语言学习笔记

本文介绍了程序设计的基础概念,包括编程设计的定义、程序开发步骤、算法的重要性及其评价标准、基本程序结构等内容,并探讨了数据类型、变量作用域及存储等方面的知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编程设计就是与计算机交互进而开发计算机的功能

保留字(reserved word)就是不能作为变量名、函数名、标签等标识符(identifier)的词

 

计算机最基本工作单位basic unit:位bit,字节byte,地址address(对应byte

 

程序开发的步骤:方案确定(抽象数学模型)->算法描述(自然语言与流程图等直观方式)->编写代码(非形式化的算法转化为形式化的程序设计语言所表达的算法,即编码)->程序测试(保证正确性,作出评估)

 

程序设计过程是算法,数据结构,程序设计语言相统一的过程。从问题描述入手,构造解决问题的算法是非常关键的。

问题的求解,在程序开发(设计)领域叫做算法(算法就是求解过程)

 

复杂性是评价算法的优劣依据。运行算法所需的资源少说明复杂度低,运行算法所需的资源多说明复杂度高。复杂度越低,算法就越优越。算法的复杂度又分为时间复杂度和空间复杂度。

 

时间复杂度T(n)不是指执行时间,而是操作次数的总和。空间复杂度S(n)就是问题解决过程中需要的内存数量。

 

算法都可以由三个基本程序结构组成——顺序结构(A、B两个变量交换值需要用到C变量)、选择结构、循环结构,前提是限制无条件转移语句(goto)的使用

//演示goto语句
int main()
{
    int i, j = 0;
    for (i = 0; i < 10; i++){
        printf("Outer loop executing. i = %d\n", i);
        for (j = 0; j < 3; j++ ){
            printf("Inner loop executing. j = %d\n", j);
            if (i == 5)
                goto stop;
        }
    }
    // This message does not print
    printf("Loop exited. i = %d\n", i);
stop: printf("Jumped to stop. i = %d\n", i);
    return 0;
}

程序由模块组成,函数是模块实现的工具,较大的模块可以用一个程序文件实现。模块组装在一起实现最终目的。

 

VC++(一种IDE,它本身包含一个compiler)运行与调试的步骤:编写程序->编译程序->链接程序->运行与调试

编译程序把源程序翻译成目标程序,链接程序把各个目标程序(目标模块)组合起来

PS:链接就是一环扣一环

 

编译程序识别语法错误,而运行调试才能识别逻辑错误。

 

这里应该区分好三种翻译的方式:编译(源语言是高级语言,目标语言是汇编语言或者机器语言),汇编(汇编语言到机器语言),解释(只一句一句执行源代码文件,不生成目标代码文件)。

 

(信息)编码就是把字符、操作等用二进制数字与之对应。常见的有美国标准信息交换码(ASCII),国标码(GB Code),统一码(Unicode)

 

定点数的表示范围有限,而浮点数的表示范围更大,有效防止溢出,能满足实际需求。

 

八进制以数字0开头,十六进制以0x开头(不区分大小写)。

 

预处理命令(文件包含#include、宏定义/宏替换#define、条件编译#ifdef必须放在任何可执行语句之前。

PS:预处理命令都以“#”开头 


printf叫格式化输出函数,scanf叫格式化输入函数。

 

读入数据的分隔符:空格符,TAB符,回车

 

赋值运算符是“右结合性运算符”

 

处理C语言表达式时,不要考虑运算结果的数值,而要考虑运算结果的数据类型

 

if分支结构,if-else双分支结构,if-else-if多分支结构(多重选择结构)。

 

switch语句有穿透性,也就是判断某个case为真值后,它将执行case语句之后所有的语句,而不受判断条件的限制。因而它通常需要与break结合起来使用,以在语句处跳出循环。

 switch是直接处理多分支(选择)结构。不写default是一种不好的编程习惯。

case”后面不仅可以接数字,也可以接字符,比如符号。

 

while和do-while的循环变量在循环之前初始化,而for的循环变量可以在e1表达式中实现,比如for(int i = 0; ; )

 

goto语句是无条件分支语句。它会破坏程序的基本结构,所以应该有节制地使用。

 

一个程序需要其他模块的功能时,利用那个模块的接口让特定函数(现成的函数)实现特定功能(现成的功能)就行了

 

软件工程就是一个项目,它分成多个模块,让多个人参与的程序设计

 

函数的三个要素:函数返回值的类型;调用此函数时所用的函数名称;接受主调函数传来的形参列表。

 

形式参数是函数的“自变量”,它的初始值源于函数的调用(者)

 

使用库函数只需要知道它的功能和形式参数就行了,不用知道细节!

 

调用函数时,分配存储单元给形式参数,实际参数(函数被调用时所给的具体值)再对形式参数进行初始化

 

被调函数执行完成后(遇到“}”符号)或执行返回操作(遇到“return”)都会返回到主调函数的调用处继续执行

返回值是主调函数与被调函数之间进行数据交换的一个通道

void a() {
    printf("被调函数\n");
}
void b() {
    a();
    printf("主调函数\n");
}
int main(int argc, const char * argv[]) {
    b();
    return 0;
}

 

任何一个函数都可以修改全局变量的值

全局变量应该限制使用,因为它不像局部变量“用之则建,用完即撤”,全局变量从开始运行到程序结束都占据存储单元,只有程序结束才会释放存储空间

 

变量生命期就是分配存储空间到释放存储空间的过程,其通过编译器来实现的。全局变量保存在静态存储区,局部变量保存在动态存储区。

 

内存是按八位二进制(字节)排列的,每个八位二进制(字节)的编号叫内存地址

 

知道了变量的地址(指针),并知道了变量的数据类型,就可以获取这个变量的数值了。

取地址符“&”加变量表示变量的地址(即指针的值),如“&p1”

指针声明符“*”表示后面跟的是指针变量,但并不是指针的组成部分。指针类型是必须指明的,指针的类型要和对应变量的类型是一致的。(也就是说,指针变量所存储的内容是另一个同类型变量的内存地址值)


2014.9.24


温故而知新,可以为师矣

2016.2.4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值