搜档网
当前位置:搜档网 › C语言教程讲义

C语言教程讲义

C语言教程讲义
C语言教程讲义

Easy搞定

C语言

(提高篇)

0 精神与契约

企业需要能干活的人,需要能上战场的兵。

0.1 如何成为一个对企业有价值的人?

对于解决方案有很清晰的架构图,那么对于我们的技术也要分清层次。

0.2 战前准备:

资料管理

工作经验,记录和积累

临界点

塑造自己的过程很疼,但你可以得到一个更好的自己。

当堂运行

动手

课堂

专心听讲、积极思考

遇到不懂的暂时先记下,课后再问

建议准备一个笔记本(记录重点、走神的时间)

杜绝边听边敲、杜绝犯困听课

课后

从笔记、代码等资料中复习上课讲过的知识点。

如果时间允许,请课前做好预习。

尽量少回看视频,别对视频产生依赖,可以用2倍速度回看视频。

按时完成老师布置的练习,记录练习中遇到的BUG和解决方案,根据自己的理解总结学到的知识点。

初学者应该抓住重点,不要钻牛角尖遇到问题了,优先自己尝试解决,其次谷歌百度,最后再问老师。

如果时间允许,可以多去网上找对应阶段的学习资料面试题,注意作息,积极锻炼。

0.3 上战场的能力

0.3.1 接口的封装和设计(功能的抽象和封装)

接口api的使用能力

接口api的查找能力

接口api的实现能力

0.3.2 建立正确程序运行内存布局图

内存四区模型

函数调用模型

0.3.3 学习标准

0.3.4 听课标准

1. 内存四区

我们还面临哪些问题要解决?

数据类型的引申和思考

变量的本质

内存的操作

1.1 数据类型本质分析

1.1.1 数据类型概念

“类型”是对数据的抽象

类型相同的数据有相同的表示形式、存储格式以及相关的操作程序中使用的所有数据都必定属于某一种数据类型

数据类型的本质思考

思考数据类型和内存有关系吗?

C/C++为什么会引入数据类型?

从编译器的角度来考虑数据类型问题,才会发现它的本质。

1.1.2 数据类型的本质

数据类型可理解为创建变量的模具:是固定内存大小的别名。

数据类型的作用:编译器预算对象(变量)分配的内存空间大小。

注意:数据类型只是模具,编译器并没有分配空间,只有根据类型(模具)创建变量(实物),编译器才会分配空间。

#include

int main(void)

{

int a = 10; //告诉编译器,分配4个字节的内存

int b[10]; //告诉编译器,分配4*10 = 40 个字节的内存

printf("b:%p, b+1: %p, &b:%p, &b+1: %p\n", b, b + 1, &b, &b + 1);

//b+1 和 &b+1的结果不一样

//是因为 b 和 &b 所代表的数据类型不一样

//b 代表数组首元素的地址

//&b 代表整体数组的地址

return0;

}

1.1.3 数据类型的大小

#include

int main(void)

{

int a = 10; //告诉编译器,分配4个字节的内存

int b[10]; //告诉编译器,分配4*10 = 40 个字节的内存

printf("sizeof(a):%d\n", sizeof(a));

printf("sizeof(int *):%d\n", sizeof(int *));

printf("sizeof(b):%d\n", sizeof(b));

printf("sizeof(b[0]):%d\n", sizeof(b[0]));

printf("sizeof(*b):%d\n", sizeof(*b));

return0;

}

sizeof是操作符,不是函数;sizeof测量的实体大小为编译期间就已确定。

1.1.4 数据类型的别名

#include

struct People

{

char name[64];

int age;

} ;

typedef struct People

{

char name[64];

int age;

} people_t;

/* 给结构体类型起别名 */

typedef unsigned int u32; //给unsigned int类型取别名

int main(void)

struct People p1;

people_t p2;

u32 a;

p1.age = 10;

p2.age = 11;

a = 10;

return0;

}

1.1.5 数据类型的封装

void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。

用法1:数据类型的封装。

int InitHardEnv(void **handle);

典型的如内存操作函数memcpy和memset的函数原型分别为

void * memcpy(void *dest, const void *src, size_t len);

void * memset ( void * buffer, int c, size_t num );

用法2: void修饰函数返回值和参数,仅表示无。

如果函数没有返回值,那么应该将其声明为void型

如果函数没有参数,应该声明其参数为void

int function(void)

{

return1;

}

void function2(void)

{

return;

}

void指针的意义

C语言规定只有相同类型的指针才可以相互赋值

void*指针作为左值用于“接收”任意类型的指针

void*指针作为右值赋值给其它指针时需要强制类型转换

int *p1 = NULL;

char *p2 = (char *)malloc(sizoeof(char)*20);

不存在void类型的变量

C语言没有定义void究竟是多大内存的别名.

1.1.6 数据类型的总结与拓展

1、数据类型本质是固定内存大小的别名,是个模具,c语言规定:通过数据类型定义变量。

2、数据类型大小计算(sizeof)

3、可以给已存在的数据类型起别名typedef

4、数据类型封装概念(void 万能类型)

思考1:

C语言中一维数组、二维数组有数据类型吗?int array[10]。

a)若有,数组类型又如何表达?又如定义?

b)若没有,也请说明原因。

思考2:

C语言中,函数是可以看做一种数据类型吗?

a)若是,请说明原因

并进一步思考:函数这种数据类型,能再重定义吗?

b)若不是,也请说明原因。

1.2 变量的本质分析

1.2.1 变量的概念

概念:既能读又能写的内存对象,称为变量;若一旦初始化后不能修改的对象则称为常量。

变量定义形式:类型标识符, 标识符, … , 标识符 ;

int x;

int wordCut, Radius, Height;

double FlightTime, Mileage, Speed;

int a;

double b;

1.2.2 变量的本质

1、程序通过变量来申请和命名内存空间 int a = 0。

2、通过变量名访问内存空间。

变量:一段连续内存空间的别名.

3、修改变量有几种方法?

1)直接

2)间接

#include

#include

int main(void)

{

int i = 0;

// 通过变量直接操作内存

i = 10;

int *p = &i;

printf("&i:%d\n", &i);

printf("p:%d\n", p);

// 通过内存编号间接操作内存

*p = 100;

printf("i =%d, *p = %d\n", i, *p);

system("pause");

return0;

}

4、数据类型和变量的关系

5、总结

1.3 程序的内存四区模型

流程说明

1、操作系统把物理硬盘代码load到内存

2、操作系统把c代码分成四个区

3、操作系统找到main函数入口执行

建立正确程序运行内存布局图是学好C的关键

1.3.1 栈区和堆区

#include

#include

#include

//堆

char *getMem(int num)

{

char *p1 = NULL;

p1 = (char *)malloc(sizeof(char) * num);

if (p1 == NULL)

{

return NULL;

}

return p1;

}

//栈

//注意 return不是把内存块 64个字节,给return出来

//而是把内存块的首地址(比如内存的编号0xaa11) ,返回给 tmp // 理解指针的关键是内存,没有内存哪里来的指针

char *getMem2()

{

char buf[64]; //临时变量栈区存放

strcpy(buf, "123456789");

//printf("buf:%s\n", buf);

return buf;

}

void main(void)

{

char *tmp = NULL;

tmp = getMem(10);

if (tmp == NULL)

{

return ;

}

strcpy(tmp, "111222"); //向tmp做指向的内存空间中copy数据 tmp = getMem2(); //tmp = 0xaa11;

return0;

}

1.3.2 全局区

#include

char * getStr1()

{

char *p1 = "abcdefg2";

return p1;

}

char *getStr2()

{

char *p2 = "abcdefg2";

return p2;

}

int main(void)

{

char *p1 = NULL;

char *p2 = NULL;

p1 = getStr1();

p2 = getStr2();

//打印p1 p2 所指向内存空间的数据

printf("p1:%s , p2:%s\n", p1, p2);

//打印p1 p2 的值

printf("p1:%p , p2:%p\n", p1, p2);

return0;

}

1.4 函数的调用模型

1.5 函数调用变量传递分析(1)

(2)

(3)

(4)

(5)

《C语言程序设计实践教程》答案-完整版

4.2练习题 一、选择题 1.D 2.B 3.A 4.B和D 5.C 6.A 7.B 二、填空题 1.//或/* */ 2.主或main 3.函数首部和函数体 4..编译和连接 5.分号6.传统的程序流程图和N-S图 5.2练习题 一、选择题 1.A 2.D 3.B 4.B 5.C 6.C 7 D 8.A 9.B 10.B 11.D 12.B 13A或B 14.C 15.B 16.B 17.D 18.D 19. C 20.D 21.B 22.A 23.D 24.C 25.C 26.B 27.C 28.D 29.A 30.B 二、填空题 1.102,10 2.#define 宏名字符串 3.1 4.. n=1 5.-4 6.a=1,b= ,c=2 7. c=A 8.n1=%d\nn2=%d 9.a+b>c&&a+c>b&&b+c>a 10.ch>=’a’&&ch<=’z’|| ch>=’A’&&ch<=’Z’11.7 12.0 13.11110000 14.8,4 6.2练习题 一、选择题 1.A 2.C 3.D 4.C 5.A 6.B 7. A 8.D 9.B 10.C 11.A 12.A 13. C 14.B 15.正确答案为:12345678

二、填空题 1.10 2.y=1 x%i==0 3.屏幕中间输出一个由星号组成的菱形4. 1 5.13 6.(cx=getchar())!=-1 front=cx; 7. m%n 8.4 9.*p px=&x py=&y 三、读程序,写结果 1.-1 2.3,1,-1, 3.a=16,y=60 4.x=12,y=4 5.59 7.2练习题 一、选择题 1.B 2.C 3.C 4.A 5.D 6.C 7. D 8.D 9.C 10.D 11.D 12.D 13 A 14.B 15.C 16.B 17.B 18.A 19 A 20.D 21.B 22.D 23.C 24.D 25. D 26.C 二、填空题 1.‘a’0 2.a[k] a[k] a[k] 3.0 6 4….A B C D E 5. 1,6 6.k=p; A 7. i

c语言视频教程

C语言视频教程 C语言全套视频教程c语言入门,c语言视频教程的在线学习,相关课件软件的下载,知识点讲解入门,是您学习c语言程序设计教程的最佳选择。 1第一讲iOS开发必备之C语言基础--进制转换 包含知识点:进制定义、程序开发中常用进制介绍、n进制转换10进制、10进制转换n进制。 2第二讲iOS开发必备之C语言基础--数据类型、运算符 数据类型分类、常量、变量、运算符、表达式、语句、输入输出函数。 3第三讲iOS开发必备之C语言基础--分支结构-if 程序结构概述、关系运算符、逻辑运算符、if的三种形式、条件运算符。

4第四讲iOS开发必备之C语言基础--分支结构-switch...case switch case,if与switch case区别,break关键字 5第五讲iOS开发必备之C语言基础--循环结构 while、do while、for循环,三种循环的区别 6第六讲iOS开发必备之C语言基础--循环嵌套 循环的嵌套使用、break关键字、continue关键字。 7第七讲iOS开发必备之C语言基础--一维数组 构造数据类型、一维数组定义、数组元素使用、冒泡排序。 8第八讲iOS开发必备之C语言基础--字符数组 字符数组、字符数组的输入输出、字符数组常用函数(strlen、strcpy、strcat、strcmp等)。 9第九讲iOS开发必备之C语言基础--二维数组 二维数组定义、二维数组元素使用、二维数组与循环结构结合使用、二维数组使用场景。 10第十讲iOS开发必备之C语言基础--字符串数组

字符串数组定义、二维数组操作每个字符串、二维数组操作每个字符、字符串排序、多维数组。 11第十一讲iOS开发必备之C语言基础--函数定义 函数意义、函数分类、函数定义、函数使用、函数举例。 12第十二讲iOS开发必备之C语言基础--函数嵌套 形参、实参、数组名作为函数参数,函数嵌套调用,递归函数,变量作用域。 13第十三讲iOS开发必备之C语言基础--结构体 结构体特点、结构体定义、结构体变量、typedef关键字、结构体成员访问,结构体使用。 14第十四讲iOS开发必备之C语言基础--结构体与数组混合使用 结构体嵌套结构体、结构体作为数组成员、结构体数组冒泡排序。 15第十五讲iOS开发必备之C语言基础--指针初级 内存的两种方式、指针、指针变量、指针的类型、指针的重指向 16第十六讲iOS开发必备之C语言基础--指针作为函数参数

谭浩强C语言教程Word版

软件简介: 1 C语言概述2 1.1 C语言的发展过程2 1.2 当代最优秀的程序设计语言2 1.3 C语言版本2 1.4 C语言的特点3 1.5 面向对象的程序设计语言3 1.6 C和C++3 1.7 简单的C程序介绍4 1.8 输入和输出函数5 1.9 C源程序的结构特点6 1.10 书写程序时应遵循的规则6 1.11 C语言的字符集6 1.12 C语言词汇7 1.13 Turbo C 2.0集成开发环境的使用8 1.1 3.1 Turbo C 2.0简介和启动8 1.13.2 Turbo C 2.0集成开发环境8 1.13.3 File菜单9 1.13.4 Edit菜单10 1.13.5 Run菜单11 1.13.6 Compile菜单12 1.13.7 Project菜单13 1.13.8 Options菜单14 1.13.9 Debug菜单18 1.13.10 Break/watch菜单19 1.13.11 Turbo C 2.0的配置文件20 2 程序的灵魂—算法1 2.1 算法的概念1 2.2 简单算法举例1 2.3 算法的特性4 2.4 怎样表示一个算法4 2.4.1 用自然语言表示算法4 2.4.2 用流程图表示算法4 2.4.3 三种基本结构和改进的流程图8 2.4.4 用N-S流程图表示算法9 2.4.5 用伪代码表示算法10 2.4.6 用计算机语言表示算法11 2.5 结构化程序设计方法11 2 3 数据类型、运算符与表达式1 3.1 C语言的数据类型1 3.2 常量与变量3

3.2.1 常量和符号常量3 3.2.2 变量3 3.3 整型数据4 3.3.1 整型常量的表示方法4 3.3.2 整型变量5 3.4 实型数据7 3.4.1 实型常量的表示方法7 3.4.2 实型变量8 3.4.3 实型常数的类型9 3.5 字符型数据9 3.5.1 字符常量9 3.5.2 转义字符9 3.5.3 字符变量10 3.5.4 字符数据在内存中的存储形式及使用方法10 3.5.5 字符串常量11 3.5.6 符号常量12 3.6 变量赋初值12 3.7 各类数值型数据之间的混合运算13 3.8 算术运算符和算术表达式14 3.8.1 C运算符简介14 3.8.2 算术运算符和算术表达式15 3.9 赋值运算符和赋值表达式17 3.10 逗号运算符和逗号表达式18 3.11 小结19 3.11.1 C的数据类型19 3.11.2 基本类型的分类及特点19 3.11.3 常量后缀19 3.11.4 常量类型19 3.11.5 数据类型转换19 3.11.6 运算符优先级和结合性20 3.11.7 表达式20 4 最简单的C程序设计—顺序程序设计1 4.1 C语句概述1 4.2 赋值语句3 4.3 数据输入输出的概念及在C语言中的实现4 4.4 字符数据的输入输出4 4.4.1 putchar 函数(字符输出函数)4 4.4.2 getchar函数(键盘输入函数)5 4.5 格式输入与输出5 4.5.1 printf函数(格式输出函数)5 4.5.2 scanf函数(格式输入函数) 8 4.6 顺序结构程序设计举例12 4 5 分支结构程序1

谭浩强C语言教程WORD版

软件简介: 1C语言概述2 1.1C语言的发展过程2 1.2当代最优秀的程序设计语言2 1.3C语言版本2 1.4C语言的特点3 1.5面向对象的程序设计语言3 1.6C和C++3 1.7简单的C程序介绍4 1.8输入和输出函数5 1.9C源程序的结构特点6 1.10书写程序时应遵循的规则6 1.11C语言的字符集6 1.12C语言词汇7 1.13Turbo C 2.0集成开发环境的使用8 1.1 3.1Turbo C2.0简介和启动8 1.13.2Turbo C 2.0集成开发环境8 1.13.3File菜单9 1.13.4Edit菜单10 1.13.5Run菜单11 1.13.6Compile菜单12 1.13.7Project菜单13 1.13.8Options菜单14 1.13.9Debug菜单18 1.13.10Break/watch菜单19 1.13.11Turbo C 2.0的配置文件20 2程序的灵魂—算法1 2.1算法的概念1 2.2简单算法举例1 2.3算法的特性4 2.4怎样表示一个算法4 2.4.1用自然语言表示算法4 2.4.2用流程图表示算法4 2.4.3三种基本结构和改进的流程图8 2.4.4用N-S流程图表示算法9 2.4.5用伪代码表示算法10 2.4.6用计算机语言表示算法11 2.5结构化程序设计方法11 2 3数据类型、运算符与表达式1 3.1C语言的数据类型1 3.2常量与变量3

3.2.1常量和符号常量3 3.2.2变量3 3.3整型数据4 3.3.1整型常量的表示方法4 3.3.2整型变量5 3.4实型数据7 3.4.1实型常量的表示方法7 3.4.2实型变量8 3.4.3实型常数的类型9 3.5字符型数据9 3.5.1字符常量9 3.5.2转义字符9 3.5.3字符变量10 3.5.4字符数据在内存中的存储形式及使用方法10 3.5.5字符串常量11 3.5.6符号常量12 3.6变量赋初值12 3.7各类数值型数据之间的混合运算13 3.8算术运算符和算术表达式14 3.8.1C运算符简介14 3.8.2算术运算符和算术表达式15 3.9赋值运算符和赋值表达式17 3.10逗号运算符和逗号表达式18 3.11小结19 3.11.1C的数据类型19 3.11.2基本类型的分类及特点19 3.11.3常量后缀19 3.11.4常量类型19 3.11.5数据类型转换19 3.11.6运算符优先级和结合性20 3.11.7表达式20 4最简单的C程序设计—顺序程序设计1 4.1C语句概述1 4.2赋值语句3 4.3数据输入输出的概念及在C语言中的实现4 4.4字符数据的输入输出4 4.4.1putchar函数(字符输出函数)4 4.4.2getchar函数(键盘输入函数)5 4.5格式输入与输出5 4.5.1printf函数(格式输出函数)5 4.5.2scanf函数(格式输入函数)8 4.6顺序结构程序设计举例12 4 5分支结构程序1

C语言入门教程

51 单片机 C 语言入门教程(磁动力工作室) 51 单片机 C 语言学习杂记
学习单片机实在不是件易事,一来要购买高价格的编程器,仿真器,二来要学习编程语 言,还有众多种类的单片机选择真是件让人头痛的事.在众多单片机中 51 架构的芯片风行 很久,学习资料也相对很多,是初学的较好的选择之一.51 的编程语言常用的有二种,一 种是汇编语言,一种是 C 语言.汇编语言的机器代码生成效率很高但可读性却并不强,复 杂一点的程序就更是难读懂,而 C 语言在大多数情况下其机器代码生成效率和汇编语言相 当,但可读性和可移植性却远远超过汇编语言,而且 C 语言还可以嵌入汇编来解决高时效 性的代码编写问题.对于开发周期来说,中大型的软件编写用 C 语言的开发周期通常要小 于汇编语言很多.综合以上 C 语言的优点,我在学习时选择了 C 语言.以后的教程也只是 我在学习过程中的一些学习笔记和随笔,在这里加以整理和修改,希望和大家一起分享,一 起交流,一起学习,一起进步. *注:可以肯定的说这个教程只是为初学或入门者准备的,笔者本人也只是菜鸟一只, 有望各位大侠高手指点错误提出建议. 明浩 2003-3-30 pnzwzw@https://www.sodocs.net/doc/dd6140318.html,
第一课 建立您的第一个 C 项目
使用 C 语言肯定要使用到 C 编译器,以便把写好的 C 程序编译为机器码,这样单片机 才能执行编写好的程序.KEIL uVISION2 是众多单片机应用开发软件中优秀的软件之一, 它支持众多不同公司的 MCS51 架构的芯片,它集编辑,编译,仿真等于一体,同时还支持, PLM,汇编和 C 语言的程序设计,它的界面和常用的微软 VC++的界面相似,界面友好,易 学易用,在调试程序,软件仿真方面也有很强大的功能.因此很多开发 51 应用的工程师或 普通的单片机爱好者,都对它十分喜欢. 以上简单介绍了 KEIL51 软件,要使用 KEIL51 软件,必需先要安装它.KEIL51 是一个 商业的软件,对于我们这些普通爱好者可以到 KEIL 中国代理周立功公司的网站上下载一份 能编译 2K 的 DEMO 版软件,基本可以满足一般的个人学习和小型应用的开发. (安装的方 法和普通软件相当这里就不做介绍了) 安装好后,您是不是迫不及待的想建立自己的第一个 C 程序项目呢?下面就让我们一 起来建立一个小程序项目吧.或许您手中还没有一块实验板,甚至没有一块单片机,不过没 有关系我们可以通过 KEIL 软件仿真看到程序运行的结果. 首先当然是运行 KEIL51 软件.怎么打开?噢,天!那您要从头学电脑了.呵呵,开个 玩笑,这个问题我想读者们也不会提的了:P.运行几秒后,出现如图 1-1 的屏幕.
图 1-1 启动时的屏幕
-1-

最好的单片机C语言快速入门教程

单片机C语言快速入门教程 相信很多爱好电子的朋友,对单片机这个词应该都不会陌生了吧。不过有些朋友可能只听说他叫单片机,他的全称是什么也许并不太清楚, 更不用说他的英文全称和简称了。单片机是一块在集成电路芯片上集成了一台有一定规模的微型计算机。简称为:单片微型计算机或单片机 (Single Chip Computer)。单片机的应用到处可见,应用领域广泛,主要应用在智能仪表、实时控制、通信、家电等方面。不过这一切都没 什么关系,因为我(当然也包括任何人)都是从不知道转变成知道的,再转变成精通的。现在我只想把我学习单片机的经历,详细地讲叙给大 家听听,可能有些大虾会笑话我,想:那么简单的东西还在这里卖弄。但是你错了,我只是把我个人学习的经历讲述一遍而已,仅仅对那些想 学习单片机,但又找不到好方法或者途径的朋友,提供一个帮助,使他们在学习过程中,尽量少走些弯路而已! 首先,你必须有学习单片机的热情,不是说今天去图书馆看了一个下午关于单片机的书,而明天玩上半天,后天就不知道那个本书在讲什 么东西了。还是先说说我吧,我从大二的第一个学期期末的时候才开

始接触单片机,但在这之前,正如上面所说的:我知道有种芯片叫单片机, 但是具体长成什么样子,却一点也不知道!看到这里很多朋友一定会忍不住发笑。嘿嘿,你可千万别笑,有些大四毕业的人也同样不知道单片 机长成什么样子呢!而我对单片机的痴迷更是常人所不能想象的地步,大二的期末考试,我全放弃了复习,每当室友拿着书在埋头复习的时候, 我却捧着自己从图书馆借的单片机书在那看,虽然有很多不懂,但是我还是坚持了下来,当时我就想过,为了单片机值不值得我这样去付出, 或许这也是在一些三流学校的好处吧,考试挂科后,明年开学交上几十元一门的补考费,应该大部分都能过了。于是,我横下一条心,坚持看 我的单片机书和资料。 当你明白了单片机是这么一回事的时候,显而易见的问题出来了:我要选择那种语言为单片机编写程序呢?这个问题,困扰了我好久。具 体选择C51还是A51呢?汇编在我们大二之前并没有开过课,虽然看着人家的讲解,很容易明白单片机的每一时刻的具体工作情况,但是一合上 书或者资料,自己却什么也不知道了,根本不用说自己写程序了。于

相关主题