C语言程序设计第四版PPT 谭浩强

合集下载

C语言程序设计第四版PPT-谭浩强

C语言程序设计第四版PPT-谭浩强

文件f2的 文件信息区
文件f3的 文件信息区
文件的基本知识——文件的操作 写文件:打开-写-关闭 读文件:打开-读-关闭
文件的打开
功能:为文件建立相应的信息区(存放 文件信息)和文件缓冲区(暂时存放输入 输出的数据) 函数: fopen(文件名,使用文件方式); 例: fopen("a1.dat","r");
第10章 文件
本章内容
10.1 文件的基本知识 10.2 打开与关闭文件 10.3 顺序读写数据文件 10.4 随机读写数据文件 10.5 文件读写的出错检测
文件的基本知识——输入输出
之前各章中处理的数据 ➢输入:键盘->内存 ➢输出:内存->显示器 实际上也可能是 ➢输入:外部设备->内存(读文件) ➢输出:内存->外部设备(写文件) 操作系统把各种设备都统一作为文件处理
文件
顺序文件的读写——读写字符串
例10.3 从键盘输入3个字符串,排序,把排
序后的字符串写入文件(P.342-343) 读上面写好的文件(P.344)
顺序文件的读写——格式化读写
fprintf(文件指针,格式字符串,输出表列); fscanf (文件指针,格式字符串,输入表列);
例: fprintf (fp,"%d,%6.2f",i,f); fscanf (fp,"%d,%f",&i,&f);
用文件扩展名”
文件的基本知识——流式文件
C语言把文件看作是字符(或字 节)的序列。
文件以“流”的形式在程序与操 作系统间流动。
文件的基本知识——数据的形式
根据数据的组织形式,数据文件可分为 ASCII文件:数据逐个字符的ASCII码 输出到外存,也称文本文件 二进制文件:内存中二进制形式的数据 直接输出到外存

C语言程序设计(第四版) 谭浩强 课件 PPT 完整版

C语言程序设计(第四版) 谭浩强 课件 PPT 完整版

函数体、分程序、复合语句
条件语句 定义i为整形变量 定义a为一维数组 定义f为返回整形值函数; p为指向整形变量的指针变量; 赋值语句,使i+2赋给I i自增值1,i加1赋给I
if(e) S; int i; int a[10]; int f(); int *p; i+=2;
i++, ++I;
i=i+1;
教材、参考书与课时安排
教材
C程序设计 (第四版) 谭浩强编著 清华大学出版社
参考书
C语言程序设计教程 C高级实用程序设计 C程序设计试题汇编 谭浩强 王士元 谭浩强 高等教育出版社 清华大学出版社 清华大学出版社
课时安排
64学时
课程目的
§熟记C语言的基本概念 §熟悉Turbo C的上机操作环境 §会读、会编、会调试C程序
枚举类型enum
指针类型 空类型void
<
定义类型typedef
C语言程序设计
第一章 C语言概述
§1.3 简单的C程序介绍
例1.1 第一个程序This is a c program . /* example1.1 The first C Program*/ #include <stdio.h> 编译预处理 void main() 主函数 { printf(“This is a c program.\n”); } 输出: This is a c program. 注释
语句
printf语句中的“\n‖是换行

<
>
C语言程序设计
第一章 C语言概述
例1.2 求 俩 个 数 的 和
/* example1.1 calculate the sum of a and b*/ #include <stdio.h> 预处理命令 /* This is the main program */ void main() 注释 { int a,b,sum; /*定义变量*/ 函数 a=10; b=24; 语句 sum=add(a,b); printf(”sum= %d\n",sum); } printf语句中的“ %d ‖是表

C语言程序设计第四版谭浩强-PPT课件

C语言程序设计第四版谭浩强-PPT课件
例: printf("%d",sizeof(int));
浮点型数据(Floating point,即实型) 浮点型常量
两种表示形式 十进制小数:例如 3.14159 指数形式:例如 1.72e3
main( ) { float x; x=23456.789; printf("x=%e",x); }
25string26string字符串结束符占一个字节由系统自动加上源代码中china27字符常量字符串常量定界符非负整数存储要求单个字符的ascii码有效字符和结束标志0的ascii码2829整型intshortlong浮点型floatdoublelongdouble字符型char数据可混合运算运算前先自动转换成同一类型必定转换floatdoublecharint运算对象类型不同时由较低精度向较高精度转换成相同类型精度
常变量
C99新增 存储方式和用法都是变量,但只能在 定义时赋值一次
C语言的数据类型
1.基本类型 整型、浮点型、字符型 2.派生类型 数组,结构体,共用体 3.指针类型 4.空类型 5.枚举型
整型数据(Integer) 整型常量
三种数制的表示形式
十进制(Decimal):例如 八进制(Octal):例如
上周实验题讲解
P.6例1.1 P15习题5 教材例1.3
——增加输入提示,便于用户操作
——也可以不用函数
——多次运行,测试各种顺序的组合
P15习题6
——三个数比较:用max函数比较两次
第3章
顺序程序设计
3.1 最简单的程序结构——顺序结构
数据输入 运算处理
结果输出
顺序结构流程
步骤1 步骤2 步骤3
10 + 'a' – 10.1 * 'b'

C语言程序课件ppt第4章选择结构程序设计谭浩强C程序设计第四版

C语言程序课件ppt第4章选择结构程序设计谭浩强C程序设计第四版

C★
A★
●B
4.2.1 用if语句处理选择结构举例
C★ A ●★ ● B
4.2.1 用if语句处理选择结构举例
C★ A ● ●★ B
#include <stdio.h> int main() { float a,b,t;
scanf("%f,%f",&a,&b);
if(a>b) 如果a>b
{ t=a;
a=b; 将a和b的值互换
b=t; } printf("%5.2f,%5.2f\n",a,b); return 0; }
#include <stdio.h>
int main()
{ float a,b,t;
scanf("%f,%f",&a,&b);
if(a>b)
{ t=a; a=b;
选择结构,用if语句实现的
a && b 真 假 假 假
a || b 真 真 真 假
4.4.1 逻辑运算符及其优先次序
➢逻辑运算符的优先次序
! → && → ||
(!为三者中最高)
➢与其他运算符的优先次序
! 算术运算符 关系运算符
&& 和 || 赋值运算符
(高) (低)
4.4.2 逻辑表达式
➢ 逻辑表达式的值应该是逻辑量“真”或“假” ➢ 编译系统在表示逻辑运算结果时
4.3.1关系运算符及其优先次序
c>a+b a>b==c a==b<c a=b>c
等效于 c>(a+b) 等效于 (a>b)==c 等效于 a==(b<c) 等效于 a=(b>c)

C语言程序设计第四版PPT_谭浩强

C语言程序设计第四版PPT_谭浩强

变量的访问方式
(2)间接访问──通过指针变量访问变量
地址 定义一种特殊的变量,用来存放其
它变量的地址(指针),这种变量称为
指针变量,它指向一个普通的变量。
指针变量的定义和调用
定义一个指针变量
例:
它指向一个整型变量(基类型) 给指针变量赋值
int a; 指针变量的值是 int *a_pointer; 另一个变量的地址 73 a = 500; 页输 指针变量所指向的 出格 a_pointer = &a; 变量即a的值 式 printf("%d\n",*a_pointer); 指针变量的值, printf("%x\n",a_pointer); 即a的地址 *a_pointer = 3; 对指向的变量(即a)赋值
二维数组的列指针:以指针变量表示
通过指针引用字符串
字符串是在内存中连续存放的一组字符
以变量形式保存字符串需要声明字符数组
或声明一个指针变量访问字符串或字符数组
(P.257图8.28)——不是字符串变量
char *string; string="Work hard!"; printf("%s\n",string); printf("%c\n",*string++); printf("%c\n",*(string+5)); printf("%s\n",string);

int array[5], *pointer;
pointer = array; int array[5], *pointer = &array[0];

使用指针访问数组元素,能使目标程 序占用内存少、运行速度快。

C语言程序设计第四版PPT 谭浩强

C语言程序设计第四版PPT 谭浩强
i 1 100
问题的扩展: (1) 求 1 ~ 100 间奇数的和
int i,sum=0; for (i=1;i<=100;i=i+2) sum=sum+i; printf("1+3+...+99=%d\n",sum); int i,sum=0; for (i=1;i<=100;i++) if(i%2==1)sum=sum+i; printf("1+3+...+99=%d\n",sum);
do-while语句
do 语句 while (表达式)
假(0)
语句
表达式
真(非0)
语句 表达式
N-S图
流程图
do-while语句
例1:求 n 1 2 3 ... 100
n 1
100
int i=1,sum=0;
do
{ sum=sum+i;
i++;
}while(i<=100);
例4:求
10
n ! 1! 2! 3! ... 10 !
n 1
int i,n, fac,sum=0; for (n=1;n<=10;n++) { fac=1; for (i=1;i<=n;i++) fac=fac*i; sum=sum+fac; } printf ("1!+2!+...+10!=%ld\n",sum);
例6:鸡兔问题
计算机的解决方法——将各种可能情 况逐个试算,找到符合要求的结果
鸡0只,兔H只,则脚有...只≠F 鸡1只,兔H-1只,则脚有...只≠F 鸡2只,兔H-2只,则脚有...只≠ F ...... 鸡C只,兔H-C只,则脚有...只=F,显示结果 ...... 鸡H只,兔0只,则脚有...只≠ F

C语言程序设计第四版PPT 谭浩强

C语言程序设计第四版PPT 谭浩强

第9章 用户建立的 数据类型
本章内容
9.1 结构体类型和结构体变量 9.2 结构体数组 9.3 结构体指针 9.4 用指针处理链表 9.5 共用体类型
9.6 枚举类型
9.7 用typedef命名类型
9.1 结构体(Structure)
概念 不同类型的相关数据组合成一个整 体,以便引用。 例:
电话本程序 P.297
9.1 结构体
一个简单的例子
struct Teacher { char id[4]; char name[10]; int age; char course[20]; };
struct Teacher t1={"0324","Li",40,"C Language"}, t2={"1728","Hu",30,"Data Structure"}; printf("%s teaches %s\n",,t1.course); printf("No: %s teaches %s\n",t2.id,t2.course); t1=t2;
9.2 结构体数组
例子修改——结构体类型数组初始化
struct Teacher { char id[4]; char name[10]; int age; char course[20]; } teac[2]={ {"0324","Li",40,"C Language"}, {"1728","Hu",30,"Data Structure"}};
“函数”习题讲解
函数编写应注意的问题——模块划分的原则: P.203功能要单一,相互影响尽量少。例 7.17是个不好的程序。 初学者常见的习惯:输入、输出与数据处理 运算放在一个函数中。 关于数组(的首地址)作为函数的形参: P.195 数组的大小是否指定全无影响。 通常会定义一个整型的参数,接收实参数组 的大小。

C语言程序设计第四版PPT_谭浩强

C语言程序设计第四版PPT_谭浩强

冒泡排序 对数组元素a[0]-a[5]升序排序 比较a[5]和a[4],若顺序不符则交换; 比较a[4]和a[3],若顺序不符则交换; 比较a[3]和a[2],若顺序不符则交换; 比较a[2]和a[1],若顺序不符则交换; 比较a[1]和a[0],若顺序不符则交换。
冒泡排序
=》结果:最小的数被换到了a[0]中。 =》对a[1]-a[5]重复上述步骤,将其中最 小的数换到a[1]中。 =》重复上述步骤直至完成排序。
选择排序
for (i=0;i<5;i++)
{ imin=i;min=a[i]; /*求a[i]之后元素的最小值*/
for (j=i+1;j<=5;j++)
if (a[j]<min)
{ min=a[j]; /*变量min记录最小值 */
imin=j;
/*变量imin记录最小值的下标 */
}
temp = a[i];
例:在一维数组中查找给定数据及下标
这是顺序查找法。 还有一种常用的折半 查找法,数据量大且 有序时使用,效率更 高。
折半查找
一维数组的定义和引用
例:排序算法
算法演示 •冒泡排序 •选择排序 •插入排序 •快速排序
冒泡排序
基本思路:依次将数组中相邻两元 素比较,并按要求的顺序交换,从而 将最大/最小的数推至最前或最后;对 余下的数重复上述步骤,最终获得所 需的顺序
一维数组的定义和初始化
一维数组的定义和初始化
一维数组的定义和初始化
int a[5],i; for(i=0;i<5;i++)
printf("%d\n",a[i]);
一维数组的定义、初始化和引用
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
case '9' : y="A";
case '8' : y="B"; case '7' : y="C"; case '6' : y="D"; default : y="E"; } printf("Level:%c\n",y);
注意: 同前;case后的数据类型; 每个case后的break语句; 使用相同语句的分支合并。
printf("It's a positive number\n");
else
printf("less than zero\n");
关系运算符
< <= == !=
> >= 优先级高 优先级低
关系运算符
算术运算→关系运算→赋值运算






例:P.92 L.8
关系表达式
➢用关系运算符连接算术表达式(或 字符/关系/逻辑/赋值表达式)形成
选择结构(分支结构)流程
Y
语句组1
条件
N
语句组2
循环结构流程
条件
N
Y
语句组
第4章 选择结构
选择结构(分支结构)流程YΒιβλιοθήκη 语句组1条件N
语句组2
选择结构实例
P.66 例3.5 一元二次方程 程序存在的问题:用户输入的数据必 须保证b2-4ac≥0,否则调用sqrt函数 会出错。 改进:P.86 例4.1 是否还有不完善之处?
文件名
尽信书,则不如无书
算法在程序中的重要性
一个程序包含以下内容
➢数据的类型与组织形式——数据结构 ➢操作步骤——算法 ➢结构化程序设计方法 ➢计算机语言
计算机算法
数值运算 非数值运算
算法实例
在一组数a1,a2,a3,a4,...,a10中找出最大值
算法的特征
有穷性:操作步骤有限 确定性:每一步骤有确切定义 输入:0个或多个输入,从外界获得信息 输出:一个或多个输出,反映数据处理结果 有效性:每个步骤能执行,并有确定结果 ——“正确”的算法有优劣之分,时间、空 间的复杂度
➢关系表达式的值是真(以1表示) 或 假(以0表示)
➢字符/关系/逻辑/赋值表达式均以数 值形式参加关系运算
关系表达式
判断下面程序运行时显示的结果: int a=5,b=3; printf("%d\n",a>b); printf("%d\n",(a>3)>(b==3)); printf("%d\n",a>3>b==3); printf("%d\n",a>b>2); printf("%d\n",a-3>(b=2)); printf("%d\n",'a'>'A');
“语句”包括复合语 句
读教材101页代码
条件运算符和条件表达式
条件运算符 ? : 唯一的三目运算符
条件表达式 表达式1 ? 表达式2 : 表达式3 当表达式1为真时返回表达式2的值,
否则返回表达式3的值
条件运算符和条件表达式

int a,b,x; a=5; b=8; x=a>b?a:b; printf("%d",x);
例:求一元二次方程的解
输入a, b, c
Y
xc b
输出x
N
a≠0
Y
N
b≠0
N
b2-4ac≥0
Y C=0
Y
N
b b 2 4ac x1


2a


x2 b b 2 4ac
2a
复数解
输出x1, x2
if语句的嵌套
if 语句的嵌套 if (...) if (...) 语句1 else 语句2 else if (...) 语句3 else 语句4
float x,y; scanf("%f",&x); if (x<1) y=x; else if (x<10) y=2*x-1; else y=3*x-1; printf("y=%f",y);
C++,C99版本使用 类型符 _Bool 值为 true 和 false 头文件 stdbool.h
if语句
if (条件) 语句
if (条件) 语句 else 语句
if (条件) {复合语句}
else {复合语句}
说明: ➢“条件”是关系表达 式或逻辑表达式,其值 为“真”(非0)或 “假”(0) ➢语句均要以分号结束, { }括起的复合语句每句 都以分号结束
if语句
if (条件) 语句
if (条件) 语句 else 语句
if (条件) {复合语句}
else {复合语句}
if语句
int x; printf("x="); scanf("%d",&x); if (x>=0)
分别输入正数、负 数、零,判断程序 的运行结果
printf("greater than zero or equal to zero\n");
x>0
T
F
打印x 打印-x
算法的表达方式
➢自然语言 ➢流程图 ➢N-S图 ➢伪代码1 ➢计算机语言
如果 x>0 就 打印 x
否则 打印 -x
算法的表达方式
➢自然语言 ➢流程图 ➢N-S图 ➢伪代码2 ➢计算机语言
if x>0 then print x
else print -x
算法的表达方式
➢自然语言 ➢流程图 ➢N-S图 ➢伪代码2 ➢计算机语言
else
printf("less than zero\n");
printf("It's a negative\n");
if语句
int x; printf("x="); scanf("%d",&x); if (x>=0)
分别输入正数、负 数、零,判断程序 的运行结果
printf("greater than zero or equal to zero\n");
s=3.14159*r*r; printf("S=%f",s); else
注意: (1)条件后未写{ }造成分支语句不匹配, (2)变量名大小写问题 ;
printf("radius can not be negative");
阅读下面的程序,判断编译和运行结果
int x,y; scanf("%d",&x); if (x<1) y=x; if (1<=x<10) y=2x-1; if (x>=10) y=3x-1; printf("y=%d",y);
if语句
例:P.88 例4.3 三个数从小到大排列
例 求分段函数的值
y
| x3
x
| 3x
1
7ex
x1 1 x 10
x 10
* 用多个平行的 if 语句表达 * 用 if … else if … else … 表达 * abs,pow,exp函数的使用
if语句
if(条件1) 语句1 else if(条件2) 语句2 else if(条件3) 语句3 ...... else 语句n
阅读下面的程序,判断编译和运行结果
int x; char y; scanf("%d",x); if (90<=x<=100) y="A"; if (80<=x<=89) y="B"; if (70<=x<80) y="C"; if (60<=x<70) y="D"; else y="E"; printf("Level:%c\n",y);
switch语句实现多分支选择结构
switch (表达式) {
case 常量表达式1: 语句1 case 常量表达式2: 语句2 ...... case 常量表达式n: 语句n default: 语句n+1 }
switch语句实现多分支选择结构
说明: switch会执行相符的分支之后的所有 语句; 为了使程序在执行一个相符的分支后 不再继续执行后面的语句,可使用 break语句终止switch; 相邻的多个分支可执行共同的语句。
阅读下面的程序,判断运行结果
int x=13,y; if (x>5) printf("y=20"); printf("y=10"); printf("%d",y);
注意:y没有被赋值的错误;分支结 束后的语句
阅读下面的程序,判断运行结果
float r,S;
scanf("r=%f",&r);
if (r>=0)
逻辑运算符
!

&& 与
||

优先级
运算规则见表4-2,4-3 例 P.93-94
逻辑表达式
例:P.95-96 闰年的表达 以逻辑运算符连接关系表达式和逻辑 量形成 逻辑表达式的结果是真(以1表示) 或 假(以0表示) 0和1以外的数据(数值、字符等)参加 逻辑运算时,以0为假,非0为真
相关文档
最新文档