Loading...
  所在位置:论坛首页 -> 计算机科学与技术 -> 程序设计 -> c语言习题答案(第7章,新版第8章)(潭浩强,清华出版社)
回复

c语言习题答案(第7章,新版第8章)(潭浩强,清华出版社)

作者:pp 时间:2007-12-15 14:46:00 收藏 编辑

补充第7章 函数

7.13
main()
{int x,n;
 float p();
 scanf("%d,%d",&n,&x);
 printf("P%d(%d)=%10.2f\n",n,x,p(n,x));
}
float p(tn,tx)
int tn,tx;
{if(tn==0)
   return(1);
 else if(tn==1)
   return(tx);
 else
   return(((2*tn-1)*tx*p((tn-1),tx)-(tn-1)*p((tn-2),tx))/tn);
}

7.14
#define N 10
#define M 5
float score[N][M];
float a_stu[N],a_cor[M];
main()
{int i,j,r,c;
 float h;
 float s_diff();
 float highest();
 r=0;
 c=1;
 input_stu();
 avr_stu();
 avr_cor();
 printf("\n  number  class  1  2  3  4  5  avr");
 for(i=0;i<N;i++)
   {printf("\nNO%2d",i+1);
    for(j=0;j<M;j++)
      printf("%8.2f",score[i][j]);
    printf("%8.2f",a_stu[i]);
    }
 printf("\nclassavr");
 for(j=0;j<M;j++)
   printf("%8.2f",a_cor[j]);
 h=highest(&r,&c);
 printf("\n\n%8.2f    %d    %d\n",h,r,c);
 printf("\n   %8.2f\n",s_diff());
}
input_stu()
{int i,j;
 float x;
 for(i=0;i<N;i++)
   {for(j=0;j<M;j++)
      {scanf("%f",&x);
       score[i][j]=x;
      }
    }
}
avr_stu()
{int i,j;
 float s;
 for(i=0;i<N;i++)
   {for(j=0,s=0;j<M;j++)
      s+=score[i][j];
    a_stu[i]=s/5.0;
   }
}
avr_cor()
{int i,j;
 float s;
 for(j=0;j<M;j++)
   {for(i=0,s=0;i<N;i++)
      s+=score[i][j];
    a_cor[j]=s/(float)N;
   }
}
float highest(r,c)
int *r,*c;
{float high;
 int i,j;
 high=score[0][0];
 for(i=0;i<N;i++)
   for(j=0;j<M;j++)
     if(score[i][j]>high)
       {high=score[i][j];
        *r=i+1;
        *c=j+1;
        }
 return(high);
}
float s_diff()
{int i,j;
 float sumx=0.0,sumxn=0.0;
 for(i=0;i<N;i++)
   {sumx+=a_stu[i]*a_stu[i];
    sumxn+=a_stu[i];
   }
 return(sumx/N-(sumxn/N)*(sumxn/N));
}

7.15
#include<stdio.h>
#define N 10
void input_e(num,name)
int num[];
char name[N][8];
{int i;
 for(i=0;i<N;i++)
   {scanf("%d",&num[i]);
    gets(name[i]);
   }
}
void sort(num,name)
int num[];
char name[N][8];
{int i,j,min,temp1;
 char temp2[8];
 for(i=0;i<N-1;i++)
   {min=i;
    for(j=i;j<N;j++)
      if(num[min]>num[j])min=j;
    temp1=num[i];
    num[i]=num[min];
    num[min]=temp1;
    strcpy(temp2,name[i]);
    strcpy(name[i],name[min]);
    strcpy(name[min],temp2);
   }
 for(i=0;i<N;i++)
   printf("\n%5d%10s",num[i],name[i]);
}
void search(n,num,name)
int n,num[];
char name[N][8];
{int top,bott,min,loca;
 loca=0;
 top=0;
 bott=N-1;
 if((n<num[0])||(n>num[N-1]))
   loca=-1;
 while((loca==0)&&(top<=bott))
   {min=(bott+top)/2;
    if(n==num[min])
      {loca=min;
       printf("number=%d,name=%s\n",n,name[loca]);
      }
    else if(n<num[min])
      bott=min-1;
    else
      top=min+1;
    }
 if(loca==0||loca==-1)
   printf("number=%d is not in table\n",n);
}
main()
{int num[N],number,flag,c,n;
 char name[N][8];
 input_e(num,name);
 sort(num,name);
 for(flag=1;flag;)
   {scanf("%d",&number);
    search(number,num,name);
    printf("continue?Y/N!");
    c=getchar();
    if(c=='N'||c=='n')
      flag=0;
   }
}

7.16
#include<stdio.h>
#define MAX 1000
main()
{int c,i,flag,flag1;
 char t[MAX];
 i=0;
 flag=0;
 flag1=1;
 while((c=getchar())!='\0'&&i<MAX&&flag1)
   {if(c>='0'&&c<='9'||c>='A'&&c<='F'||c>='a'&&c<='f')
      {flag=1;
       t[i++]=c;
      }
    else if(flag)
      {t[i]='\0';
       printf("\nnumber=%d\n",htoi(t));
       printf("continue?");
       c=getchar();
       if(c=='n'||c=='N')
         flag1=0;
       else
         {flag=0;
          i=0;
          }
       }
     }
}
htoi(s)
char s[];
{int i,n;
 n=0;
 for(i=0;s[i]!='\0';i++)
   {if(s[i]>='0'&&s[i]<='9')
      n=n*16+s[i]-'0';
    if(s[i]>='a'&&s[i]<='f')
      n=n*16+s[i]-'a'+10;
    if(s[i]>='A'&&s[i]<='F')
      n=n*16+s[i]-'A'+10;
    }
 return(n);
}

7.17
#include<stdio.h>
void convert(n)
int n;
{int i;
 if((i=n/10)!=0)
   convert(i);
 putchar(n%10+'0');
}
main()
{int number;
 scanf("%d",&number);
 if(number<0)
   {putchar('-');
    number=-number;
   }
 convert(number);
}

7.18
main()
{int year,month,day;
 int days;
 scanf("\n%d,%d,%d",&year,&month,&day);
 days=sum_day(month,day);
 if(leap(year)&&(month>=3))
   days+=1;
 printf("days=%d\n",days);
}
static int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}
int sum_day(month,day)
int month,day;
{int i;
 for(i=1;i<month;i++)
   day+=day_tab[i];
 return(day);
}
int leap(year)
int year;
{int leap;
 leap=year%4==0&&year%100!=0||year%400==0;
 return(leap);
}
高级回复

操作选项: 评分 加精 解精 奖惩 设专题 设公告 解公告 固顶 总固顶 解固顶 结帖 解结帖 锁帖 解锁 移帖 删帖
  首页
Copyright 2006-2012 HistoryCreator.com Powered By: BBSGood 5
吉ICP备06005902号