C语言谭浩强(第二版)课后答案第八章

8.1

int yue(int a,int b)

{

         int t;

         if(a<b)

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

         while(a%b!=0)

    {

             t=a%b;

             a=b;b=t;

         }

         return(b);

}

int bei(int a,int b,int c)

{

         int t;

         t=a*b/c;

         returnt;

}

int main(int argc, char *argv[]) {

int a,b,c,d;

printf("输入要求的数:\n");

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

c=yue(a,b);

d=bei(a,b,c);

printf("最大公约数:%d\n",c);

printf("最小公倍数:%d\n",d);

}

8.2

略,书上有

8.3

略,书上有

8.4

int convert(int a[3][3])

{

         inti,j,b[3][3];

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

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

         b[j][i]=a[i][j];

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

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

         a[i][j]=b[i][j];

}

int main(int argc, char *argv[]) {

int i,j;

int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};

convert(a);

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

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

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

         if(j%3==0)printf("\n");

}

8.8

int main(int argc, char *argv[]) {

int a,t,b,m,n;

scanf("%d",&a);

 t=a/1000;

 printf("%d",t);

 b=(a-t*1000)/100;

 printf("%d ",b);

 m=(a-1000*t-100*b)/10;

   printf("%d",m);

   n=a%10;

   printf("%d",n);

}

8.10

int word(char c)

{int flag;

         if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))return1;

         elsereturn 0;

}

char longist(char a[])

{

         inti,point,len=0,maxlen=0,maxpoint,flag=1;

         for(i=0;i<strlen(a);i++)

         {

         if(word(a[i]))

                  if(flag==1)

                  {

                          point=i;

                          flag=0;

                  }

                  else

                  len++;

         else

         {

                  flag=1;

                  if(len>maxlen)

                  {

                          maxlen=len;

                          maxpoint=point;

                  }

                  len=0;              

    }

         returnmaxpoint;

}

}

char a[81];

int i;

gets(a);

for(i=longist(a);word(a[i]);i++)

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

8.11

int main(int argc, char *argv[]) {

int paixu(int a[]);

int i,a[10]={1,4,6,8,3,5,2,9,7,10};

paixu(a);

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

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

}

int paixu(int a[])

{

         inti,j,t;

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

         for(j=0;j<10-i-1;j++)

         {

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

                  {

                     t=a[j];a[j]=a[j+1];a[j+1]=t;     

                  }

         }

}

8.12

牛顿迭代法原理就是:给定一个初始值x0,做一条垂线与函数f(x)相交,得到交点(x0,y0),过该点做f(x)上的一条切线,得到该切线与x轴的交点(x1,0)之后对(x1,0)重复上述步骤,直到与x轴交点的横坐标逐渐收敛到f(x)=0.

int main(int argc, char *argv[]) {

         doublediedai(double a);

         doublex=1,t;

         t=diedai(x);

         printf("%lf",t);

}

double diedai(double x)

{

         doublex0,f,f1;

         do

         {

                  x0=x;

                  f=x0*x0*x0+2*x0*x0+3*x0+4;

                  f1=3*x0*x0+4*x0+3;

                  x=x0-f/f1;

         }while(fabs(x-x0)>1e-5);

         returnx;

}

8.13

int main(int argc, char *argv[]) {

long duoxiang(long n,long x);

long x=3,n;

scanf("%d",&n);

printf("%d",duoxiang(n,x));

}

long duoxiang(long n,long x)

{

         long p;

         if(n==0)p=1;

         elseif(n==1)p=x;

         elseif(n>=1)

         {

                  p=((2*n-1)*x-duoxiang(n-1,x)-(n-1)*duoxiang(n-2,x))/(n*1.0);

         }

         returnp;

}

8.14

int main(int argc, char *argv[]) {

float ave(int a[][5]);

float danke(int a[][5]);

int max(int a[][5]);

inta[5][5]={{61,57,89,90,99},{85,83,87,89,96},{88,76,95,46,91},{88,69,92,93,94},{56,89,68,78,94}};

int i,j;

ave(a);

printf("\n\n");

danke(a);

printf("\n");

max(a);

}

float ave(int a[][5])

{

         int i,j;

         floatt=0,p=0,q=0;

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

         {

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

         t=t+a[i][j]/5.0;

         printf("第%d个学生平均分是:%.2f\n",i+1,t);

         p=p+t*t;q=q+(t/5)*(t/5);

         t=0;

         }

         printf("\n");

         printf("平均分方差:%.2f",p/5-q);

}

float danke(int a[][5])

{

         int i,j;

         floatt=0;

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

         {

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

         t=t+(a[j][i]/5.0);

         printf("单科%d个学生平均分是:%.2f\n",i+1,t);

         t=0;

         }

}

int max(int a[][5])

{

         inti,j,max=0,p,t;

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

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

                  if(max<a[i][j])

                  {

                          max=a[i][j];

                          p=i;t=j;

                  }

         printf("最高分%d是第%d人的第%d学科",max,p+1,t+1);  

}

8.16

int main(int argc, char *argv[]) {

int convert(int a,char *p);

char a[22];

gets(a);

int b=strlen(a);

printf("%d",convert(b,a));  

}

int convert(int a,char *p)//a为字符串长度,p为需要转换字符串指针

 int i,j,sum;

 

 sum=0;

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

 {  

 if(*(p+i)<='f'&&*(p+i)>='a') 

  j=(int)(*(p+i))-87; 

  elseif(*(p+i)<='F'&&*(p+i)>='A') 

  j=(int)(*(p+i))-55;

  else   

  j=(int)(*(p+i))-48; 

 sum=sum+pow(16.0,a-i-1)*j;

 

 }

 return (sum);

}

8.17

char N2Char(int n) 

    int i;  

    char flag ='a'; 

    char c; 

    if((i=n/10)!=0) 

       N2Char(i); 

    c = n%10 +'0'; 

   printf("%c", c); 

    returnflag; 

}

int main(int argc, char *argv[]) {

      intn; 

       printf("请输入一个整数:\n"); 

       scanf("%d", &n); 

        if(n<= 0) 

        { 

           printf("抱歉,您输入的值有误!\n请输入一个大于零的数:\n"); 

           scanf("%d", &n); 

        } 

       printf("将整数转换为字符串为:\n"); 

       if(N2Char(n) == 'a') 

               printf("转换成功!"); 

        return0;  

}

8.19

 

int main(int argc, char *argv[]) {

int nian(int n);

int year,m,month,day,t=0,i;

int a[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};

int b[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

scanf("%d,%d,%d",&year,&month,&day);

printf("%d,%d,%d",year,month,day);

m=nian(year);

if(m)

{

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

                  t=t+a[i];

         printf("这是一年中的第%d天",t+day);

}

else

{

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

                      t=t+b[i];

         printf("这是一年中的第%d天",t+day);  

}

}

 

int nian(int n)

{

int t;

if(n%4==0)

{

         if(n%100==0)

         {

                  if(n%400==0)t=1;

                  elset=0;

         }

         elset=1;

}

else t=0;

return t;

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值