zoukankan      html  css  js  c++  java
  • 谭浩强C语言第七章课后习题

    1、用函数法求最大公约数与最小公倍数

     1 #include<stdio.h>
     2 int main()
     3 {
     4     int hcf(int,int);
     5     int lcd(int,int,int);
     6     int u,v,h,l;
     7     scanf("%d,%d",&u,&v);
     8     h=hcf(u,v);
     9     printf("H.C.F=%d
    ",h);
    10     l=lcd(u,v,h);
    11     printf("L.C.D=%d
    ",l);
    12     return 0;
    13 }
    14 int hcf(int u,int v)
    15 {
    16     int t,r;
    17     if(v>u)
    18     {t=u;u=v;v=t;}
    19     while((r=u%v)!=0)
    20     {
    21         u=v;
    22         v=r;
    23     }
    24     return v;
    25 }
    26 int lcd(int u,int v,int h)
    27 {
    28     return(u*v/h);
    29 }

    法二:用全局变量的方法

     1 #include<stdio.h>
     2 int Hcf,Lcd;
     3 int main()
     4 {
     5     void hcf(int,int);
     6     void lcd(int,int);
     7     int u,v;
     8     scanf("%d,%d",&u,&v);
     9     hcf(u,v);
    10     lcd(u,v);
    11     printf("H.C.F=%d
    ",Hcf);
    12     printf("L.C.D=%d
    ",Lcd);
    13     return 0;
    14 }
    15 void hcf(int u,int v)
    16 {
    17     int t,r;
    18     if(v>u)
    19     {t=u;u=v;v=t;}
    20     while((r=u%v)!=0)
    21     {
    22         u=v;
    23         v=r;
    24     }
    25     Hcf=v;
    26 }
    27 void lcd(int u,int v)
    28 {Lcd=u*v/Hcf;
    29 }

     2、求一元二次方程的根。

     1 #include<stdio.h>
     2 #include<math.h>
     3 float x1,x2,disc,p,q;
     4 int main()
     5 {
     6     void greater_than_zero(float,float);
     7     void equal_to_zero(float,float);
     8     void smaller_than_zero(float,float);
     9     float a,b,c;
    10     printf("input a,b,c");
    11     scanf("%f,%f,%f",&a,&b,&c);
    12     printf("equation :%5.2f*x*x+%5.2f*x+%5.2f=0
    ",a,b,c);
    13     disc=b*b-4*a*c;
    14     printf("root:
    ");
    15     if(disc>0)
    16     {
    17         greater_than_zero(a,b);
    18         printf("x1=%f		x2=%f
    ",x1,x2);
    19     }
    20     else if(disc==0)
    21     {equal_to_zero(a,b);
    22     printf("x1=%f		x2=%f
    ",x1,x2);
    23     }
    24     else{smaller_than_zero(a,b);
    25     printf("x1=%f+%fi	x2=%f-%fi
    ",p,q,p,q);
    26     }
    27     return 0;
    28 }
    29 void greater_than_zero(float a,float b)
    30 {
    31     x1=(-b+sqrt(disc))/(2*a);
    32     x2=(-b-sqrt(disc))/(2*a);
    33 }
    34 void equal_to_zero(float a,float b)
    35 {
    36     x1=x2=(-b)/(2*a);
    37 }
    38 void smaller_than_zero(float a,float b)
    39 {
    40     p=-b/(2*a);
    41     q=sqrt(-disc)/(2*a);
    42 }

    3、函数判断素数

     1 #include<stdio.h>
     2 int main()
     3 {
     4     int prime(int);
     5     int n;
     6     printf("input");
     7     scanf("%d",&n);
     8     printf("%d",n);
     9     if(prime(n))
    10         printf("  yes
    ");
    11     else
    12         printf("   not
    ");
    13     return 0;
    14 }
    15 int prime(int n)
    16 {
    17     int flag=1,i;
    18     for(i=2;i<n/2&&flag==1;i++)
    19         if(n%i==0)
    20             flag=0;
    21         return flag;
    22 }

    4、将3*3数组转置

     1 #include<stdio.h>
     2 #define N 3
     3 int array[N][N];
     4 int main()
     5 {
     6     void convert(int array[][3]);
     7     int i,j;
     8     printf("input array:
    ");
     9     for(i=0;i<N;i++)
    10         for(j=0;j<N;j++)
    11             scanf("%d",&array[i][j]);
    12         printf("original array :
    ");
    13         for(i=0;i<N;i++)
    14         {
    15             for(j=0;j<N;j++)
    16                 printf("%5d",array[i][j]);
    17             printf("
    ");
    18         }
    19         convert(array);
    20         printf("convert array:
    ");
    21         for(i=0;i<N;i++)
    22         {
    23             for(j=0;j<N;j++)
    24                 printf("%5d",array[i][j]);
    25             printf("
    ");
    26         }
    27         return 0;
    28 }
    29 void convert (int array[][3])
    30 {
    31     int i,j,t;
    32     for(i=0;i<N;i++)
    33         for(j=i+1;j<N;j++)
    34         {
    35             t=array[i][j];
    36             array[i][j]=array[j][i];
    37             array[j][i]=t;
    38         }
    39 }

    5、反序存放一个字符串

     1 #include<stdio.h>
     2 #include<string.h>
     3 int main()
     4 {
     5     void inverse(char str[]);
     6     char str[100];
     7     printf("input sring:");
     8     scanf("%s",str);
     9     inverse(str);
    10     printf("inverse string:%s
    ",str);
    11     return 0;
    12 }
    13 void inverse(char str[])
    14 {
    15     char t;
    16     int i,j;
    17     for(i=0,j=strlen(str);i<(strlen(str)/2);i++,j--)
    18     {t=str[i];
    19     str[i]=str[j-1];
    20     str[j-1]=t;}
    21 }

     6.将两个字符连接

     1 #include<stdio.h>
     2 int main()
     3 {
     4     void concatenate(char string1[],char string2[],char string[]);
     5     char s1[100],s2[100],s[100];
     6     printf("input string1:");
     7     scanf("%s",s1);
     8     printf("input string2:");
     9     scanf("%s",s2);
    10     concatenate(s1,s2,s);
    11     printf("
    the new is
    ");
    12     printf("%s
    ",s);
    13     return 0;
    14 }
    15 void concatenate(char string1[],char string2[],char string[])
    16 {
    17     int i,j;
    18     for(i=0;string1[i]!='';i++)
    19         string[i]=string1[i];
    20     for(j=0;string2[j]!='';j++)
    21         string[i+j]=string2[j];
    22     string[i+j]='';
    23 }

    7、复制元音字母

     1 #include<stdio.h>
     2 int main()
     3 {
     4     void cpy(char [],char []);
     5     char str[80],c[80];
     6     printf("input string
    ");
     7     gets(str);
     8     cpy(str,c);
     9     printf("
    is   %s
    ",c);
    10     return 0;
    11 }
    12 void cpy(char s[],char c[])
    13 {
    14     int i,j;
    15     for(i=0,j=0;s[i]!='';i++)
    16     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')
    17     {
    18         c[j]=s[i];
    19         j++;}
    20     c[j]='';
    21 }

    8、在字符串中打空格

     1 #include<stdio.h>
     2 #include<string.h>
     3 int main()
     4 {
     5     void insert(char str[]);
     6     char str[80];
     7     printf("input");
     8     scanf("%s",str);
     9     insert(str);
    10     return 0;
    11 }
    12 void insert(char str[])
    13 {
    14     int i;
    15     for(i=strlen(str);i>0;i--)
    16     {
    17         str[2*i]=str[i];
    18         str[2*i-1]=' ';
    19     }
    20     printf("output:
    %s
    ",str);
    21 }

     9、统计字母数字空格以及其他字符个数

     1 #include<stdio.h>
     2 int letter,digit,space,other;
     3 int main()
     4 {
     5     void count(char []);
     6     char text[80];
     7     printf("input string:
    ");
     8     gets(text);
     9     printf("string:");
    10     puts(text);
    11      letter=0;
    12      space=0;
    13      digit=0;
    14      other=0;
    15      count(text);
    16      printf("字母数:%d
    空格数:%d
    数字数%d
    其他%d
    ",letter,space,digit,other);
    17      return 0;
    18 }
    19 void count(char str[])
    20 {
    21     int i;
    22     for(i=0;str[i]!='';i++)
    23           if(str[i]>='a'&&str[i]<='z'||str[i]>='A'&&str[i]<='Z')
    24              letter++;
    25          else if(str[i]==' ')
    26              space++;
    27          else if(str[i]>='0'&&str[i]<='9')
    28              digit++;
    29          else
    30              other++;
    31 }

    10、输出一行字符中的最长单词

     1 #include<stdio.h>
     2 #include<string.h>
     3 int main()
     4 {
     5     int alphabetic(char);
     6     int longest(char []);
     7     int i;
     8     char line[100];
     9     printf("input one line:
    ");
    10     gets(line);
    11     printf(" the longest word is:");
    12     for(i=longest(line);alphabetic(line[i]);i++)
    13         printf("%c",line[i]);
    14     printf("
    ");
    15     return 0;
    16 }
    17 int alphabetic(char c)
    18 {
    19     if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
    20         return(1);
    21     else
    22         return(0);
    23 }
    24 int longest(char string[])
    25 {
    26     int len=0,i,length=0,flag=1,place=0,point;
    27     for(i=0;i<strlen(string);i++)
    28         if(alphabetic(string[i]))
    29             if(flag)
    30             {point=i;
    31             flag=0;
    32             }
    33             else
    34                 len++;
    35             else
    36             {flag=1;
    37             if(len>=length)
    38             {length=len;
    39             place=point;
    40             len=0;
    41             }
    42             }
    43             return(place);
    44 }

    11、起泡法对字符按照降序排列

     1 #include<stdio.h>
     2 #include<string.h>
     3 #define N 100
     4 char str[N];
     5 int main()
     6 {
     7     void sort(char[]);
     8     int i,flag;
     9     for(flag=1;flag==1;)
    10     {
    11         printf("input string:
    ");
    12         scanf("%s",&str);
    13         if(strlen(str)>N)
    14             printf("roo long ,input again:");
    15         else
    16             flag=0;
    17     }
    18     sort(str);
    19     printf("string sort:
    ");
    20     for(i=1;i<N;i++)
    21         printf("%c",str[i]);
    22     printf("
    ");
    23     return 0;
    24 }
    25 void sort(char str[])
    26 {
    27     int i,j;
    28     char t;
    29     for(j=1;j<N;j++)
    30         for(i=0;(i<N-j)&&(str[i]!='');i++)
    31             if(str[i]>str[i+1])
    32             {
    33                 t=str[i];
    34                 str[i]=str[i+1];
    35                 str[i+1]=t;
    36             }
    37 
    38 }

     12、用牛顿迭代法求根

     1 #include<stdio.h>
     2 #include<math.h>
     3 int main()
     4 {
     5     float solut(float a,float b,float c,float d);
     6     float a,b,c,d;
     7     printf("input a,b,c,d:");
     8     scanf("%f,%f,%f.%f",&a,&b,&c,&d);
     9     printf("x=%10.7f
    ",solut(a,b,c,d));
    10     return 0;
    11 }
    12 float solut(float a,float b,float c,float d)
    13 {
    14     float x=1,x0,f,f1;
    15     do
    16     {
    17         x0=x;
    18         f=((a*x0+b)*x0+c)*x0+d;
    19         f1=(3*a*x0+2*b)*x0+c;
    20         x=x0-f/f1;
    21     }while(fabs(x-x0)>=1e-3);
    22     return(x);
    23 }

    13、勒让德多多项式

     1 #include<stdio.h>
     2 int main()
     3 {
     4     int x,n;
     5     float p(int,int);
     6     printf("
     input n  x:");
     7     scanf("%d,%d",&n,&x);
     8     printf("n=%d,x=%d
    ",n,x);
     9     printf("p%d(%d)=%6.2f
    ",n,x,p(n,x));
    10     return 0;
    11 }
    12 float p(int n,int x)
    13 {
    14     {if(n==0)
    15         return(1);
    16     else if(n==1)
    17         return(x);
    18     else
    19         return((2*n-1)*x*p((n-1),x)-(n-1)*p((n-2),x))/n;
    20     }
    21 }

    14、

    #include<stdio.h>
      #define N 10
      #define M 5
      float score[N][M];              //10个学生5门课成绩
      float a_stu[N],a_cour[M];       
      int r,c;
      int main()
      {
          int i,j;
         float h;
         float s_var(void);            //计算方差
         float highest();
         void input_stu(void);          //输入数据
         void aver_stu(void);          //计算每个学生的平均分
         void aver_cour(void);         //计算每门课的平均分
         input_stu();           
         aver_stu();
         aver_cour();
         printf("
       NO.   cour1   cour2   cour3   cour4   cour5   aver
    ");
         for(i=0;i<N;i++)
         {
             printf("
     NO. %2d",i+1);
             for(j=0;j<M;j++)
                 printf("%8.2f",score[i][j]);
             printf("%8.2f
    ",a_stu[i]);
         }
         printf("
     average:");
         for(j=0;j<M;j++)
             printf("%8.2f",a_cour[j]);
         printf("
    ");
         h=highest();
         printf("highest: %7.2f  NO.%2d  cours %2d
    ",h,r,c);
         //最高分  学生号 课程号
         printf("variance %8.2f
    ",s_var());
             return 0;
      }
      void input_stu(void)
      {
          int i,j;
          for(i=0;i<N;i++)
          {
              printf("
     input scoreof student%2d:
    ",i+1);
              for(j=0;j<M;j++)
                  scanf("%f",&score[i][j]);
          }
      }
      void aver_stu(void)
      {
          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;
              }
      }
      void aver_cour(void)//计算五门科平均成绩
      {
          int i,j;
          float s;
          for(j=0;j<M;j++)
          {
              s=0;
              for(i=0;i<N;i++)
                  s=s+score[i][j];
              a_cour[j]=s/(float)N;
          }
      }
      float highest()
      {
          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_var(void)
      {
          int i;
          float sumx,sumxn;
          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));
      }

    15、

    #include<stdio.h>
    #include<string.h>
    #define N 10
    int main()
    {
        void input(int [],char name[][8]);
        void sort(int [],char name[][8]);
        void search(int ,int[],char name[][8]);
        int num[N],number,flag=1,c;
        char name[N][8];
        input(num,name);
        sort(num,name);
        while(flag==1)
        {
            printf("input number to look for:");
            scanf("%d",&number);
            search(number,num,name);
            printf("continue or not(Y/N)?");
            getchar();
            c=getchar();
            if(c=='N'||c=='n')
                flag=0;
        }
        return 0;
    }
    void input(int num[],char name[N][8])
    {
        int i;
        for(i=0;i<N;i++)
        {
            printf("input NO.:");
            scanf("%d",&num[i]);
            printf("input name:");
            getchar();
            gets(name[i]);
    }
    }
    void sort(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];
            strcpy(temp2,name[i]);
            num[i]=num[min];
            strcpy(name[i],name[min]);
            num[min]=temp1;
            strcpy(name[min],temp2);
        }
        printf("
    result:
    ");
        for(i=0;i<N;i++)
            printf("
    %5d%10s",num[i],name[i]);
    }
    void search(int n,int num[],char name[N][8])
    {
        int top,bott,mid,loca,sign;
        top=0;
        bott=N-1;
        loca=0;
        sign=1;
        if((n<num[0])||(n>num[N-1]))
            loca=-1;
        while((sign==1)&&(top<=bott))
        {
            mid=(bott+top)/2;
            if(n==num[mid])
            {
                loca=mid;
                printf("No.%d,his name is%s.
    ",n,name[loca]);
                sign=-1;
            }
            else if(n<num[mid])
                bott=mid-1;
            else
                top=mid+1;
        }
        if(sign==1||loca==-1)
            printf("%d not been found.
    ",n);
    }

     17、

    #include<stdio.h>
    int main()
    {
        void convert(int n);
        int number;
        printf("input an interger:");
        scanf("%d",&number);
        printf("output:");
        if(number<0)
        {
            putchar('-');
            putchar(' ' );
            number=-number;
        }
        convert(number);
        printf("
    ");
        return 0;
    }
    void convert(int n)
    {
        int i;
    
    
    if((i=n/10)!=0)
    convert(i);
    putchar(n%10+'0');
    putchar(32);
    }

     16、

    #include<stdio.h>
    #define MAX 1000
    int main()
    {int htoi(char s[]);
    int c,i,flag,flag1;
    char t[MAX];
    i=0;
    flag=0;
    flag1=1;
    printf("input a HEX number:");
    while((c=getchar())!=''&&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]='';
        printf("decimal nuumber is%d
    ",htoi(t));
        printf("continue or not?");
        c=getchar();
        if(c=='N'||c=='n')
            flag1=0;
        else
        {flag=0;
        i=0;
        printf("
     input a HEX number:");
        }
        }
    }
    return 0;
    }
    int htoi(char s[])
    {
        int i,n;
        n=0;
        for(i=0;s[i]!='';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);
    }

    18、

    #include<stdio.h>
    int main()
    {
        int sum_day(int month,int day);
        int leap(int year);
        int year,month,day,days;
        printf("input date(year,month,day)):");
        scanf("%d,%d,%d",&year,&month,&day);
        printf("%d/%d/%d",year,month,day);
        days=sum_day(month,day);
        if(leap(year)&&month>=3)
            days=days+1;
        printf("is the %d day in this year.
    ",days);
        return 0;
    }
    int sum_day(int month,int day)
    {
        int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
        int i;
        for(i=1;i<month;i++)
            day+=day_tab[i];
        return(day);
    }
    int leap(int year)
    {int leap;
    leap=year%4==0&&year%100!=0||year%400==0;
    return(leap);
    }
  • 相关阅读:
    刨根问底 | Elasticsearch 5.X集群多节点角色配置深入详解【转】
    ElasticSearch 内存那点事【转】
    Zookeeper之Zookeeper的Client的分析【转】
    Zookeeper之Zookeeper底层客户端架构实现原理(转载)
    elasticsearch 性能调优
    ElasticSearch性能优化策略【转】
    elasticsearch中 refresh 和flush区别【转】
    我理解的朴素贝叶斯模型【转】
    (转)Intellij IDEA 快捷键整理
    使用Mongo dump 将数据导入到hive
  • 原文地址:https://www.cnblogs.com/1998wdq/p/11379824.html
Copyright © 2011-2022 走看看