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

合集下载

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

C语言程序设计第四版PPT 谭浩强
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 是否还有不完善之处?
文件名
尽信书,则不如无书
算法在程序中的重要性

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第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_谭浩强6章资料

C语言程序设计第四版PPT_谭浩强6章资料

折半查找
int a[11]={5,13,19,21,37,56,64,75,80,88,92}; int index=-1,key,low,high,middle;
scanf("%d",&key); low=0;high=10; while(low<=high) { middle=(low+high)/2; if (key==a[middle]) { index=middle; break; } else if (key>a[middle]) low=middle+1; else high=middle-1; }
二维数组
例6.4 二维数组行列对换(矩阵转置)
例6.5 对于一个二维数组,求最大值及其下
标 经典实例:杨辉三角(第6章习题第6题)
二维数组
本节要点
二维数组的物理存储方式
二维数组的逻辑概念——矩阵
二维数组元素的遍历——双重循环
字符数组
C语言中没有字符串变量,字符串 数据需要使用字符数组保存。
数组名[下标][下标] 例:赋值 a[1][3]=8;
输出 printf("%d",a[2][1]);
二维数组的定义和引用
下面的程序运行时输入 34 56 12 7 9 41 52, 显示结果为______。 int a[2][3], i, j; for (i=0; i<=1; i++) for (j=0; j<=2; j++) scanf("%d", &a[i][j]); for (j=0; j<=2; j++) { for (i=0; i<=1; i++) printf("%d\t", a[i][j]); printf("\n");}

最简单C程序设计谭浩强C程序设计第四版共96页PPT

最简单C程序设计谭浩强C程序设计第四版共96页PPT

最简单C程序设计谭浩强C程 序设计第四版
11、战争满足了,或曾经满足过人的 好斗的 本能, 但它同 时还满 足了人 对掠夺 ,破坏 以及残 酷的纪 律和专 制力的 欲望。 ——查·埃利奥 特 12、不应把纪律仅仅看成教育的手段 。纪律 是教育 过程的 结果, 首先是 学生集 体表现 在一切 生活领 域—— 生产、 日常生 活、学 校、文 化等领 域中努 力的结 果。— —马卡 连柯(名 言网)
13、遵守纪律的风气的培养,只有领 导者本 身在这 方面以 身作则 才能收 到成效 。—— 马卡连 柯 14、劳动者的组织性、纪律性、坚毅 精神以 及同全 世界劳 动者的 团结一 致,是 取得最 后胜利 的保证 。—— 列宁 摘自名言网
15、机会是没有什么损失。——卡耐基 47、书到用时方恨少、事非经过不知难。——陆游 48、书籍把我们引入最美好的社会,使我们认识各个时代的伟大智者。——史美尔斯 49、熟读唐诗三百首,不会作诗也会吟。——孙洙 50、谁和我一样用功,谁就会和我一样成功。——莫扎特

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)。
算法讲解/view/1068668.htm
动画演示
自己玩一下
数组作为函数的参数
两个完全不同的概念
以数组元素作为函数的参数
——实参是数组元素,对应的形参是变量
以数组名作为函数的参数
——实参和形参都是数组名
数组元素作为函数的参数
数组元素作为实参——形参是普通变量,
调用方式 有无参数
函数的返回值 库函数(内部函数) 用户自定义函数
无参函数 有参函数
有返回值(有类型) 无返回值(空类型void)
函数的定义
函数首部
int max(int x,int y) { int z; 指定函数的类型 if (x>y) z=x; 指定参数名称和类型 else z=y; return z; 函数的功能 }
例:最大公约数函数和最小公倍数函数
求最大公约数的算法: ①从1开始,逐个找公约数,直至两数中较小 的一个; ②辗转求余(循环结构实验指导有流程图); ...... 求最小公倍数的算法: ①从两数中较大的一个开始,由小到大找公 倍数,直至找到; ②两数的乘积 / 两数的最大公约数。
函数的嵌套调用
调用最小公倍数函数(两数乘积/两数的最大
函数的参数
形式参数和实际参数
形参在函数调用时分配内存单元,调用结束
后释放;
实参可以是常量、变量、表达式 实参与形参的数目、类型应一致 C语言中,实参向形参传递其值——“值传
递”,不传递地址,形参值变化不影响实参
函数的返回值
通过函数体return语句中的表达式值获
得,例如: int max(int x,int y)
值传递
int main( ) { int a[11],i; float fac(int n); for (i=1;i<=10;i++) {a[i]=i; printf("%d!=%.0f\n",a[i],fac(a[i])); } return 0; 等价于普通变量 }
float fac(int n) { float t=1; int i; for(i=1;i<=n;i++) t=t*i; return t; }
函数的概念
int main( ) { void stars(int, char); void stars(int n,char c) int n=20; { stars(10,'%'); int i; printf("Hello!\n"); for (i=1;i<=n;i++) stars(5,'-'); printf("%c",c); printf("Bye!\n"); printf("\n"); stars(n,'$'); } return 0; 两个参数,无返回值 }
第7章 函数
引例
求阶乘n!
int i,n; float fac=1; printf("n="); scanf("%d",&n); for(i=1;i<=n;i++) fac=fac*i; printf ("%d!=%.0f\n",n,fac);
引例
求任意3个正整数的阶乘的和 a!+b!+c!
fa=1; for(i=1;i<=a;i++) fa=fa*i; fb=1; for(i=1;i<=b;i++) fb=fb*i; fc=1; for(i=1;i<=c;i++) fc=fc*i; printf("%d!+%d!+%d!=%.0f",a,b,c,fa+fb+fc);
公约数),当中需要调用最大公倍数函数
函数的嵌套调用:在一个被调用的函数中调
用另一个函数
例:P183 例7.5
函数的递归调用
概念:在一个被调用的函数中直接 或间接地调用函数本身
n! = 1 , n (n-1)! , n=0,1 n>1
函数的递归调用
递归的另一个典型实例 ——汉诺塔(P.189例7.8)
函数的调用
函数(实参列表) 调用有返回值的函数,应注意返回值 的处理,如赋值或输出等。 例如: c=max(a,b);

printf("%d",max(a,b));
函数的参数
形式参数(形参,Formal parameter):
定义函数时首部括号中定义的变量
实际参数(实参,Actual parameter):
指定函数名
函数体
函数首部,不是语 句,行尾无分号

函数的返回值,类 型与首部定义一致
函数的定义
关于函数类型的说明
无返回值的函数类型为void; 有返回值的函数,其类型根据返回值
类型决定;省略类型时默认为int(建议
不要省略)
函数的调用
调用函数的准备工作——包含或声明
调用库函数应在C文件开头部分使用
无返回值的函数
函数的概念
int main( ) { void stars(int n); int n=20; stars(10); printf("Hello!\n"); stars(5); printf("Bye!\n"); stars(n); return 0; }
void stars(int n) { int i; for (i=1;i<=n;i++) printf("*"); printf("\n"); } 有参数,无返回值
float factorial(int n) { int i; float fac; fac=1; for(i=1;i<=n;i++) fac=fac*i; return fac; }
引例
求任意3个正整数的阶乘的和 a!+b!+c! 使用函数可减少程序的重复段落 使用函数可使程序功能相对独立,
#include<头文件名> 要调用其他自定义函数,应在本函数 体开始的声明部分加上被调用函数的声 明(与函数首部内容相同的一个语句), 供编译时使用——如果被调用函数出现 在本函数之前可省略此部分 详见7.4节
函数的调用
函数(实参列表)
调用无返回值的函数可以把上述函数 直接作为语句使用,以完成其功能。 例如: stars(10);
复合语句内有效的变量(“花括号内有效”)
全局变量(外部变量)——在一个模块内
多个函数中均有效
扩展的外部变量——在多个程序文件的函
数中有效(extern)
变量作用域——局部变量和全局变量
局部变量——函数内定义,只在该函数有效
#include <stdio.h> int main() { int a,b,c; ...... } float fac(int n) { float t=0; ...... return t;}
便于维护——模块化的程序设计
应用程序
源程序文件1
函数1 函数2 函数3
源程序文件2 函数1 函数2
C应用程序的构成
函数的概念
#include <stdio.h> int main ( ) { int max(int x,int y); int a, b, c; scanf ("%d,%d",&a,&b); c=max (a,b); printf ("max=%d",c); return 0; }
int max(int x,int y) { int z; if (x>y) z=x; else z=y; return z; }
程序必备的 main函数
有返回值的函数
函数的概念
上述问题也可只用一个main函数实现 int main ( ) { int a, b, c; scanf ("%d,%d",&a,&b); if (a>b) c=a; else c=b; printf ("max=%d",c); return 0; }
形参为数组, 不指定大小
数组作为函数的参数
以数组名作为函数的参数——注意事项
形参和实参都是数组名,类型要一致; 形参中不指定数组大小,指定无实际作用; 形参数组名获得实参首元素的地址,即形参第
一个元素与实参第一个元素占用相同的地址—— 这就是“地址传递”方式,形参值改变会引起实 参值的变化
为了使形参获得实参数组的大小(元素个数),
主函数中不存在 变量n和t fac函数中不存 在变量a和b
变量作用域——局部变量和全局变量
局部变量——复合语句内定义,只在语句内 有效
int main() { int i; for (i=0;i<=10;i++) { int k; k=i*2; printf("%d\n",k); } printf("%d\n",i); printf("%d\n",k); }
数组作为函数的参数
以数组名作为函数的参数——实参向形参 传递首元素地址
int main( ) { int max(int a[ ],int n); int x[6],i; for(i=0;i<=5;i++) scanf("%d",&x[i]); printf("max=%d",max(x,6)); return 0; } 实参为数组名 int max(int a[ ],int n) { int m,i; m=a[0]; for (i=1;i<n;i++) if (a[i]>m) m=a[i]; return m; }
相关文档
最新文档