谭浩强c语言授课课件第6章
c语言程序设计第6章(谭浩强)PPT版本
/*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;
清华大学谭浩强教授的C++教程第6章
行开头的int是指 第2行开头的 是指: 所定义的指针变量是指向整 行开头的 是指: 型数据的指针变量.也就是说,指针变量pointer_1 型数据的指针变量.也就是说,指针变量 只能用来指向整型数据(例如 和pointer_2只能用来指向整型数据 例如 和j),而 只能用来指向整型数据 例如i和 , 不能指向浮点型变量a和 .这个int就是指针变量 不能指向浮点型变量 和b.这个 就是指针变量 的基类型. 的基类型.指针变量的基类型用来指定该指针变量 可以指向的变量的类型. 可以指向的变量的类型. 定义指针变量的一般形式为
图6.6 (2) *&a的含义是什么?先进行 的运算,得a的 的含义是什么? 的运算, 的含义是什么 先进行&a的运算 的 地址,再进行*运算 运算, 所指向的变量, 地址,再进行 运算,即&a所指向的变量,*&a和 所指向的变量 和 *pointer_1的作用是一样的(假设已执行了 的作用是一样的( 的作用是一样的 ),它们等价于变量 "pointer_1=&a;"),它们等价于变量 .即*&a ),它们等价于变量a. 等价, 与a等价,见图 . 等价 见图6.7.
图6.7 输入a和 两个整数 按先大后小的顺序输出a 两个整数, 例6.2 输入 和b两个整数,按先大后小的顺序输出 和b(用指针变量处理 . 用指针变量处理). 用指针变量处理 解此题的思路是: 设两个指针变量p1和 , 解此题的思路是: 设两个指针变量 和p2,使它 们分别指向a和 . 指向a和 中的大者 中的大者, 指 们分别指向 和b.使p1指向 和b中的大者,p2指 指向 向小者,顺序输出*p1,*p2就实现了按先大后小的 向小者,顺序输出 就实现了按先大后小的 顺序输出a和 .按此思路编写程序如下: 顺序输出 和b.按此思路编写程序如下:
C语言谭浩强完整课件
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章循环控制ppt课件
第六章 循环控制
掌握循环的概念和分类 掌握while循环 掌握do while循环 掌握for循环 掌握循环的嵌套 掌握break和continue的用法 能够设计复杂的程序
最新版整理ppt
1
20.04.2021 20.04.2021
C语言程序设计
概述
C语言可实现循环的语句: ❖用goto 和 if 构成循环 ❖while 语句 ❖do ~ while 语句 ❖for 语句
#include <stdio.h> void main() { int i,sum=0;
scanf("%d",&i); while(i<=10) { sum+=i;
i++; } printf("%d",sum); }
最新版整理ppt
13
20.04.2021 20.04.2021
for语句
一般形式:
运行结果:abcdefghij 例:例#:in#cilnucdleu<dset<dsitod.iho>.h> mamina(in) ( )
{ {intiin=t0i=; 0;
20.04.2021 20.04.2021
forf(o;ir<(;1i<0;1p0u;t)char(‘a’+i),i++)
; putchar(‘a’+(i++));
❖无限循环: for(;;)
❖for语句可以转换成while结构
100
例 用for循环求 n n 1
#include <stdio.h>
main() { int i,sum=0;
修——C语言程序设计(第三版)第六章-谭浩强
Computer↙ (输入) 其作用是每读入一个字符后立即输出该字符,直到输入 Computer (输出) 一个“换行”为止。请注意,从终端键盘向计算机输入 时,是在按Enter键以后才将一批数据一起送到内存缓 冲区中去的。不是从终端键盘敲入一个字符马上输出一 个字符,而是按Enter键后数据送入内存缓冲区,然 后每次从缓冲区读一个字符,在输出该字符。
循环的嵌套
(4) while( ) (5) for(;;) {… {… do{…} while( ) while( ) { } {…} … } } (6) do {…
for(;;){ } … } while( )
流程的转移控制
• 转移语句用于改变程序的流向。 • C语言提供了4种转移语句: goto语句,break语句,cotinue语句,return语 句
注意: 当for语句中的各表达式省略时,分号间隔符不能少; 在循环体中应实现循环变量的增减和循环条件的判断, 否则成为死循环。
用for 语句实现循环 说明:
(6) 表达式1和表达式3可以是一个简单的表达式,也可 以是逗号表达式。
在逗号表达式内按自左向右顺序求解,整个逗号表 达式的值为其中最右边的表达式的值。
例1:输入3个整数,从小到大排列输出
(way2) #include<stdio.h> void main() {int a, b, c, max, min; scanf(“%d%d%d”, &a, &b, &c); if (a>b) {max=a; min=b;} else {max=b; min =a;} if (max<c) max=c; else if (min<c) min=c; printf (“%d, %d, %d \n”, min, a+b+c-max-min, max); }
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语言谭浩强完整课件
着广泛的应用。
计算机系统基本概念
计算机系统的组成
计算机系统由硬件系统和软件系统两大部分组成,硬件系统包括运算器、控制器、存储器 、输入设备和输出设备等五大部分;软件系统包括系统软件和应用软件两大类。
计算机的工作原理
计算机的工作原理可以概括为存储程序控制和程序控制流,即计算机通过执行存储在内存 中的程序来控制各部件协调工作。
在定义数组时,可以直接 对数组进行初始化,也可 以定义后再进行赋值。
一维数组的使用
通过下标访问数组元素, 下标从0开始,最大下标为 数组长度减1。
二维数组与多维数组
二维数组的定义
二维数组可以看作是一个 表格,由行和列组成,每 个元素都有两个下标。
二维数组的初始化
在定义二维数组时,可以 直接对数组进行初始化, 也可以定义后再进行赋值 。
scanf和printf函数都支持 格式化输入输出,可以通 过格式控制符指定输入输 出数据的类型和格式。
格式化输入
格式控制符
C语言提供了一组格式控制符,用于 指定输入输出数据的类型和格式,如 %d表示输入输出整数,%f表示输入 输出浮点数等。
格式化输入
格式化输出
使用printf函数进行格式化输出时, 可以指定输出数据的格式和显示方式 ,如控制小数位数、显示宽度等。
类型。
枚举常量的说明
在枚举类型定义中,可以列 出多个枚举常量,每个常量 对应一个整数值。默认情况 下,第一个枚举常量的值为0 ,后续常量的值依次递增1。
枚举变量的使用
声明枚举类型的变量后,可 以为其赋值。枚举变量的值 只能是枚举常量中定义的值 。使用枚举类型可以提高代 码的可读性和可维护性。
08
文件操作与数据处理
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语言课件 清华大学谭浩强版c6
§6.5 函数参数及其传递方式
形参与实参
形式参数:定义函数时函数名后面括号中的变量名 实际参数:调用函数时函数名后面括号中的表达式 说明:
实参必须有确定的值 形参必须指定类型 形参与实参类型一致,个数相同 若形参与实参类型不一致,自动按形参类型转换———函数 调用转换 形参在函数被调用前不占内存;函数调用时为形参分配内存; 调用结束,内存释放
运行结果:9,9
(main)
9 5 9 9 2000 2002
(swap)
2000 2002 ****
...
指针变量在使用前 必须赋值!
…...
整型变量a 整型变量b 指针pointer_1 指针pointer_2 指针p1 指针p2 指针p
函数说明
一般形式: 函数类型 函数名(形参类型 [形参名],….. ); 或 函数类型 函数名(); 作用:告诉编译系统函数类型,参数个数及类型,以便检验 函数定义与函数说明不同 函数说明位置:程序的数据说明部分(函数内或外) 下列情况下,可不作函数说明 若函数返值是char或int型,系统自动按int型处理 被调用函数定义出现在主调函数之前 有些系统(如Borland C++)要求函数说明指出函数返值类型和形 参类型,并且对void 和 int 型函数也要进行函数说明
无参函数 有参函数
使用库函数应注意: 1,函数功能 2,函数参数的数目和顺序,及各参数意义和类型 3,函数返回值意义和类型 4,需要使用的包含文件
Ch7_201.c
§6.2 函数的定义
一般格式
现代风格:
函数返回值类型 缺省int型 无返回值void
合法标识符
函数类型 函数名(形参类型说明表) { 说明部分 语句部分 } 例 例 有参函数(现代风格) 有参函数(现代风格) 例 无参函数 y) 例 x, int int max(int x,int y) max(int 空函数 printstar( ) dummy( ) { {int int z; z; { printf("**********\n"); } { } z=x>y?x:y; z=x>y?x:y; 或 return(z); return(z); printstar(void ) 函数体为空 } } { printf("**********\n"); }
c语言程序设计第五版课后答案谭浩强第六章习题答案
c语⾔程序设计第五版课后答案谭浩强第六章习题答案第六章:利⽤数组处理批量数据1. ⽤筛选法求100之内的素数【答案解析】素数:约数为1和该数本⾝的数字称为素数,即质数筛选法:⼜称为筛法。
先把N个⾃然数按次序排列起来。
1不是质数,也不是合数,要划去。
第⼆个数2是质数留下来,⽽把2后⾯所有能被2整除的数都划去。
2后⾯第⼀个没划去的数是3,把3留下,再把3后⾯所有能被3整除的数都划去。
3后⾯第⼀个没划去的数是5,把5留下,再把5后⾯所有能被5整除的数都划去。
这样⼀直做下去,就会把不超过N 的全部合数都筛掉,留下的就是不超过N的全部质数。
因为希腊⼈是把数写在涂腊的板上,每要划去⼀个数,就在上⾯记以⼩点,寻求质数的⼯作完毕后,这许多⼩点就像⼀个筛⼦,所以就把埃拉托斯特尼的⽅法叫做“埃拉托斯特尼筛”,简称“筛法”。
(另⼀种解释是当时的数写在纸草上,每要划去⼀个数,就把这个数挖去,寻求质数的⼯作完毕后,这许多⼩洞就像⼀个筛⼦。
)【代码实现】//⽤筛选法求100以内的素数#include<stdio.h>int main(){int i, j, k = 0;// 将数组汇总每个元素设置为:1~100int a[100];for (i = 0; i < 100; i++)a[i] = i+1;// 因为1不是素数,把a[0]⽤0标记// 最后⼀个位置数字是100,100不是素数,因此循环可以少循环⼀次a[0] = 0;for (i = 0; i < 99; i++){// ⽤a[i]位置的数字去模i位置之后的所有数据// 如果能够整除则⼀定不是素数,该位置数据⽤0填充for (j = i + 1; j < 100; j++){if (a[i] != 0 && a[j] != 0){//把不是素数的都赋值为0if (a[j] % a[i] == 0)a[j] = 0;}}}printf(" 筛选法求出100以内的素数为:\n");for (i = 0; i < 100; i++){//数组中不为0的数即为素数if (a[i] != 0)printf("%3d", a[i]);}printf("\n");return 0;}【运⾏结果】2. ⽤选择法对10个整数排序【答案解析】选择排序原理:总共两个循环,外循环控制选择的趟数,内循环控制具体选择的⽅式。
《C++面向对象程序设计》 谭浩强 第六章
C++
先声明基类point类,并调试之; 再声明派生类circle类,调试之; 最后声明cylinder类,调试之。
6- 5
① 先声明基类point
#include <iostream.h> class point //声明类point {public: point (float x=0, float y=0 ); //有默认值的构造函数 void setPoint (float, float); //设置点坐标 float getX ( ) const { return x; } // 读x 值 float getY ( ) const { return y; } // 读y 值 friend ostream & operator << ( ostream &, const point &); protected: float x,y; }; // 下面定义 point类的成员函数 point :: point (float a, float b) // point的构造函数 { x = a; y = b; } void point :: setPoint (float a, float b) { x =a; y = b; } ostream &operator << (ostream &output, const point &p) { // 重载运算符<< output<<“[x=“<<p.x<<“, y=“<<p.y<<“]”<<endl; return output; }
6Hale Waihona Puke 7③ 最后声明cylinder类
c++程序设计谭浩强第6章
第六章指针6.1 指针的基本概念(P164)一、地址1.内存单元的地址内存单元的基本单位是字节,为了方便对内存的访问,每一个内存单元都有一个编号,这个编号就称为内存单元的地址。
2.内存单元的内容内存单元中存放的数据即是内存单元的内容。
例:int i=9,j=6,k=5;说明:每当在程序中定义了变量,C编译系统就会根据变量的不同类型,在内存中为其分配相应字节数目的存储空间。
把变量在内存中所占存储单元的首地址,称为该变量的地址(Address)。
把变量在内存中所占存储单元中存放的数据,称为该变量的内容。
而在计算机内存中,对变量值的存取实质上是通过地址进行的。
134例6.1观察地址#include <iostream>using namespace std;int main(){ int x=55;cout<<"x="<<x<<endl;cout<<"x addres is :="<<&x<<endl;return 0;}3.“直接访问”与“间接访问”●按变量名存取变量值的方式称为“直接访问”。
●按变量地址的存放单元存取变量值的方式称为“间接访问”。
例如:(1) (直接访问)(2) (间接访问)二、指针与指针变量1.指针一个变量的地址称为该变量的“指针“。
说明:由于通过地址可以找到所需的变量单元,也即是说,地址“指向“该变量单元,因此,在C++中,将地址形象化地称为”指针“。
135136如:2000是变量i 的指针。
2.指针变量一种用来存放另一个变量地址值的特殊变量,....................其值是内存单元的地址。
........... 如:i_pointer所谓变量的指针就是变量的地址,而指针变量是用来存放变量的地址。
i_pointer i2000在指针变量与他所指向的变量之间存在着一种联系。
C语言程序设计_课件_第六章(适于清华谭浩强版)
int data[5]={1,2,3,4,5};
注意
(1) 允许初始化一部分元素,而不是全部。 int data[5]={1,2}; (2) 初始化数组时,允许省略数组的长度。 int data[]={1,2,3,4,5}; 与int data[5]={1,2,3,4,5};是完全等价的。 (3) 初始化数组时,不能对整个数组初始化。 例如,int data[5]=1;
程序段一: #Байду номын сангаасefine Size 5 main() { int a[Size],b[Size+10]; /*正确 … } 程序段二: main() { int n=5; int data[n]; /*错误 …… }
*/
*/
6.2.2 一维数组的引用 引用数组单元的一般形式为: 数组名[下标] 数组下标可以是整型变量或整型表达式, 但不能是浮点型的变量或浮点型表达式;并且 下标不能大于[数组长度-1],因为超过部分没 有被定义过,是不能正确使用的。 图。 例如:data[4]、data[i+j]、data[i++]都是 合法的引用方式。
地址二维数组在概念上是二维的,可以说 是数组的数组,二维数组的下标在行和列两个方 向变化。但是,计算机的内存是连续编址的,也 就是说存储器单元是按一维线性排列的。那么, 如何按照地址的顺序存放二维数组呢?一般有两 种方式来存储二维数组,第一种称为按行排列, 方法是先存储完第一行中的每个元素,再存放下 一行的每个元素;第二种称为按列排列,方法是 先存储完第一列中的每个元素,再存放下一列的 每个元素。C语言的编译系统采用按行排列。
每个数组在使用之前都需要定义。 定义数组的语法是: 数据类型说明符 数组名[数组长度];
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例6.7
Fibonacci问题 Fibonacci问题
Fiboacci数列: 1, 1, 2,3,5,8,13,21,43…… fibn=1 fibn=fib n-1+fib n-2
n=1,2 n>=3
迭带: 迭带:是一个不断用变量的旧值递推其新 值的过程。 值的过程。
for循环写Fibonacci数列程序 循环写Fibonacci 例: 用for循环写Fibonacci数列程序
int i=1; for (;i<=100;i++) sum+=i;
for (i=1;i<=100;) { sum+=i; i++; }
例6.6求π的近似值 π/4 ≈1-1/3+1/5-1/7+…… 近似程dio.h> #include<math.h> void main( ) { int s=1; double n=1.0, t=1,pi=0; while(fabs(t)>=1e-6) { pi+=t; n+=2; s=-s; t=s/n; } pi*=4; printf("pi=%lf\n“,pi); }
#include<stdio.h>
void main( )
{
int i=1,sum=0; do { sum+=i; i++; }while (i<=100); printf(“The is:%d\ ,sum); printf( The sum is:%d\n”,sum);
}
6.5 for语句
形式: for (表达式 表达式2;表达式 形式 表达式1;表达式 表达式3) 表达式 表达式 表达式 语句 流程图: 流程图
程序如下: 程序如下:
#include <stdio.h> void main( ) {char c; while ((c=getchar( ))!='\n') { if((c>='a' && c<='z') || (c>='A' && c<='Z')) { c=c+4; if(c>'Z' && c<='Z'+4 || c>'z') c=c-26; } printf("%c",c); } printf("\n"); }
break---中断语句 break---中断语句 --while
用在
do ……while for switch
从最近的循环体内跳出
从switch语句中跳出 语句中跳出
使程序从循环和switch中跳出,继续向下执行 中跳出, 使程序从循环和 中跳出
由用户输入一个数, 例6.8 由用户输入一个数,判断这个数是否 为素数(质数); 为素数(质数); 穷举法 素数的条件:除了 和其自身 素数的条件 除了1和其自身 不能被其它数所 除了 和其自身,不能被其它数所 整除 2---n-1 2---n/2 2---sqrt(n) ( )
u=m; v=n; 不为0 当r=u%v 不为0时, u=v; v=r;
最后的v 最后的v是最大公因子
#include<stdio.h> void main( ) { int u, v, r, m, n; printf(“Enter two positive intergers:”); scanf(“%d,%d”,&m,&n); u=m; v=n;
6 1 0 3 10
sum(和) 和
1 4 2 3
i (项) 项
while语句 6.3 while语句
while (条件表达式 条件表达式) 条件表达式 语句; 语句;
控制机理:当程序的流程到 控制机理: while结构时 结构时, 达while结构时,先对条件 表达式进行计算, 表达式进行计算,若其值为 ),便进入 “真”(非0),便进入 while结构 执行循环体, 结构, while结构,执行循环体, 否则跳过while结构;每执 否则跳过while结构; while结构 行完一次循环体都要再对条 件表达式计算一次, 件表达式计算一次,以决定 进入while while结构还是跳过 进入while结构还是跳过 while结构 结构。 while结构。
r=u%v; while (r!=0) { u=v; v=r; r=u%v; }
printf(“The gcd is %d:”,v); }
第6章
第6章 循环结构 章
C循环语句: while , do- while 和 for 语句
如何有效地完成重复工作? 如何有效地完成重复工作?
例6.2:求自然数1~100的和 .2:求自然数1~100的和 求自然数1~100
分析:本题需要用累加运算, 分析:本题需要用累加运算, 累加过程是一个循环的过程, 累加过程是一个循环的过程, 可以用循环语句实现
if(i>=k+1) { printf("%d ",m); n=n+1; } if(n%10==0) printf("\n"); } printf("\n"); }
continue语句举例
例6.11 将100-200之间不能被 整除的数输出 之间不能被3整除的数输出 之间不能被
#include<iostream.h> void main( ) {
6.12: 欧几里德算法: 例6.12: 欧几里德算法:求两 个正整数m,n m,n的最大公因子 个正整数m,n的最大公因子
算法模型:辗转相除法。 算法模型:辗转相除法。 原理: 原理:gcd(m, n)=gcd(n, m%n) 证明
用u表示被除数,v表示除数,r表示余 表示被除数, 表示除数, 算法描述为: 数,算法描述为:
例6.9:输出100-200中的所有素数 6.9:输出100-200中的所有素数 100 #include<stdio.h> #include<math.h> void main( ) { int m,i,k,n=0; for(m=101;m<=200;m=m+2) { k=sqrt(m); for(i=2;i<=k;i++) if(m%i==0) break;
作用:结束本次循环, 作用 结束本次循环,将流程转到下一次循环的入口 结束本次循环 形式:continue; 形式
break语句和continue语句的比较 break语句和continue语句的比较 语句和continue
while(……) ( ) { …… break …… }
while(……) ( ) { …… continue; continue; …… }
当从多重循环深处跳到循环外,使用 语句方便, 当从多重循环深处跳到循环外 使用goto语句方便,如果使 使用 语句方便 用break,则需要使用多次 ,
语句写1~100累加和程序 例 :用goto语句写 用 语句写 累加和程序
#include<iostream.h> void main( ) { int sum=0, i=1; loop: sum+=i; i++; if(i<=100) goto loop; cout<<"sum="<<sum<<endl; }
int i; for(i=100;i<=200;++i) { if(i%3==0) continue; cout<<i<<"\t"; }
}
•goto语句:自由转向语句 goto语句: 语句
作用:让程序的流程转到程序中的任何地方 作用 让程序的流程转到程序中的任何地方 形式: 形式 label: …… : …… goto label; ;
6.7 流程转向语句
•break语句 break语句 break
作用:中断 使程序从 使程序从switch语句或者循环体语 作用:中断,使程序从 语句或者循环体语 句中跳出,继续执行逻辑上的下一条语句 句中跳出 继续执行逻辑上的下一条语句 形式: 形式:break; ;
•continue语句:继续循环语句 continue语句: 语句
例如:求自然数1~100的和 1~100 例如 求自然数1~100的和 for (i=1; i<=100; i++) sum+=i;
等价于
i叫做循环变量 叫做循环变量
int i=1; while (i<=100) { sum+=i; i++; }
for循环写法灵活 for循环写法灵活
for (int i=1; i<=100; sum+=i,i++) ;
#include<stdio.h> #include<math.h> void main( ) {long int f1,f2; int i; f1=1; f2=1; for(i=1;i<=20;i++) { printf("%12ld %12ld",f1,f2); if(i%2==0) printf("\n"); f1=f1+f2; f2=f2+f1; } }
形式: 形式 do 循环体语句; 循环体语句 while (判断表达式 判断表达式); 判断表达式 流程图: 流程图
循环体语句
真