第二章 程序的灵魂—算法 (答案)

来源:互联网 发布:全时网络视频会议 编辑:程序博客网 时间:2024/05/21 22:34

一个程序应包括:

l 对数据的描述。在程序中要指定数据的类型和数据的组织形式,即数据结构(data structure)。

l 对操作的描述。即操作步骤,也就是算法(algorithm)。

数据结构+算法=程序

教材认为:

程序=算法+数据结构+程序设计方法+语言工具和环境

【例2.1】求1+2+3+4+5。

#include "stdafx.h"int _tmain(int argc, _TCHAR* argv[]){int i,n,sum=0;//此处为0printf("请输入n:\n");scanf("%d",&n);for(i=1;i<=n;i++){sum += i;}printf("1+2+3+...+n的和为:%d\n",sum);return 0;}

求1*2*3*4*5。
#include "stdafx.h"int _tmain(int argc, _TCHAR* argv[]){int i,n,sum=1;//此处为1printf("请输入n:\n");scanf("%d",&n);for(i=1;i<=n;i++){sum *= i;}printf("1*2*3*...*n的积为:%d\n",sum);return 0;}


【例2.2】有50个学生,要求将他们之中成绩在80分以上者打印出来。

#include "stdafx.h"int _tmain(int argc, _TCHAR* argv[]){int sz[4],i;for(i=1;i<=3;i++){printf("enter student %d is score:",i);scanf("%d",&sz[i]);}for(i=1;i<=3;i++){if(sz[i]>=80)printf("student %d score:%d\n",i,sz[i]);}return 0; }

【例2.3】判定2000 — 2500年中的每一年是否闰年,将结果输出。

润年的条件:

1)       能被4整除,但不能被100整除的年份;

2)       能被100整除,又能被400整除的年份;

#include "stdafx.h"int _tmain(int argc, _TCHAR* argv[]){printf("打印出2000-2500年间的闰年\n"); for(int year=2000;year<=2500;year++){ if(year%4==0 && year%100!=0 || year%400==0) {printf("闰年: %d\t",year); } }return 0; }


【例2.4】求1-1/2+1/3-1/4+…+1/99-1/100

算法可表示如下:

S1: sigh=1

S2: sum=1

S3: deno=2

S4: sigh=(-1)×sigh

S5: term= sigh×(1/deno )

S6: term=sum+term

S7: deno= deno +1

S8:若deno≤100,返回S4;否则,结束。

#include "stdafx.h"int _tmain(int argc, _TCHAR* argv[]){int sign=1;float deno=2,sum=1,term;/*while(deno<=100){sign=-sign;term=sign/deno;sum=sum+term;deno=deno+1;}*/for(deno=2;deno<=100;deno++){sign=-sign;term=sign/deno;sum=sum+term;}printf("1-1/2+1/3-1/4+…+1/99-1/100 = %f\n",sum); }

【例2.5】对一个大于或等于3的正整数,判断它是不是一个素数。

算法可表示如下:

S1: 输入n的值

S2: i=2

S3: n被i除,得余数r

S4:如果r=0,表示n能被i整除,则打印n“不是素数”,算法结束;否则执行S5

S5: i+1→i

S6:如果i≤n-1,返回S3;否则打印n“是素数”;然后算法结束。

改进:

S6:如果i≤,返回S3;否则打印n“是素数”;然后算法结束。


//我草出题的 MLGBD ,这个是哥德巴赫猜想的一部分吧,有木有。。。。//35 =5*7 是素数不?  尼玛给的公式只能求单双数啊啊啊。。。。//尼玛是陈景润啊啊啊啊//考虑精度毋须太大,费马数即可,留待有空再做。#include "stdafx.h"int _tmain(int argc, _TCHAR* argv[]){int n;printf("输入一个任意自然数 n \n");scanf("%d",&n);if(n<3)return 0;else{if (n%2==0){printf("%d 不是素数  \n",n);}else{printf("%d 是素数  \n",n);}}}


2.3   算法的特性

l        有穷性:一个算法应包含有限的操作步骤而不能是无限的。 

l        确定性:算法中每一个步骤应当是确定的,而不能应当是含糊的、模棱两可的。

l        有零个或多个输入。

l        有一个或多个输出。

l        有效性:算法中每一个步骤应当能有效地执行,并得到确定的结果。

对于程序设计人员,必须会设计算法,并根据算法写出程序。


【例2.20】求1×2×3×4×5用C语言表示。

#include "stdafx.h"int _tmain(int argc, _TCHAR* argv[]){int i=2,t=1;while(i<=5){t*=i;i=i+1;}printf("%d",t);}


【例2.21】求级数的值。


#include "stdafx.h"main(){int sigh=1;float deno=2.0,sum=1.0,term;while(deno<=100){ sigh= -sigh; term= sigh/ deno;sum=sum+term;deno=deno+1;} printf(“%f”,sum);}

2.5    结构化程序设计方法

l        自顶向下;

l        逐步细化;

l        模块化设计;

l        结构化编码。


原创粉丝点击