c语言程序设计第6章(谭浩强)PPT版本
合集下载
C语言程序设计(第四版) 谭浩强 课件 PPT 完整版

语句
printf语句中的“\n‖是换行
符
<
>
C语言程序设计
第/* 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语言程序设计
第一章 C语言概述
C语言结构特点
函数与主函数
程序由一个或多个函数组成 必须有且只能有一个主函数main(),可以放在程序中任一 位臵 程序执行从main开始,在main中结束,其它函数通过嵌 套调用得以执行。
程序语句
C程序由语句组成 用‚;‛作为语句终止符
注释
C语言程序设计
第一章 C语言概述
Turbo C集成开发环境
配臵要求
UNIX,PC-DOS,MS-DOS,UCDOS操作系统 硬盘容量约2M,448K RAM运行空间
安装Turbo C
创建子目录 Install 若不是可安装盘,将文件拷贝到对应的目录下
TC
*.* *.*
INCLUDE SYS
Alt +x Alt+F ,Q
帮助Help
F1 Ctrl+F1
<
>
C语言程序设计
第一章 C语言概述
常用热键 基本操作:
F10-----调用主菜单 F2------存盘 F3------打开 F1------帮助信息 Alt+F9------Compile Ctrl+F9------Run Alt+F5------User Screen Alt+X ------退出Tc
最的c语言教程谭浩强c语言PPT课件

整数轮流作为除数,如果都不能被整除,则n为素数。 算法可以表示如下: S1:输入n的值
S2:2=>i (i作为除数) S3:n被i除,得余数r
第19页/共92页
S4:如果r=0,表示n能被i整除,则打印n“不是素数”,算法结束;否则执行S5 S5:i+1=>i
S6:如果i≤n-1,返回S3;否则打印 n “是素数”,然后结束。 实际上n不必被2到(n-1)的整数除,只需被2到n的开方间整数除即可,甚至只需被 2到n之间的整数除即可。例如,判断13是否素数,只需将13被2、3除即可,如都
算机科学家沃思(Nikiklaus Wirth)提出一个公式 数据结构 + 算法 = 程序
第1页/共92页
实际上,一个程序除了以上两个主要要素之外,还应当采用结构化程序设计方法进 行程序设计,并且用某一种计算机语言表示。因此,可以这样表示: 程序 = 算法 + 数据结构 + 程序设计方法 + 语言工具和环境
程序形式),或者将这些程序存放在磁盘或磁带上,供用户调用。
第5页/共92页
而非数值运算的种类繁多,要求各异,难以规范化,因此只对一些典型的非数值运 算算法(例如排序算法)作比较深入的研究。其他的非数值运算问题,往往需要使用
者参考已有的类似算法重新设计解决特定问题的专门算法。 本书不可能罗列所有算法,只是想通过一些典型算法的介绍,帮助读者了解如何设 计一个算法,推动读者举一反三。希望读者通过本章介绍的例子了解怎样提出问题,
5. 有效性 算法中的每一个步骤都应当能有效地执行,并得到确定的结果。
第22页/共92页
对于不熟悉计算机程序设计的人来说,他们可以只使用别人已设计好的现成算法, 只需根据算法的要求给以必要的输入,就能得到输出的结果。对他们来说,算法如 同一个“黑箱子”一样 ,他们可以不了解“黑箱子”中的结构,只是从外部特性上 了解算法的作用,即可方便地使用算法。例如,对一个“输入3个数,求其中最大 值”的算法,可以用图2.2表示,只要输入a,b,c3个数,执行算法后就能得到其 中最大的数。但对于程序设计人员来说,必须会设计算法,并且根据算法编写程序。
S2:2=>i (i作为除数) S3:n被i除,得余数r
第19页/共92页
S4:如果r=0,表示n能被i整除,则打印n“不是素数”,算法结束;否则执行S5 S5:i+1=>i
S6:如果i≤n-1,返回S3;否则打印 n “是素数”,然后结束。 实际上n不必被2到(n-1)的整数除,只需被2到n的开方间整数除即可,甚至只需被 2到n之间的整数除即可。例如,判断13是否素数,只需将13被2、3除即可,如都
算机科学家沃思(Nikiklaus Wirth)提出一个公式 数据结构 + 算法 = 程序
第1页/共92页
实际上,一个程序除了以上两个主要要素之外,还应当采用结构化程序设计方法进 行程序设计,并且用某一种计算机语言表示。因此,可以这样表示: 程序 = 算法 + 数据结构 + 程序设计方法 + 语言工具和环境
程序形式),或者将这些程序存放在磁盘或磁带上,供用户调用。
第5页/共92页
而非数值运算的种类繁多,要求各异,难以规范化,因此只对一些典型的非数值运 算算法(例如排序算法)作比较深入的研究。其他的非数值运算问题,往往需要使用
者参考已有的类似算法重新设计解决特定问题的专门算法。 本书不可能罗列所有算法,只是想通过一些典型算法的介绍,帮助读者了解如何设 计一个算法,推动读者举一反三。希望读者通过本章介绍的例子了解怎样提出问题,
5. 有效性 算法中的每一个步骤都应当能有效地执行,并得到确定的结果。
第22页/共92页
对于不熟悉计算机程序设计的人来说,他们可以只使用别人已设计好的现成算法, 只需根据算法的要求给以必要的输入,就能得到输出的结果。对他们来说,算法如 同一个“黑箱子”一样 ,他们可以不了解“黑箱子”中的结构,只是从外部特性上 了解算法的作用,即可方便地使用算法。例如,对一个“输入3个数,求其中最大 值”的算法,可以用图2.2表示,只要输入a,b,c3个数,执行算法后就能得到其 中最大的数。但对于程序设计人员来说,必须会设计算法,并且根据算法编写程序。
C语言谭浩强完整课件

2020/12/15
1.3 C语言的发展及其特点
➢C语言是国际上广泛流行的计算机高级
语言。 ➢C语言的发展:
具有多种数据类型
BCPL语言
B语言
C语言
2020/12/15
精练、接近硬件,但 过于简单, 无数据类型
1.3 C语言的发展及其特点
• 最初的C语言只是为描述和实现UNIX操作系统提供一种工作语言而设计的。
2020/12/15
函数体
1.4.1 最简单的C语言程序举 例
#include <stdio.h>
int main( )
{
printf (”This is a C program.\n”);
return 0;
输出函数
}
2020/12/15
输出语句
1.4.1 最简单的C语言程序举 例
#include <stdio.h> int main( ) {
2020/12/15
1.3 C语言的发展及其特点
• C语言主要特点: • 运算符丰富。 • 有34种运算符 • 把括号、赋值、强制类型转换等都作为运算符处理 • 表达式类型多样化
2020/12/15
1.3 C语言的发展及其特点
• C语言主要特点: • 数据类型丰富。 • 包括:整型、浮点型、字符型、数组类型、指针类型、结构体类型、共用体类型 • C99又扩充了复数浮点类型、超长整型(long long)、布尔类型(bool) • 指针类型数据,能用来实现各种复杂的数据结构(如链表、树、栈等)的运算。
会自动地、有条不紊地进行工作 ➢计算机的一切操作都是由程序控制的,
离开程序,计算机将一事无成
2020/12/15
1.3 C语言的发展及其特点
➢C语言是国际上广泛流行的计算机高级
语言。 ➢C语言的发展:
具有多种数据类型
BCPL语言
B语言
C语言
2020/12/15
精练、接近硬件,但 过于简单, 无数据类型
1.3 C语言的发展及其特点
• 最初的C语言只是为描述和实现UNIX操作系统提供一种工作语言而设计的。
2020/12/15
函数体
1.4.1 最简单的C语言程序举 例
#include <stdio.h>
int main( )
{
printf (”This is a C program.\n”);
return 0;
输出函数
}
2020/12/15
输出语句
1.4.1 最简单的C语言程序举 例
#include <stdio.h> int main( ) {
2020/12/15
1.3 C语言的发展及其特点
• C语言主要特点: • 运算符丰富。 • 有34种运算符 • 把括号、赋值、强制类型转换等都作为运算符处理 • 表达式类型多样化
2020/12/15
1.3 C语言的发展及其特点
• C语言主要特点: • 数据类型丰富。 • 包括:整型、浮点型、字符型、数组类型、指针类型、结构体类型、共用体类型 • C99又扩充了复数浮点类型、超长整型(long long)、布尔类型(bool) • 指针类型数据,能用来实现各种复杂的数据结构(如链表、树、栈等)的运算。
会自动地、有条不紊地进行工作 ➢计算机的一切操作都是由程序控制的,
离开程序,计算机将一事无成
2020/12/15
C++(谭浩强版课件)第6章_y

例6.2 输入a和b两个整数,按先大后小的顺 序输出a和b(用指针变量处理)。
#include <iostream> using namespace std; int main( ) {int *p1,*p2,*p,a,b; cin>>a>>b; p1=&a; p2=&b; if(a<b) {p=p1;p1=p2;p2=p;} cout<<″a=″<<a<<″ b=″<<b<<endl; cout<<″max=″<<*p1<<″ min=″<<*p2<<endl; return 0; }
在C++中,数组名代表数组中第一个元素(即序号 为0的元素)的地址。因此,下面两个语句等价:
p=&a[0]; p=a;
如果p的初值为&a[0],则: (1) p+i和a+i就是a[i]的地址,或者说,它们指向a数 组的第i个元素。
(2) *(p+i)或*(a+i)是p+i或a+i所指向的数组元素, 即a[i]。 可以看出,[]实际上是变址运算符。对a[i]的求解过 程是: 先按a+i×d计算数组元素的地址,然后找 出此地址所指向的单元中的值。 (3) 指向数组元素的指针变量也可以带下标,如p[i] 与*(p+i)等价。 根据以上叙述,引用一个数组元素,可用以下方法: (1) 下标法,如a[i]形式; (2) 指针法,如*(a+i)或*(p+i)。其中a是数组名,p是 指向数组元素的指针变量。
运行情况如下:
12 -56 87↙ 87 12 -56
C语言程序设计第五版谭浩强 ppt课件

运行结果: sum=34
C语言程序设计
第一章 C语言概述
例1.3 从键盘输入两个整数,输出其中较大的数
#include <stdio.h> void main() 声明部分,定义变量 { int max(int x,int y)
输入:10,20 输出:max = 20
int a,b,c;
scanf(“%d,%d”,&a,&b);
第6章 循环控制
第8章 函数
第7章 数组
第9章 预处理命令
第10章 指针
第11章 结构体与共用体
第12章 位运算
第13章 文件
C语言程序设计
第1章 C语言概述
C语言发展历史 C语言的特点 简单的C程序介绍 C程序的上机步骤
第一章 C语言概述
C语言程序设计
§1.1 C语言发展历史
程序设计语言的发展
<
第一章 C语言概述
9种控制语句: if( )~else~ for( )~ while( )~ do~while( ) continue break switch goto return
C语言程序设计
第一章 C语言概述
表1.1 C语言与Pascal语言比较
C语言 {} if(e) S; int i; int a[10];
不产生编译代码
❖编译预处理命令
非法
<>
例: /*This is the main /* of example1.1*/ */
C语言程序设计
§1.4 C程序的上机步骤
C程序开发步骤
编辑
开始
第一章 C语言概述
程序代码的录入, 生成源程序*.c
C语言程序设计第四版谭浩强-2022年学习资料

习题5.4统计一串英文字符中的-大写字母、小写字母、数字、空-格、其他字符的个数。-问题扩展:输入一句英文 -统计并-输出每个字母使用的频数和频率
例5.8-Fibonacci数列-问题:如何使用数学中的下标变量-X1X2,…Xn.…形式表示一组相关的数 据
例5.8 Fibonacci数列用数组解决-int i,fibo[40];-fibo[o]=fibo[1] 1;-fori=2;i<40;i++-fibo[i]=fibo[i-1]+fibo[i-2];-for=0 i<40;i++-printf"%10d",fibo[i];-if i+1%5==0printf"\n";
数组的概念-有序数据的集合-用同一名称表示一组相同类型的相-关数据-·用下标区分各个元素-·相当于数学中的 标变量,如-X1,X2,...-a11ya12yy日21y…
维数组的定义-定义:类型说明-数组名[常量]-定义一个数组的名称、类型、元素
一维数组的定义-short int a[3];-a[2]=6;-存储单元-数组元素-00000000000 0110-说明:不能动态定义数组,-存储地址-见P.143说明3
一维数组的定义和引用-例:排序算法-算法演示-•冒泡排序-•选择排序-插入排序-快速排序
冒泡排序-基本思路:依次将数组中相邻两元-素比较,并按要求的顺序交换,从而-将最大/最小的数推至最前或最后 对-余下的数重复上述步骤,最终获得所-需的顺序
冒泡排序-对数组元素a[0]-a[5]升序排序-比较a[5]和a[4],若顺序不符则交换;-比较a[4和a 3],若顺序不符则交换;-比较a[3]和a[2],若顺序不符则交换-比较a[2]和a[1],若顺序不符则交 ;-比较a[1]和a[0],若顺序不符则交换。
谭浩强C语言PPT (5)

在使用数组元素时,应该注意下标值应在已定义的数值大小的范围内。 在使用数组元素时,应该注意下标值应在已定义的数值大小的范围内。
注意:数组的定义和数组元素的引用之区别。 注意:数组的定义和数组元素的引用之区别。 之区别
6.2.3 二维数组的初始化
分行给二维数组赋初值。 分行给二维数组赋初值。 int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 可以将所有数据写在一个花括号内,按数组排列的顺序对各元素赋初值。 可以将所有数据写在一个花括号内,按数组排列的顺序对各元素赋初值。 int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 可以对部分元素赋初值。 可以对部分元素赋初值。 int a[3][4]={{1},{5},{9}}; 1 0 0 0 5 0 0 0 9 0 0 0 也可以对各行中的某一元素赋初值。 也可以对各行中的某一元素赋初值。 int a[3][4]={{1},{0,6},{0,0,11}}; 1 0 0 0 0 6 0 0 0 0 11 0
若有6个数,比较 若有 个数,比较6-1=5趟; 个数 趟 第1趟,比较 趟 比较6-1=5次 次 第2趟,比较 趟 比较6-2=4次 次 第3趟,比较 趟 比较6-3=3次 次 第4趟,比较 趟 比较6-4=2次 次 第5趟,比较 趟 比较6-5=1次 次
结论: 结论: 如果有n个数, 如果有 个数,则要进行 n-1趟 比较。 个数 趟 比较。 在第1趟比较中要进行 次两两比较 在第j趟比较中要进行 次 两两比较。 次两两比较, 在第 趟比较中要进行n-1次两两比较,在第 趟比较中要进行 n-j次 两两比较。 趟比较中要进行
C语言中,二维数组中元素排列的顺序是:按行存放,即在内存中先顺 语言中,二维数组中元素排列的顺序是:按行存放, 语言中 序存放第一行的元素,再存放第二行的元素。 序存放第一行的元素,再存放第二行的元素。
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");}
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/*ch5_1.c*/ #include <stdio.h> main() { int i,sum=0; 循环初值 i=1; loop: if(i<=100) { sum+=i; 循环变量增值 i++; goto loop; } printf("%d",sum); }
循环条件 sum=0+1 sum==1+2=3 sum=3+3=6 sum=6+4 …… sum=4950+100=5050 循环终值
例:#include<stdio.h> main( ) { int i=0; for(;i<10;i++) putchar(‘a’+i); }
例:#include<stdio.h> 例:#include<stdio.h> 运行结果:abcdefghij main( main( ) ) { {intint i=0; i=0; for(;i<10;) for(;i<10;putchar(‘a’+i),i++) ; putchar(‘a’+(i++)); } }
while 假(0) expr 真(非0) …… break; …… 真(非0)
do
…… break; …... while expr
假(0)
for expr1 switch 假(0) expr2 真(非0) …… break; …... const 1 语句组1 break; expr case const 2 语句组2 break; …... const n 语句组n break; default 语句组 break;
程序举例
t=1,pi=0,n=1.0,s=1 当|t|≥1e-6 pi=pi+t n=n+2 s=-s t=s/n pi=pi*4 输出pi 分子:1,-1,1,-1… 分母:1,3,5,7,... 1 3 5 7 ...
例 求Fibonacci数列:1,1,2,3,5,8,……的前40个数
f1=1,f2=1 for i=1 to 20 输出f1,f2 f1=f1+f2 f2=f2+f1
for(i=1;i<10;i++) for(j=1;j<10;j++) printf((j==9)?"%4d\n":"%4d",i*j);
i=1 假(0) i<10 真(非0)
外循环
j=1 j<10 假(0)
内循环
真(非0) printf j++
i++
6.6 辅助控制语句
break语句
功能:在循环语句和switch语句中,终止并跳出循 环体或开关体 说明: break只能终止并跳出最近一层的结构 break不能用于循环语句和switch语句之外的 任何其它语句之中
例 用while循环求
循环初值
循环变量增值
/*ch5_2.c*/ #include <stdio.h> main() { int i,sum=0; i=1; while(i<=100) { sum=sum+i; i++; } printf("%d",sum); }
循环条件
循环终值
循环体
例 显示1~10的平方
continue语句
for expr1 假(0) expr2 真(非0) ( 0) …… continue; …... 真(非0) …… continue; …... while expr do 假(0) expr 真(非0) …… continue; ……
功能:结束本次循环,跳过循环体中尚未执行的 语句,进行下一次是否执行循环体的判断 仅用于循环语句中
1 5 34 233 1597 10946 75025 514229 3524578 24157817
1 8 55 377 2584 17711 121393 832040 5702887 39088169
2 13 89 610 4181 28657 196418 1346269 9227465 63245986
expr3
例 break举例:输出圆面积,面积大于100时停止
#define PI 3.14159 main() { int r; float area; for(r=1;r<=10;r++) { area=PI*r*r; if(area>100) break; printf("r=%d,area=%.2f\n",r,area); } }
第六章 循环控制
6.1 6.2 6.3 6.4 6.5 6.6 循环型程序设计 goto语句构成循环 while语句 do…while语句 … for 语句 辅助控制语句
6.1 循环型程序设计
循环结构 当型循环结构
P 真 A 假 当P为真 A
直到型循环结构
假
A P 真
A 直到P为真
概述
C语言可实现循环的语句: 用goto 和 if 构成循环 while 语句 do ~ while 语句 for 语句
6.3 while语句
一般形式: while(表达式) 循环体语句;
执行流程:
while 假(0) expr 真(非0) 循环体
特点:先判断表达式,后执行循环体 说明: 循环体有可能一次也不执行 循环体可为任意类型语句 下列情况,退出while循环 条件表达式不成立(为零) 循环体内遇break,return,goto 无限循环: while(1) 循环体;
例 (f0r)梯形法求数值积分
y
f(x)
0
a a+h
a+ih a+(i+1)h
b x
Ch5_96.c
循环的嵌套
三种循环可互相嵌套,层数不限 外层循环可包含两个以上内循环,但不能相互交叉 嵌套循环的执行流程 外循环 嵌套循环的跳转 (3) while() (1) while() (4) for( ; ;) (2) do { …… 禁止: { …… { …… { …… while() do do do 从外层跳入内层 内循环 { …… 跳入同层的另一循环 { …… { …… { …… } }while(); }while( ); }while( 向上跳转 );
expr1 假(0) expr2 真(非0) 循环体 expr3
for语句一般应用形式: for(循环变量赋初值;循环条件;循环变量增值) { 循环体语句; } 说明: 例 用for循环求 for语句中expr1, expr2 ,expr3 类型任意,都可省略,但分 号;不可省 #include <stdio.h> 无限循环: for(;;) main() for语句可以转换成while结构
…... } …... }while( ); ……. } …… while() { …… } …... 内循环
}
例 循环嵌套,输出九九表
Ch5_5.c
i
j /*ch5_5.c*/ #include2<stdio.h> 4 1 3 5 6 7 8 9 main() 1 2 3 4 5 6 7 8 9 { int i,j; 2 4 6 8 10 12 14 16 18 for(i=1;i<10;i++) 3 6 9 12 15 18 21 24 27 printf("%4d",i); …………….. printf("\n---------------------------------------\n"); for(i=1;i<10;i++) 9 18 27 36 45 54 63 72 81 for(j=1;j<10;j++) printf((j==9)?"%4d\n":"%4d",i*j); }
循环体
例 从键盘输入一组数据,以0结束输入,求数据和
/*ch5_11.c*/ #include <stdio.h> main() { int number,sum=0; read_loop: scanf("%d",&number); if(!number) goto print_sum; sum+=number; goto read_loop; print_sum: printf("The total sum is %d\n",sum); }
while
expr3
假(0)
例 求输入的十个整数中正数的个数及其平均值
/*ch5_12.c*/ #include <stdio.h> main() { int i,num=0,a; float sum=0; for(i=0;i<10;i++) { scanf("%d",&a); if(a<=0) continue; num++; sum+=a; } printf("%d plus integer's sum :%6.0f\n",num,sum); printf("Mean value:%6.2f\n",sum/num); }
main() { int i,j,k; for(i=0,j=100;i<=j;i++,j--) { k=i+j; printf("%d+%d=%d\n",i,j,k); } } #include<stdio.h> #include <stdio.h> main() main() { char c; for(;(c=getchar())!='\n';) { int i,c; for(i=0;(c=getchar())!='\n';i+=3) printf("%c ",c); printf("%c ",i+c); } }