《C语言与程序设计》第二讲-清华李宛洲
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
存储器 地址
1 2 3
要点3--存储器地址
0100 0001 0100 0010 0100
对应该地址的 存储器单元
A B
该存储器单元 里存储的内容
0100 0001 0100 0010 0100
4
5 CPU 再将信 6 息存储到存 7 储器 8 9 10 11 12 13 14 15
计算机需要将这些信息存储到指定 的区域,以便随时能找到它们。 存储器存储信息的能力用单元数目 来衡量。 一个单元可以存储一个文字符号, 即字母符号的ASCII码。 每一个存储单元有一个地址,称为 存储器地址。 程序根据存储器地址来操作存储在 存储器中的信息。
scanf函数格式控制与输入地址表列
三个整数 变量 int main(void) 用输出函数printf()输出提示信息 { 三个格式说明符对 int a,b,c; 应三个输入变量 printf("input a,b,c\n"); scanf(“%d, %d,%d",&a,&b,&c); printf("a=%d,b=%d,c=%d\n",a,b,c); return(0); 格式说明之间也可以什么 } 都没有,自己根据需要选择
格式说 明之间 有逗号
输入的时候 也需要用逗 号隔开三个 变量
数据类型回顾
长整型 C语言已经定义了 整数型 整型 一组、同类型数据、 的数据类型 在内存中、连续的 短整型 单精度 字符型 排列集合 实数型(浮点型) 基本类型 双精度 枚举型 布尔型(逻辑型) 数组型 数据类型 构造类型 指针类型 空类型 结构体型 共用体型
h l w
一个输入函数,读入各参数值
一个输出函数,输出各计算结果
input(&h,&w,&l);
printf(“the area of Sa=%f \n”,w*h/2 +w*l); return(0); } 打印的是一个表达式计算结果 void input(float *h, float *w,float *l) { printf(“Input the height: \n”); 从键盘读入一浮点型的高度数值 scanf(“%f”,h); printf(Input the width: \n "); 从键盘读入一浮点型的宽度数值 scanf(“%f”,w); printf(Input the length: \n "); 从键盘读入一浮点型的矩形高度数值 scanf(“%f”,l); }
{ statements }
declaration--- 关键字 assignment-- 标识符 function------ 函数 control------- 运算符 null--------- 数据
标准库函数用头文 结构化设计的例子—复杂图形面积计算 #include <stdio.h> #include <math.h> #define PI 3.14 void input(float *,float *,float *); int main(void) 定义变量---浮点数类型 { float h,w,l; 件说明,自编函数 预处理指令 ---头文件 也需在程序头部声 明格式。 预处理指令 ---定义常数
#include <stdio.h>
预处理指令 程序一定是从main()函数开始执行 函数由c语句构成
int main(void) 函数名
{ statements }
一般函数模块 { statements } C程序中的 5类语句
int function a()
函数类型 int function b() 函数是C程序的 构造单元
“\n”是字符串的结尾符号, 表示一个字符串的结束
Scanf()输入函数
• • • • • •
scanf(“格式控制字符串”,地址表列);
使用要点: 必须说明输入变量的格式:是字符?字符串?数值? 要给出输入变量的地址。Scanf()需要你给出变量的地址,它 将数值直接存储到该地址。 格式控制字符串的作用与printf函数相同,但不能显示非格式字 符串, 即你不能在scanf()中出现要输出到屏幕上的提示信息。 地址表列中给出的是各变量的地址。地址是由地址运算符“&” 后跟变量名组成的。 例如,&a, &b分别表示变量a的地址和变量b的地址。这个地 址就是编译系统在内存中给a, b变量分配的地址。 scanf函数中没有精度控制。如scanf(“%5.2f”,&a);是非法的。 不能企图用此语句输入小数为2位的实数
在程序看来,操作 类型的变量占用的内存字节数不同。 地址2000单元和操 ► 变量名和内存地址是等效的,给变量赋值,也就是 作i_p变量是一回事 往其对应的地址单元存入数据。
计算机适合做什么?
求自然级数的前n项之和:1+2+3+……+100 它可以根据前一个部分和Sn-1递推求解,即:
Sn=Sn-1+n
C语言程序设计基础
2007.9
第二讲
本讲内容
► 前节要点
C程序要素 数据变量 变量的存储地址
课堂程序举例---计算机适合做什么? ► 模块化的C程序设计风格 ► C语言的输入输出函数
缓冲区的概念 scanf函数---变量数据输入的几种形式
VC已经有的,通用 功能的标准库函数 用C语句编 写的程序体 函数
非缓冲处理方式 使用非缓冲输入 c=getche(); 计算机对输入字 c 符实时处理
switch(c) {…}
缓冲处理方式
使用缓冲输入 scanf("%s",array);
H I !\0 H I
计算机检测到结尾符之 后才对输入字符串处理
! \0
if(strcmp(array,"hi!"==0) {…}
回显在屏幕上
输出一个字符 putchar()
puts()
输出一个字符串
C语言的缓冲与非缓冲输入
缓冲是指输入字符数据经过一个暂存队列; 输入的数据,只在输入结束(回车键按下)时刻才被送入 到计算机处理; 缓冲区使得我们在回车键按下之前,可以修改输入错误的字 符,而当回车键按下时,最终再发送正确的输入数据到计算 机.缓冲方式经常用于数据的输入; 非缓冲方式是字符没有经过缓冲队列,每个输入的字符立刻 被送到程序处理,如在游戏中,希望按下的键被立刻响应,程 序去执行某个命令. 缓冲型I/O函数的原型说明包含在头部文件stdio.h中. 非 缓 冲 I/O 函 数 的 原 型 说 明 包 含 在 头 部 文 件 io.h 中 (TC2.0). 对 于 VC6.0, 非 缓 冲 I/O 函 数 的 原 型 说 明 包 含 在 头 部 文 件 conio.h 内.
if的判断条件,strcmp() 是比较两个字符串是 否相等的函数
两字符串相等,判断是自动化系
两字符串不等,继续 判断是否为土木系 c语句,若if的条件不成 立,则执行else的语句 条件还不成立,则 提示错误信息
C程序的基本形式
头部文件 main() 用户的C程序必须 从main()函数开始 { 主函数体 } 用户编写的C程序
C语言的输入输出函数
既可输入字符也可输入数值 缓冲型 input
混合型:scanf()
字符型 屏幕上不回显 getche() getch()
输入一个字符 getchar() gets() 输入一个字符串
cin
非缓冲型
既可输出字符也可输出数值 混合型:printf() output cout 字符型
S0=0; S1=0+1;
如果照此编 写c程序, 就需要写出 求和的过程是重复计算部分 100行语句
定义Sn为变量 n也定义为变量
S2=1+2;
S3=3+3;
和:
……
S100=4950+100
Sn=Sn-1+n;
让n从0开始,逐次加1,直到 n=100为止
定义变量 for是c语言 的循环语句
机械的重复 运算,是计 算机的特长
变量的内存地址
► 变量存储在内存。不同类型的变量占用的内存字节
数不同。 ► 变量之所以一定要在程序中说明,目的就是给它在 内存中分配一个相应字节数的空间。 ► 没有说明的变量不能使用,因为输入的数据在内存 中找不到相应的存储位置。 声明两个字符型变量:ch_a和ch_b, char ch_a,ch_b; 为它们分配内存地址 cin>>ch_a>>ch_b; 把变量的值,输入到ch_a和ch_b cin>>ch_s; 的内存地址中存储起来
U I R
根据欧姆定律编写程序,用户输入一个 电压值和一个电阻值,由程序计算出相 应的电流值并显示在屏幕上。 要求:电阻可以取小数值。
因为程序把R定义成整数形式变量,它就只能表 头部文件 示整数, 2.2是一个实数,把它输入给R的时候, R只保留整数形式的值,而舍弃了小数部份. #include<stdio.h> 同样的I、U定义仍然是整数形 主函数开始 #include<iostream.h> 式,它们也只能表示整数值. int main(void) { 定义变量,仍然是整数形式 int I,U,R; //定义变量 cout<<"Please input the voltage and resistance"<<endl;//提示 cin>>U; cin>>R; //输入参数 U除以R的结果赋给I I=U/R; //计算 cout<<"The current is"<<I<<"A"<<endl; //输出结果 220/2.2应该是100,为什么现在与220/2的结果相同? return(0); 输出变量I的数值到屏幕 }
通过基本类型的组 合来构造的复合数 据类型,需要自己 在程序中定义
指向变量地址的数据类型, 图2.1 前面的例子在调用输入参数 C语言数据类型 函数的时候使用过
再看电流计算的c程序
电压U
和前面例子 不同的是, 现在电阻值 含有小数, 它对计算电 流有什么影 响?
电阻R 电流I 电压与电流的关系
仍定义三个 变量U、R、I, 带入参数值, 根据欧姆定 律计算电流I.
C程序的标准函数库引用说明, 比如数学函数库,字符串函数 库,输入/输出函数库等,不 需要用户自己编写,只有在说 明之后,才能引用.
C程序的模块化风格
► ► ► ► ►
C的特点是模块结构。而结构化程序设计,是把程序总体任务分解成多 个子任务,每一子任务由一个函数的程序体完成; 函数是构造c程序框架的基本元素,而具体的功能(比如计算,输入输 出等)用在函数体内的c语句实现; 函数之间的接口,也就是子任务之间的数据衔接,是函数调用过程中的 参数传递; 因此,主函数main()就是要完成任务的大纲结构,它不负责功能实现, 只是呈现任务完成的路线,大纲的内容体现在各功能函数的c语句。 软件设计模块化的基本思想是为了解决一个大的任务,实施如下步骤: ①把它分成多级子任务,每个子任务实现单元功能; ②分别解决每个小任务; ③把各小任务的功能组合起来,即可实现原任务的功能。 这是所谓分而治之策略来解决程序设计问题。
同的类型?
要点2--数据变量
一个客观物体必定有多种属性 姓名 身份 证号 整数型变量:int
年龄
性别
身高 职业
字符型变量: char c语言中的多种数据类型用来描 述一个客观物体的多种属性
CPU 型号
硬盘 容量 内存 容量
型号 机壳 颜色
基本概念:存储器有一个 所有的信息首 连续排列的地址空间,用 先进入CPU 来标记每一个存储单元在 计算机存储器中的位置。
编译出错
ch_s没有说明,它没有获得内存单元,因而不能输入数据给它
变量存储方式
逻辑定义 int i_p; 编译的时候给i_ip 分配地址单元 2000
每一个变量在内存 对应着一个唯一的 地址 内存空间
i_p=10; 10
运行时给i_p赋值
i_p=10;就是把10存储到 地址是2000的内存中
► 变量一定有一个内存地址,占用相应的单元。不同
输入变量的值
每次循环执行的操作语句. for语句循环条件, 从零开始到n的值为 止,循环n次. 输出计算结果到屏幕
计算机还适合做什么?
课程上机实验是分班进行的,输入班级名称, 根据选课名单,显示该班级安排的实验时间.
输入变量来自百度文库 输出结果
新增字符串操作的头文件
定义字符串变量 if是判断语句 输入班级名称
要点1--c程序要素
标准函数
输入出函数 数学函数 在程序头部用
系统函数
#include说明 也就是头文件
自定义函数 C程序 c语句
程序员为特定功能 编写的函数
if语句 循环语句:for、while
开关语句:switch
变量 整数型变量:int 字符型变量:char 变量为什么会有不 浮点型变量:float 布尔型变量:bool
1 2 3
要点3--存储器地址
0100 0001 0100 0010 0100
对应该地址的 存储器单元
A B
该存储器单元 里存储的内容
0100 0001 0100 0010 0100
4
5 CPU 再将信 6 息存储到存 7 储器 8 9 10 11 12 13 14 15
计算机需要将这些信息存储到指定 的区域,以便随时能找到它们。 存储器存储信息的能力用单元数目 来衡量。 一个单元可以存储一个文字符号, 即字母符号的ASCII码。 每一个存储单元有一个地址,称为 存储器地址。 程序根据存储器地址来操作存储在 存储器中的信息。
scanf函数格式控制与输入地址表列
三个整数 变量 int main(void) 用输出函数printf()输出提示信息 { 三个格式说明符对 int a,b,c; 应三个输入变量 printf("input a,b,c\n"); scanf(“%d, %d,%d",&a,&b,&c); printf("a=%d,b=%d,c=%d\n",a,b,c); return(0); 格式说明之间也可以什么 } 都没有,自己根据需要选择
格式说 明之间 有逗号
输入的时候 也需要用逗 号隔开三个 变量
数据类型回顾
长整型 C语言已经定义了 整数型 整型 一组、同类型数据、 的数据类型 在内存中、连续的 短整型 单精度 字符型 排列集合 实数型(浮点型) 基本类型 双精度 枚举型 布尔型(逻辑型) 数组型 数据类型 构造类型 指针类型 空类型 结构体型 共用体型
h l w
一个输入函数,读入各参数值
一个输出函数,输出各计算结果
input(&h,&w,&l);
printf(“the area of Sa=%f \n”,w*h/2 +w*l); return(0); } 打印的是一个表达式计算结果 void input(float *h, float *w,float *l) { printf(“Input the height: \n”); 从键盘读入一浮点型的高度数值 scanf(“%f”,h); printf(Input the width: \n "); 从键盘读入一浮点型的宽度数值 scanf(“%f”,w); printf(Input the length: \n "); 从键盘读入一浮点型的矩形高度数值 scanf(“%f”,l); }
{ statements }
declaration--- 关键字 assignment-- 标识符 function------ 函数 control------- 运算符 null--------- 数据
标准库函数用头文 结构化设计的例子—复杂图形面积计算 #include <stdio.h> #include <math.h> #define PI 3.14 void input(float *,float *,float *); int main(void) 定义变量---浮点数类型 { float h,w,l; 件说明,自编函数 预处理指令 ---头文件 也需在程序头部声 明格式。 预处理指令 ---定义常数
#include <stdio.h>
预处理指令 程序一定是从main()函数开始执行 函数由c语句构成
int main(void) 函数名
{ statements }
一般函数模块 { statements } C程序中的 5类语句
int function a()
函数类型 int function b() 函数是C程序的 构造单元
“\n”是字符串的结尾符号, 表示一个字符串的结束
Scanf()输入函数
• • • • • •
scanf(“格式控制字符串”,地址表列);
使用要点: 必须说明输入变量的格式:是字符?字符串?数值? 要给出输入变量的地址。Scanf()需要你给出变量的地址,它 将数值直接存储到该地址。 格式控制字符串的作用与printf函数相同,但不能显示非格式字 符串, 即你不能在scanf()中出现要输出到屏幕上的提示信息。 地址表列中给出的是各变量的地址。地址是由地址运算符“&” 后跟变量名组成的。 例如,&a, &b分别表示变量a的地址和变量b的地址。这个地 址就是编译系统在内存中给a, b变量分配的地址。 scanf函数中没有精度控制。如scanf(“%5.2f”,&a);是非法的。 不能企图用此语句输入小数为2位的实数
在程序看来,操作 类型的变量占用的内存字节数不同。 地址2000单元和操 ► 变量名和内存地址是等效的,给变量赋值,也就是 作i_p变量是一回事 往其对应的地址单元存入数据。
计算机适合做什么?
求自然级数的前n项之和:1+2+3+……+100 它可以根据前一个部分和Sn-1递推求解,即:
Sn=Sn-1+n
C语言程序设计基础
2007.9
第二讲
本讲内容
► 前节要点
C程序要素 数据变量 变量的存储地址
课堂程序举例---计算机适合做什么? ► 模块化的C程序设计风格 ► C语言的输入输出函数
缓冲区的概念 scanf函数---变量数据输入的几种形式
VC已经有的,通用 功能的标准库函数 用C语句编 写的程序体 函数
非缓冲处理方式 使用非缓冲输入 c=getche(); 计算机对输入字 c 符实时处理
switch(c) {…}
缓冲处理方式
使用缓冲输入 scanf("%s",array);
H I !\0 H I
计算机检测到结尾符之 后才对输入字符串处理
! \0
if(strcmp(array,"hi!"==0) {…}
回显在屏幕上
输出一个字符 putchar()
puts()
输出一个字符串
C语言的缓冲与非缓冲输入
缓冲是指输入字符数据经过一个暂存队列; 输入的数据,只在输入结束(回车键按下)时刻才被送入 到计算机处理; 缓冲区使得我们在回车键按下之前,可以修改输入错误的字 符,而当回车键按下时,最终再发送正确的输入数据到计算 机.缓冲方式经常用于数据的输入; 非缓冲方式是字符没有经过缓冲队列,每个输入的字符立刻 被送到程序处理,如在游戏中,希望按下的键被立刻响应,程 序去执行某个命令. 缓冲型I/O函数的原型说明包含在头部文件stdio.h中. 非 缓 冲 I/O 函 数 的 原 型 说 明 包 含 在 头 部 文 件 io.h 中 (TC2.0). 对 于 VC6.0, 非 缓 冲 I/O 函 数 的 原 型 说 明 包 含 在 头 部 文 件 conio.h 内.
if的判断条件,strcmp() 是比较两个字符串是 否相等的函数
两字符串相等,判断是自动化系
两字符串不等,继续 判断是否为土木系 c语句,若if的条件不成 立,则执行else的语句 条件还不成立,则 提示错误信息
C程序的基本形式
头部文件 main() 用户的C程序必须 从main()函数开始 { 主函数体 } 用户编写的C程序
C语言的输入输出函数
既可输入字符也可输入数值 缓冲型 input
混合型:scanf()
字符型 屏幕上不回显 getche() getch()
输入一个字符 getchar() gets() 输入一个字符串
cin
非缓冲型
既可输出字符也可输出数值 混合型:printf() output cout 字符型
S0=0; S1=0+1;
如果照此编 写c程序, 就需要写出 求和的过程是重复计算部分 100行语句
定义Sn为变量 n也定义为变量
S2=1+2;
S3=3+3;
和:
……
S100=4950+100
Sn=Sn-1+n;
让n从0开始,逐次加1,直到 n=100为止
定义变量 for是c语言 的循环语句
机械的重复 运算,是计 算机的特长
变量的内存地址
► 变量存储在内存。不同类型的变量占用的内存字节
数不同。 ► 变量之所以一定要在程序中说明,目的就是给它在 内存中分配一个相应字节数的空间。 ► 没有说明的变量不能使用,因为输入的数据在内存 中找不到相应的存储位置。 声明两个字符型变量:ch_a和ch_b, char ch_a,ch_b; 为它们分配内存地址 cin>>ch_a>>ch_b; 把变量的值,输入到ch_a和ch_b cin>>ch_s; 的内存地址中存储起来
U I R
根据欧姆定律编写程序,用户输入一个 电压值和一个电阻值,由程序计算出相 应的电流值并显示在屏幕上。 要求:电阻可以取小数值。
因为程序把R定义成整数形式变量,它就只能表 头部文件 示整数, 2.2是一个实数,把它输入给R的时候, R只保留整数形式的值,而舍弃了小数部份. #include<stdio.h> 同样的I、U定义仍然是整数形 主函数开始 #include<iostream.h> 式,它们也只能表示整数值. int main(void) { 定义变量,仍然是整数形式 int I,U,R; //定义变量 cout<<"Please input the voltage and resistance"<<endl;//提示 cin>>U; cin>>R; //输入参数 U除以R的结果赋给I I=U/R; //计算 cout<<"The current is"<<I<<"A"<<endl; //输出结果 220/2.2应该是100,为什么现在与220/2的结果相同? return(0); 输出变量I的数值到屏幕 }
通过基本类型的组 合来构造的复合数 据类型,需要自己 在程序中定义
指向变量地址的数据类型, 图2.1 前面的例子在调用输入参数 C语言数据类型 函数的时候使用过
再看电流计算的c程序
电压U
和前面例子 不同的是, 现在电阻值 含有小数, 它对计算电 流有什么影 响?
电阻R 电流I 电压与电流的关系
仍定义三个 变量U、R、I, 带入参数值, 根据欧姆定 律计算电流I.
C程序的标准函数库引用说明, 比如数学函数库,字符串函数 库,输入/输出函数库等,不 需要用户自己编写,只有在说 明之后,才能引用.
C程序的模块化风格
► ► ► ► ►
C的特点是模块结构。而结构化程序设计,是把程序总体任务分解成多 个子任务,每一子任务由一个函数的程序体完成; 函数是构造c程序框架的基本元素,而具体的功能(比如计算,输入输 出等)用在函数体内的c语句实现; 函数之间的接口,也就是子任务之间的数据衔接,是函数调用过程中的 参数传递; 因此,主函数main()就是要完成任务的大纲结构,它不负责功能实现, 只是呈现任务完成的路线,大纲的内容体现在各功能函数的c语句。 软件设计模块化的基本思想是为了解决一个大的任务,实施如下步骤: ①把它分成多级子任务,每个子任务实现单元功能; ②分别解决每个小任务; ③把各小任务的功能组合起来,即可实现原任务的功能。 这是所谓分而治之策略来解决程序设计问题。
同的类型?
要点2--数据变量
一个客观物体必定有多种属性 姓名 身份 证号 整数型变量:int
年龄
性别
身高 职业
字符型变量: char c语言中的多种数据类型用来描 述一个客观物体的多种属性
CPU 型号
硬盘 容量 内存 容量
型号 机壳 颜色
基本概念:存储器有一个 所有的信息首 连续排列的地址空间,用 先进入CPU 来标记每一个存储单元在 计算机存储器中的位置。
编译出错
ch_s没有说明,它没有获得内存单元,因而不能输入数据给它
变量存储方式
逻辑定义 int i_p; 编译的时候给i_ip 分配地址单元 2000
每一个变量在内存 对应着一个唯一的 地址 内存空间
i_p=10; 10
运行时给i_p赋值
i_p=10;就是把10存储到 地址是2000的内存中
► 变量一定有一个内存地址,占用相应的单元。不同
输入变量的值
每次循环执行的操作语句. for语句循环条件, 从零开始到n的值为 止,循环n次. 输出计算结果到屏幕
计算机还适合做什么?
课程上机实验是分班进行的,输入班级名称, 根据选课名单,显示该班级安排的实验时间.
输入变量来自百度文库 输出结果
新增字符串操作的头文件
定义字符串变量 if是判断语句 输入班级名称
要点1--c程序要素
标准函数
输入出函数 数学函数 在程序头部用
系统函数
#include说明 也就是头文件
自定义函数 C程序 c语句
程序员为特定功能 编写的函数
if语句 循环语句:for、while
开关语句:switch
变量 整数型变量:int 字符型变量:char 变量为什么会有不 浮点型变量:float 布尔型变量:bool