资源描述
第1章 程序设计和C语言
教学时数:2学时
重点难点:1.C语言特点。
2.TC运营环境。
教学规定:1.理解C 语言发展历史和特点。
2.理解C 程序构成及C 函数构成。
3.掌握C 程序上机环节。
教学内容:
一、什么是计算机程序
程序:一组计算机能辨认和执行指令或具备某种功能指令集合。
二、什么是计算机语言
1.计算机语言:人和计算机交流信息、计算机和人都能辨认语言。
2.计算机语言发展阶段
(1)低档语言或机器语言(由0和1构成指令)。
(2)中级语言或符号语言(用助记符号表达指令)。
(3)高档语言(接近于人自然语言和数学语言)。
三、C语言发展及其特点
1.C语言发展
C语言是在BCPL(basic combined programming)基本语言(取第一种字母故而称为B语言基本上发展起来。由于B语言过于简朴、功能有限,在七十年代贝尔实验室D.M.Ritchie设计出更精练并接近于B语言长处BCPLC语言(取第二个字母故而称为C语言)。日后又通过多次改进成为今天广泛流行、适合大学诸多专业教学语言。它既可用来编写系统软件,也可用来编写应用软件。
2.C语言特点
(1)语言凑简、语法限制不太严格、程序设计自由度大
C语言有37个核心字;对数组下标越界不做检查,整型与字符型可通用;程序书写格式自由,一行可写多条语句,一条语句也可写入多行。
(2)算符丰富、数据类型丰富、具备构造化控制语句
C语言有34种运算符;类型且多样化(有基本类、构造类、指针类和空类型);9中控制语句,如if…else语句、while语句、do…while语句、switch语句、for语句,用函数作为程序模块单位,便于实现程序模块化。
(3)容许直接访问物理地址、能对位和对硬件直接操作
C语言具备高档语言功能和低档语言许多功能,可用来编写系统软件这种双重性,使它既是成功系统描述语言,又是通用程序设计语言。
(4)可移植性好、生成目的代码质量和程序执行效率高
用C语言编写好程序基本不做源代码修改就可在各种型号计算机都能运营;生成目的代码质量仅低于汇编语言10—20%。
四、最简朴C语言程序
例1.1:输出一行信息。
#include <stdio.h>
int main( )
{printf (”This is a C program.\n”);}
例1.2:求两个整数之和。
#include <stdio.h>
int main( )
{int a=123,b=456,sum;
sum = a + b;
printf(”sum is %d\n”,sum);}
例1.3:求两个整数中较大者。
#include <stdio.h>
int main( )
{int max(int x,int y);
int a,b,c;
scanf(”%d,%d”,&a,&b);
c = max(a,b);
printf("max=%d\n",c);}
int max(int x,int y)
{int z;
if (x > y) z = x;
else z = y;
return(z);}
1.最简朴C语言程序举例
2.C语言程序构造
C程序是由一种或各种函数构成。函数由函数首部和函数体部构成,而函数体部又由声明某些和执行某些构成。一种C程序有仅能有一种主函数main,但可有其她函数各种。因而,函数是C语言程序基本单位。程序总是从main函数开始执行。
五、运营C程序环节与办法
1.运营C程序环节
编辑(.c文献)——编译(.obj文献)——连接(.exe文献)——运营程序
2.运营C程序办法
File——new——编辑源程序——Ctrl+F9——输入数据——Alt+F5
第2章 算法
教学时数:2学时
重点难点:1.算法概念、思想。
2.流程图以及N-S图。
教学规定:1.理解算法不同表达办法。
2.理解算法概念和特性。
3.理解算法N-S 流程图表达法。
教学内容:
一、什么是算法
广义地说,为解决一种问题而采用办法和环节称为“算法”。对同一种问题,可以有不同解题办法和环节。计算机算法可分为两大类别:数值运算算法(其目是求数值解)和非数值运算算法(涉及面十分广泛,最常用是用于事务管理领域)。
二、简朴算法举例
例2.1:求1×2×3×4×5×…×1000
原始算法:
环节1:先求01*02,得到成果02。
环节2:将环节1得到乘积02再乘以03,得到成果006。
环节3:将环节2得到乘积06再乘以04,得到成果024。
环节4:将环节3得到乘积24再乘以05,得到成果120。
……
太繁琐!
例2.1:求1×2×3×4×5×…×1000
改进算法:
设变量p为被乘数,变量i为乘数。
环节1:使p=1。
环节2:使i=2。
环节3:使p与i相乘,乘积仍放在变量p中,可表达为:p= p*i。
环节4:使i值加1,可表达为:i =i+1。
环节5:若i<=5(或1000),返回环节3继续;否则,算法结束,最后得到p值。
若求1×3×5×7×9×11×……则只需上述算法中i=2改写成i=3;i =i+1改写成i =i+2即可。
例2.2: 有50个学生,规定将成绩在80分以上学生学号和成绩输出。
其中算法:
用ni代表第i个学生学号,gi代表第i个学生成绩。
环节1:i=1。
环节2:若gi>=80,则输出ni和gi,否则不输出。
环节3:i =i+1Þ
环节4:若i<=50,返回到环节环节2:,继续执行,否则,算法结束。
例2.3:鉴定—25中闰年,并将成果输出。
闰年必要同步满足两个条件:
(1)能被4整除,但不能被100整除年份都是闰年;
(2)能被400整除年份是闰年。
其中算法:
环节1:year= 。
环节2:若year能被4整除,不能被100整除;同步,若year能被400整除,则输出year值和“是闰年”。然后转到环节4执行。
环节3:否则,其她状况输出year值和“不是闰年”。
环节4:year =year+1。
环节5:当year<=2500时,转到环节2继续执行,否则停止。
例2.4 求1-1/2+1/3-1/4+…+1/99-1/100
分析得出规律:
①第1项分子分母都是1。
②第2项分母是2,后来每一项分母子都是前一项分母加1。
③笫2项前运算符为“-”,后一项前面运算符都与前一项前运算符相反。
其中算法:
环节1:当前项符号sign=1。
环节2:当前各项和sum=1。
环节3:当前项分母deno=2。
环节4:sign=(-1)*sign。
环节5:当前项值term=sign*(1/deno)。
环节6:sum=sum+term。
环节7:deno=deno+1。
环节8:若deno<=100返回环节4;否则算法结束。
阐明:99次循环后sum值就是所规定成果。
例2.5 给出一种不不大于或等于3正整数,判断它是不是一种素数。
分析所谓素数:
是指除了1和该数自身之外,不能被其她任何整数整除数
环节1:输入n值。
环节2:i=2(i作为除数)。
环节3:n被i除,得余数r。
环节4:若r=0,则n能被i整除,输出n“不是素数”,算法结束;否则执行环节5。
环节5:i =i+1。
环节6:如果i<=n-1,返回环节3;否则输出n “是素数”,然后结束。
三、算法特性
(1)有穷性。一种算法应包具有限操作环节,而不能是无限。
(2)拟定性。算法中每一步都应当是拟定,而不能是含糊。
(3)有零个或各种输入。执行算法时需要从外界获得必要信息。
(4)有一种或各种输出。算法目是为了求解,就是输出信息。
(5)有效性。算法中每一步都应当能有效地执行,拟定成果。
四、算法表达
1.用自然语言表达算法
用自然语言写算法通俗易懂,但文字冗长,容易浮现歧义且包括分支和循环算法,不很以便,除了简朴问题外,普通不用自然语言。
2.用流程图表达算法
流程图是用某些图框来表达各种操作,用图形表达算法,直观形象,易于理解。但老式流程图用流程线指出各框执行顺序,对流程线使用没有严格限制 使用者可以毫不受限制地使流程随意地转来转去,使人难以理解算法逻辑。
例2.6:将例2.1求1×2×3×4×5算法用流程图表达。
例2.8:将例2.3鉴定—2500中闰年算法用流程图表达。
例2.9:将例2.4求1-1/2+1/3-1/4+…+1/99-1/100算法用流程图表达。
4.用N-S流程图表达算法
例2.11:将例2.1求1×2×3×4×5算法用N-S图表达。
例2.12:求50名学生中成绩高于80分者学号和成绩输出算法用N-S图表达。
例2.16:求1×2×3×4×5算法用伪代码表达。
begin (算法开始)
t=1
i=2
while i≤5
{t=t *i
i=i+1}
print t
end (算法结束)
5.用伪代码表达算法
伪代码是用介于自然语言和计算机语言之间文字和符号来描述算法,用伪代码写算法并无固定、严格语法规则,可以用英文,也可以中英文混用。
6.用计算机语言表达算法
要完毕一项工作,涉及设计算法和实现算法两个某些。设计算法目是为了实现算法。
例2.18:将例2.16求1×2×3×4×5算法用C语言表达。
#include <stdio.h>
int main( )
{int i,t;t=1;i=2;
while(i<=5)
{t=t*i;i=i+1;}
printf("%d\n",t);}
五、构造化程序设计办法
构造化程序设计强调程序设计风格和程序构造规范化,倡导清晰构造。其基本思路是把一种复杂问题求解过程分阶段进行,每个阶段解决问题都控制在人们容易理解和解决范畴内。采用如下办法保证得到构造化程序:
(1)自顶向下;
(2)逐渐细化;
(3)模块化设计;
(4)构造化编码。
第3章 最简朴C程序设计
教学时数:4学时
重点难点:1、数据输入和输出。
2、printf();scanf()。
教学规定:1.理解各种类型C 语句。
2.理解程序执行顺序性。
3.掌握数据输入/输出函数用法。
教学内容:
一、顺序程序设计举例
例3.1:有人用温度计测量出用华氏法表达温度(如f,今规定把它转换为以摄氏法表达温度(如c) 。
解题思路:找到两者间转换公式c=5/9(c-32)。c代表摄氏温度,f代表华氏温度。
#include <stdio.h>
int main ( )
{float f,c;f=64.0;c=(5.0/9)*(f-32);
printf("f=%f\nc=%f\n",f,c);}
例3.2:计算存款利息。有1000元,想存一年。有三种办法可选:(1)活期,年利率为r1;(2)一年期定期,年利率为r2;(3)存两次半年定期,年利率为r3。请分别计算出一年后按三种办法所得到本息和。
解题思路:拟定计算本息和公式。从数学知识可知:若存款额为p0,则:活期存款一年后本息和为:p1=p0(1+r1);一年期定期存款,一年后本息和为:p2=p0(1+r2);两次半年定期存款,一年后本息和为:p3=p0(1+r3/2)(1+r3/2
#include <stdio.h>
int main ( )
{float p0=1000,r1=0.0036,r2=0.0225,r3=0.0198,p1,p2,p3;
p1 = p0 * (1 + r1);p2 = p0 * (1 + r2);p3 = p0*(1+r3/2)*(1+r3/2);
printf(”%f\n%f\n%f\n”,p1,p2,p3);}
二、数据体现形式及其运算
1.常量:在程序运营过程中,其值不能被变化量称为常量。
(1)整型常量:如10020,12345,0,-3452
(2)实型常量:十进制形式(如0.34,-56.79,0.0);指数形式(如12.34e3 )
(3)字符常量:如’?’;字符串常量:如”boy”;转义字符:如’\n’;符号常量:#define PI 3.1416
2.变量:在程序运营过程中,其值可以被变化量称为变量。变量必要先定义(定义变量时指定该变量名字和类型),后使用。变量名(字母、数字和下划线三者组合,但数字不能开头)事实上是以一种名字代表一种存储地址,从变量中取值,事实上是通过变量名找到相应内存地址,从该存储单元中读取数据。
3.数据类型:
4.运算符和表达式
(01)算术运算:+、-、*、/(舍去小数某些后“向零取整”即取整后向零靠拢整数商)、%(求余数运算,规定运算符两边运算数为整数,成果也是整数)。
(02)关系运算符:> < == >= <= !=
(03)逻辑运算符: ! && ||
(04)位运算符:<< >> ~ | ∧ &
(05)自增、自减运算符:++i,--i:在使用i之前,先使i值加(减)1、i++,i--:在使用i之后,使i值加(减)1
(06)赋值运算符:=及其扩展赋值运算符
(07)条件运算符:?:(如max = (a > b) ?a :b;)
(08)逗号运算符: ,
(09)指针运算符:*和&
(10)求字节(长度)数运算符:sizeof
(11)强制类型转换运算符:(类型名)(表达式)
(12)成员运算符:. ->
(13)下标运算符:[ ]
(14)其她:如函数调用运算符( )
例3.5 求ax2+bx+c=0方程根。设b2-4ac>0,其中a、b、c由键盘输入。
#include <stdio.h>
#include <math.h>
int main ( )
{double a,b,c,disc,x1,x2,p,q;
scanf("%lf%lf%lf",&a,&b,&c);
disc=b*b-4*a*c;p=-b/(2.0*a);
q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;
printf("x1=%7.2f\nx2=%7.2f\n",x1,x2);}
5.C语句(作用和分类)
(1)控制语句:if、switch、for、while、do…while、continue、break、return、goto等
(2)函数调用语句
(3)表达式语句
(4)空语句
(5)复合语句
(6)赋值语句(最惯用语句)
(7)输入输出语句
6.关于数据输入输出概念
C语言自身不提供输入/出语句,输入/出操作是由C原则函数库中函数来实现,格式输入输出函数(用这两个函数时,必要指定格式)printf和scanf不是C语言核心字,而只是库函数名字。在使用输入输出函数时,要在程序文献开头用预编译指令#include <stdio.h> 或#include ″stdio.h″。
(1)用printf函数输出数据及惯用格式字符:
printf(格式控制,输出表列),例如:printf(”i=%d,c=%c\n”,i,c);
①d格式符。用来输出一种有符号十进制整数,可以在格式声明中指定输出数据域宽printf(”%5d%5d\n”,12,-345);%d输出int型数据,%ld输出long型数据。
②c格式符。用来输出一种字符。
③s格式符。用来输出一种字符串。
④f格式符。用来输出实数,以小数形式输出.
ⅰ不指定数据宽度和小数位数,用%f。
ⅱ指定数据宽度和小数位数。用%m.nf。
ⅲ输出数据向左对齐,用%-m.nf。
⑤e格式符。指定以指数形式输出实数.
(2)用scanf函数输入数据及惯用格式字符:
scanf(格式控制,地址表列),含义同printf函数。可以是变量地址,或字符串首地址。格式声明与printf函数中格式声明相似以%开始,以一种格式字符结束,中间可以插入附加字符。例如:scanf("a=%f,b=%f,c=%f",&a,&b,&c);。
(3)用getchar函数输入一种字符。getchar函数普通形式为:getchar( )。
(4)用putchar函数输出一种字符。putchar函数普通形式为:putchar( )。
例3.9:从键盘输入BOY三个字符,然后把它们输出到屏幕。
#include <stdio.h>
int main ( )
{char a,b,c;
a=getchar();b=getchar();c=getchar();
putchar(a);putchar(b);putchar(c);
putchar('\n');}
第4章 选取构造程序设计
教学时数:4学时
重点难点:1.关系运算符与关系表达式。
2.逻辑运算符与逻辑表达式。
3.if和switch语句用法。
教学规定:1.理解关系运算和逻辑运算及用法。
2.掌握if 语句三种形式和switch 语句用法。
3.理解if 语句和switch 语句嵌套。
4.掌握分支构造程序设计基本办法。
教学内容:
一、选取构造和条件判断
1.if语句,实现两个分支选取构造
2.switch语句,实现多分支选取构造
例4.1:在例3.5基本上对程序进行改进。题目规定求ax2+bx+c=0方程根。由键盘输入a,b,c。假设a,b,c值任意,并不保证b2-4ac>0 。需要在程序中进行鉴别,如果b2-4ac>0,就计算并输出方程两个实根,否则就输出“方程无实根”信息。
#include <stdio.h>
#include <math.h>
int main ( )
{double a,b,c,disc,x1,x2,p,q;
scanf("%lf%lf%lf",&a,&b,&c);
disc=b*b-4*a*c;
if (disc<0) printf(“has not real roots\n”);
else {p=-b/(2.0*a); q=sqrt(disc)/(2.0*a);
x1=p+q;x2=p-q;
printf(“real roots:\nx1=%7.2f\n,x2=%7.2f\n”,x1,x2);}
二、用if语句实现选取构造
1.if语句普通形式
(1)if (表达式) 语句1
(2)if(表达式) 语句1
else 语句2
(3)if(表达式) 语句1
else if(表达式2)语句2
else if(表达式3)语句3
┆
else if(表达式m)语句m
else 语句n
(在else某些又嵌套了多层if语句)
if(number > 500) cost = 0.15;
else if (number > 300) cost = 0.10;
else if (number > 100) cost = 0.075;
else if (number > 50) cost = 0.05;
else cost=0;
等价于
if (number > 500) cost = 0.15;
else
if (number > 300) cost = 0.10;
else
if (number > 100) cost = 0.075;
else
if (number > 50) cost = 0.05;
else cost = 0;
3.选取构造嵌套
在if语句中又包括一种或各种if语句称为if语句嵌套:
(1)第一种嵌套:
if( )
if( ) 语句1
else 语句2
else
if( ) 语句3
else 语句4
内嵌if。else总是与它上面近来if配对
(2)第二种嵌套:
if ()
{ if () 语句1 }
else 语句2
内嵌if。{ }限定了内嵌if范畴
例4.5:有一函数: 编一程序,输入x值,则输出相应y值。
解题思路:用if语句检查x值,依照x值决定赋予y值,由于y也许值不是两个而是三个,因而不也许只用一种简朴(无内嵌if)if语句来实现。
(1)先后用3个独立if语句解决:
scanf("%d",&x);
if(x<0) y = -1;
if(x==0) y = 0;
if(x>0) y = 1;
printf("x=%d,y=%d\n",x,y);
(2)用一种嵌套if语句解决:
scanf("%d",&x);
if(x<0) y=-1;
else
if(x==0) y=0;
else y=1;
printf("x=%d,y=%d\n",x,y);
三、用switch语句实现多分支选取构造
switch语句普通形式:
switch(表达式)
{case 常量1 :语句1
case 常量2 :语句2
┇
case 常量n :语句n
default : 语句n+1}
switch语句作用是依照表达式值,使流程跳转到不同语句。其(表达式)只能是整数类型(涉及字符型)。
例4.6:规定按照考试成绩级别输出百分制分数段,A等为85分以上,B等为70~84分,C等为60~69分 ,D等为 60分如下。成绩级别由键盘输入。
#include <stdio.h>
int main()
{char grade;
scanf("%c",&grade);
switch(grade)
{case 'A':printf("85~100\n");break;
case 'B':printf("70~84\n");break;
case 'C':printf("60~69\n");break;
case 'D':printf("<60\n");break;
default:printf("enter data error!\n");}}
如果用switch语句只进行一次检查。如果用if语句,至少要用3层嵌套if,进行3次检查判断即可得到成果。
例4.8:写一程序,判断某一年与否闰年。用变量leap代表与否闰年信息。若闰年,令leap=1;非闰年,leap=0。最后判断leap与否为1(真),若是,则输出“闰年”信息。
#include <stdio.h>
int main()
{int year,leap;
scanf("%d",&year);
if (year%4==0)
if(year%100==0)
if(year%400==0) leap=1;
else leap=0;
else leap=1;
else leap=0;
if (leap) printf("%d is ",year);
else printf("%d is not ",year);
printf("a leap year.\n");}
例4.10:运送公司对顾客计算运送费用。路程s (km)越远,每吨·千米运费越低。原则如下:
s < 250 没有折扣
250≤ s < 500 2%折扣
500≤ s < 1000 5%折扣
1000≤ s < 8%折扣
≤ s < 3000 10%折扣
3000≤ s 15%折扣
解题思路:设每吨每千米货品基本运费为p,货品重为w,距离为s,折扣为d,总运费f计算公式为f=p×w×s×(1-d)。折扣“变化点”都是250倍数在横轴上加一种坐标c,c值为s/250。c代表250倍数。
当c<1时,表达s<250,无折扣
1≤c<2时,表达250≤s<500,折扣d=2%;
2≤c<4时,d=5%; 4≤c<8时,d=8%;
8≤c<12时,d=10%; c≥12时,d=15%。
#include <stdio.h>
int main()
{int c,s;float p,w,d,f;
scanf("%f,%f,%d",&p,&w,&s);
if(s>=3000) c=12;
else c=s/250;
switch(c)
{case 0: d=0;break; case 1: d=2;break;
case 2: case 3: d=5;break;
case 4: case 5:
case 6: case 7: d=8;break;
case 8: case 9:
case 10: case 11: d=10;break;
case 12: d=15;break;}
f = p * w * s * (1 - d / 100);
printf(“freight=%10.2f\n”,f);}
第5章 循环构造程序设计
教学时数:4学时
重点难点:1.循环基本概念。
2.while 循环;do while 循环;for 循环。
3.循环嵌套。
教学规定:1.理解goto、do…while语句及其构成循环。
2.理解循环要素和控制办法。
3.掌握while语句用法。
4.纯熟掌握FOR 语句用法。
5.掌握循环嵌套。
6.理解break 语句和continue 语句用法。
教学内容:
一、为什么需要循环控制
例如,全班有50个学生,记录各学生三门课平均成绩。
输入学生1三门课成绩,并计算平均值后输出
scanf(“%f,%f,%f”,&s1,&s2,&s3);
aver=(s1+s2+s3)/3;
printf(“aver=%7.2f”,aver);
输入学生2三门课成绩,并计算平均值后输出
scanf(“%f,%f,%f”,&s1,&s2,&s3);
aver=(s1+s2+s3)/3;
printf(“aver=%7.2f”,aver);
┇
要对50个学生进行相似操作就要重复50次。大多数应用程序都会包括循环构造。
二、循环构造
(1)while (表达式)
循环体
(2)do
循环体
while(表达式)
1.while构造
例5.1:求1+2+3+……+100。
解题思路:这是累加问题,需先后将100个数相加,重复100次加法运算,可用循环实现。
#include <stdio.h>
int main()
{int i=1,sum=0;
while (i<=100)
{sum=sum+i; i++;}
printf("sum=%d\n",sum);}
#include <stdio.h>
int main()
{int i=1,sum=0;
do
{sum=sum+i;
i++;}
while(i<=100);
printf("sum=%d\n",sum);}
或
2.for构造
for(表达式1;表达式2;表达式3)
循环体
for语句执行过程:
①先求解表达式1。
②求解表达式2,若其值为真,执行循环体,然后执行下面第③步。若为假,则结束循环,转到第⑤步。
③求解表达式3。
④转回上面环节②继续执行。
⑤循环结束,执行for语句下面一种语句。
阐明:
①for语句不但可以用于循环次数已经拟定状况,还可以用于循环次数不拟定而只给出循环结束条件状况。for构造完全可以代替while构造。
②一种或两个或三个表达式均可以省略,但分号不能省略。
3.循环嵌套
一种循环体内又包括另一种完整循环构造,称为循环嵌套,内嵌循环中还可以嵌套循环,这就是多层循环(即嵌套中嵌套)。3种循环(while循环、do…while循环和for循环)可以互相嵌套。
4.几种循环比较
(1)普通状况下,3种循环可以互相代替。
(2)在while和do---while循环中,循环体应包括使循环趋于结束语句。
(3)用while和do---while循环时,循环变量初始化操作应在while和do--while语句之前完毕。而for语句可以在表达式1中实现循环变量初始化。
5.变化循环执行状态
用break语句提前终结整个循环(从循环体内跳出循环体)。用continue语句提前结束本次循环。
例5.4:在全系1000学生中,征集慈善募捐,当总数达到10万元时就结束,记录此时捐款人数,以及平均每人捐款数目。
编程思路:循环次数不拟定,但最多循环1000次,在循环体中合计捐款总数用if语句检查与否达到10万元,如果达到就不再继续执行循环,终结累加计算人均捐款数。
#include <stdio.h>
#define SUM 100000
int main()
{float amount,aver,total; int i;
for (i=1,total=0;i<=1000;i++)
{scanf("%f",&amount);
total= total+amount;
if (total>=SUM) break;}
aver=total / i ;
printf(“num=%d\naver=%10.2f\n“,i,aver);}
例5.6:输出如下4*5矩阵。
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
解题思路:可以用循环嵌套来解决此问题,用外循环来输出一行数据,用内循环来输出一列数据,按矩阵格式(每行5个数据)输出。
#include <stdio.h>
int main()
{int i,j,n=0;
for (i=1;i<=4;i++)
for (j=1;j<=5;j++,n++)
{if (n%5==0) printf (“\n”);
printf ("%d\t",i*j);}
printf("\n");}
三、循环程序举例
例5.7:用≈1/1-1/3+1/5-1/7+……公式求近似值,直到发现某一项绝对值不大于10-6 为止(该项不合计加)。
解题思路:每项分子都是1,后一项分母是前一项分母加2,第1项符号为正,从第2项起,每一项符号与前一项符号相反。
#include <stdio.h>
#include <math.h>
int main()
{int sign=1;double pi=0,n=1,term=1;
while(fabs(term)>=1e-6)
{pi=pi+term;n=n+2;sign=-sign;term=sign/n;}
pi=pi*4;
printf("pi=%10.8f\n",pi);}
例5.8:求费波那西(Fibonacci)数列前40个数。这个数列有如下特点:第1,2两个数为1、1。从第3个数开始,该数是其前面两个数之和。即:
这是一种有趣古典数学问题:有一对兔子,从出生后第3个月起每月都生一对兔子。小兔子长到第3个月后每月又生一对兔子。假设所有兔子都不死,问每月兔子总数为多少?
第几种月
小兔子对数
中兔子对数
老兔子对数
兔子总数
1
1
0
0
1
2
0
1
0
1
3
1
0
1
2
4
1
1
1
3
5
2
1
2
5
6
3
2
3
8
7
5
3
5
13
┇
┇
┇
┇
┇
#include <stdio.h>
int main()
{int f1=1,f2=1,f3;int i;
printf("%12d\n%12d\n",f1,f2);
for(i=1;i<=38;i++)
{f3=f1+f2;
printf("%12d\n",f3);
f1=f2;f2=f3;}}
#include <stdio.h>
代码课改写为:
int main()
{int f1=1,f2=1;int i;
for(i=1;i<=20;i++)
{printf("%12d %12d ",f1,f2);
if(i%2==0) printf("\n");
f1=f1+f2; f2=f2+f1;}}
所得成果入下:
例5.11:译密码。为使电文保密,往往按一定规律将其转换成密码,收报人再按商定规律将其译回原文。非字母字符保持原状不变,输入一行字符,规定
展开阅读全文