C语言第七讲
C语言第七讲 函数(2)
21
一、变量的存储空间分配概念
变量定义位置 变量的作用域 空间 (变量的使用范围)
变量的存储类别变量的生存期 时间
26
局部变量
二、变量的作用域——
局部变量(local variable)与全局变量(global variable)
例
void swap( ) { int t,x,y; t=x;x=y;y=t; } main() { int x=3,y=5; printf("x=%d,y=%d\n",x,y); swap( ); printf("x=%d,y=%d\n",x,y); }
斐波那契数列的递归方法实现。计算并输出斐波 那契数列的前7个数据。
1 当n =0, 1时
fib(n) =
fib(n-1)+ fib(n-2) 当n > 1时
int fib(int n) { if(n==0||n==1) return 1; else return fib(n-1)+fib(n-2); }
10
void main() { int n; for(n=11;n<=99;n++) if( absoluteprime(n) ) printf("%d\t",n); } /*判断一个数是否为绝对素数*/ int absoluteprime (int n) /*函数定义*/ { if(prime(n)==0) return 0; else if(prime(invert(n))==1) return 1; else return 0; }
C语言电子教案第七章指针和指针变量
C语言电子教案第七章指针和指针变量教学目标:1.了解指针的概念和作用;2.掌握指针变量的定义和使用;3.理解指针和数组之间的关系;4.能够通过指针来实现函数的传递和返回。
教学重点:1.指针和指针变量的概念;2.指针变量的定义和初始化;3.指针和数组的关系。
教学难点:1.如何理解和使用指针变量;2.如何利用指针实现函数的传递和返回。
教学准备:教学PPT、电脑、投影仪、编程软件教学过程:一、导入新课(5分钟)通过提问导入新课,引出指针的概念和作用。
学生回答问题后,教师简要介绍指针的基本概念,并给出指针的定义。
二、指针变量的定义和初始化(25分钟)1.指针变量的定义:指针是一个变量,用于存储一个变量的地址。
指针变量的定义格式为:数据类型*指针变量名;2.指针变量的初始化:可以通过给指针赋值,使其指向一个已存在的变量。
三、指针和数组的关系(20分钟)1.数组和指针的关系:数组名是一个指向该数组首元素的指针常量,可以通过指针来对数组进行操作;2. 数组名的使用:数组名可以当作指针变量来使用,例如:inta[5]; int *p = a; p就是一个指向a的指针。
四、指针作为函数参数(25分钟)1.指针作为函数参数:可以将指针作为函数的参数,通过指针对函数外部的变量进行修改;2.指针作为函数返回值:可以将指针作为函数的返回值,从函数中返回一个指向变量的指针。
五、综合练习(15分钟)通过综合练习来加深对指针和指针变量的理解和运用。
六、小结(5分钟)本节课主要学习了指针和指针变量的概念、定义和使用,以及指针和数组之间的关系。
指针的作用非常重要,通过指针可以对变量进行间接操作,可以更灵活地使用内存。
教学反思:本节课通过提问导入新课,引出了指针的概念,并逐步讲解了指针变量的定义和初始化、指针和数组的关系、指针作为函数参数和返回值的用法。
通过综合练习,学生对指针和指针变量的使用有了更深入的理解。
不足之处是教学时间安排不够合理,对于一些学生来说,难度略大,希望在后续教学中适当调整。
C语言第7讲嵌入式C与汇编语言混合编程
7.1 内嵌汇编器的使用
在C/C++程序中使用内嵌的汇编指令注意事项 程序中使用内嵌的汇编指令注意事项
对于内嵌汇编器可能会用到的寄存器, 对于内嵌汇编器可能会用到的寄存器,编译器自己会保存 和恢复这些寄存器,用户不用保存和恢复这些寄存器。 和恢复这些寄存器,用户不用保存和恢复这些寄存器。常 量寄存器CPSR和寄存器 和寄存器SPSR外,别的寄存器必须先赋值 量寄存器 和寄存器 外 然后再读取,否则编译器将会报错。如下例中, 然后再读取,否则编译器将会报错。如下例中,第一条指 令在没有给寄存器r0赋值前读取其值 是错误的; 赋值前读取其值, 令在没有给寄存器 赋值前读取其值,是错误的;最后一 条指令恢复寄存器r0的值 的值, 条指令恢复寄存器 的值,也是没有必要的
7.1 内嵌汇编器的使用
内嵌的汇编器和armasm的区别 的区别 内嵌的汇编器和
使用内嵌的 汇编器不能 通过寄存器 PC返回当前 返回当前 指令的地址
内嵌的汇编器不 支持伪指令LDR 支持伪指令 Rn,=expression可 可 以使用mov来代替 以使用 来代替
不支持标号 表达式
不支持ADR、 、 不支持 ADRL 伪指令
7.1 内嵌汇编器的使用
内嵌的汇编指令用法——标号 标号 内嵌的汇编指令用法
C/C++程序中的标号可以被内嵌的汇编指令使用。但 程序中的标号可以被内嵌的汇编指令使用。 程序中的标号可以被内嵌的汇编指令使用 是只有指令B可以使用 可以使用C/C++程序中的标号,指令 程序中的标号, 是只有指令 可以使用 程序中的标号 指令BL 不能使用C/C++程序中的标号。指令 使用 程序中的标号。 使用C/C++程 不能使用 程序中的标号 指令B使用 程 序中的标号时,语法格式如下所示: 序中的标号时,语法格式如下所示:
C语言程序设计数组
课程名称:C语言程序设计 课型与教法:讲授,经过程序扩展,进行对比学习 课时:2课时 讲课题目:
第7章 数组 基本教材:C语言程序设计(高等教育出版社)廖雷主编 教学目旳与要求:经过本章旳学习使学生了解数组旳意义和 基本概念,掌握数组旳定义和元素旳引用,掌握数组在实际 问题处理中旳应用。 教学难点:二维数组概念旳了解 教学要点:数组旳定义和元素旳引用、数据旳排序
例 int data[5a][;1]=7p8r.0in; tf(“%d”,a);
()
data[5]必=1p须0ri;nt/f/f(没o“r%p有(jrl=fi错n\n0t”;f误(j,<a“提[%120]醒d);;\j,t+使”,+a用)[j]时);要注意 () 5
第七章 数组
一维数组
一维数组旳初始化
int a[N]={7,3,2,5,9,1,6,10,4,8}; for(i=0;i<N-1;i++)
for(j=N-1;j>i;j--) if(a[j-1]>a[j]) { k=a[j-1]; a[j-1]=a[j]; a[j]=k; }
printf(“\n”); for(i=0;i<N;i++)
❖数组元素旳存储顺序
原二因维:数内组存例:是按i一nt行维a[序3旳]优[4]先; float b[2][5];
元素个数=行数*列数
例:int a[3]i[n2t]a[3,4];
a[0][0] a[0][1]
0 () a[0][0]
1
a[0][1]
2
a[1][0]
a[1][0] a[1][1] a[2][0] a[2][1]
一维数组旳引用
第七章 指针
指针
华厦职业学院
C语言程序设计
在这一章中将介绍C语言程序的指针,指针是 一内存中的地址,任何一个变量在内存中都有一个 空间,这个空间有一个地址,这个地址就是变量的 指针,通过指针可以实现对内存的直接访问。
华厦职业学院
C语言程序设计
8.1 8.2 8.3 8.4 8.5 8.6 8.7
指针概述 指针与函数参数 指针与数组 数组与函数参数 字符串与指针 指针与二维数组 动态数组
华厦职业学院
C语言程序设计
指针变量的赋值
指针变量是一个可以存储指针值的变量,在32位系 统中它占4个字节,可以把一个变量用&取地址后赋 值给这个指针变量,例如:
int a=1,*p; p=&a; 此时p存储了变量a的地址。注意变量p本身也是一个变量, 它自己也有一个存储单元,这个存储单元显然与变量a的 存储单元是不同的,变量a的存储单元存储的是变量a的值, 而变量p存储单元存储的是变量a单元的地址,如图7-3所 示。
华厦职业学院
C语言程序设计
通过指针访问变量
既然指针变量指向一个变量,因此通过指针变 量也就知道变量的位置,知道位置也就能访问到变 量,可以通过指针变量存取变量的值。
华厦职业学院
C语言程序设计
C中规定通过:
*指针变量 来访问对应变量的值,例如: • int a=1,b,*p; • p=&a; • *p=2; // 设置p指向的变量的值为2,既a=2 • b=*p; // 把p指向的变量的值赋予b,既b=2 在C语言中,系统对“*指针变量”的解释是根据指 针变量的类型计算出对应变量所占字节数,之后把指针变 量所指的连续的几个字节的二进制数据看成是与指针变量 同类型的数据并存取这一include <stdio.h> void fun(int *p,int b) { printf("fun中: p=%p *p=%d &b=%p b=%d\n",p,*p,&b,b); *p=100; b=100; } void main() { int a=1,b=2,*p; p=&a; printf("调用前: p=%p a=%d &b=%p b=%d\n",p,a,&b,b); fun(p,b); printf("调用前: p=%p a=%d &b=%p b=%d\n",p,a,&b,b); }
C语言(第七章数组)
对部分元素赋初值(前面的连续元素)。如: int b[10]={0,1,2,3,4};
表示数组元素的值为:
b[0]=0; b[1]=1; b[2]=2; b[3]=3; b[4]=4; 后5个元素的初值为0。
注意:不能只对不连续部分元素或后面的连续
元素赋初值。 语句: int a[10]={, , , , ,1,2,3,4,5};
main ( ) { int a[2] [3]={{1, 2,3},{4, 5,6}}; int b[3] [2], i, j; printf("array a: \n"); for (i=0; i<=1; i++) { for (j=0; j<=2; j++) { printf("%5d", a[i][j]); b[j][i]=a[i][j]; } printf("\n"); } printf("array b:\n"); for (i=0; i<=2; i++) { for (j=0; j<=1; j++) printf("%5d", b[i]j]); printf("\n"); } }
运行结果如下:
1
1
2
3
5
8
89
13
144
21
133
34
377
55
610
987
1597
1584
4181
6765
四、简单预处理指令
1. 指令格式:
#define 符号常量
2. 指令作用
文本串
用整型表达式替换程序中所有的符号常量。
07 第七讲 C语言的三种语句结构--力天手把手教你学单片机之基础篇
手把手教你学51单片机——之MCS-51基础篇主讲: 尹延辉策划:张勇开发板:LT-Super51QQ群:31646346网址:E-Mail:litianmcu@litianmcu@基础篇第三讲——C语言的三种语句结构◆本讲内容提要●C语句概述●程序的三种基本结构●顺序结构程序设计●逻辑运算与位运算符●选择结构程序设计●循环结构程序设计●习题ABPA B假真PA真假温故知新——C的数据类型与表达式●C语言的数据类型:字符型、整型、长整型,有符号、无符号●51单片机存储器结构:ROM、片内RAM数据区、片外RAM ●C51的变量类型修饰符:code、data、idata、xdata●C运算符与表达式:优先级、结合性的概念●算术运算符与表达式:加、减、乘、除、取模●赋值运算符与表达式:一般赋值表达式、复合赋值符与表达式●C程序的流水灯验证:软仿的概念释疑解惑——C数据类型与表达式(1)◆填空题●char型、int型、long int型变量分别占用1、2、4字节存储单元。
●有以下语句:char a=‘0’;则变量a用十六进制表示的值为0x30。
●对于单片机型号STC89C58,具有256字节的片内用户数据区,其中的128字节定义的C变量需要用data修饰、128字节需要用idata修饰。
想要存储一个1K字节的液晶显示器字符表,需要在定义变量时在其前加code 修饰使得字符表变量位于片内ROM存储器内。
◆实验题●设有char a=10;写出下面表达式的值,并编写程序通过流水灯输出验证①a+=a:20②a-=12:-2③a*=3+a:130④a/=a+a:0——C语句概述◆C语句的定义●和其他高级语言一样,c语言的语句用来向计算机系统发出操作指令。
一个语句经编译后产生若干条机器指令。
一个实际的程序应当包含若干语句。
应当指出,c语句都是用来完成一定操作任务的。
声明部分的内容不应称为语句。
如:int a;不是一个c语句,它不产生机器操作,而只是对变量的定义。
C语言第七讲
•static(静态)型:存放在一般内存区域中,生命期长 •extern(外部)型:用于说明变量是外部的,而不能
用于定义一个变量。
8.8 局部量和全局变量
•局部变量:作用域仅仅局限于定义它的函数,在不
8.4 函数的调用
函数调用:就是一个函数(调用函数)调用另一个
函数(被调用函数) 。 调用前要先说明函数原型,即在调用函数的说明部分 按如下形式说明: 类型说明符 被调用函数名(含类型说明的形参表)
调用形式: 函数名(实参表) 嵌套调用:C语言不允许嵌套定义函数
但可以嵌套调用函数
递归调用:函数直接或间接调用自身
文件包含:是指一个源文件可以将另外一个指定的源文 编译预处理: 是C语言区别于其它高级语言的一个重要
编译预处理——文件包括
C语言编译系统中以“.h”为扩展名的文件称 为头文件,在使用C语言编译系统提供的库函数 进行程序设计时,经常需要在源程序中包含相应 的“头文件”,如“stdio.h”、“string.h”等 。 用C语言设计程序时,通常将全局变量的定 义、符号常量的定义、结构类型的定义以及函数 类型说明等语句放在头文件中。这样,对于需要 该文件的源程序来讲,都可以通过#include语句 将其包含到程序中。正确使用#include语句,将 会减少不必要的重复工作,提高编程效率。
“值传递”举例
main() 每调用一次返回一个值,调用结束立即释 函数原型:在函数使用前对函数的返 {float fc(); 放形参所占内存单元,下次调用重新分配 回类型和参数变量类型进行说明的语句 float sum; sum=fc(50)+fc(100)+fc(150)+fc(200); printf(“sum=%f ”,sum);} float fc(int n) {float s=0; int i; for(i=1; i<=n; i++) s+=1/(float)i; return(s);}
c语言 第7章 数组(4)
void sort( int b[],int k) {int i,j,t,flag; for (j=0;j<k-1;j++) {flag=0; for (i=0;i<k-j-1;i++) if (b[i]>b[i+1]) { t=b[i]; b[i]=b[i+1]; b[i+1]=t; flag=1; } if (flag==0) break; } }
上一页 下一页
for(i=0;i<26;i++) if(c[i]) {if(m%8==0)putchar('\n');m++; printf("%c: %-d ",i+'A',c[i]); } printf("\n"); for(i=0;i<26;i++) if(c[i+26]) {if(m%8==0)putchar('\n');m++; printf("%c: %-d ",i+'a',c[i+26]); } }
第四讲:
第 七 章 数组
7.1 7.2 7.3 7.4 7.5 7.6 一维数组 二维数组 数组的应用 字符数组与字符串 数组作为函数的参数 程序举例
7.5 数组作为函数的参数
数组作为函数参数主要有两种情况: 数组元素作为函数的实参:这种情况与普通变量 作实参一样,是将数组元素的值传给形参。形 参的变化不会影响实参数组元素,我们称这种 参数传递方式为“值传递”。 数组名作实参:要求函数形参是相同类型的数 组或指针,这种方式是把实参数组的起始地址 传给形参数组,形参数组的改变也是对实参数 组的改变,称这种参数传递方式为“地址传 递”。
c语言(7)
内容:
§6.5 循环嵌套
§6.6 break和continue语句
§6.7 循环结构程序举例
§6.5 循环的嵌套
一、 循环的嵌套
在一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。
二、循环嵌套结构的执行
外循环每执行一次,内循环执行一个周期。
k=sqrt(m);
for (i=2;i<=k;i++)
if (m%i==0) {flag=1;break;}
if (flag==0) /* 按flag的值判断m是否为素数 */
{if (n%5==0) printf("\n"); /*每行输出5个数据*/
printf("%8d",m); /*输出格式字符使用%8d是为了输出格式清晰*/
#include "math.h" /* 要使用数学函数,必须包含math.h头文件 */
main ()
{int s=1; /* 变量s用来存放每项的系数 */
float pi=0,n=1; /* 变量pi用来存放总和,n用来存放项数 */
while (1/(2*n-1)>=1e-6) /* 循环结束条件是当项值的绝对值小于0.000001 */
printf("\n");/* 内循环的第三个语句输出回车换行符 */
}
}
§6.6 break语句和continue语句
一、 break 语句
1. 格式: break;
2. 功能: 提前结束循环,从循环体中无条件跳出来,转到循环语句后面的语句执行。
全国计算机二级考试C语言 指针精讲
具有地址。对数组来说,数组名就是数组在内存中存放
的首地址;指针变量是用于存放变量的地址,可以指向 变量,当然也可存放数组的首地址或者数组元素的地址。
7.2.1
1。指针与一维数组
指针与数组
(1)若先定义一个一维数组,再定义一个指针变量,并将数 组的首地址传给指针变量,则该指针就指向了这个一维数组。 (2)一维数组的引用
7.1.4 指向指针的指针
1。指向指针的指针的定义形式:
类型标识符 **指针变量名 如:int **p; 即定义了一个指针变量p,且指向另一个指针变量,(该 指针变量又指向一个指针变量),是一个二级指针。 (1)由于指针运算符“*”是按至右向左的顺序结合的, 因此上述定义相当于: int *(*p); 可以看出(*p)是指针变量形式,它外面的“*‘表示p指 向的又是一个指针变量。
第2行第3列元素地址
第2行第3列元素的值 ……………
*(a+2)+3,a[2]+3,&a[2][3]
*(*(a+2)+3),*(a[2]+3), a[2][3] ……………
printf(“%d\n”,*p); }
【例2】:说出下列程序的功能。
main(0
{int *p1, *p2, i1, i2; scanf(“%d,%d”,&i1,&i2); p1=&i1; p2=&i2; printf(“%d,%d\n”,*p1,*p2);
p2=p1;
printf(“%d,%d\n”,*p1,*p2); } 运行情况:假设键盘输入为:10,20 10,20
e
e f pf
C语言程序设计第七章 利用数组处理数据
一维数组的存储: 计算机中用连续的内存单元存放各个元素。 如:int a[5];其内存存储为:
保存数组所需内存量与数组元素的基本类型和数组大小有关。 总字节数=sizeof(基本类型)*数组元素个数 如上例:= sizeof(int)*5 第i个元素的地址=第1个元素的地址+i*sizeof(基本类型)
类型说明符 数组名[常量表达式]={值,值……值}; 其中在{ }中的各数据值即为各元素的初值,各值之间用逗号 间隔。 例如:
int a[10]={ 0,1,2,3,4,5,6,7,8,9 }; 相当于a[0]=0;a[1]=1...a[9]=9;
整理课件
C语言对数组的初始化赋值还有以下几点规定:
有 5个元素。但是其下标从0开始计算。因此5个元素分别为
a[0],a[1],a[2],a[3],a[4]。
不能在方括号中用变量来表示元素的个数, 但是可以是符
号常数或常量表达式。
例如:
#define FD 5
main( )
{ int a[3+2],b[7+FD];
……
}是合法的。
但是下述说明方式是错误的。
for (i=0; i<=9;i++) a[i]=i;
for(i=9;i>=0; i--) printf("%d ",a[i]);
printf("\n"); return 0; }
使a[0]~a[9]的值为0~9 先输出a[9],最后输出a[0]
整理课件
一维数组的初始化
数组初始化赋值是指在数组定义时给数组元素赋予初值。 初始化赋值的一般形式为:
for(i=0;i<1;i++) if (a[i]>a[i+1]) { ……}
《C语言程序设计教程》全册教案教学设计
《C语言程序设计教程》全册教案完整版教学设计第一章:C语言概述1.1 教学目标让学生了解C语言的历史和发展背景让学生掌握C语言的特点和优势让学生了解C语言的应用领域1.2 教学内容C语言的历史和发展背景C语言的特点和优势C语言的应用领域1.3 教学方法讲解法:讲解C语言的历史和发展背景,讲解C语言的特点和优势讨论法:引导学生讨论C语言的应用领域1.4 教学评价课后作业:让学生编写简单的C语言程序,了解C语言的基本语法第二章:C语言基础语法2.1 教学目标让学生掌握C语言的基本语法,包括数据类型、运算符、表达式等让学生了解C语言的控制语句,包括条件语句、循环语句等2.2 教学内容数据类型、变量和常量运算符和表达式控制语句:条件语句、循环语句2.3 教学方法讲解法:讲解数据类型、变量和常量的定义和使用,讲解运算符和表达式的使用,讲解条件语句和循环语句的语法和功能编程实践:让学生编写C语言程序,运用所学的控制语句2.4 教学评价课后作业:让学生编写C语言程序,运用所学的数据类型、运算符和控制语句第三章:函数与编译预处理3.1 教学目标让学生掌握C语言的函数概念和定义方法让学生了解C语言的编译预处理指令3.2 教学内容函数的定义和声明编译预处理指令:include、define、宏定义和宏调用3.3 教学方法讲解法:讲解函数的定义和声明的语法和功能,讲解编译预处理指令的使用方法编程实践:让学生编写C语言程序,运用所学的函数和编译预处理指令3.4 教学评价课后作业:让学生编写C语言程序,运用所学的函数和编译预处理指令第四章:数组和字符串4.1 教学目标让学生掌握C语言的数组和字符串的概念和使用方法4.2 教学内容一维数组的定义和使用字符串的定义和使用4.3 教学方法讲解法:讲解一维数组的定义和使用的语法和功能,讲解字符串的定义和使用的语法和功能编程实践:让学生编写C语言程序,运用所学的数组和字符串4.4 教学评价课后作业:让学生编写C语言程序,运用所学的数组和字符串第五章:指针5.1 教学目标让学生掌握C语言的指针的概念和使用方法5.2 教学内容指针的概念和声明指针的赋值和使用指针与数组指针与函数5.3 教学方法讲解法:讲解指针的概念和声明的语法和功能,讲解指针的赋值和使用的语法和功能,讲解指针与数组和指针与函数的关系编程实践:让学生编写C语言程序,运用所学的指针知识5.4 教学评价课后作业:让学生编写C语言程序,运用所学的指针知识第六章:结构体、联合体和枚举6.1 教学目标让学生掌握C语言中的结构体、联合体和枚举的概念和使用方法。
中职C语言教案:专题七
环节
教学活动内容及组织过程
个案补充
教
学
内
容
程序填空 共1题 (共计20分)
第1题 (20.0分) 题号:79 难度:中 第1章
/*--------------------------------------------
题目:已知字符串subStr为str的子串,在母串str中找出subStr,在其前面插入一个'@'字符,需保持子串内容完整性。
for(j=n-1; j>i; j--)
{
s[j+2]=s[j];
}
s[++i]='|';
/***************FOUND****************/
s[++i]=c;
}
}
int main()
{
char s[100]="aaaacc333bkkkggggd";
printf("压缩前的数据: ");
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<ctype.h>
#include<stdlib.h>
void fun(char s[])
{
int i,j,n,c,k;
char ch;
for(i=0; s[i]; i++)
{
c=1;
例如:原字符串为"aaaacc333bkkkggggd",经过压缩处理后的字符串为
"a|4c|23|3b|1k|3g|4d|1"。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
求π的近似值 的近似值
的近似值, 求π的近似值,直到最后一项绝对值小 于10- 6
π 1 1 1 —— =1 - —— + —— - —— …… 4 3 近似值算法流程图 的近似值算法流程图
定义变量pi(和 分母 符号),t(项值 分母),s(符号 项值) 定义变量 和),n(分母 符号 项值 0→pi, 1→ n,1 →s
C语言电子教案(七) 语言电子教案( 语言电子教案
第七讲 第六章 循环控制
主要内容: 主要内容: §6.6 循环的嵌套 break和continue语句 §6.8 break和continue语句 §6.9 循环程序应用举例
1
§6.6 循环嵌套
一个循环体中又包含了另一个完整的循 环结构,叫做循环的嵌套。 环结构,叫做循环的嵌套。 三种循环结构可以互相嵌套。 三种循环结构可以互相嵌套。 循环嵌套的执行过程是: 循环嵌套的执行过程是:外循环执行一 次,内循环执行一个全过程。 内循环执行一个全过程。
1 2 4 5 7
n:1 :2 8 7 6 5 4 3
运行程序
9
循环结构程序举例: §6.9 循环结构程序举例:
连续级数求和 Fibonacci数列问题 Fibonacci数列问题 判断一个数是否为素数 求出100 200之间的所有素数 100~ 求出100~200之间的所有素数 译电报密码 人口及利率问题 穷举算法(百钱买百鸡) 穷举算法(百钱买百鸡) 循环做算术题
循环嵌套语句 运行程序 第二个语句是简单语句, 第二个语句是简单语句, 输出一个换行符
3
循环嵌套举例: 循环嵌套举例:输出一个图形 * ** *** ****
main( ) { int i, j; 外循环控制输出图形的行数*/ 外循环控制输出图形的行数 for( i=1 ; i<=4 ; i++ ) /*外循环控制输出图形的行数 内循环控制每行输出的数量*/ 内循环控制每行输出的数量 { for( j=1; j<=i ; j++ ) /*内循环控制每行输出的数量 printf("*"); 第一个语句是循环语句, 第一个语句是循环语句, printf("\n"); 实现输出若干个*号 实现输出若干个 号 } }
循环嵌套语句 第二个语句是简单语句, 第二个语句是简单语句, 输出一个换行符
运行程序
4
循环嵌套举例: 循环嵌套举例:输出一个图形 *** *** *** ***
main( ) { int i, j, k; 外循环控制输出图形的行数*/ 外循环控制输出图形的行数 for( i=1 ; i<=4 ; i++ ) /*外循环控制输出图形的行数 { for( j=1; j<=10+i ; j++ ) 第一个语句是循环语句, 第一个语句是循环语句, 实现输出若干个空格 printf(" "); for( k=1; k<=3; k++) printf("*"); 第二个语句是循环语句, 第二个语句是循环语句, 输出3个 号 输出 个*号 printf("\n"); } 第三个语句是简单语句, 第三个语句是简单语句, } 输出一个换行符
循环嵌套语句 运行程序
6
语句和continue语句 §6.8 break语句和 语句和 语句
break 语句 格式: 格式 break; 功能: 提前结束循环,从循环体中无条件 功能 提前结束循环 从循环体中无条件 跳转到循环语句后面执行。 跳转到循环语句后面执行。 可用于switch语句和循环结构中。 语句和循环结构中。 可用于 语句和循环结构中 continue语句 语句 格式: 格式 continue; 结束本次循环,即在本次循环中 即在本次循环中, 结束本次循环 即在本次循环中,不再 执行循环体中continue后面的语句。 后面的语句。 执行循环体中 后面的语句 只能用于循环结构。 只能用于循环结构。
N
| t | >=10-6
Y
pi=pi +s/(2*n-1) ; n++;s=-s;
pi=pi*4; 输出n和 的值 输出 和pi的值
12
的近似值程序1 求π的近似值程序 的近似值程序
main ( ) 存放符号, 存放和 存放和,n存放项数 存放符号 { int s=1; float pi=0,n=1; s存放符号,pi存放和 存放项数 while ( 1/(2*n-1) >= 1e-6) /* 循环结束条件是当项 值的绝对值小于10 值的绝对值小于 -6 */ { pi=pi+s/(2*n-1); /* 累加 */ /* 项数自加 */ 项数自加1 n++; /* 实现 的+1和-1交替出现 */ 实现s的 和 交替出现 s=-s; } pi=pi*4; printf("n=%.0f pi=%10f\n",n,pi); } n= 1000001 pi= 3.141594 掌握在循环体中实现正负相间的技巧
for (i=1;i<=20;i++) { printf("%12ld %12ld ",f1,f2); /* 每次输出 个项值 */ 每次输出2个项值 if (i%2==0) printf("\n"); f1=f1+f2; f2=f1+f2; } }
18
Fabonacci数列求值问题程序 数列求值问题程序1 数列求值问题程序
main ( ) { long f1,f2; int i; f1=1;f2=1;
/* 注意到 和f2要使用用长整型 */ 注意到f1和 要使用用长整型
/* 变量 和f2存放最近算出的两个项值 */ 变量f1和 存放最近算出的两个项值
r=4 area=50.27 即 r >10 或者 area >100。 。 r=5 area=78.54
定义一个符号常量PI 定义一个符号常量
8
continue语句的使用 语句的使用
之间所有不能被3整除的整数 整除的整数。 输出 1~7 之间所有不能被 整除的整数。
main( ) 观察 n 的值 { int n; for( n=1 ; n<= 7 ; n++ ) { if ( n%3==0 ) continue; printf("%5d", n ); } }
17
Fabonacci数列求值算法流程图 数列求值算法流程图1 数列求值算法流程图
定义变量f1,f2(项值 循环变量 项值),i(循环变量 定义变量 项值 循环变量) 1→f1, 1→f2
i=1;
i<=20
N
Y
输出2个项值 输出 个项值
Y
输出换行符
i%2==0
N
f1+f2 →f1 f2+f1 →f2 i++;
7
break语句的使用 语句的使用
计算半径为1~10的圆面积,面积大于100时停止。 的圆面积,面积大于 时停止。 计算半径为 的圆面积 时停止 #define PI 3.14159 main( ) 观察r 观察 和area的值 的值 { int r ; float area; r:2 6 :4 5 3 1 for( r=1 ; r<=10 ; r++ ) 113.10 area:12.57 78.54 28.27 3.14 :50.27 { area=r*r*PI; if(area>100) break; printf("r=%d\tarea=%.2f\n",r,area); } r=1 area=3.14 } r=2 area=12.57 运行程序 带有break;语句的 循环就有两个出口 语句的for循环就有两个出口 带有 语句的 r=3 area=28.27
pi=pi*4; 输出n和 的值 输出 和pi的值
15
的近似值程序2 求π的近似值程序 的近似值程序
main ( ) /* s存放符号 */ 存放符号 { int s=1; float pi=0,n=1,t=1; /* pi存放和 n 存放分母 t 存放项值 */ 存放和, 存放和 存放分母, while ( fabs( t ) >= 1e-6) /* 累加 */ { pi=pi+t; /* 分母加 */ 分母加2 n=n+2; s=-s; /* 实现 的+1和-1交替出现 */ 实现s的 和 交替出现 t=s/n; } /* 计算下一个项值 */ pi=pi*4; printf("n=%.0f pi=%10f\n",n,pi); } n=1000001 pi= 3.141594
运行程序
16
Fabonacci数列求值问题 数列求值问题
数列的各项值分别为: 数列的各项值分别为: 40项值 1,1,2,3,5,8,……,求它的前40项值。即这 ,求它的前40项值。 个数列的第1项和第2项值都是1 从第3项开始, 个数列的第1项和第2项值都是1,从第3项开始,每 一个项值都是它的相邻前2项的项值之和。 一个项值都是它的相邻前2项的项值之和。 这是一个兔子繁殖问题,如果第一个月有一对小兔 这是一个兔子繁殖问题, 子,而每一对小兔子都在出生两个月后每个月都繁 殖一对小兔子,问第n个月时有多少对兔子( 殖一对小兔子,问第n个月时有多少对兔子(即这 个数列的第n项的项值)。 个数列的第n项的项值)。
运行程序
13
的近似值程序1 求π的近似值程序 的近似值程序