当前课程知识点:C语言程序设计(上) > 从问题到C语言程序设计 > 1.2 C语言与C程序 > 1.2.2-C初步
我们再看简单的C程序
这里我们讨论也是三个问题
C程序的一个基本结构
还有常数与变量
当然是C程序里边的常数与变量
还有赋值语句
我们看
这是一个非常简单的
只有一句执行语句的程序
我们看对这个程序的解释是这样
为什么要包含
是因为这用了printf
我们看这个main()长得这个样子
一个名字后面一对圆括弧
非常像函数的样子
所以C就是这样的函数结构
那和main匹配的是什么呢
这一对花括弧里边
就是n多句执行语句
这叫函数体
我们看这些语句一个重要的标识
就是分号
每一个语句后边都有一个分号
我们再来看一个稍微长一点的程序
看看是不是这样的结构
由这两个程序
我们是不是可以看到了一个
C程序的一个基本结构概貌
那就是由main函数开始
其实C里边所有的结构框架
都是函数结构
里边可以由n多个函数
但是main只能有一个
由main开始可以调用多个函数
但是我们刚才给出来的程序里边
不论它是有多少对花括弧
实际上只有一个main函数
没有其它的函数
大家说到计算机程序设计语言
有没有注意过
其实program这个词
那么对程序
我们经常把它叫作程序设计语言
但是我们要从做规划这个角度上讲的话
实际上这件事情做什么
是对你现有的问题
要把它按有限步骤的事情去做规划
那这个规划的过程里边
为什么
是因为计算机
它只能做有这么几种特点的事情
而且我们对一个复杂的问题
我们首先要分解
分解完了 也是要能够是说
它表现出来的是顺序性
周期性或者是有选择性
我们对一个复杂的事情
如果这样分解下来
我们分解的目的是什么
是说我们分解成这么多步骤
比如说一个事情我们分解成
f1(x)能做
f2(x)能做
这个周期性的f3(x)能做
那么我们
分别在三个函数里边去完成这件事
最后我们把它输出
printf(x)可以解决这问题
直接调用了我们就不用自己编了
那这样的话
起到的一个作用是什么
大家可以第一是可以分工
第二是可以重用
比如说
我们这周期性的f3(x)做的这件事情
如果另一个应用
或者另一个程序要使用的话
它也可以再使用
所以
我们说做规划按有限的步骤去做规划
然后分解
分解的目的是
用一个一个的让程序由一个一个的函数
这样的架构来形成
就能使得
你对这件事情的处理过程
合作并且重用
还有一个目的是说
你这样分解
能够更合理的使用计算机的资源
那这样的事情是应该是
在我们后期的学习里边会有更多的体会
整体上
我们对C的整体架构做一个小结的话
这几个红颜色标识的
就是我们的关键字
我们再看一个程序
求圆的周长和圆面积的一个程序
大家看一下
是不是它也符合我们刚才说的
C程序的一个框架
在这个函数体里边做什么
求圆的周长和面积
我们对这个程序有印象
下边我们接着来讨论常数与变量
我们刚才那个程序里边有常数吗
有没有印象
首先我们看常数
都有哪些是C里边的常数
在C里边有这么四种
都可以是常数
整型的就是我们平常看的正的负的
只要没有小数的数
实型的简单说就是带小数的数
不管正的负的
除过这个数值型的之外
还有字符型的
我们看
用单引号括起来的这个一个字符
这叫字符型的常量
而用双引号把那个a括起来
单引号括起来
我们叫它是一个字符常量
而用双引号把这个a括起来
它叫字符串常量
这有什么不同 有不同
这个字符常量
在计算机里边占一个字节
我们知道Σ一个字符占一个字节
而如果是字符串
什么叫串
计算机怎么知道你是个串
这个串有多长
两个还是四个
C是这样标识这个串的
后边加一个结束标志
用一个占一个字符的位置
所以这个一个字符如果你是个串
后边一定还占一个字符的位置
所以这个串占了两个字节
ab这个串占了三个字节
当然这个是占了五个字节
所以
在C里边字符型的常量有两种
一种是字符型常量
一个是字符串是用双引号引起来的
除过刚才的这几种常量之外
还有一种常量叫符号常量
什么时候会用到符号常量
什么又是符号常量
比如说
举个例子 比如说π
我们要写3.1415926
如果我们继续还把它写下去
写了很长的话
如果我在我的程序里边
多次的多处的用到了这个π
你这个写起来
第一是很麻烦
第二是它也容易出错
那么这时候我们不如说这样子
用一个符号来代替它
你在那个地方就写这个符号
等程序真正运行的时候
它在会把这个符号
置换成你要的那个数值
那这时候我们说
看一下比如说这个程序里边
在这个程序里边
前边有一个define PI
3.14
当然它不长
但是我用define定义了说
我这个PI PI代替了3.14
是说凡是在你的程序里边
这碰到了PI
这也碰到了PI
在这两处
程序真正的编译链接执行的时候
实际上已经置换成了3.14
3.14被两次置换在了这个地方
那这个PI就叫作符号常量
那么变量是什么
跟常数相对应
我们看这是memory内存
如果a是一个变量
也就说是一个内存的存储单元
它是内存的一个存储单元
变量就要允许说
这个变量里边
变量是对应于内存的地址的
这个变量是可以被重新改变的
它可以改变成说
这个地址号里边再送过去个8
我在程序的运行过程里边
这个值又被改变了
再改成了256
都是同一个地址1000H
我们不知道它实际上在内存里边
到底是1000H还是别的什么地址
我们只知道我们给这个变量叫a
它和1000H对应的问题
是系统自己做的
我们只知道
a里边的内容是可以被重写的
还可以重新改变
这就叫变量
这里边我们关心的问题是
你这个a是个变量
它到底占了内存的多大地盘
放在内存的哪个位置
这有谁来做
是我们程序员来做
还是系统自己做
我们还是通过这个例子来看
在这个例子里边
大家有没有注意到
函数体里边有这么两句话
int给r送了0
还有一个float
给c和s都分别赋值了0
这里边重要的是这个int float
int float就是类型说明符
然后后面跟着是你的变量名表
就相当于
在这里边我们说int r=0
那就是说int是我们类型说明符
而后边的r是我们的变量
float后边的
float是类型说明符
c和s是我们的变量名
为什么说变量名表
变量可以是r一个
可以是c s还可以有别的
可以有多个
它们之间用逗号分开
在C里边
通常用的关于变量的定义
其实有很多
常用的就这四种
通常咱们的内存是分成了这们三大块
一块是红颜色的系统区
一块是
这个系统区就放操作系统
语言处理系统
那是系统级的在使用
在剩下的蓝颜色的深色的浅色的
都是我们用户可以用的
一部分是用来放咱们的程序的
一部分就是放数据的
在数据的这一块
我们平常定义的变量
比如说int r
r被放在数据区
float c和s也被放在数据区
因为你的r占两个字节
它占的存储单元就是两个字节
而c和s都比r大一倍
是因为你要的是float
存放类型
说明了它存储的空间
你说float
你就是要的空间比int要大
你说double就是比float要大
是通过这个类型
来说明你要的存储空间的大小
实际上这个类型
对我们编程序的人来说
是根据什么要大小
是根据你对这个数据的精度
比如说你在处理一个字符
你何必要一个float
它也不会有小数
所以就合理的使用
关于变量定义的语句至关重要
是因为我们
每一个程序里边几乎都会要用到它
它的规则是
先定义也就说先预约
让内存给你留好空
再赋值把数送到里边
最后才能使用
大家考虑一下
我如果没有预约
我直接能用吗
这必然不能
内存没给你那个空你怎么用
那我再说我没赋值能用吗
我们刚才讨论了关于常数和变量
那接下来我拉看关于赋值的问题
我们还拿这个例子
求已经知道圆的半径r
求圆的周长c和圆的面积s
我们对这个问题分析一下
有这么几点需要考虑的
一个是说
你无论是求周长还是求面积
你需要知道圆的半径
那计算机如何得到圆的半径
也就说计算机如何和你交互
还有得到的这个半径
以及你求的周长和面积
它在哪里放 存放在哪里
还有接下来
最核心的问题是你要计算
这计算模型是什么
也就说C它的计算公式是2πr
很简单圆面积是πr方
这个我们大家都知道
那如果是一个复杂问题
你就不是一嘴就能说出来的
你需要分析需要建立这个数学模型
最后一个问题不能没有的
把结果给我
计算机计算完了把结果输出来
进行最后的人机交互
那关于C程序
我们今天看到了一个最简单的概貌
我们对它做一点小结
当然变量里边留的
只是最后一次赋进去的值
所以你要试图给符号常量
那个符号里边去赋值
那是错的
是因为它根本就没在内存
它根本就没有存储单元
你的值是赋不进去的
所以符号常量是常量
千万不要把它认为是变量
-1.1 计算机的问题求解方法
--讨论题:数学模型
-1.1 计算机的问题求解方法--作业
-1.2 C语言与C程序
--讨论题:运算符
-1.3 C语言处理系统与程序调试运行
--例程
-1.4 程序中的人机交互
--例程
--作业讨论区
-2.1 算术运算的C程序实现
--算术混合运算.c
-2.1 算术运算的C程序实现--作业
-2.2 关系运算的C程序实现
--bukao.c
--字符比较.c
--讨论题:比较大小
-2.2 关系运算的C程序实现--作业
-第二周作业--作业
-2.3 逻辑运算的C程序实现
--计算结合性
--闰年.c
--自动购票问题.c
-2.3 逻辑运算的C程序实现--作业
-2.4 位运算的C程序实现
--讨论题:位运算
-2.5 几种很个别的运算
--讨论题
--讨论题
-2.5 几种很个别的运算--作业
-2.6 混合运算及数据类型转换
--讨论题:数据类型
-2.7 顺序结构程序实例
--Video
--三角形面积.c
--讨论题:工业产值
-2.7 顺序结构程序实例--作业
-3.1 程序中的路径选择实现
--打印学生成绩.c
--一元二次方程.c
-3.1 程序中的路径选择实现--作业
-3.2 路径中的再选择——嵌套判断
--例程
--讨论题:程序改错
-3.2 路径中的再选择——嵌套判断--作业
-3.3 复杂判断问题的C程序设计
--3.3 多级选择
--银行存款.c
--讨论题:多级选择
-3.4 多分支问题的C程序设计
--加减乘除运算.c
-3.4 多分支问题的C程序设计--作业
-3.5 GOTO的适当使用
-3.6 选择结构的程序实例
--3.6 程序展示
--计算第几天.c
--讨论题:输出奇数
--讨论题:计算税金
-3.6 选择结构的程序实例--作业
-第四周作业--作业
-4.1 需要重复执行的程序
--求和.c
--打印学生成绩.c
--统计录入速度.c
--求平均数.c
-4.1 需要重复执行的程序--作业
-4.2 至少要执行一次的循环
--n的阶乘.c
--字符分类统计.c
-4.2 至少要执行一次的循环--作业
-4.3 已知循环次数用for语句
--求和问题.c
--数列求和.c
--讨论题:循环语句
-4.3 已知循环次数用for语句--作业
-4.4 循环控制——简单循环应用
--水仙花数.c
--讨论题:死循环
--讨论题:猜数字
-循环结构的程序设计(一)--4.4 循环控制——简单循环应用
-4.5 循环的嵌套
--讨论题:程序运行
-4.5 循环的嵌套--作业
-4.6 break与continue
--最大素数.c
-4.6 break与continue--作业
-4.7 循环的综合应用
--数的排列组合.c
--鸡兔同笼.c
--打印空心字符.c
--讨论题:打印图形
--讨论题:计算闰年
-第六周作业
-第六周作业--作业
-5.1 同类有序数据处理问题
-5.2 一维数组的定义和引用
--数组定义.c
--数组初始化.c
--反向输出.c
--讨论题:对称数
-5.2 一维数组的定义和引用--作业
-5.3 一维字符串数组
--讨论题:编程
-5.4 字符串处理函数
--字符串反向.c
--字符串函数
-5.5 二维数组的定义与使用
-5.6 二维数组的输入输出
-5.6 二维数组的输入输出--作业
-5.7 二维数组的应用
--转置矩阵.c
--讨论题:修改程序
-5.8 二维字符数组
--5.8 单词排序
--单词排序.c
-5.8 二维字符数组--作业
-5.9 数组综合应用
--统计成绩.c
--统计字符次数.c
--讨论题:洗牌
-本期课程结束语
--end
-第八周编程作业
-《C语言程序设计(上)》期末复习参考
--html
-《C语言程序设计(上)》期末复习参考答案
--html