版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、何平 2022-4-141一一. 实验内容实验内容: 循环结构程序设计(循环结构程序设计(2)F 请见网站作业管理请见网站作业管理模块或公邮模块或公邮二二. 时间地点时间地点:F 1010月月3030日(本周四)晚上日(本周四)晚上8 8:00001010:0000, 逸夫楼二层机房。逸夫楼二层机房。三三. 要求要求: 请同学们完成实验后整理实验报告,并将实验报请同学们完成实验后整理实验报告,并将实验报告告于于1111月月3 3日日前前以附件形式通过网站作业管理模块提交以附件形式通过网站作业管理模块提交。何平 2022-4-142何平 2022-4-143例如:例如:编程编程, ,计算任意两个
2、正整数计算任意两个正整数x,yx,y的最大公约数及的最大公约数及最小公倍数。最小公倍数。定义变量定义变量x,y键盘输入键盘输入x,y调用调用f1(x,y)计算最大公约数计算最大公约数调用调用f2(x,y)计算最小公倍数计算最小公倍数输出结果输出结果主函数主函数 为了使程序结构为了使程序结构清晰,便于编写,需要清晰,便于编写,需要将程序按功能划分成一将程序按功能划分成一些相对独立、功能单一些相对独立、功能单一的子模块。的子模块。何平 2022-4-1441 1 模块化程序设计概述模块化程序设计概述 2 2 函数的声明、定义和调用函数的声明、定义和调用 3 3 函数的多级调用函数的多级调用 4 4
3、 变量的作用域和存储类别变量的作用域和存储类别 5 5 计算机随机模拟方法计算机随机模拟方法 6 6 编译预处理编译预处理 (简介简介)重点:重点:1:理解如何用函数模块构:理解如何用函数模块构造程序,清楚函数的分类造程序,清楚函数的分类2:掌握如何定义和调用函:掌握如何定义和调用函数并理解函数调用的机制数并理解函数调用的机制3:掌握变量的作用域和存:掌握变量的作用域和存储类别储类别4:掌握随机数的产生方法。:掌握随机数的产生方法。内容:内容:何平 2022-4-145预备内容预备内容 C C程序是由函数构成的,必须有且只能有一个程序是由函数构成的,必须有且只能有一个称为称为mainmain的
4、主函数,程序的执行是从的主函数,程序的执行是从mainmain函数的函数的第一条语句开始第一条语句开始。 如果把代码都写在如果把代码都写在main函数中,将使程序的函数中,将使程序的结构显得很庞大、混乱,结构不清晰。结构显得很庞大、混乱,结构不清晰。 为了使程序结构清晰,便于编写及调试,需要将为了使程序结构清晰,便于编写及调试,需要将程序按功能划分成一些相对独立、功能单一的子模块。程序按功能划分成一些相对独立、功能单一的子模块。何平 2022-4-146 复杂任务可以分解为若干子任务复杂任务可以分解为若干子任务子模块。子模块。 重复使用的程序段,将其进行独立设计,使计算重复使用的程序段,将其进
5、行独立设计,使计算机可以重复执行。如:机可以重复执行。如:a!+b!+c!a!+b!+c! 4.1 模块化程序设计概述模块化程序设计概述main( )f1( )f2( )f3( )f4( )f5( )f6( )图图4-1 4-1 程序模块结构图程序模块结构图函数:函数:可以完成一定功可以完成一定功能的程序模块。能的程序模块。分类:分类:标准库函数;标准库函数; 自定义函数。自定义函数。何平 2022-4-147引例引例 / /* *功能:计算两个实数中大的值功能:计算两个实数中大的值* */ /#include float fmax(float x , float y); / /* *函数说明
6、函数说明* */ /void main() float a , b , c; scanf( “%f,%f”, &a , &b ); c = fmax(a , b); / /* *函数调用函数调用* */ / printf( “max=%fn”, c ); float fmax(float x , float y) / /* *函数定义,完成两个数的比较,将函数定义,完成两个数的比较,将大的数返回大的数返回* */ / float z; z = x y ? x : y; return z;何平 2022-4-1481 1. .函数说明函数说明 说明格式为:说明格式为: 函数返回值
7、类型函数返回值类型 函数名函数名( (参数表参数表) ); #include float fmax(float x , float y); / /* *函数说明函数说明* */ /void main() float a , b , c; scanf( “%f,%f”, &a , &b ); c = fmax(a , b); printf( “max=%fn”, c ); 函数说明是一条语句函数说明是一条语句, ,它指出它指出函数返回值的类型函数返回值的类型、函数的名称函数的名称、函数要接收的函数要接收的参数的个数参数的个数、顺序顺序和和类型类型。 如果在一个函数中要调用另外如果
8、在一个函数中要调用另外一个函数,则在调用之前要对该一个函数,则在调用之前要对该函数进行说明。函数进行说明。如果函数定义出现在程序中首如果函数定义出现在程序中首次使用该函数之前,则不需要说次使用该函数之前,则不需要说明函数原型。明函数原型。何平 2022-4-1492.2.函数定义函数定义 函数定义的一般形式:函数定义的一般形式: 函数返回值类型函数返回值类型 函数名函数名( (形参表形参表) ) / /* *函数头函数头* */ / / /* *函数体函数体* */ / 说明部分说明部分 执行部分执行部分 float fmax(float x , float y) float z; z = x
9、 y ? x : y; return z;函数头函数头函数体函数体注意:注意:形参的值由实参形参的值由实参传递;传递;函数体中使用的函数体中使用的变量必须放在函变量必须放在函数体内定义。如数体内定义。如左侧的变量左侧的变量z z何平 2022-4-14103.3.函数调用函数调用 函数调用的一般形式为函数调用的一般形式为: 函数名(实参表)函数名(实参表); ; void main() float a , b , c; scanf( “%f,%f”, &a , &b ); c = fmax(a , b); printf( “max=%fn”, c ); 可用两种方式调用函数:可
10、用两种方式调用函数:(1) (1) 函数的调用原则上可以在函数的调用原则上可以在允许表达式出现的任何地方。允许表达式出现的任何地方。如:如: c=fmax( a , b );(2) 函数调用可以作为一条独函数调用可以作为一条独立的语句。比如,有函数定义立的语句。比如,有函数定义:void print ( ) printf(“*”);则可以把该函数调用作为一个则可以把该函数调用作为一个独立语句。独立语句。 print ();何平 2022-4-14114.函数返回值函数返回值 函数返回值的类型是由函函数返回值的类型是由函数说明中的函数返回类型数说明中的函数返回类型决定的。决定的。 如果返回的类型
11、与函数说如果返回的类型与函数说明的不同,则在返回值时,明的不同,则在返回值时,先作隐含的类型转换,然先作隐含的类型转换,然后再返回。后再返回。 #include int fmax(float x , float y) return x y ? x : y;void main() float max; max = fmax(3.5 , 2.6); printf( “max=%.2fn” , max); 结果结果?何平 2022-4-1412 形式参数:形式参数:定义函数时放定义函数时放在函数名称之后括号中的在函数名称之后括号中的参数,简称形参。参数,简称形参。 实际参数:实际参数:调用函数时括调
12、用函数时括号中的参数,简称实参。号中的参数,简称实参。 形参与实参的结合:形参与实参的结合:函数函数在调用时,将生成实参值在调用时,将生成实参值的一个副本传递给对应的的一个副本传递给对应的形参,这个过程称为形参形参,这个过程称为形参与实参的结合。如果只允与实参的结合。如果只允许实参向形参传递数据,许实参向形参传递数据,则被称为则被称为“单向传递单向传递”。实参实参a实参实参b形参形参x形参形参y5.形参和实参形参和实参 #include float fmax(float x , float y) return x y ? x : y;void main() float max,a,b; sca
13、nf(“%f,%f”,&a,&b); max = fmax(a , b); printf( “max=%.1fn” , max); 2.63.5 max3.5单向传递单向传递3.52.6何平 2022-4-14136.函数的调用过程函数的调用过程 #includefloat fmax(float,float);void main() float a , b , c; scanf( “%f,%f”, &a , &b ); c = fmax(a , b); printf( “max=%fn”, c);float fmax(float x , float y) flo
14、at z; z = x y ? x : y; return z;为形参分配内存并为形参分配内存并将实参的值传给形将实参的值传给形参变量参变量型 参 释 放 存型 参 释 放 存储空间储空间, ,返回返回调用处调用处何平 2022-4-14147.7.带自定义函数的程序设计带自定义函数的程序设计 程序设计思路:程序设计思路:(1)(1)定义一个函数定义一个函数fun(int a)判判断断a是否为素数,若是素数,是否为素数,若是素数,函数返回函数返回1 1,否则返回,否则返回0 0。 int fun(int a) int i; for(i=2;i=a-1; i+) if (a % i = 0) r
15、eturn 0; return 1;(2)在主函数中输入一个整数,调用在主函数中输入一个整数,调用fun函函数,如果函数值为数,如果函数值为1 1,则打印是素数,则打印是素数,否则打印不是素数。否则打印不是素数。void main() int x; printf (请输入一个整数请输入一个整数:); scanf (%d , &x); if ( fun (x) ) printf (%d是素数是素数 , x); else printf (%d不是素数不是素数 , x);【例例5-25-2】从键盘输入一个整数,判断该整数是否为素数。从键盘输入一个整数,判断该整数是否为素数。#includev
16、oid main( ) int x,i; scanf(%d,&x); for (i=2; i=x) printf (“%d 是一个素是一个素数数,x); else printf (“%d 不是一个素数不是一个素数,x); #include 何平 2022-4-1415练习练习1 1:求:求a!+b!+c!(a!+b!+c!(已知已知a,b,ca,b,c为大于为大于0 0,小于,小于等于等于10,10,其值由键盘输入。)其值由键盘输入。)#includeint f(int n) int i , p=1; for(i=1;i=n;i+) p*=i; return(p); void main
17、() int a,b,c , s; scanf(“%d,%d,%d”, &a,&b,&c); s=f(a)+f(b)+f(c);printf(“nsum=%d”,s); void main() int j,y, s=0; for(j=1;j=3;j+) scanf(“%d”,&y); s+=f(y); printf(“nsum=%d”,s);何平 2022-4-1416练习练习2 2:利用函数调用方式编程,计算:利用函数调用方式编程,计算m,nm,n的最的最大公约数。大公约数。#include void gcd(int , int); void main()in
18、t m,n;scanf(“%d,%d”,&m,&n);gcd(m,n);/ /* *完成完成x,yx,y最大公约数的处理最大公约数的处理* */ /void gcd(int x,int y)int r ; if(xy)r=x;x=y;y=r; r =x%y; while(r!=0) x=y; y=r ; r=x%y ; printf(“n%d”,y); 何平 2022-4-1417练习练习3 3:计算:计算3 3100100之间素数平方根的累加和。之间素数平方根的累加和。#include#includeint f(int); void main() int n; double
19、s ; for (s=0,n=3;n=100;n+) if ( f (n) ) s+=sqrt (n) ; printf (“素数累加和素数累加和:%.2f”,s);/ /* *f(x)f(x)判断判断x x是否是素数是否是素数* */ /int f (int x) int i ; for (i=2;ix;i+) if (x%i=0) return 0; return 1; 何平 2022-4-14181.1.嵌套调用嵌套调用 【例例5-5】请阅读源程序,写出运行结果。请阅读源程序,写出运行结果。 #include void f1(void); void f2(void); void f3(v
20、oid); void f4(void); void main() printf(“现在调用主函数!现在调用主函数!n”); f3(); f4(); void f1(void) printf(“调用函数调用函数f1f1!n”); void f2(void) printf(“调用函数调用函数fun2fun2!n”); void f3(void) printf(“调用函数调用函数f3f3!n”); f1(); void f4(void) printf(“调用函数调用函数f2f2!n”); f1(); f2();何平 2022-4-1419嵌套函数的调用关系嵌套函数的调用关系 void main( )
21、 f3( ); f4( ); void f3( ) f1( ); void f2( ) 注意注意:C语言函数可以嵌套调语言函数可以嵌套调用,但不可以对函数进行嵌套用,但不可以对函数进行嵌套定义定义不能在函数中定义函不能在函数中定义函数。数。 void f4( ) f1( ); f2( ); void f1( ) 何平 2022-4-14201.1.嵌套调用嵌套调用( (续)续) 【例例5-5】编写函数编写函数fmax( ),fmax( ),实现从三个数中求出最大值,并在实现从三个数中求出最大值,并在mainmain函数中调用函数中调用fmax( )fmax( )完成最大值的输出。完成最大值的输
22、出。程序设计思路:程序设计思路:(1)(1)定义一个函数定义一个函数fmax(int x,int y,int z),调用调用f()函数,得到最大值。函数,得到最大值。 int fmax(int x,int y,int z ) int max; max=f (x,y,z); return max ;(2)在在f (int a,int b,int c)函数中比较函数中比较大小,将最大值作为函数的返回大小,将最大值作为函数的返回值,返回给值,返回给fmax函数。函数。 int f (int a, int b, int c) int max; max=a; if (bmax ) max=b; if (
23、cmax) max=c; return max;#include int f(int,int,int);何平 2022-4-14211.1.嵌套调用(续)嵌套调用(续) (3)(3)在主函数在主函数main中,中,进行进行fmax函数的调用。函数的调用。 void main( ) int a,b,c; scanf(“%d,%d,%d”,&a,&b,&c); printf (“最大值:最大值:%d”, fmax(a,b,c ) );int fmax(int x,int y,int z ) max=f (x,y,z); return max ; int f ( int a,
24、int b, int c)return max;何平 2022-4-14222.2.递归调用递归调用 当函数被调用过程中,又出现直接或间接调当函数被调用过程中,又出现直接或间接调用该函数本身,被称为函数的递归调用。用该函数本身,被称为函数的递归调用。#includelong f (int n)long s; if (n=1)|(n=2) s=2; else s=n+f (n-1); return s; void main() long x; x=f (4); printf(“%ldn”,x);结果:结果:何平 2022-4-1423#include int f (int x) int y; i
25、f (x=0|x=1) return 3; y=x*x-f(x-2); return y; void main() int z; z=f (3); printf(“%dn”,z);结果:结果:6示例示例: 请阅读下列源程序,写出运行结果。请阅读下列源程序,写出运行结果。何平 2022-4-1424#include int fun (int n) if (n=1) return 1; else return (n+fun(n-1); void main() int x; scanf(“%d”,&x); x=fun (x); printf(“%dn”,x);结果:结果:示例示例: 下列程序
26、执行时下列程序执行时,键盘输入键盘输入10,则程序的输出结则程序的输出结果是果是?何平 2022-4-1425#include int f (int x, int y) return (y-x)*x); void main() int a=3,b=4,c=5,d; d=f(f(a,b),f(a,c); printf(“%dn”,d);结果:结果:练习练习1: 有以下程序,运行后的输出结果是有以下程序,运行后的输出结果是?何平 2022-4-1426#include int f (int x, int y) if (x=y) return x; else return (x+y)/2; void
27、 main() int a=4,b=5,c=6; printf(“%dn”, f(2*a,f(b,c);结果:结果:练习练习2: 有以下程序,运行后的输出结果是有以下程序,运行后的输出结果是?思考思考: 请利用递归调用编请利用递归调用编程计算程计算m,n的最大公的最大公约数。约数。何平 2022-4-1427复习小结:复习小结: 强调强调C语言源程序的构成、运行的规则;语言源程序的构成、运行的规则; 函数的概念;函数的概念; 自定义函数的定义、调用等基本的概念及用法。自定义函数的定义、调用等基本的概念及用法。 自定义函数的说明自定义函数的说明在什么地方说明;在什么地方说明;如何说明(说明些什么
28、?);如何说明(说明些什么?);何平 2022-4-1428(1) (1) 变量的作用域变量的作用域:指变量的作用范围,分为全局变:指变量的作用范围,分为全局变量和局部变量。可以简单理解为定义在量和局部变量。可以简单理解为定义在 和函数参和函数参数列表中的变量就是数列表中的变量就是局部变量局部变量;定义在函数体外的变;定义在函数体外的变量叫做量叫做全局变量全局变量。(2) (2) 存储类别存储类别:变量的另一个重要属性:变量的另一个重要属性变量的生命变量的生命期,即变量存在的时间。分为期,即变量存在的时间。分为静态存储变量静态存储变量和和动态存动态存储变量储变量。1.1.基本概念基本概念 何平
29、 2022-4-14291.1.基本概念(续)基本概念(续)变量的存储器类别变量的存储器类别寄存器寄存器静态存储区静态存储区 内存内存动态存储区动态存储区CPUCPU存放程序的全局数据和存放程序的全局数据和静态数据。分配在静态静态数据。分配在静态存储区中的变量的生命存储区中的变量的生命期最长,在程序的整个期最长,在程序的整个活动期中,这些变量始活动期中,这些变量始终占用静态存储区中对终占用静态存储区中对应的存储空间。应的存储空间。存放局部变量。分配存放局部变量。分配在动态存储区中的变在动态存储区中的变量只有在所定义的函量只有在所定义的函数被调用时才分配存数被调用时才分配存储单元,函数结束时储单
30、元,函数结束时就释放。就释放。提高程序的运行提高程序的运行效率。效率。何平 2022-4-1430 局部变量局部变量:在块内定义的变量及所有的形参变量。:在块内定义的变量及所有的形参变量。 局部变量作用域局部变量作用域:块内定义、块内使用。所谓块内是指一对:块内定义、块内使用。所谓块内是指一对以以 为界限的若干个语句,例如函数体、复合语句。而块内为界限的若干个语句,例如函数体、复合语句。而块内使用,是指使用,是指变量的作用范围变量的作用范围仅仅局限在从变量定义处开始、仅仅局限在从变量定义处开始、到变量定义所在的那个块结束到变量定义所在的那个块结束。如:void main() int n; /*
31、/void func(int x,int y) int n; /*/2.2.局部变量及存储类别局部变量及存储类别 局部于局部于mainmain的局的局部变量部变量局部于局部于funcfunc的局部变量的局部变量局部于局部于funcfunc的局部变量的局部变量何平 2022-4-1431 注意注意:形式参数也为局部变量,其作用范围是形式:形式参数也为局部变量,其作用范围是形式参数所在的整个函数。例如:参数所在的整个函数。例如:void main() printf(“%d,%d”,x , y); /*error*/ /*/void func(int x , int y) /*/何平 2022-4-
32、1432 局部变量的存储类别局部变量的存储类别 :CPUCPU寄存器寄存器内内存存静态存储区静态存储区动态存储区动态存储区registerregister int a; int a;autoauto float b; float b;staticstatic int c; int c;格式:格式: 存储类别存储类别 类型标识符类型标识符 变量名变量名; ;何平 2022-4-1433【例例5-10】局部变量存储方式举例,分析下面程序运行结果:局部变量存储方式举例,分析下面程序运行结果:/ /* *功能:局部变量存储方式示例功能:局部变量存储方式示例* */ /#includeint f1( i
33、nt ), f2( int );void main() int i; for(i = 2 ; i 5 ; i+) printf (f1(%d) = %d t , i , f1( i ) ); printf(n); for(i = 2 ; i 5 ; i+) printf (f2(%d) = %d t , i , f2( i ) ); printf(n);int f1( int x ) int f = 1; f *= x; return f;int f2( int x ) static int f = 1; f *= x; return f; 结果为结果为: f1(2)=2 f2(2)=2f2(
34、3)=6f2(4)=24f1(3)=3f1(4)=4何平 2022-4-1434练习练习1:阅读下列程序阅读下列程序. int f(int a)int b=0; static int c=3; b=b+1; c=c+1; return(a+b+c);#include int f(int); void main() int a=2,j; for(j=0;j3;j+) pintf(“%4d”,f(a);问题:问题:若在若在main()main()中引用变量中引用变量c c,会出现什么结果?,会出现什么结果?结果:结果:7 8 97 8 9何平 2022-4-1435说明:说明: 静态变量在静态变量
35、在编译时编译时被赋值,若没赋值,系统自动赋被赋值,若没赋值,系统自动赋0,0,而且只赋一次初值;动态变量则在而且只赋一次初值;动态变量则在运行时运行时被赋值,若被赋值,若没赋值,取一个不确定的值。没赋值,取一个不确定的值。 如果函数被多次调用,其中的静态变量将如果函数被多次调用,其中的静态变量将保留保留前一次前一次的计算值,动态变量因存储单元被释放而的计算值,动态变量因存储单元被释放而不能保留不能保留前前次的值。次的值。何平 2022-4-1436#includevoid print(int);void main() int i; printf(“键入首行键入首行 * * 数数:); scan
36、f(%d,&i); if (i=80) printf(“数据非法数据非法, ,运行运行结束结束n”); else print(i); void print(int i) int j; static int k=1; for(j=0;jk;j+) printf( ); for(j=0;ji;j+) printf(* ); printf(n); k+=1; i-; if (i!=0) print(i); 练习练习2 2: :阅读下列程序阅读下列程序.(.(输入输入4 4回车回车) )何平 2022-4-1437在屏幕上显示如下图形(运行时由键盘输入在屏幕上显示如下图形(运行时由键盘输入8
37、8):):何平 2022-4-1438 全局变量全局变量:函数外定义的变量。:函数外定义的变量。 全局变量作用域全局变量作用域:从变量定义处开始到所定义的源文件结束:从变量定义处开始到所定义的源文件结束处,即从全局变量定义所在处开始到源文件结束处之间的所处,即从全局变量定义所在处开始到源文件结束处之间的所有函数都可以访问该变量有函数都可以访问该变量。如:int n=1;void main() /*/float m;void func() /*/2.2.全局变量及存储类别全局变量及存储类别 何平 2022-4-1439 变量的属性变量的属性作用域作用域存储类别存储类别数据类型数据类型变量名变量名
38、何平 2022-4-1440【例例5-11】全局变量的作用域举例,分析下面程序运全局变量的作用域举例,分析下面程序运行结果。行结果。#includevoid sp(void); int a , b; void main() scanf(%d%d,&a,&b); printf(交换前的交换前的 a a和和 b b是是%d,%dn , a , b); sp(); printf(交换后的交换后的 a a和和 b b是是%d,%dn , a , b);void sp() int t; t = a; a = b; b = t; /*使用的变量名使用的变量名 a a和和b b全局变量全局变
39、量 a a和和 b b*/何平 2022-4-1441【例例5-125-12】分析下面程序运行结果:分析下面程序运行结果: #include int i = 1; / /* *变量变量i i定义在所有函数之外,属于全局变量定义在所有函数之外,属于全局变量* */ / int fun(void); void main() printf(“主函数中访问的变量主函数中访问的变量 i:%dn , i); i = fun ( ) + 1; printf(“主函数中访问的变量主函数中访问的变量 i:%dn , i); int fun ( ) int i; printf(“ fun 中访问的变量中访问的变量
40、 i:%dn , i); i = 2; printf(“ fun 中访问的变量中访问的变量 i:%dn , i); return( i ); 主函数中访问的变量主函数中访问的变量 i i:1fun 中访问的变量中访问的变量 i:28345fun 中访问的变量中访问的变量 i:2主函数中访问的变量主函数中访问的变量 i:3局部变量与全局部变量与全局变量同名时的处理:局变量同名时的处理:小范围优先。小范围优先。何平 2022-4-1442练习练习: :阅读下列程序阅读下列程序#includeint a=3,b=5;int max(int a,int b) int c; c=ab?a:b; retu
41、rn c; void main() int a=8; printf(“%d”,max(a,b);结果:结果:8注意:注意:滥用全局变量会给程序带滥用全局变量会给程序带来许多弊病。来许多弊病。1:使程序的清晰性降低;:使程序的清晰性降低;2:函数的灵活性降低;:函数的灵活性降低;3:存储空间的利用率低。:存储空间的利用率低。何平 2022-4-1443 全局部变量的存储类别全局部变量的存储类别 :静态全局变量静态全局变量:使用关键字:使用关键字 staticstatic定义定义 的全局变量是的全局变量是文件内部的全局变量。文件内部的全局变量。 特点:特点:只能被定义所在的源文件中的所有函数访问,
42、同一程只能被定义所在的源文件中的所有函数访问,同一程序的其它源文件中的函数都不能访问该变量。序的其它源文件中的函数都不能访问该变量。非静态全局变量非静态全局变量:使用缺省关键字的全局变量。:使用缺省关键字的全局变量。 特点:特点:则该变量不仅能被定义所在的源文件中的所有函数访则该变量不仅能被定义所在的源文件中的所有函数访问,而且组成程序的其它源文件中的所有函数也都能访问该问,而且组成程序的其它源文件中的所有函数也都能访问该变量。因此,从作用范围看,缺省关键字的全局变量要比使变量。因此,从作用范围看,缺省关键字的全局变量要比使用关键字用关键字 static 的静态全局变量的作用范围大的静态全局变
43、量的作用范围大。何平 2022-4-1444源文件1函数n函数2函数1源文件m源文件2一个C程序 一个C程序的源文件.何平 2022-4-1445示例示例1:一个完整的程序包括:一个完整的程序包括:文件文件f1.cpp 文件文件f2.cpp#includeint a,f(int);void main( ) scanf(“%d”,&m); d=f(m); int f(int n) a=a+n; return a; extern int a;注意:注意:在多个文件的程序中在多个文件的程序中声明外部变量,则可将被声声明外部变量,则可将被声明的全局变量明的全局变量(非静态全局变非静态全局变量)
44、的作用域扩展到本文件。量)的作用域扩展到本文件。(示例(示例1)何平 2022-4-1446示例示例2:2:#includeint max(int x,int y) int z; z=xy?x:y; return(z); void main() printf(“%d”,max(a,b);int a=13,b=-8;extern int a,b;注意:注意:在一个文件内声明全在一个文件内声明全局变量,则可从局变量,则可从“声明声明”处处起,合法地使用该外部变量。起,合法地使用该外部变量。(示例(示例2)何平 2022-4-1447【例例5-14】编写一个投掷骰子的程序,模拟编写一个投掷骰子的程序
45、,模拟1010次,输次,输出每次投掷的点数。出每次投掷的点数。分析分析: 骰子一共有六个面,每个面的点数分别为骰子一共有六个面,每个面的点数分别为16 如何产生如何产生16的数值?的数值?何平 2022-4-1448 rand()函数可随机生成函数可随机生成0RAND_MAX之间的一个整数之间的一个整数。RAND_MAX是头文件是头文件中定义的一个符号常量中定义的一个符号常量。ANSI规定规定RAND_MAX的值不小于的值不小于32767。 根据下面公式可以得到所需范围内的随机数根据下面公式可以得到所需范围内的随机数: n = a + rand () % b 其中其中a a为位移,是所需连续整
46、数范围的第一个数,为位移,是所需连续整数范围的第一个数,b b是比例因是比例因子,是所需连续整数范围的宽度,则希望产生子,是所需连续整数范围的宽度,则希望产生1-61-6之间随之间随机数的公式为:机数的公式为: n = 1 + rand () % 6 希望产生希望产生0 01 1之间随机数的公式为之间随机数的公式为: n = rand () %21.1.伪随机数的产生伪随机数的产生 何平 2022-4-1449【例例5-14】编写一个投掷骰子的程序,模拟编写一个投掷骰子的程序,模拟1010次,输次,输出每次投掷的点数。出每次投掷的点数。#include #include void main()
47、 int i;printf(“n”); for(i = 1 ; i = 10 ; i+) printf(%3d , 1 + rand () % 6 );结果:结果:6 6 5 5 6 5 1 1 5 3第二次运行:第二次运行:6 6 5 5 6 5 1 1 5 3使用使用srandsrand函函数,通过提供不同数,通过提供不同的种子产生不同的种子产生不同的随机数序列。的随机数序列。srand (x); /*初始化随机数发生器初始化随机数发生器* */ / unsigned x; scanf(“%u”,&x); / /* *输入一个非负的整数做种子输入一个非负的整数做种子* */ /16
48、161 3 4 3 5 6 5 2 6 21 3 4 3 5 6 5 2 6 233333 1 5 3 5 6 5 4 1 53 1 5 3 5 6 5 4 1 516161 3 4 3 5 6 5 2 6 21 3 4 3 5 6 5 2 6 2何平 2022-4-1450【例例4-14】编写一个投掷骰子的程序,模拟编写一个投掷骰子的程序,模拟1010次,输出次,输出每次投掷的点数。每次投掷的点数。#include #include void main() int i;printf(“n”); for(i = 1 ; i = 10 ; i+) printf(%3d , 1 + rand ()
49、 % 6 );结果:结果:3 4 5 3 3 1 4 3 1 5再次运行:再次运行:4 4 3 2 3 5 5 3 2 3srand (x); /*初始化随机数发生器初始化随机数发生器* */ / unsigned x; scanf(“%d”,&x); / /* *输入一个非负的整数做种子输入一个非负的整数做种子* */ / srand(time(NULL);/ /* *使用使用timetime函数返回值做种子函数返回值做种子* */ /#include何平 2022-4-1451复习小结:复习小结: 变量的属性变量的属性 伪随机数的产生伪随机数的产生作用域作用域存储类别存储类别数据类
50、型数据类型变量名变量名srand( )a+rand()%btime(NULL)何平 2022-4-1452 使用系统定时使用系统定时/ /计数器的值做为随机种子:计数器的值做为随机种子: srand(time(NULL); time()函数返回以秒为单位的当前时间值,因为有时钟参数,函数返回以秒为单位的当前时间值,因为有时钟参数,而时间始终在变,随机数序列就不会固定不变了。而时间始终在变,随机数序列就不会固定不变了。功能:用来生成由功能:用来生成由20个随机个随机小写字符组成的字符串。小写字符组成的字符串。【例例5-16】阅读下列程序,请总结其功能。阅读下列程序,请总结其功能。 #includ
51、e #include #include void main() int i; srand (time (NULL) );for(i = 1 ; i = 20 ; i+)printf (%c , 97 + rand () % 26 ); srand 函数的格式:函数的格式: void srand(unsigned seed)头文件:头文件:stdlib.h何平 2022-4-1453 “文件包含文件包含”是指一个源文件可以将另一个源文件的是指一个源文件可以将另一个源文件的全部内容包含进来。在编译预处理时全部内容包含进来。在编译预处理时#include#include指令指令让预处理器在程序该点处加入指定文件内容,然后作让预处理器在程序该点处加入指定文件内容,然后作为一个源文件编译形成新文件。为一个源文件编译形成新文件。文件包含的一般形式为:文件包含的一般形式为:(1) #include (2) #include文件名文件名例如:例如:#include #include #include #include stdio.hstdio.h1.文件包含文件包含#include何
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 班组安全生产培训教育制度模版(2篇)
- 2025年商务年度工作总结(4篇)
- 高中创建教育现代化工作职责模版(2篇)
- 2025年竞职竞岗演讲稿模版(3篇)
- 活动中心机构职责(3篇)
- 2025年个人工作自我鉴定总结(4篇)
- 2025年个人转正工作总结标准样本(2篇)
- 推雪车安全管理规定范文(2篇)
- 卷3-高考地理【名校地市好题必刷】全真模拟卷(全国卷专用)第一辑(解析版)
- 第11讲:牛顿第三定律(解析版)(人教版2019必修第一册)
- 2024年萍乡卫生职业学院单招职业适应性测试题库参考答案
- 中国农业银行信用借款合同
- 2024智能变电站新一代集控站设备监控系统技术规范部分
- 语文七年级下字帖打印版
- 江苏省幼儿园教育技术装备标准
- 中国医院质量安全管理 第3-5部分:医疗保障 消毒供应 T∕CHAS 10-3-5-2019
- 湖北省3000万元以下建设项目前期工作咨询收费标准
- 2018中国美业发展经济共享峰会方案-41P
- 电子病历质控操作手册1.9.1版(共26页)
- 利润表空白表下载
- 人教版八年级下册英语单词表(按单元排序)全册(附音标和解释)
评论
0/150
提交评论