zoukankan      html  css  js  c++  java
  • C语言程序设计·谭浩强(第四版)第二章课后习题的答案,算法——程序的灵魂

     

    C语言程序小练习

    1、用C语言设计程序算出1-1/2+1/3-14+1/5。。。+1/99-1/100的值

    #include<stdio.h>
    int main()
    {
        int i=1;
        double a=1.0,b=2.0,sum;
        while(b<=100)
            {
                i=-i;
                sum=i/b;
                a=a+sum;
                b=b+1;
            }
        printf("%f
    ",a);
        return 0;
    }
    View Code

    2、用C语言设计程序算出1x2x3x4x5的值

     1 #include<stdio.h>
     2 int main()
     3 {
     4     int t,i;
     5     t=1;
     6     i=1;
     7     while(i<=5)
     8         {
     9             t=t*i;
    10             i=i+1;
    11         }
    12     printf("%d
    ",t);
    13     return 0;
    14 }
    版本1
     1 #include<stdio.h>
     2 int main()
     3 {
     4     int i,s=1;
     5     for(i=1;i<6;i++)
     6         {
     7             s=s*i;
     8         }
     9     printf("%d
    ",s);
    10     return 0;
    11 }
    版本2

    3,、用C语言设计程序算出两个数的最大值

     1 //第一种
     2 #include<stdio.h>
     3 int main()
     4 {
     5     int a,b;
     6     scanf("%d,%d",&a,&b);
     7     if(a<b)a=b;
     8     printf("%d
    ",a);
     9     return 0;
    10 }
    11 
    12 
    13 //第二种
    14 #include<stdio.h>
    15 int main()
    16 {
    17     int max(int x,int y);//声明max函数
    18     int a,b,c;
    19     scanf("%d,%d",&a,&b);
    20     c=max(a,b);//调用下面定义的max函数
    21     printf("%d
    ",c);
    22     return 0;
    23 }
    24 
    25 int max(int x,int y)
    26 {
    27     if(x>y)return(x);
    28     else return(y);
    29 }
    View Code

     4、用C语言设计程序算出三个数中的最大值

     1 //第一种
     2 #include<stdio.h>
     3 int main()
     4 {
     5     int a,b,c;
     6     scanf("%d,%d,%d",&a,&b,&c);
     7     if(a<b)a=b;
     8     if(a<c)a=c;
     9     printf("%d
    ",a);
    10     return 0;
    11 }
    12 
    13 
    14 //第二种
    15 #include<stdio.h>
    16 int main()
    17 {    
    18     int max(int x,int y,int z);
    19     int a,b,c;
    20     scanf("%d,%d,%d",&a,&b,&c);
    21     int temp=max(a,b,c);
    22     printf("%d
    ",temp);
    23     return 0;
    24 }
    25 int max(int a,int b,int c)
    26 {
    27     int max2(int x,int y);
    28     int num=max2(a,b);
    29     int result=max2(num,c);
    30     return(result);
    31 }
    32 int max2(int x,int y)
    33 {
    34     if(x>y)return(x);
    35     else return(y);
    36 }
    37 
    38 
    39 //第三种
    40 #include<stdio.h>
    41 int main()
    42 {
    43     int a,b,c;
    44     scanf("%d,%d,%d",&a,&b,&c);
    45     if(a>b)
    46         {
    47             if(a<c)a=c;
    48         }
    49     else
    50         {
    51             if(b>c)a=b;
    52             else a=c;
    53         }
    54     printf("%d
    ",a);
    55     return 0;
    56 }
    57 //还有很多。。。
    View Code

    5、用C语言设计程序算出1到12之间奇数的乘积

     1 #include<stdio.h>
     2 int main()
     3 {
     4     int i,s=1;
     5     for(i=1;i<12;i++)
     6         {
     7             if(i%2!=0)//取模(余数),不为零i为奇数不能被整除,否则能被整除为偶数
     8                 s=s*i;
     9             else
    10                 continue;
    11 
    12         }
    13     printf("%d
    ",s);
    14     return 0;
    15 }
    View Code
     1 #include<stdio.h>
     2 int main()
     3 {
     4     int t,i;
     5     t=1;
     6     i=1;
     7     while(i<13)
     8         {
     9             if(i%2!=0)
    10                 t=t*i;
    11                 i=i+1;
    12         }
    13     printf("%d
    ",t);
    14     return 0;
    15 }
    版本二

    课后习题P36

    8.1、输出1900——2000年中是闰年的年份,符合下面两个条件之一的年份是闰年

      1)能被4整除,但不能被100整除;

      2)能被100整除,且能被400整除。

     1 #include<stdio.h>
     2 int main()
     3 {
     4     int i;
     5     for(i=1900;i<=2000;i++)
     6         {
     7             if((i%4==0 && i%100!=0)|| i%400==0) //闰年的经典判断条件
     8                 printf("%d is a leap year!
    ",i);
     9             else
    10                 printf("%d is not a leap year!
    ",i);
    11 
    12         }
    13     return 0;
    14 }
    View Code

    4.1、两数互换

     1 //互换值的位置
     2 #include<stdio.h>
     3 int main()
     4 {
     5     int a,b,c;
     6     printf("输入两个值并互换>>: 
    ");
     7     scanf("%d,%d",&a,&b);
     8     c=a;
     9     a=b;
    10     b=c;
    11     printf("%d %d
    ",a,b);
    12     return 0;
    13 }
    14 
    15 
    16 //经典互换,把大的值放第一位
    17 #include<stdio.h>
    18 int main()
    19 {
    20     int a,b,c;
    21     printf("请输入两个值并互换>>: 
    ");
    22     scanf("%d,%d",&a,&b);
    23     if(a<b)
    24         {
    25             c=b;
    26             b=a;
    27             a=c;
    28         }
    29     printf("%d %d
    ",a,b);
    30     return 0;
    31 }
    互换位置

    4.2、依次将10个数输入,要求输出其中最大的数。

     1 #include<stdio.h>
     2 int main()
     3 {
     4     int i,a[10],s=0;
     5     printf("请输入10个数字>>: 
    ");
     6     for(i=0;i<=9;i++)
     7         {
     8             scanf("%d",&a[i]);
     9         }
    10     for(i=0;i<=9;i++)
    11         {
    12             if(s<a[i]) 
    13                 s=a[i];
    14         }
    15     printf("最大的数是: %d
    ",s);
    16     return 0;
    17 }
    View Code

    4.3、按大小顺序输出一些数

     1 #include<stdio.h>
     2 int main()
     3 {
     4     int i,j,a[3],s=0;
     5     printf("请输入三个整数>>: 
    ");
     6     for(i=0;i<3;i++)
     7         {
     8             scanf("%d",&a[i]);//存储输入数值
     9         }
    10     for(i=0;i<2;i++) //双循环
    11         {
    12             for(j=i+1;j<3;j++)//第二个循环到n-1,第二个循环到n,
    13                 if(a[i]<a[j])//每次拿前面的数与后面的数比较,即把小的数值与下一个数比较
    14                                 //小于号表示从大到小,大于号表示从小到大排列
    15                     {
    16                         s=a[i];
    17                         a[i]=a[j];
    18                         a[j]=s;
    19                     }
    20         }
    21     for(i=0;i<3;i++)//重新定义循环输出数组中新排列的数
    22         printf("%d-",a[i]);
    23     return 0;
    24 }
    输入三个数
     1 #include<stdio.h>
     2 int main()
     3 {
     4     int i,j,a[5],s=0;
     5     printf("请输入三个整数>>: 
    ");
     6     for(i=0;i<5;i++)
     7         {
     8             scanf("%d",&a[i]);//存储输入数值
     9         }
    10     for(i=0;i<4;i++) //双循环
    11         {
    12             for(j=i+1;j<5;j++)//第二个循环到n-1,第二个循环到n,
    13                 if(a[i]<a[j])//每次拿前面的数与后面的数比较,即把小的数值与下一个数比较
    14                                 //小于号表示从大到小,大于号表示从小到大排列
    15                     {
    16                         s=a[i];
    17                         a[i]=a[j];
    18                         a[j]=s;
    19                     }
    20         }
    21     for(i=0;i<5;i++)//重新定义循环输出数组中新排列的数
    22         printf("%d-",a[i]);
    23     return 0;
    24 }
    输入五个数

    4.4、求1+2+3+4+5+···+100。

     1 #include<stdio.h>
     2 int main()
     3 {
     4     int i=0,t=0;
     5     while(i<100)
     6         {
     7             i=i+1;//最后一个数99+1=100
     8             t=t+i;
     9         }
    10     printf("sum is %d
    ",t);
    11     return 0;
    12 }
    while循环
    1 #include<stdio.h>
    2 int main()
    3 {
    4     int i,sum=0;
    5     for(i=0;i<=100;i++)
    6         sum=sum+i;
    7     printf("sum is %d
    ",sum);
    8     return 0;
    9 }
    for循环

    4.5、判断一个数n能否同时被3和5整除。

     1 #include<stdio.h>
     2 int main()
     3 {
     4     int n;
     5     printf("输入一个整数能被3和5整除返回TRUE否则返回FALSE!
    ");
     6     printf("输入>>: ");
     7     scanf("%d",&n);
     8     if(n%3==0&&n%5==0)
     9         printf("TRUE
    ");
    10     else
    11         printf("FALSE!
    ");
    12     return 0;
    13 }
    View Code

    4.6、将100~~200之间的素数输出。

     1 #include<stdio.h>   //采用调用函数和求根取素.
     2 #include<math.h>   //下面用到sqrt,所以需要包含数据函数.sqrt是求根,属数学函数.
     3 
     4 int main()
     5 {    
     6     int prime_number(int m);//要先声明
     7     int i;
     8     for (i=100; i<=200; i++)   //指定区间
     9         {
    10             if(prime_number(i) == 1)   //i是实参,传入形参m中进行运算,然后再由形参j带出返回
    11                 printf("%d 
     ",i);
    12         }    
    13     return 0;
    14 }
    15 int prime_number(int m)   //m是形参,用于接收实参i给的值
    16 {
    17     int j,k;
    18     k=(int)sqrt(m);   //求根,(int)是强制转换,求根里要是浮点型.
    19     for(j=2;j<=k;j++)   
    20     {
    21         if(m%j==0)
    22             return 0;   //返回值,0为不是素数,1是素数
    23     }
    24     return 1;
    25 }
    View Code

    4.7、求两个数m和n的最大公约数。

     1 #include<stdio.h>
     2 int main()
     3 {
     4     int m,n,c;
     5     int gcd(int x,int y); 
     6     printf("请输入两个数>>: 
    ");
     7     scanf("%d,%d",&m,&n);
     8     c=gcd(m,n); //获取最大公约数
     9     printf("%d 和 %d 的最大公约数是:%d
    ",m,n,c);
    10     return 0;
    11 }
    12 int gcd(int x,int y)
    13 {
    14     int temp;
    15     while(x%y!=0)
    16         {
    17             temp=y;
    18             y=x%y;
    19             x=temp;
    20         }
    21     return y;
    22 }
    23 
    24 最大公约数
    最大公约数

    补充:最小公倍数

     1 #include<stdio.h>
     2 int main()
     3 {
     4     int lcm(int x,int y);
     5     int m,n,c;
     6     printf("请输入两个数>>: 
    ");
     7     scanf("%d,%d",&m,&n);
     8     c=lcm(m,n);
     9     printf("最小公倍数是: %d
    ",c);
    10     return 0;
    11 }
    12 int lcm(int x,int y)
    13 {
    14     int i,temp;
    15     if(x<y)  //保证x,y中较大的数在x上,小的数在y上,小于号降序,大于号升序。
    16         {    //下面三行是经典代码,实现两个数互换    
    17             temp=x;
    18             x=y;
    19             y=temp;
    20         }
    21     for(i=1;i<=y;i++)//设定一个区间,从1到小的数之间的循环
    22         {
    23             if(!((x*i)%y)) //反复运算,直到取模无余数,那么小的数x乘以区间当前的i值,就是最小公倍数 
    24             {  
    25                     return x*i;
    26                 }
    27         }
    28 }
    29 
    30 最小公倍数
    最小公倍数
     1 #include<stdio.h>
     2 int main()
     3 {
     4     int gcd(int x,int y);
     5     int lcm(int x,int y);
     6     int m,n,c,d;
     7     printf("输入两个数字: 
    ");
     8     scanf("%d,%d",&m,&n);
     9     c=gcd(m,n);
    10     d=lcm(m,n);
    11     printf("最大公约数是: %d
    ",c);
    12     printf("最小公倍数是: %d
    ",d);
    13     return 0;
    14 }
    15 int gcd(int x,int y)
    16 {
    17     int temp;
    18     while(x%y!=0)
    19         {
    20             temp=y;
    21             y=x%y;
    22             x=temp;
    23         }
    24     return y;
    25 }
    26 int lcm(int x,int y)
    27     {
    28         int i,temp;
    29         if(x<y)
    30             {
    31                 temp=y;
    32                 y=x;
    33                 x=temp;
    34             }
    35         for(i=2;i<=y;i++)
    36             {
    37                 if(!((x*i)%y))
    38                     {
    39                         return x*i;
    40                     }
    41             }
    42     }
    综合
  • 相关阅读:
    ZeptoLab Code Rush 2015
    UVa 10048 Audiophobia【Floyd】
    POJ 1847 Tram【Floyd】
    UVa 247 Calling Circles【传递闭包】
    UVa 1395 Slim Span【最小生成树】
    HDU 4006 The kth great number【优先队列】
    UVa 674 Coin Change【记忆化搜索】
    UVa 10285 Longest Run on a Snowboard【记忆化搜索】
    【NOIP2016提高A组模拟9.28】求导
    【NOIP2012模拟10.9】电费结算
  • 原文地址:https://www.cnblogs.com/happyfei/p/9677598.html
Copyright © 2011-2022 走看看