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\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     }
綜合

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM