C程序设计(第五版)谭浩强第二章习题答案

1.什么是算吗?试从日常生活中找3个例子,描述它们的算法。

  算法:广义地说,为解决一个问题而采取的方法和步骤,称为算法
    例子:
  比如你要喝茶就要先找到茶叶,烧一壶开水,然后将茶叶放到杯子里,然后将开水倒入杯中,然后等一段时间
再比如你要从a地到b地,中间可能有多种汽车换乘方案,是选速度最快的,还是选最省钱的,

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

  结构化的算法:一个结构化程序就是用计算机语言表示的结构化算法。用3中基本结构组成的程序必然是结构化的程序。(有三种基本结构构成的算法结构是结构化的算法)
    提倡:以为结构化的算法不存在无规律的转向,只在基本结构内才允许存在分支和向前或向后的跳转。不会出现死循环,是算法的质量得到保证和提高,所以提倡。

3.试述3种基本结构的特点,请另外设计两种基本结构。

   顺序结构:执行完A后执行B,是最简单的一种结构。
   选择结构:又称选取结构或分支结构,根据给定的条件P是否成立而执行A或B
   循环结构:又称重复结构,即反复执行某一部分的操作。
    a。当型(while)循环结构:当满足条件是进入循环。
    b.直到型(until)循环结构:直到满足条件是跳出循环。

4.编程题。
1)有两个瓶子A和B,分别盛放醋和酱油,要求将它们互换(即A瓶原来盛醋,现改盛酱油,B瓶则相反)。

#include
int main()
{
int a=5,b=6,c;
c=a;
a=b;
b=c;
printf("%d\t%d",a,b);
return 0;
 }

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

    #include 
      int main(){
     int a[10];
     int i,max;
     max=0;
     for(i=0;i<10;i++){
        scanf("请输入第%d个数:%d",i,&a[i]);
       if(i>=1){
         if(a[i-1]

3)有3个数a,b,c,要求按大小顺序把它们输出。

     #include 
int main(){
	int a[3];
	int i,j,temp;
     printf("请输入a,b,c三个数:");
     for(i=0;i<3;i++){
     	scanf("%d",&a[i]);
     }
      for(i=0;i<3;i++){
      	for(j=0;j<3-i;j++)
      	 if(a[j]>a[j+1]){
 	      	temp=a[j];
 	      	a[j]=a[j+1];
 	      	a[j+1]=temp;
 	      }
      }
       printf("这三个数由小到大的排列序为:");
	    for(i=0;i<3;i++){
    		printf("%d ",a[i]);
    	} 
    	printf("\n");
    	 return 0;
} 

4)求1+2+3+··+100;

     #include 
int main(){	
      int i=1,total=0;
      for(i;i<=100;i++){
      	total+=i;
      }
      printf("%d",total);
    	 return 0;
} 

5)判断一个数N能够与同时被3和5整除、

    #include 
int main(){	
    int n;
    printf("请输入一个数n:\n"); 
    scanf("%d",&n);
    if((n%3==0)&&(n%5==0)){
    	printf("%d可以同时被3和5整除\n",n);
    }else{
    		printf("%d不可以同时被3和5整除\n",n);
    }
    	 return 0;
} 

6)将100-200之间的素数输出

     #include 
int main(){	
   int i=0,count=0;
   for(i=100;i<=200;i++){
   	int j=0;
   	 for(j=2;j<=i;j++){
 	   	if(i%j==0){
	   	 	break;
	   	 }
 	   }
 	   if(i==j){
   	 	count++;
   	 	printf("%d ",i);
   	 }
   }
   printf("\ncount=%d\n",count);
    	 return 0;
} 

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

     #include 
int main(){
	int m,n,a=0;
	scanf("%d %d",&n,&m);
	if(m0;i--){
		if((m%i==0)&&(n%i==0)){
			printf("%d",i);
			break;
		}
	}

    	 return 0;
} 

7)求两个数m和n的最小公倍数

        #include 
int main(){
int m,n,a=0;
scanf("%d %d",&m,&n);
if(m0;i++){
	if((i%m==0)&&(i%n==0)){
		printf("%d",i);
		break;
	}
}
    	 return 0;
} 


   方法二: #include 
int main(){
int m,n,a=0,num;
scanf("%d %d",&m,&n);
if(m0;i--){
 	if((m%i==0)&&(n%i==0)){
	 	num=i;
	 	break;
	 }
 }
 printf("%d",m*n/num);
    	 return 0;
} 

8)求方程式ax2+bx+c=0的根,分别考虑:
a.有两个不等的实根。
b.有两个相等的实根。
#include
#include
int main()
{
int a,b,c,d,q,x1,x2;
scanf("%d%d%d",&a,&b,&c);
d = bb-4a*c;
q = sqrt(d);
if(d>0)
{
x1 = ((-1)b+q)/2a;
x2 = ((-1)b-q)/2a;
printf(“x1=%d\tx2=%d”,x1,x2);
}else if(d == 0)
{
x1 = ((-1)b+q)/2a;
printf(“x1=x2=%d”,x1);
}else
{
printf(“没有实数根!”);
}
return 0;
}

5.用N-S图表示第4题中各题的算法。
6.用伪代码表示第4题中各题的算法。
7.什么叫结构化程序设计?它的主要内容是什么?

  用计算机语言表示的结构化算法
  内容:强调程序设计风格和程序结构的规范化,提倡清晰的结构。

8.用自定向下、逐步细化的方法进行一下算法的设计:
1)输出1900-2000年中是闰年的年份,符合下面两个条件之一的年份是闰年;
a.能被4整除但不能被100整除;
b.能被100整除且能被400整除;

    #include
int main()
{
int i=1900;
for(i;i<=2000;i++)
{
if((i%4==0)&&(i%100!=0)||(i%100==0)&&(i%400==0))
{

printf("%d\n",i);

}

}

return 0;

}

2)求ax2+bx+c=0的根,分别考虑d=b2-4ac大于0,等于0和小于0这3种情况。

 #include

#include

/*

有两个不等的实根即▲=b*b-4*a*c > 0

有两个相等的实根即▲=b*b-4*a*c = 0

*/

int main()

{

int a,b,c,d,q,x1,x2;

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

d = b*b-4*a*c;

q = sqrt(d);

if(d>0)

{

x1 = ((-1)*b+q)/2*a;

x2 = ((-1)*b-q)/2*a;

printf("x1=%d\tx2=%d",x1,x2);

}else if(d == 0)

{

x1 = ((-1)*b+q)/2*a;

printf("x1=x2=%d",x1);

}else

{

printf("没有实数根!");

}

return 0;

}

3)输入10个数,输出其中最大的一个数。

#include
int main()
{
int a[10];
int i,max=0;
for(i=0;i<10;i++){
scanf("%d",&a[i]);
if(i==0){
max = a[i];
}
if(i>0){
if(max max=a[i];
}
}
}
printf("%d",max);
return 0;
}

你可能感兴趣的:(C答案)