算法设计方法与优化滕国文部分课后习题问题详解.docx

上传人:b****8 文档编号:12912025 上传时间:2023-06-09 格式:DOCX 页数:117 大小:44.83KB
下载 相关 举报
算法设计方法与优化滕国文部分课后习题问题详解.docx_第1页
第1页 / 共117页
算法设计方法与优化滕国文部分课后习题问题详解.docx_第2页
第2页 / 共117页
算法设计方法与优化滕国文部分课后习题问题详解.docx_第3页
第3页 / 共117页
算法设计方法与优化滕国文部分课后习题问题详解.docx_第4页
第4页 / 共117页
算法设计方法与优化滕国文部分课后习题问题详解.docx_第5页
第5页 / 共117页
算法设计方法与优化滕国文部分课后习题问题详解.docx_第6页
第6页 / 共117页
算法设计方法与优化滕国文部分课后习题问题详解.docx_第7页
第7页 / 共117页
算法设计方法与优化滕国文部分课后习题问题详解.docx_第8页
第8页 / 共117页
算法设计方法与优化滕国文部分课后习题问题详解.docx_第9页
第9页 / 共117页
算法设计方法与优化滕国文部分课后习题问题详解.docx_第10页
第10页 / 共117页
算法设计方法与优化滕国文部分课后习题问题详解.docx_第11页
第11页 / 共117页
算法设计方法与优化滕国文部分课后习题问题详解.docx_第12页
第12页 / 共117页
算法设计方法与优化滕国文部分课后习题问题详解.docx_第13页
第13页 / 共117页
算法设计方法与优化滕国文部分课后习题问题详解.docx_第14页
第14页 / 共117页
算法设计方法与优化滕国文部分课后习题问题详解.docx_第15页
第15页 / 共117页
算法设计方法与优化滕国文部分课后习题问题详解.docx_第16页
第16页 / 共117页
算法设计方法与优化滕国文部分课后习题问题详解.docx_第17页
第17页 / 共117页
算法设计方法与优化滕国文部分课后习题问题详解.docx_第18页
第18页 / 共117页
算法设计方法与优化滕国文部分课后习题问题详解.docx_第19页
第19页 / 共117页
算法设计方法与优化滕国文部分课后习题问题详解.docx_第20页
第20页 / 共117页
亲,该文档总共117页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

算法设计方法与优化滕国文部分课后习题问题详解.docx

《算法设计方法与优化滕国文部分课后习题问题详解.docx》由会员分享,可在线阅读,更多相关《算法设计方法与优化滕国文部分课后习题问题详解.docx(117页珍藏版)》请在冰点文库上搜索。

算法设计方法与优化滕国文部分课后习题问题详解.docx

算法设计方法与优化滕国文部分课后习题问题详解

第二章:

求值法

2-1.有三个数a,b,c,要求按从大到小的顺序把他们输出。

#include"stdio.h"

voidfun(inta,intb,intc)

{

intt;

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",c,b,a);

}

voidmain()

{

inta,b,c;

printf("inputnumber:

");

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

fun(a,b,c);

printf("\n");

}

2-2.给定n个数,求这些数中的最大值。

#include 

void main()

{

   int i, j, temp,n; 

   int a[1000]; 

   scanf("%d",n);

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

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

   for (j=0;j

   {

    for(i=0;i

{

      if (a[i] > a[i + 1])

  {

        temp=a[i]; 

        a[i]=a[i+1]; 

        a[i+1]=temp;

  }

}

   }

 printf("%d\n",a[n]);

}

2-3.求1+2+3+…+100的和。

#include"stdio.h"

voidmain()

{

intnum,sum=0;

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

{

sum+=num;

}

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

}

2-4.判断一个数n能否同时被3和5整数。

#include"stdio.h"

intfun(intn)

{

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

returnn;

else

return0;

}

2-5.将100至200之间的素数输出。

#include"stdio.h"

#include"math.h"

intisp(intm)

{

inti;

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

{

if(m%i==0)

return0;

}

return1;

}

voidmain()

{

intn;

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

{

if(isp(n))

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

}

}

2-6.求两个数m和n的最大公约数。

#include"stdio.h"

intnum(intm,intn)

{

intr,t;

if(m

{t=m;m=n;n=t;}

r=m%n;

while(r)

{

m=n;

n=r;

r=m%n;

}

returnn;

}

voidmain()

{

intx,y,s;

printf("inputxandy:

");

scanf("%d%d",&x,&y);

s=num(x,y);

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

}

2-7.使给定的一个4*4的二维数组转置,即行列互换。

#include

#definex4

inta[x][x];

voidmain()

{

voidzhuan(inta[x][x]);

intm,n;

printf("pleaseinput%dnubbers\n",x*x);

for(m=0;m

for(n=0;n

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

printf("\n原数组:

\n");

for(m=0;m

{for(n=0;n

printf("%5d",a[m][n]);

printf("\n");}

zhuan(a);

printf("\n转置后的数组:

\n");

for(m=0;m

{for(n=0;n

printf("%5d",a[m][n]);printf("\n");}

}

voidzhuan(inta[x][x])

{

intc,d,e;

for(c=0;c

for(d=c+1;d

{e=a[c][d];

a[c][d]=a[d][c];

a[d][c]=e;

}

}

2-8.输出50个学生中成绩高于80分者的学号和成绩。

#include

intmain()

{

inta[10][5],i,j;

printf("请输入50个学生的成绩");

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

{

for(j=0;j<5;j++)

{

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

}

}

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

for(j=0;j<5;j++)

{

if(a[i][j]>80)

{

printf("这个学生的学号是%d,这个学生的成绩是%d\n",i*10+j+1,a[i][j]);

}

}

return0;

}

2-9.输出年份1990-2500中的所有闰年。

#include"stdio.h"

voidleap()

{

inty;

for(y=1990;y<=2500;y++)

{

if((y%4==0&&y%100!

=0)||y%400==0)

printf("%d",y);

}

printf("\n");

}

voidmain()

{

leap();

}

2-10.求1-1/2+1/3-1/4+…+1/99-1/100的值。

#include

intmain()

{

doublesum;

inti;

for(sum=0,i=1;i<=100;i++)

{

if(i%2==1)

{

sum+=1.0/i;

}

elseif(i%2==0)

{

sum-=1.0/i;

}

}

printf("结果:

%lf",sum);

return0;

}

2-11.输出三角形的三边长,试求三角形的面积。

#include"stdio.h"

#include"math.h"

voidmain()

{

intx,y,z,l;

doublearea;

printf("inputxandyandz:

");

scanf("%d%d%d",&x,&y,&z);

l=(x+y+z)/2;

area=sqrt(l*(l-x)*(l-y)*(l-z));

printf("%.2f\n",area);

}

2-12.求ax2+bx+c=0方程的根,a,b,c由键盘输入(假设b2-4ac>0)

#include"stdio.h"

#include"math.h"

voidmain()

{

inta,b,c;

floatx1,x2;

printf("inputaandbandc:

");

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

x1=((-b)+sqrt(b*b-4*a*c))/(2*a);

x2=((-b)-sqrt(b*b-4*a*c))/(2*a);

if(b*b-4*a*c>=0&&a!

=0)

printf("%.2f,%.2f\n",x1,x2);

else

printf("flase\n");

}

2-13.输出成绩等级“优秀”、“良好”、“中等”。

“及格”,“不及格”。

其中90分(含90分)以上为优秀,80-89分为良好,70-79分为“中等”,60-69分为“及格”,60分以下为不及格。

#include 

void main(){

    int scrnum;

    printf("请输入考试成绩");

    scanf("%d",&scrnum);

    if(scrnum>=90){

        printf("优秀\n");

    }else if(scrnum>=70 && scrnum<90){

        printf("良好\n");

    }else if(scrnum>=60 && scrnum<70){

        printf("及格\n");

    }else if(scrnum<60){

        printf("不及格!

\n");

    }

}

2-14.给定一个正整数,求它的位数并分别输出每一位数字。

#include"stdio.h"

voidmain()

{

intn,i=0,k;

printf("inputn:

");

scanf("%d",&n);

while(n!

=0)

{

k=n%10;

printf("%d",k);

n=n/10;

i++;

}

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

}

2-15.输出所有水仙花数(水仙花数是指一个三位数,其各个数字立方和等于它本身)。

#include"stdio.h"

voidmain()

{

inta,b,c,i;

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

{

a=i/100;

b=(i%100)/10;

c=i%10;

if(i==a*a*a+b*b*b+c*c*c)

{

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

}

}

printf("\n");

}

2-16.求1!

+2!

+3!

+….30!

的值。

2-17.求Fibonacci数列前N个数。

Fibonacci数列的特点;第一个和第二个数都为1,从第三个开始,每个数都等于其前两个数的和。

#include"stdio.h"

#defineN100

voidmain()

{

intn,i,f[N];

f[0]=f[1]=1;

printf("inputn:

");

scanf("%d",&n);

for(i=2;i

f[i]=f[i-1]+f[i-2];

for(i=0;i

printf("%d\t",f[i]);

printf("\n");

}

2-18.把200以不能被3整除的数输出。

#include"stdio.h"

voidmain()

{

inti;

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

{

if(i%3!

=0)

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

}

printf("\n");

}

2-19.班级有20名小学生,有语文,数学,英语的成绩,求班级各科的平均分。

#include "stdio.h"

void  main()

{

int i;

float avg1,avg2,avg3,s1=0,s2=0,s3=0,a[20],b[20],c[20];

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

scanf("%f%f%f",&a[i],&b[i],&c[i]);

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

{

s1+=a[i];

s2+=b[i];

s3+=c[i];

}

avg1=s1/20;

avg2=s2/20;

avg3=s3/20;

printf("%f,%f,%f",avg1,avg2,avg3);

}

2-20.输出100以的所有素数,并且5个一行。

#include"stdio.h"

#include"math.h"

intisp(intm)

{

inti;

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

if(m%i==0)

return0;

return1;

}

voidmain()

{

intn,k;

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

{

if(isp(n))

{

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

k++;

if(k%5==0)

printf("\n");

}

}

printf("\n");

}

2-21.输出1000到10000以的可逆素数。

#include

#include

intinverse(intn);

intisPrimer(intn);

main()

{

inti;

for(i=1000;i<=10000;i++)

{

if(isPrimer(i))

{

if(isPrimer(inverse(i)))

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

}

}

}

intinverse(intn)

{

intm=0,a;

for(;n>0;n/=10)

{

a=n%10;

m=m*10+a;

}

return(m);

}

intisPrimer(intn)

{

inti,judge=1;

for(i=2;i<=sqrt(n);i++)

{

if(n%i==0)

{

judge=0;

break;

}

}

returnjudge;

}

2-22.两个数之差为2的素数,称谓孪生素数。

试输出5组孪生数。

#include"stdio.h"

main()

{

int i,j;

int flag,n=0;

int a[100];

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

flag=1;

for(j=2;j

{

if(i%j==0) 

flag=0;

break;

}

}

if(flag==1)

{

a[n]=i;n++;

}

}

for(i=0;i

{

for(j=i+1;j

if(a[j]-a[i]==2)

printf("%d ",a[i]);

printf("%d ",a[j]);

if(a[j+1]-a[j]==2)

{

printf("%d ",a[j+1]);

i=3;

}

printf("\n");

}

}

}

}

2-23.试输出1000到10000以的对称数,并输出对称的个数。

2-24.输入10个学生5门课的成绩,计算每个学生的平均分,每门课的平均分兵找出各门课最高分数所对应的学生。

2-25.输入一行字符,统计其中数字,空格,小写字母,大写字母以及其他符号的个数。

#include"stdio.h"

voidmain()

{

chars;

inti=0,j=0,k=0,m=0,da=0,xiao=0;

printf("pleaseinputthestring\n");

while((s=getchar())!

='\n')/*循环从键盘读入字符直到一行结束(输入回车)*/

{

if((s<='z'&&s>='a')||(s<'Z'&&s>'A'))

{

if(s<='Z'&&s>='A')da++;

if(s<='z'&&s>='a')xiao++;

i++;/*i存入字母数*/

}

elseif(s=='')j++;/*j存入空格数,注意s==''里面是有一个空格的*/

elseif(s<58&&s>47)k++;/*k存入数字数*/

elsem++;/*m存入其它符号数*/

}

printf("字符:

%d大写字母:

%d小写字母:

%d\n空格:

%d\n数字:

%d\n其它:

%d\n",i,da,xiao,j,k,m);/*打印行中的字母,空格,数字,其它字符数*/

}

2-26.任意给定n值,按如下螺旋的方式输出方阵:

n=3时输出123

894

765

n=4时输出

1234

1213145

1116156

10987

#include

Voidspi(intn)

{

inti=-1,j=0,k=n,a[100][100],r,s=1,t=1;

while(s<=n*n)

{

for(r=0;r

{

i+=t;

a[j][i]=s++;

}

for(r=k;r<2*k-1;r++)

{

j+=t;

a[j][i]=s++;

}

k--;

t=-t;

}

for(i=0;i

{

for(j=0;j

printf("%3d",a[i][j]);

printf("\n");

}

}

voidmain()

{

intn;

printf("inputanumber");

scanf("%d",&n);

spi(n);

}

2-27.输出魔方阵(魔方阵是它的每一行,每一列和对角线之和均相等的方阵)如三阶魔方阵为:

816

357

492

#include"stdio.h"

voidmain()

{

inta[50][50],n,x,y,i,j,k;

printf("输入魔方阵的阶数n:

n");

scanf("%d",&n);

if(n%2==0)n++;

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

for(j=1;j<=n;j++)

a[i][j]=0;

i=1;j=(n+1)/2;a[i][j]=1;

for(k=2;k<=n*n;k++)

{i--;j++;

if((i<1)&&(j>n)){i+=2;j--;}

if(i<1)i=n;

if(j>n)j=1;

if(a[i][j]!

=0){i+=2;j--;}

a[i][j]=k;

}

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

for(j=1;j<=n;j++)

{printf("%3d",a[i][j]);

if(j==n)printf("\n");}

getchar();getchar();

}

2-28编程打印形如下规律的n*n方阵例如下图:

使左对角线和右对角线上的元素为0,它们上方的元素为1,左方的元素为2,下方元素为3,右方元素为4,下图是一个符合条件的阶矩阵。

                         0   1  1  1  0

                         2   0  1  0  4

                         2   2  0  4  4

                         2   0  3  0  4

                         0   3  3  3  0

 

第三章:

累加法

3-1编程求1-2+3-4+5-6+7-……+99-100。

#include

main()

{

  int i,s;

  for(i=1,s=0;i<=100;i++)

  {

    if(i%2!

=0)

    s+=i;

    else

    s-=i;

  }

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

  getch();

}

3-2.1-1/2+1/3-1/4+…-1/100

#include

voidp2()

{

floats=0;

intp=-1;

for(inti=1;i<101;i++){

p*=(-1);

s+=p*1.0/i;

}

printf("1-1/2+1/3-1/4+…-1/100的结果是:

%f\n",s);

}

voidmain()

{

p2();

}

3-3求100以所有素数的和

#include

intfun(intm)

{

for(inti=2;i

if(m%i==0)

return0;

return1;

}

voidmain()

{

inti;

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

{

if(fun(i))

{

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

}

}

}

3-10输入一个数n,求1+2+3+4+5+4+3+2+1的值

#include

intfun(intn)

{

ints=0;

for(inti=1;i<=n;i++)

{

s+=i;

}

returns;

}

voidmain()

{

intn;

scanf("%d",&n);

printf("%d",2*fun(n)-n);

}

3-15求1000以所有的完全数的和(完全数是指一个数除其本身外的因子之和等于该数。

例如,28=1+2+4+7+14,因此28为完全数)。

#include

intfun(intn)

{

ints=0;

for(inti=1;i<=n-1;i++)

{

if(n%i==0)

s=s+i;

}

if(s==n)

{

printf("%d",n);

returns;

}

else

return0;

}

voidmain()

{

intsum=0;

for(inti=1;i<=1000;i++){

sum+=fun(i);

}

printf("\n");

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

}

3-19.计算S=1+2+3+…+n+(n+1)+(n+2)+…在累加过程过程中,求当S的值首次大于3000时的n的n值是多少?

#include

void main()

{

    int n,s;

    n=1,s=0;

    while(s<3000)

    {

        s+=n;n++;//这句程

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 临时分类 > 批量上传

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2