⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 teacher's answer.txt

📁 谭浩强第二版的课后习题的答案的源程序
💻 TXT
📖 第 1 页 / 共 3 页
字号:
    }
}

6.10
main()
{int i,j,uppn,lown,dign,span,othn;
 char text[3][80];
 uppn=lown=dign=span=othn=0;
 for(i=0;i<3;i++)
   {gets(text[i]);
    for(j=0;j<80&&text[i][j]!='\0';j++)
      {if(text[i][j]>='A'&&text[i][j]<='Z')
         uppn++;
       else if(text[i][j]>='a'&&text[i][j]<='z')
         lown++;
       else if(text[i][j]>='0'&&text[i][j]<='9')
         dign++;
       else if(text[i][j]==' ')
         span++;
       else 
         othn++;
       }
    }
 for(i=0;i<3;i++)
   printf("%s\n",text[i]);
 printf("uppn=%d\n",uppn);
 printf("lown=%d\n",lown);
 printf("dign=%d\n",dign);
 printf("span=%d\n",span);
 printf("othn=%d\n",othn);
}

6.11
main()
{static char a[5]={'*','*','*','*','*'};
 int i,j,k;
 char space=' ';
 for(i=0;i<=5;i++)
   {printf("\n");
    for(j=1;j<=3*i;j++)
      printf("%1c",space);
    for(k=0;k<=5;k++)
      printf("%3c",a[k]);
    }
}

6.12
#include<stdio.h>
main()
{int i,n;
 char ch[80],tran[80];
 gets(ch);
 i=0;
 while(ch[i]!='\0')
   {if((ch[i]>='A')&&(ch[i]<='Z'))
      tran[i]=26+64-ch[i]+1+64;
    else if((ch[i]>='a')&&(ch[i]<='z'))
      tran[i]=26+96-ch[i]+1+96;
    else
      tran[i]=ch[i];
    i++;
    }
 n=i;
 for(i=0;i<n;i++)
   putchar(tran[i]);
}

6.13
main()
{char s1[80],s2[40];
 int i=0,j=0;
 scanf("%s",s1);
 scanf("%s",s2);
 while(s1[i]!='\0')i++;
 while(s2[j]!='\0')s1[i++]=s2[j++];
 s1[i]='\0';
 printf("s=%s\n",s1);
}

6.14
#include<stdio.h>
main()
{int i,resu;
 char s1[100],s2[100];
 gets(s1);
 gets(s2);
 i=0;
 while((s1[i]==s2[i])&&(s1[i]!='\0'))i++;
 if(s1[i]=='\0'&&s2[i]=='\0')resu=0;
 else 
   resu=s1[i]-s2[i];
 printf("s1=%s,s2=%s,resu=%d\n",s1,s2,resu);
}

6.15
#include"stdio.h"
main()
{char from[80],to[80];;
 int i;
 scanf("%s",from);
 for(i=0;i<=strlen(from);i++)
   to[i]=from[i];
 printf("%s\n",to);
}

第七章
7.1
hcf(u,v)
int u,v;
{int a,b,t,r;
 if(u>v){t=u;u=v;v=t;}
 a=u;b=v;
 while((r=b%a)!=0)
   {b=a;a=r;}
 return(a);
}
lcd(u,v,h)
int u,v,h;
{return(u*v/h);}
main()
{int u,v,h,l;
 scanf("%d,%d",&u,&v);
 h=hcf(u,v);
 printf("H.C.F=%d\n",h);
 l=lcd(u,v,h);
 printf("L.C.D=%d\n",l);
}

7.2
#include"math.h"
float x1,x2,disc,p,q;
greater_than_zero(a,b)
float a,b;
{x1=(-b+sqrt(disc))/(2*a);
 x2=(-b-sqrt(disc))/(2*a);
}
equal_to_zero(a,b)
flaot a,b;
{x1=x2=-b/(2*a);}
smaller_than_zero(a,b)
float a,b;
{p=-b/(2*a);
 q=sqrt(-disc)/(2*a);
}
main()
{float a,b,c;
 scanf("%f,%f,%f",&a,&b,&c);
 disc=b*b-4*a*c;
 if(fabs(disc)<=1e-5)
   {equal_to_zero(a,b);
    printf("x1=%5.2f\tx2=%5.2f\n",x1,x2);
   }
 else if(disc>0)
   {greater_than_zero(a,b);
    printf("x1=%5.2f\tx2=%5.2f\n",x1,x2);
   }
 else
   {smaller_than_zero(a,b);
    printf("x1=%5.2f+%5.2fi\tx2=%5.2f-%5.2fi\n",p,q,p,q);
   }
}

7.3
main()
{int number;
 scanf("%d",&number);
 if(prime(number))
   printf("yes");
 else
   printf("no");
}
int prime(number)
int number;
{int flag=1,n;
 for(n=2;n<number/2&&flag==1;n++)
   if(number%n==0)
     flag=0;
 return(flag);
}

7.4
#define N 3
int array[N][N];
convert(array)
int array[3][3];
{int i,j,t;
 for(i=0;i<N;i++)
   for(j=i+1;j<N;j++)
     {t=array[i][j];
      array[i][j]=array[j][i];
      array[j][i]=t;
      }
}
main()
{int i,j;
 for(i=0;i<N;i++)
 for(j=0;j<N;j++)
   scanf("%d",&array[i][j]);
 convert(array);
 for(i=0;i<N;i++)
   {printf("\n");
    for(j=0;j<N;j++)
      printf("%5d",array[i][j]);
    }
}

7.5
main()
{char str[100];
 scanf("%s",str);
 inverse(str);
 printf("%s\n",str);
}
inverse(str)
char str[];
{char t;
 int i,j;
 for(i=0,j=strlen(str);i<strlen(str)/2;i++,j--)
   {t=str[i];
    str[i]=str[j-1];
    str[j-1]=t;
    }
}

7.6
char concate(str1,str2,str)
char str1[],str2[],str[];
{int i,j;
 for(i=0;str1[i]!='\0';i++)
   str[i]=str1[i];
 for(j=0;str2[j]!='\0';j++)
   str[i+j]=str2[j];
 str[i+j]='\0';
}
main()
{char s1[100],s2[100],s[100];
 scanf("%s",s1);
 scanf("%s",s2);
 concate(s1,s2,s);
 printf("\ns=%s",s);
}

7.7
main()
{char str[80],c[80];
 void cpy();
 gets(str);
 cpy(str,c);
 printf("\n%s\n",c);
}
void cpy(s,c)
char s[],c[];
{int i,j;
 for(i=0,j=0;s[i]!='\0';i++)
   if(s[i]=='a'||s[i]=='A'||s[i]=='e'||s[i]=='E'||s[i]=='i'||
      s[i]=='I'||s[i]=='o'||s[i]=='O'||s[i]=='u'||s[i]=='U')
     {c[j]=s[i];j++;}
 c[j]='\0';
}

7.8
main()
{char str[80];
 scanf("%s",str);
 insert(str);
}
insert(str)
char str[];
{int i;
 for(i=strlen(str);i>0;i--)
   {str[i*2]=str[i];
    str[i*2-1]=' ';
   }
 printf("%s\n",str);
}

7.9
int alph,digit,space,others;
main()
{char text[80];
 gets(text);
 alph=0,digit=0,space=0,others=0;
 count(text);
 printf("\nalph=%d,digit=%d,space=%d,others=%d\n",alph,digit,space,others);
}
count(str)
char str[];
{int i;
 for(i=0;str[i]!='\0';i++)
   if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z'))
     alph++;
   else if(str[i]>='0'&&str[i]<='9')
     digit++;
   else if(strcmp(str[i],' ')==0)
     space++;
   else
     others++;
}

7.10
int alph(c)
char c;
{if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
   return(1);
 else
   return(0);
}
int longest(string)
char string[];
{int len=0,i,length=0,flag=1,place,point;
 for(i=0;i<=strlen(string);i++)
   if(alph(string[i]))
     if(flag)
       {point=i;
        flag=0;
       }
     else
       len++;
    else
      {flag=1;
       if(len>length)
         {length=len;
          place=point;
          len=0;
          }
       }
 return(place);
}
main()
{int i;
 char line[100];
 gets(line);
 for(i=longest(line);alph(line[i]);i++)
   printf("%c",line[i]);
 printf("\n");
}

7.11
#define N 10
char str[N];
main()
{int i,flag;
 for(flag=1;flag==1;)
   {scanf("%s",str);
    if(strlen(str)>N)
      printf("input error");
    else
      flag=0;
    }
 sort(str);
 for(i=0;i<N;i++)
   printf("%c",str[i]);
}
sort(str)
char str[N];
{int i,j;
 char t;
 for(j=1;j<N;j++)
   for(i=0;(i<N-j)&&(str[i]!='\0');i++)
     if(str[i]>str[i+1])
       {t=str[i];
        str[i]=str[i+1];
        str[i+1]=t;
       }
}

7.12
#include<math.h>
float solut(a,b,c,d)
float a,b,c,d;
{float x=1,x0,f,f1;
 do 
   {x0=x;
    f=((a*x0+b)*x0+c)*x0+d;
    f1=(3*a*x0+2*b)*x0+c;
    x=x0-f/f1;
    }
 while(fabs(x-x0)>=1e-5);
 return(x);
}
main()
{float a,b,c,d;
 scanf("%f,%f,%f,%f",&a,&b,&c,&d);
 printf("x=%10.7f\n",solut(a,b,c,d));
}

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);
}

第八章  编译预处理
8.1
#define SWAP(a,b) t=b;b=a;a=t
main()
{int a,b,t;
 scanf("%d,%d",&a,&b);
 SWAP(a,b);
 printf("a=%d\tb=%d\n",a,b);
}

8.2
#define SURPLUS(a,b) ((a)%(b))
main()
{int a,b;
 scanf("%d,%d",&a,&b);
 printf("%d",SURPLUS(a,b));
}

8.3
#include"math.h"
#define S(a,b,c) ((a+b+c)/2)
#define AREA(a,b,c) (sqrt(S(a,b,c)*(S(a,b,c)-a)*(S(a,b,c)-b)*(S(a,b,c)-c)))
main()
{float a,b,c;
 scanf("%f,%f,%f",&a,&b,&c);
 if(a+b>c&&b+c>a&&a+c>b)
   printf("area=%8.2f\n",AREA(a,b,c));
 else
   printf("input error");
}

8.4
#define LEAP(y) (y%4==0)&&(y%100!=0)||(y%400==0)
main()
{int year;
 scanf("%d",&year);
 if(LEAP(year))
   printf("yes");
 else
   printf("no");
}

8.5
printf("value=%format\t",x);
printf("value=%format\t",x);putchar('\n');
printf("value=%format\t",x1);printf("value=%format\t",x2);putchar('\n');
输出结果:
value=5.000000ormat        value=5.000000ormat
value=3.000000ormat        value=8.000000ormat

8.6
#define PR printf
#define NL "\n"
#define Fs "%f"
#define F "%6.2f"
#define F1 F NL
#define F2 F "\t" F NL
#define F3 F "\t" F "\t" F NL
main()
{float a,b,c;
 scanf(Fs,&a);
 scanf(Fs,&b);
 scanf(Fs,&c);
 PR(NL);
 PR(F1,a);
 PR(F1,b);
 PR(F1,c);
 PR(NL);
 PR(F2,a,b);
 PR(F1,c);
 PR(NL);
 PR(F3,a,b,c);
}

8.7
/*format.h文件*/
#define DIGIT(d) printf("%d\n",d)
#define FLOAT(f) printf("%8.2f\n",f)
#define STRING(s) printf("%s\n",s)
/*用户文件*/
#include"format.h"
main()
{int d,num;
 float f;
 char s[80];
 scanf("%d",&num);
 switch(num)
   {case 1:scanf("%d",&d);
           DIGIT(d);
           break;
    case 2:scanf("%f",&f);
           FLOAT(f);
           break;
    case 3:scanf("%s",s);
           STRING(s);
           break;
    default:printf("error");
   }
}

8.8
main()
{int a,b,c;
 scanf("%d,%d,%d",&a,&b,&c);
 printf("max=%d\n",max(a,b,c));
}
max(a,b,c)
int a,b,c;
{int t;
 t=x>y?x:y;
 return(t>z?t:z);
}

#define MAX(a,b) ((a)>(b)?(a):(b))
main()
{int a,b,c;
 scanf("%d,%d,%d",&a,&b,&c);
 printf("max=%d\n",MAX(MAX(a,b),c));
}

8.10
#include"stdio.h"
#define MAX 80
#define CHANGE 1
main()
{char str[MAX];
 int i;
 scanf("%s",str);
 #if(CHANGE)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -