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     }
    综合
  • 相关阅读:
    Python3 -- 多线程(threading模块、queue模块)
    MySQL -- 常用汇总
    MySQL -- 常用函数汇总
    MySQL -- 数据表添加字段(三种方式)
    MySQL -- 查看表结构命令
    MySQL -- 修改/删除字段
    MySQL -- ALTER TABLE:修改数据表
    MySQL -- 单行注释和多行注释
    GCC 提供的原子操作
    内存区划分、内存分配、常量存储区、堆、栈、自由存储区、全局区[C++][内存管理][转载]
  • 原文地址:https://www.cnblogs.com/happyfei/p/9677598.html
Copyright © 2011-2022 走看看