C程序设计谭浩强第二章习题与答案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

习题

2.1什么是算法?是从日常生活中找三个例子,描述他们的算法?

答:对操作的描述,即操作步骤,就是算法。

????????广义的说;为解决一个问题而采取的方法和步骤,就称为“算法”。

例:(略)

2.2什么叫结构化的算法?为什么要提倡结构化的算法?

答:由基本节构所构成的算法属于“结构化”的算法。

????? 结构化的算法便于编写、阅读、便于修改和维护。这就减少了程序出错的机会、提高了程序的可靠性,保证了程序的质量。

2.3试述三种基本结构的特点,你能否自己另外设计两种基本结构(要符合基本结构的特点)。

2.4

答:基本结构有以下共同点:

?????? 1:只有一个入口。图2-14-------2-17中的a点为入口。

??????? 2:只有一个出口。图2-14-------2-17中的b点为出口。注意,一个判断框有两个出口,但一个选择结构只有一个出口。不能混淆。

??????? 3:结构内的每一部分都有被执行到的机会。也就是说,对每一个框来说,都应当有一条到出口的路径通过它。图2-20中就没有一条从入口到出口的路径通过A框。

???????? 4:结构内不存在死循环(无终止的循环)。图2-21就是一个死循环。

????? 需要说明的是基本结构并不一定只限于以上3中,只要有以上四种特点就可以。人们可以自己定义之。例:如下两图

2.5用传统流程图表示求解一下问题的算法。

(1)有两个瓶子A和B,分别放醋和酱油,要求将他们互换。

#include

void main()

{

int a;

int b;

int c;

a=10;b=5;

printf("%d,%d\n",a,b);

c=a;a=b;b=c;

printf("%d,%d\n",a,b);

}

(2)一次将10个数输入,要求将将其中最大的数输出。

#include

void main()

{

int a[10];

int i;

int max;

printf("input 10 numbers.\n");

for(i=0;i<10;i++)

scanf("%d",&a[i]);

printf("\n");

max=a[0];

for(i=1;i<10;i++)

if(max

printf("the max is: %d\n",max) ;

}

(3)有3个数a b c,要求安大小顺序把他们输出。#include

void main()

{

int a;

int b;

int c;

int t;

scanf("%d%d%d",&a,&b,&c);

printf("\n");

printf("the first numbers:");

printf("%d,%d,%d\n",a,b,c);

if(a

{t=a;a=b;b=t;}

if(a

{t=a;a=c;c=t;}

if(b

{t=b;b=c;c=t;}

printf("the changed numbers:");

printf("%d,%d,%d\n",a,b,c);

}

(4)求1+2+3+ (100)

#include

void main()

{

int i;

int sum=0;

for(i=1;i<=100;i++)

sum=sum+i;

printf("the sum is:%d\n",sum);

}

(5)判断一个数n能否同时被3和5整除。

#include

void main()

{

int i;

printf("input i\n");

scanf("%d",&i);

if(i%3==0 && i%5==0)

printf("%d is ok!\n",i);

else

printf("%d can not!\n",i);

}

(6) 将100~200之间的素数输出。

#include

void main()

{

int i,j;

for(i=100;i<=200;i++)

for(j=2;j

{

if(i%j==0) break;

if(i==j+1) printf("%d\n",i);

}

}

(7) 求两个数m 和n 的最大公约数。

#include

void main()

{

int m,n;

int t;

int i;

int z=1;

scanf("%d%d",&m,&n);

if(m>n) {t=m;m=n;n=t;}

for(i=2;i<=m;i++)

{

if(m%i==0 && n%i==0) z=i;

}

printf("the answer is:%d\n",z);

}

(8) 求方程式02=++c bx a x 的根。分别考虑:①有两个不等的实根;②有两个相等的实根。

#include

#include

void main()

{

float a,b,c;

float dt;

float m,n;

float x1,x2;

printf("input a,b,c!\n");

scanf("a=%f,b=%f,c=%f",&a,&b,&c);

dt=sqrt(b*b-4*a*c);

m=-b/(2*a);

n=dt/(2*a);

if(dt<=1e-6)

{

相关文档
最新文档