C语言程序设计·谭浩强(第四版)第二章课后习题的答案,算法——程序的灵魂

时间:2024-03-05 13:35:20

 

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\n",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\n",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\n",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\n",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\n",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\n",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\n",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\n",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\n",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\n",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!\n",i);
 9             else
10                 printf("%d is not a leap year!\n",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("输入两个值并互换>>: \n");
 7     scanf("%d,%d",&a,&b);
 8     c=a;
 9     a=b;
10     b=c;
11     printf("%d %d\n",a,b);
12     return 0;
13 }
14 
15 
16 //经典互换,把大的值放第一位
17 #include<stdio.h>
18 int main()
19 {
20     int a,b,c;
21     printf("请输入两个值并互换>>: \n");
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\n",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个数字>>: \n");
 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\n",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("请输入三个整数>>: \n");
 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("请输入三个整数>>: \n");
 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\n",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\n",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!\n");
 6     printf("输入>>: ");
 7     scanf("%d",&n);
 8     if(n%3==0&&n%5==0)
 9         printf("TRUE\n");
10     else
11         printf("FALSE!\n");
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 \n ",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("请输入两个数>>: \n");
 7     scanf("%d,%d",&m,&n);
 8     c=gcd(m,n); //获取最大公约数
 9     printf("%d 和 %d 的最大公约数是:%d\n",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("请输入两个数>>: \n");
 7     scanf("%d,%d",&m,&n);
 8     c=lcm(m,n);
 9     printf("最小公倍数是: %d\n",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("输入两个数字: \n");
 8     scanf("%d,%d",&m,&n);
 9     c=gcd(m,n);
10     d=lcm(m,n);
11     printf("最大公约数是: %d\n",c);
12     printf("最小公倍数是: %d\n",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     }
综合