C语言程序设计第二章 程序基本结构
——————————————————————————
——————————
济南大学第二章 程序基本结构
2.1 分支结构
2.2 循环结构
2.3 break和 continue语句
——————————————————————————
2.1 分支 结构
关系运算符和关系表达式
逻辑运算符和逻辑表达式
if语句
switch(多分支)语句关系运算符和关系表达式一、关系运算符关系运算:即比较运算。 C语言提供如下 6个关系运算符:
<,<=,>,>=,==,!=
说明,
1,优先级,前 4种相同,后 2种也相同,但前 4种高于后两种;所有关系运算符的优先级都 低于算术运算符 而 高于赋值运算符 。
2,结合性,自左至右 a>b-c a>(b-c)
a==b>=c a==(b>=c)
a=b!=c a=(b!=c)注意,
①、字符数据按其 ASCII码值进行比较;
②、应避免两个实数作 ==或 !=的比较二、关系表达式用 关系运算符将两个表达式连接起来的式子 。
其中 被连接的表达式可以是 算术表达式,关系表达式,
逻辑表达式,赋值表达式 或 字符表达式 。
如,a+b>c+d,x>y==c+d,'a'>'A'
关系表达式的值只能是 1或 0,当表达式成立即为,真,
时,值为整数 1;否则为,假,,值为整数 0。因此可看作 整型表达式 。
假设 a=3,b=2,c=1,求以下关系表达式的值:
a>b (a>b)==c
a>b>c f=a>b<=c 问 a>b>c是否合法?
逻辑运算符和逻辑表达式一、逻辑运算符
3种,&& || !
①,优先级,
!(非 )→ &&(与 )→ ||(或 )
! (非 )
算术运算符关系运算符
&&
||
赋值运算符
(高)
(低)
②,结合性,
!是右结合性,&&和 ||是左结合性
③,逻辑运算真值表:
a b !a !b a&&b a||b
非 0 非 0 0 0 1 1
非 0 0 0 1 0 1
0 非 0 1 0 0 1
0 0 1 1 0 0
例:
a<b&&x/y (a<b)&&(x/y)
a==b||b!=c (a==b)||(b!=c)
a>=1||!b (a>=1)||(!b)
二、逻辑表达式用逻辑运算符将关系表达式或逻辑量连接起来构成 逻辑表达式 。逻辑表达式的值应该是,逻辑真,或,逻辑假,。
C语言以数值 1 代表“真”,以数值 0 代表“假”;但参加运算的运算量可以是 任何数值,进行判断时,非零值 代表“
真”,零值 代表“假”。
若 a=100,b=5,则 !a=? a&&b=? a||b=? !a&&b=?
4&&0||2=? 'a'+'b' || 'c'
'a' && '\0'
3>8&&2 || 5<4-!0
表示 x∈ [-1,1]区间,应写为,x>=-1 && x<=1
不能写为,-1<=x<=1
规律,
在逻辑表达式的求解过程中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。
①、在 &&表达式中,若左端为 0,则不必再计算右端,
表达式值为 0;即,0&&a==0
②、类似有,1||a==1
0||a ==a 0&&a==0
1||a==1 1&&a==a
a||a==a a&&a==a
a||!a==1 a&&!a==0
!(a||b)==!a&&!b
!(a&&b)==!a||!b
例,a=1,b=2,c=3,d=4,m=n=1
(m=a>b)&&(n=c>d)
m=? n=?
if 语句一,if语句的三种形式
1,单分支形式
if (表达式 )
语句表达式语句真 (非 0)
假 (0)
例:
x=1; y=2;
if (x>y)
printf("%d\n",x);
printf("%d\n",y);
2,双分支形式 if (表达式 )
语句 1
else
语句 2
表达式语句 2
真 (非 0) 假 (0)
语句 1
例,if (a>b)
x=a;
else
x=b;
if (x>=0)
printf("%.3f\n",x);
else
printf("%.3f\n",-x);
3,多分支形式
if (表达式 1)
语句 1
else if (表达式 2)
语句 2
else if (表达式 3)
语句 3
……
else if (表达式 n)
语句 n
else
语句 n+1
例:分段函数
x
2x-1
3x+5
(x<1)
(1≤x<10)
(x≥10)
y=
if (x<1)
y=x;
else if (x<10)
y=2*x-1;
else
y=3*x+5;
关于 if语句的说明:
1、表达式一般为关系表达式或逻辑表达式。但在 C语言中它也 可以是任意的数值表达式 。
if (3)
n=1;
if ('a')
printf("%d",'a');
if (n=3-3)
x=1;
else
x=-1;
2,表达式后面不能有任何标点符号 ! 每个语句都要以,;,
结束,分号是语句的一部分。
3,else只能与 if配对使用 。仅 else本身不能单独作为一个语句使用。
if (x>5);
y=x;
else
y=2*x-1;
if (x>5);
y=x;
else
y=2*x-1;
将出现语法错误
4、每个语句序列可以是一个语句也可以是若干个语句,但要用花括号括起来 构成复合语句 。
if (a>b)
{ t=a;
a=b;
b=t;
}
if (a+b>c && b+c>a && c+a>b)
{ s=1.0/2*(a+b+c);
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("area=%.2f\n",area);
}
else
printf("It is not a trilateral!\n");
复合语句的 花括号后不能再写分号 。复合语句在语法上是一个整体,相当于一个语句。
例,输入 3个数 a,b,c,按由小到大的顺序输出。
输入 a,b,c
a>b?
ab
a>c?
b>c?
ac
bc
输出 a,b,c
是是是否否否
#include <stdio.h>
void main( )
{ int a,b,c,t;
scanf("%d%d%d",&a,&b,&c);
if (a>b)
{ t=a; a=b; b=t; }
if (a>c)
{ t=a; a=c; c=t; }
if (b>c)
{ t=b; b=c; c=t; }
printf("%d,%d,%d\n",a,b,c);
}
二,if语句的嵌套在 if语句的原“语句”中又包含一个或多个 if语句
1,if (表达式 1)
if (表达式 2) 语句
2,if (表达式 1) 语句 1
else if (表达式 2) 语句 2
3,if (表达式件 1) 语句 1
else if (表达式 2) 语句 2
else 语句 3
4,if (表达式 1)
if (表达式 2) 语句 1
else 语句 2 二义性?
C语言规定,else总是与它前面最近的且未曾配对的 if配对。
if (表达式 1)
{ if (表达式 2) 语句 1
else 语句 2
}
if (表达式 1)
{ if (表达式 2) 语句 1 }
else
语句 2
例:编程求解函数:
-1
0
1
(x<0)
(x=0)
(x>0)
y=
程序 1:
if (x<0) y=-1;
else
if (x==0) y=0;
else y=1;
y=-1 y=0 y=1
x<0
x==0
真 假真 假程序 2:
if (x>=0)
if (x>0) y=1;
else y=0;
else y=-1; y=-1y=0y=1
x>=0
x>0
真 假真 假程序 3:
y=-1;
if (x!=0)
if (x>0) y=1;
else y=0;
y=-1
x!=0
x>0
y=1 y=0
真真假假
-1
0
1
(x=0)
(x<0)
(x>0)
y=
改正程序 3:
y=-1;
if (x!=0)
{ if (x>0) y=1; }
else y=0;
y=-1
x!=0
x>0
y=1 y=0
真真假假三,条件运算符
1、条件运算符,?,( C中唯一的三目运算符)
优先级仅高于赋值类,右结合性
2、条件表达式的一般形式:
表达式 1? 表达式 2,表达式 3
运算过程,首先求表达式 1的值,若为真(非 0),则求表达式 2的值,且整个表达式的值为表达式 2的值;若表达式 1为假( 0),则求表达式 3的值,且整个表达式的值为表达式 3
的值。
例,x= a>b? a:b+1; x= ((a>b)? a:(b+1));
if (a>b) x=a;
else x=b+1;
a>b? a,c>d? c,d a>b? a,(c>d? c,d)
说明:
1,条件表达式不能完全取代 if 语句,只有在 if 语句中 内嵌语句为赋值语句,且两个分支都给同一个变量赋值 时才能代替 if
语句。
if (a>b) printf("%d\n",a);
else printf("%d\n",b);
if (a>b) x=a;
else y=b;
2、条件表达式中,表达式 1、表达式 2和表达式 3的类型可以不同。若表达式 2和表达式 3类型不同,则整个条件表达式的值应为二者中较高的类型。
2>1? 1,1.5 值为 1.0
1? 'a',10 值为 97
例,输入一个字符,如果是大写字母,转换为小写,如果不是则不转换。输出最后得到的字符。
main( )
{
char ch;
scanf("%c",&ch);
ch= (ch>='A'&&ch<='Z')? (ch+32):ch;
printf("%c",ch);
}
switch(多分支)语句
switch结构与 else if结构是多分支选择的两种形式。
else if:多条件并列测试,从中选一
switch:单条件测试,从多种结果中选取一种执行
1,格式,
switch(表达式 )
{
case 常量表达式 1,语句 1
case 常量表达式 2,语句 2
┆ ┆ ┆
case 常量表达式 n,语句 n
default,语句 n+1
}
2,功能,
先计算表达式的值,测试该值是否与某常量表达式的值相同
①,若有相同者,流程转向其后面的语句执行
②,若无,再看有没有 default部分,若有 default,则执行其后面的语句;若无 default,则 switch语句什么也不做,流程转向其后继语句。
例,main ( )
{ int x,y ;
scanf("%d",&x) ;
switch(x)
{ case 1,y=10; printf("%d\n",y) ;
case 2,y=20; printf("%d\n",y) ;
case 3,y=30; printf("%d\n",y) ;
default,y=0; printf("%d\n",y) ;
}
}
case 6,
case 7,printf("Reset\n"); break;
但不能写成,case 6,7,printf("Reset\n"); break;
7,switch语句可以嵌套;但有多层 switch语句时,break只能退出本层的 switch语句体;
说明:
1,switch后面括号内的表达式可以是 整型,也可以是 字符型
2、各个 case后常量表达式的值必须互不相同;
3、各个 case和 default的出现次序不影响执行结果 ;
4,case后的语句为复合语句时可省略花括号;
5,case后常量表达式只起语句标号的作用,每个 case之后通常都有一个 break,使流程跳出 switch语句;
6、多个 case可以共用一组执行语句;
main( )
{ int score,temp;
printf(“\nInput the score of student:”);
scanf(“%d”,&score);
temp=score/10;
switch(temp)
{ case 10:
case 9,printf(“A”); break;
case 8,printf(“B”); break;
case 7,printf(“C”); break;
case 6,printf(“D”); break;
default:printf(“E”);
}
printf(“OK!”);}
例,学生成绩百分制与等级制之间的转换。 90分以上为 A等,
80-89为 B等,70-79为 C等,60-69分为 D等,其余为 E等。编制程序,根据输入的百分制,输出对应的等级。
2.2 循环结构
概述
goto语句
当型循环 while
直到型循环 do-while
当型循环 for
循环的嵌套
几种循环的比较求 1+2+3+…+10
main()
{
int sum;
sum=1+2+3+4+5+6+7+8+9+10;
printf (“sum=%d\n”,sum);
}
main()
{
}
int i,sum;
i=1; sum=0;
while (i<=100)
{
sum=sum+i;
i++;
}
printf (“sum=%d\n”,sum);
求 1+2+3+…+100
sum=sum+i;
i++;
i<=100
求 1+2+3+…+100
int i,sum;
i=1; sum=0;
do
{
sum=sum+i;
i++;
}
While (i<=100);
printf (“%d\n”,sum);
main()
{
}
求 1+2+3+…+100
main()
{
int i,sum=0;
for(i=1;i<=100;i++)
sum=sum+i;
printf(“%d\n”,sum);
}
main()
{
}
int i,sum;
i=1; sum=0;
while (i<=n)
{
sum=sum+i;
i++;
}
printf (“sum=%d\n”,sum);
计算 1+2+3+…+n ( n为任意正整数)
scanf("%d",&n);
do
{
sum=sum+i;
i++;
} while (i<=n);
for(i=1;i<=n;i++)
sum=sum+i;
main()
{
}
int i,sum;
i=1; sum=0;
while (i<=n)
{
sum=sum+i;
i=i+2;
}
printf (“sum=%d\n”,sum);
scanf("%d",&n);
计算 1+3+5+7+…+n ( n为奇数)
do
{
sum=sum+i;
i=i+2;
} while (i<=n);
for(i=1;i<=n; i=i+2)
sum=sum+i;
概述在实际问题中,常常遇到需要 重复处理 的工作。计算机运算速度快,适宜用于重复性的工作。 循环控制 是结构化程序设计的基本结构之一,它和 顺序结构,选择结构 共同作为各种复杂程序的基本构造单元。
一般来说循环控制方法分两种,
①,条件循环( while循环 和 do–while循环 )
条件满足时执行循环,条件不满足时结束循环
②、计数循环( for循环 )
先确定循环次数,然后执行循环,完成循环次数后结束循环控制结构一般由 三部分组成,
①,进入条件
②,退出条件
③,循环体,循环体需要完成的功能(需要重复执行的语句)
根据进入条件和退出条件,循环控制结构可以分为 三种形式,
⑴,while结构,退出条件是进入条件的反条件。即满足条件时进入,重复执行循环体直到进入的条件不再满足为止。
⑵,do-while结构,无条件进入,执行一次循环体后再判断是否满足再进入循环的条件。
⑶,for结构,与 while结构类似,但结构更紧凑。适用于循环之前循环次数就已经确定的情况。
goto语句
goto语句 是一种使程序的流程 无条件转移 的语句一般形式为,
goto 语句标号;
语句标号 是由用户自行定义的标识符,不能用整数来做标号。
例如:
goto label_1; goto 123;
goto 语句的 功能 是无条件地跳转到语句标号所指定的本函数内的那条语句。
√ ×
label_1,printf("%d\n",x);
goto label_1;
例:用 if 语句和 goto语句构成循环,求 1+2+…+100
main()
{
}
int i,sum;
i=1; sum=0;
if (i<=100)
{
sum=sum+i;
i++;
}
printf (“sum=%d\n”,sum);
loop:
goto loop;
当型循环 while
使用形式:
while(表达式)
语句;
真 (非 0)
表达式成立吗?
语句假 (0)
特点:
先判断表达式,
后执行语句例:求 1+2+3+…+100
i=1
i<=100
sum=sum+i
i=i+1
假真
i=1
当 i<=100
sum=sum+i
i=i+1
main()
{
}
int i,sum;
i=1; sum=0;
while (i<=100)
{
sum=sum+i;
i++;
}
printf (“sum=%d\n”,sum);
注意,While
起作用的范围注意:要有循环结束条件直到型循环 do-while
使用形式:
do
循环体语句
while(表达式) ;
特点:
先执行循环体语句,
后判断表达式循环体语句表达式
0(假 )
非 0(真 )
注意,⑴、循环部分为多个语句时,必须用大括号构成复合语句;⑵、循环体中应有使循环趋于结束的语句例:求 1+2+3+…+100
sum=0
i=1
sum=sum+i
i=i+1
i<=100
假真
int i,sum;
i=1; sum=0;
do
{
sum=sum+i;
i++;
}
While (i<=100);
printf (“%d\n”,sum);
main()
{
}
While 和 do-while 循环的比较
main()
{
int sum=0,i;
scanf (“%d”,&i);
while (i<=10)
{
sum=sum+i;
i++;
}
printf (“sum=%d\n”,sum);
}
main()
{
int sum=0,i;
scanf (“%d”,&i);
do
{
sum=sum+i;
i++;
} while (i<=10);
printf (“sum=%d\n”,sum);
}
例:设计一个菜单,格式如下:
学生成绩管理系统
1,学生成绩输入
2,平均成绩统计
3,学生成绩查询
4,学生成绩修改
0,系统退出
main( )
{ int x;
do
{ printf("********************\n");
printf(" 学生成绩管理系统 \n");
printf("********************\n");
printf(" 1,学生成绩输入 \n");
printf(" 2,平均成绩统计 \n");
printf(" 3,学生成绩查询 \n");
printf(" 4,学生成绩修改 \n");
printf(" 0,系统退出 \n");
printf("********************\n");
scanf("%d",&x);
if (x>=1&&x<=4)
printf(“your selection is %d!\n",x);
}while(x!=0);
}
当型循环 for
一般形式:
for(表达式 1;表达式 2;表达式 3)语句执行过程,
(1)求解表达式 1
(2)求解表达式 2,若其值为真(值为非 0),则执行 for语句中指定的内嵌语句,然后执行 (3)。 若为假(值为 0),则结束循环,转到 (5)。
(3)求解表达式 3
(4)转回执行 (2)
(5)循环结束,执行 for语句下面的一个语句表达式 1;
While (表达式 2)
{
语句表达式 3;
}
for (i=1; i<=100; i++)
sum=sum+i;
i=1;
while(i<=100)
{
sum=sum+i;
i++;
}
一般使用格式:
for(循环变量赋初值;循环条件表达式;循环变量修正值)
循环体;
例:计算某个班英语成绩的平均分,学生人数和每个学生的成绩由键盘输入。
main()
{ int n,i,sum,ave;
sum=0;
scanf("%d",&n);
i=1;
while ( i<=n )
{
scanf("%d",&s);
sum=sum+s ;
i++ ;
}
ave=sum/n;
printf(“%d”,ave);
}
main()
{ …
sum=0;
scanf("%d",&n);
for ( i=1; i<=n ; i++ )
{
scanf("%d",&s);
sum=sum+s ;
}

}
( 1) for语句的三个表达式都可以缺省,但两个分号不能缺省;
( 2)如果在 for语句之前已经给循环变量赋初值,则 for语句的循环变量赋初值部分可以省略,但其后得分号不省略;
( 3)也可以将循环变量修正值的工作纳入到循环体中去做;
说明:
i=1;
for ( ; i<=10; i++) m=m*i;
如:
for (i=1; i<=10; )
{ m=m*i; i++;}
如:
( 4)也可以省略 for语句的第一和第三部分;
i=1;
for( ; i<=10; )
{ m=m*i ; i++;}
如:
当循环体由若干个语句组成时,
应用大括号将循环体括起来。
( 5)通常不缺省表达式 2;有时缺省表达式 2,此时不判断循环条件,循环将无终止的执行,即认为表达式 2始终为真;在循环体内用 if和 break控制循环结束。
if (条件 )
break;
for (i=1; ; i++)
sum=sum+i;
i=1;
while (1)
{ sum=sum+i; i++;}
( 6)如果有多个循环变量赋初值,或多个循环变量值要修正,
应在各变量之间用逗号隔开。
for(i=1,j=10; i<=j; i++,j- -) k=i+j;如:
( 7)循环条件表达式一般是关系表达式或逻辑表达式,但也可以是数值表达式或字符表达式,每次系统判断该表达式的结果不为 0,就执行一遍循环体。
for(m=0;( c=getchar( ) )!=?!?;) m=m+c;如:
例:,猴子吃桃,
猴子第一天摘了若干个桃子,当即吃了一半,还不过瘾,
又多吃了一个。第二天又将剩下的桃子吃了一半,又多吃了一个。以后每天都吃掉前一天剩下的一半零一个。到第十天想吃时,只剩下一个桃子了。问第一天共摘了多少桃子?
分析:循环 10天,day从 10 循环到 1
设 x1为前一天桃子数,设 x2为第二天桃子数,
则 x2=x1/2-1,所以 x1=(x2+1)*2
每次循环,x1=(x2+1)*2 ; x2=x1
循环的嵌套一个循环体内又包含另一个 完整的 循环结构,称为 循环嵌套 。
内层的循环中还可以嵌套循环,构成 多重循环 。
while ( )
{ ···
while ( )
{ ··· }
······
}
for ( ; ; )
{ ···
for ( ; ; )
{ ··· }
······
}
do
{ ···
do
{ ···
} while ( );
······
} while ( );
while ( )
{ ···
for ( ; ; )
{ ··· }
······
}
for ( ; ; )
{ ···
do
{ ···
}while( );
······
}
while ( )
{ ···
do
{ ···
}while( );
······
}
例:输出如图所示的矩形,* * * * ** * * * *
* * * * *
* * * * *
main( )
{
printf("*****\n");
printf("*****\n");
printf("*****\n");
printf("*****\n");
}
main( )
{ int i,j ;
i=1;
while (i<=4)
{ j=1;
while ( j<=5 )
{ putchar('*');
j++;
}
putchar('\n');
i++;
}
}
#include <stdio.h>
main( )
{
int i,j ;
i=1;
while (i<=4)
{
for (j=1; j<=5;j++)
putchar('*');
putchar('\n');
i++;
}
}
#include <stdio.h>
main( )
{
int i,j ;
for ( i=1; i<=4; i++)
{
for (j=1; j<=5; j++)
putchar('*');
putchar('\n');
}
}
例:输出如图所示的矩形,* * * * ** * * * *
* * * * *
* * * * *
内外层循环的控制变量不能重名例:输出如图所示的三角形,** *
* * *
* * * *特点,第 i行有 i个星号
#include <stdio.h>
main( )
{
int i,j ;
for( i=1; i<=4; i++)
{
for (j=1; j<=i; j++)
putchar('*');
putchar('\n');
}
}
例:输出如图所示的等腰三角形,** * *
* * * * *
* * * * * * *特点:第 i行有 2i-1个星号!
一共有 4行,第 i行的第 1个星号前有 4-i个空格
#include <stdio.h>
main( )
{ int i,j ;
for( i=1; i<=4; i++)
{ for (j=1; j<=4-i; j++)
putchar(32);
for (j=1; j<=2*i-1; j++)
putchar('*');
putchar('\n');
}
}
例:输出如图所示的菱形,** * *
* * * * ** * * * * * *
* * * * ** * *
*
分析:
将图形分为上下两部分分别输出!
for ( i=3; i>=1 ; i- -)
{ for ( j=1; j<=4-i ; j++)
putchar(' ');
for ( k=1; k<=2*i-1 ; k++)
putchar('*');
putchar('\n');
}
①,C语言中的三种循环结构都由表达式控制执行一个循环体,一般情况下可以相互代替;
②、用 while和 do-while循环时,循环变量初始化的操作应在 while和 do-while语句之前完成;而 for语句一般在表达式 1中实现循环变量的初始化;
③、当 循环次数及控制条件 要 在程序运行过程中确定 时,
选用 while或 do-while语句;
④、在 初值、增量及控制条件明显,或 循环次数已经给定的情况下,选用 for语句;
几种循环的比较
⑤,在循环的执行过程中,应 不断的改变循环控制表达式的值,以便逐步形成使它为 0的条件,否则将可能出现死循环;
⑥,三种循环可以相互嵌套,形成多重循环,外循环可以包含多个或多重内循环,循环之间可以并列但不能相交,
并列的循环控制变量可以同名,但 嵌套的循环控制变量不能同名 ;
⑦,不允许 用其它的控制语句 把程序流程从循环体外转入循环体内,但必要时可以用 break,goto等语句把流程从循环体内转到循环体外。
2.3 break和 continue语句
break语句
continue语句
1、格式,break;
2、功能:
中止当前循环语句或 switch语句的执行
3、说明:
①、若是多重循环,break只能使流程跳出离 break
最近的一层;
②,break只用于 switch语句 和 循环语句 。
break语句例:计算 r=1到 r=10时的圆面积,直到面积大于 100为止
main( )
{
float r,area;
for (r =1; r <= 10; r++)
{
area = 3.14*r*r ;
if (area>100)
break;
printf("%6.2f\n",area);
}
}
输出结果,
3.14
12.56
28.26
50.24
78.50
1、格式,continue;
2、功能:
提前结束本次循环体的执行 (不再执行循环体中 continue
后面的语句),接着进行下一次是否执行循环的判定
3、说明:
①,continue语句只能用于 循环语句 中,它是一种具有特殊功能的转移语句;
②,continue与 break不同,continue语句只结束本次循环,而不是终止整个循环的执行;而 break语句则结束整个循环,不再判断循环条件是否成立。
continue语句例:把 10到 20之间能被 3整除的数输出
main( )
{
int n;
for (n=10; n<=20; n++)
{
if (n%3!=0)
continue;
printf("%d ",n);
}
}
break;
12 15 18
while ( )
{ ┊
break;

}
....
while ( )
{ ┊
continue;

}
....
例,打印 3-100之间的全部素数。
判断 m是否是素数可以让 m被 2,3,4…… 去除,若能被其中的任何一个整数整除,则证明不是素数;相反
,若不能被其中的任何一个整数整除,则证明是素数。
m
for (m=3; m<=100; m+=2)
{
}
k=sqrt(m);
for (i=2; i<=k; i++)
{ if (m%i==0)
break;
}
if (i== )
printf("%-5d",m);
k+1
作业
1、分别用 while,do-while和 for循环求积:
20321p r o d
说明:请注意各变量的数据类型。
2、按下面的公式近似计算 e的值,使误差小于 10-6。
!41!31!21!111e
T h e E n d