c语言程序设计学习笔记(浙大翁凯)
在很多场合,C语言是唯一的选择现代编程语言在语法上差异很小,基本都和C接近语言的能力、适用领域主要是由库和传统决定的。找零钱问题:100 - (用户输入)物品的价格 = 找你的钱有办法输入数字;有地方放输入的数字;输入的数字参与计算。int main()//定义了整形变量price,类型是int,初始值=0printf("请输入金额(元):");printf("找您%d元。return 0;变量是
目录
一、学习背景
1、计算机和编程语言
计算机怎样解决问题?把大问题拆分成小问题分步进行;
程序是用特殊的编程语言写出来表达如何解决问题的;
我们不是在用编程语言和计算机交谈,而是要求它如何做事情,向它描述做事情的过程和方法。
#include <stdio.h>
int main()
{
printf("Hello World!\n");
//输出“Hello World!(换行)”引号内的部分
return 0;
}
2、计算机的思维方式
例:解方程2x+6=20 , x∈(1,10)直接解方程对计算机来说太难理解了。
1)、计算机的思维:
枚举法:
代入x=1,不行;代入x=2,不行;代入……
二分法:
代入x=5,小了;代入x=7……
2)、计算机执行程序有两种方案:
解释:借助一个程序,那个程序可以试图理解你的程序,然后按照你的要求执行;
编译:借助一个程序把你的程序翻译成机器语言写的程序,然后计算机就可以直接执行了;
3)、解释语言vs编译语言:
语言本无解释与编译之分,只是常用的执行方式不同;
解释型语言有特殊的计算能力;
编译型语言有确定的运算性能。
3、为什么是C语言
- 在很多场合,C语言是唯一的选择
- 现代编程语言在语法上差异很小,基本都和C接近
- 语言的能力、适用领域主要是由 库 和 传统 决定的。
4、C语言的历史和特点
1969诞生:FORTRAN→BCPL→B语言→C语言
1967年,剑桥大学的 Martin Richards 对CPL语言进行了简化,于是产生了BCPL(Basic Combined Pogramming Language)语言
1970年,美国贝尔实验室的 Ken Thompson,以BCPL语言为基础,设计出很简单且很接近硬件的B语言(取BCPL的首字母),并且他用B语言写了第一个UNIX操作系统
在1972年,美国贝尔实验室的 D.M.Ritchie 在B语言的基础上最终设计出了C语言,因为B和BCPL都支持指针间接方式,所以C语言也支持了,C语言还受到了PL/I(和底层系统很接近,可以拿来做操作系统等)的影响,还和 PDP-II的机器语言有很大关系
1973/3,第三版的Unix上出现了C语言的编译器
1973/11,第四版的Unix完全用C语言重新写的。
1989年,ANSI发布了一个标准:ANSI C
1990年,ISO接受了ANSI的标准:C89
C的标准在1995年和1999年两次更新:C95和C99。
5、编程软件用什么
C语言的用途:写操作系统、嵌入式系统、驱动程序(用来驱动U盘)、底层驱动、图形引擎、图像处理、声音效果(直接给我们提供数据的代码不是用C语言写的)一些底层的东西。
C语言是一种工业语言,由基础人员使用。所以:
开发效率>>学习过程
开发效率>>开发乐趣
而在日常的应用中,很少直接用C语言编写。学习C的过程主要是写练习代码,而不是写真实软件。
C语言需要被编译才能运行,所以需要:编辑器和编译器,或者IDE(Integrated Development Environment)集成开发环境
6、第一个C语言程序
在Dev C++中:文件->新建->源代码
#include <stdio.h>
int main()
{
printf("Hello World!\n");
//printf()会把" "内的内容(字符串)原封不动地输出,\n表示换行。
return 0;
}
输入之前确保是英文输入法输入!!!
文件上显示星号,说明没有保存,需要使用键盘上的Ctrl + S 保存,记得选择.c格式;
编译运行;
运行后出现黑色弹窗的终端,显示了运行结果。
下面是学到函数之前一直要用的一段代码框架,可以先背下来,后面慢慢就知道了
#include <stdio.h>
int main()
{
return 0;
}
出现编译错误,会在下面用红色的error显示出来,而具体错误原因在下方窗口中
printf("%d",23+43);
printf("23+43=%d",23+43);
%d是占位符,说明后面会有一个整数输出到这个位置上

二、计算:变量和表达式
1、变量定义
找零钱问题:100 - (用户输入)物品的价格 = 找你的钱
我们需要:
- 有办法输入数字;
- 有地方放输入的数字;
- 输入的数字参与计算。
#include <stdio.h>
int main()
{
int price=0;
//定义了整形变量price,类型是int,初始值=0
printf("请输入金额(元):");
int change=100-price;
printf("找您%d元。\n",change);
return 0;
}
变量是一个保存数据的地方。
变量定义的一般形式就是:
<类型名称> <变量名称>
变量的名字叫“标识符”,基本原则只能由字母、数字、下划线构成,其中数字不能出现在第一个位置上。
C语言的关键字(又叫保留字)不可用作字符。
如何输入:
输入在终端窗口中输入。
输入以行为单位进行,敲下回车,行结束(回车前,程序不会读到任何东西)
2、变量赋值与初始化
int price=0;
//其中=是赋值运算符,把右边的值赋给左边的变量。
和数学中不同,b=a和a=b在程序中有着相反的含义。
当赋值发生在刚定义变量时,就叫程序的初始化,虽然C语言并没有强制要求所有的变量在被定义的地方做初始化,但所有变量在第一次被使用(出现在=等号右边)前都应该被赋值一次。
如果没有初始化呢:就是使用这个变量在内存中的那个值。
变量初始化:
<类型名称> <变量名称>=<初始值>
也可以在组合变量定义中给单个变量单独赋初值,如:
int a=0,b=1;
有运算符的式子就叫表达式(‘=’是赋值运算符)
C语言是有类型的语言,所有变量在使用前必须先定义或声明;
所有变量必须有确定的数据类型(表示在变量中可以存放什么样的数据),变量中也只能存放指定类型的数据,程序运行过程中也不能改变变量的类型。
//C99可以在任何位置给变量赋值
int price=0;
printf("请输入金额(元):");
scanf("%d",&price);
int change=100-price;
printf("找您%d元。\n",change);
比较C和ANSI C
//传统的ANSI C只能在开头的地方定义变量
int price=0;
int change=0;
printf("请输入金额(元):");
scanf("%d",&price);
change=100-price;
printf("找您%d元。\n",change);
3、变量的输入
scanf()函数,读到的结果赋值给后面的变量(注意变量前的&)
scanf函数是用来读取终端输入的数字(如果读不到数字就默认为0),f指的是格式化,输出格式化的东西;
&是取地址的意思,%d表示取的格式是整数,%f取的格式为浮点数。
4、常量VS变量
固定不变的数,是常数。
直接写在程序里的,叫直接量。
const int amount=100;
其中const是个修饰符,加在int前面,给这个变量加上一个const(不变的)属性,表示这个变量的值一旦初始化,就不能再更改了。
好处:
1.便于理解
2.修改的时候好找
编译时会显示:read-only variable is not assignable(一般const的变量全大写)
scanf的空格有讲究,输入时如果要两个数,在中间、最后敲空格或回车,计算机读到两个数字时停止
当scanf扫描数字时输入字母,可能会出来很多奇怪的数字(是ASCII码)
5、浮点数
C语言中两个整数做运算得到的结果也只能是个整数(去掉小数部分),而10和10.0在c中是完全不同的两个数字,10.0是浮点数(浮点数指小数点时可以浮动的,是计算机中表示分数和无理数的一种方式。人们用浮点数来称呼有小数点的数,其实还有定点数,但是在c语言中不用)
当浮点数和整数放在一起运算时,计算机会自动把整数转化为浮点数计算
#include <stdio.h>
int main()
{
printf("%f\n",10.0/3*3);
return 0;
}
有单精度float(%f)和双精度double(%lf)
(计算机里会有这种纯粹的整数,是因为运算快、占地小)
6、表达式
一个表达式是一系列运算符和算子的结合,用来计算一个值
运算符(operator)是指进行运算的动作,比如加/减法运算符±
算子(operand)是指参与运算的值,可能是常数/变量/一个方法的返回值

计算时间差:这里只记录分钟错位的情况(1:40和2:10)
方法:全部统一记为分钟(小时*60)
#include <stdio.h>
int main()
{
int hour1,min1;
int hour2,min2;
scanf("%d %d",&hour1,&min1);
scanf("%d %d",&hour2,&min2);
int t1=hour1*60+min1;//把小时转化为分钟单位
int t2=hour2*60+min2;
int t=t2-t1;
printf("时间差是%d小时%d分。",t/60,t%60);
//t/60是小时部分;t%60取余,是分钟部分
return 0;
}
7、运算符优先级
8、交换变量
9、复合赋值与递增递减
三、判断:分支结构
四、循环
五、循环控制
六、数据类型和处理
七、函数
八、数组
九、指针初步
十、字符串
十一、结构类型
十二、程序结构
十三、链表
十四、文件
十五、综合应用
更多推荐



所有评论(0)