一、 为什么学习C语言?
1. C的起源和发展
1)第一代语言:机器语言(0101010101)
2)第二代语言:汇编语言 (ADD AX BX)
3)第三代语言:高级语言:(a + b)
结构化语言:Fortran,C语言,Basic,Pascal
面向对象语言(OO):C++ , java ,C#(1980年分水岭)
贝尔实验室
B语言:Unix
C语言:Unix改版重写
Sun公司:改写C:java
微软:改写C:C#
产生时间:1972-1973
产生地点:贝尔实验室(Bell)
创始人:Dennis.M.Ritchie和Ken.Thompson
目的:改写Unix系统
C语言发展过程:
- 1983年:ANSI C
- 1987年:ANSI C87
- 1994年:C99
2. C的特点
- 优点:
代码量小、速度快、功能强大 - 缺点:
危险性高
开发周期长
可移植性不好
3. C语言的应用领域
(1)系统软件开发
- 操作系统:Windows、Linux、Unix
- 驱动程序:主板驱动、显卡驱动、摄像头驱动
- 数据库:DB2、Oracle、SQL Server
(2) 应用软件开发
- 办公软件:WPS
- 图形图形多媒体:ACDSee、 PhotoShop 、MediaPlayer
- 嵌入式开发:只能手机、掌上电脑
- 游戏开发:2D、3D (CS引擎:纯C,运行快,破电脑也能玩)
魔兽很卡,内核引擎不是C写的。
4. C语言的重要性
- C语言是有史以来最重要的语言
- 所有大学工科和理科学生必修课
- 最重要的系统软件:Windows、Linux、Unix都是C开发的
- 一名合格的黑客必须掌握的语言
- 任何一个想终生从事程序设计和开发的人员必须熟练掌握的语言
- 大企业、外企招聘程序员必考语言
- 为学习数据结构、C++ 、java、C#奠定基础。学完C不学C++啥也开发不出来
龌蹉的程序:
#include <stdio.h>
#include <windows.h>
#include<malloc.h>
int main(void) {
int c;
int i;
int j;
nihao:
printf("1:死机\n");
printf("2:机房爆炸\n");
printf("请选择:");
scanf("%d",&c);
if(c==1){
system(shutdown -s -t 60);
} else if(c == 2) {
printf("你太坏了,我要惩罚你!\n");
for(j = 0; j < 5; ++j)
system("start");
} else {
printf("你敲错了,请重新输入:\n");
goto nihao;
}
return 0;
}
模拟内存泄漏:
#include <stdio.h>
#include<malloc.h>
int main(void) {
while(1)
{
int *p = (int *)malloc(1000);
}
return 0;
}
牛人牛语
入门最基本的方法就是从C语言开始。
当你成为C语言的高手,那么你就很容易进入到操作系统的平台里去;当你进入到操作系统的平台离去实际做程序时,就会懂得进行调试;当你懂得调试的时候,你就会发现能轻易地了解整个平台的架构。这时候,计算机基本上一切都在你的掌握之中了,没有什么东西能逃得出你的手掌心。
----《编程箴言》梁肇新
二、 怎样学习C语言
途径:多思考,多敲代码
目标:能卡看懂程序,能调试程序,自学能力要强
参考资料
谭浩强《C语言程序设计》清华
《The C programming language》机械工业
《C Primer Plus》60 人民邮电
《C和指针》65 人民邮电
《C专家编程》绝版
《C陷阱与缺陷》人民邮电30
《C科学与艺术》机械工业
三、学习的目标
-
了解程序语言及发展历史
-
熟练掌握C语言的语法规则
-
掌握简单的算法
-
理解面向过程的思想,这有助于将来面向对象思想的学习
能看懂、调试程序
掌握将大问题转化为一系列小问题来求解的思想 -
为学习C++、数据结构、C#、Java打下良好的基础
四、常见问题答疑
- 学java为什么建议先学C
- 学习C就是在学java,因为C语言至少80%的语法都被java继承了下来
- C是面向过程语言的代表,学好C有助于学习java中的面向对象思想
- 学好C中的指针是理解java中引用的基!如果不懂指针就不可能对java中的引用有深刻的理解,而引用是java中一个最基本但又十分重要的概念。
- 没学过计算机专业课程能够学东C语言?
- 英语和数学不好能学好C吗?
一元二次方程小例子
#include <stdio.h>
#include <math.h>
//一元二次方程
int main(){
int a = 1;
int b = 2;
int c = 3;
double delta; //存放b*b -4ac
double x1; //解1
double x2; //解2
delta = b * b - 4 * a * c;
if(delta >0){ //两个解
x1 = (-b + sqrt(delta)) / (2*a);
x2 = (-b - sqrt(delta)) / (2*a);
printf("该一元二次方程有2个解:x1=%f,x2=%f",x1, x2);
}
else if(delta == 0) { //唯一解
x1 = -b / (2*a);
x2 = x1;
printf("该一元二次方程有2个same解:x1=x2=%f",x2);
}
else {
printf("该一元二次方程没有解");
}
return 0;
}
image.png
C语言32个关键字(由系统定义,不能重做)
image.png课程大纲
- 基本编程知识
- 数据类型
- 运算符和表达式
- 流程控制
- 函数
- 数组
- 指针
- 变量的作用域和存储方式
- 扩展数据类型
- 专题
字符串的处理
进制转换
补码
动态内存分配
综合应用:链表的使用
网友评论