谭浩强C语言(第二版)——第五章习题答案

1. 求100~200间的全部素数。
解:

//
// @Author: Brisa
// @Date: 2021/10/5
// @Description: 100-200之间的素数
//
#include<stdio.h>
#include<math.h>

int main()
{
    int temp, k;
    printf("100-200的素数有:\n");
    for(int i=100; i<=200; i++){
        temp = sqrt(i);
        for(k=2; k<= temp; k++){  //判断能否被2到根号i之间的数整除
            if(i % k == 0){
                break;
            }
        }
        if(temp <= k) //判断满足是素数的条件
            printf("%d\n", i);
    }
    return 0;
}


2. 输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
解:

//
// @Author: Brisa
// @Date: 2021/10/5
// @Description: 输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数
//
#include<stdio.h>
#include<string.h>

int main(){
    int num=0, letter=0, space=0, others=0;//数字、字母、空格、其他字符
    printf("请输入一串字符:\n");
    char s[100]; //输入字符串
    gets(s);
    for(int i=0; s[i] != '\0'; i++){
        if(s[i] >= '0' && s[i] <= '9') num++;
        else if((s[i] >= 'a' && s[i] <= 'z') || (s[i] >= 'A' && s[i] <= 'Z')) letter++;
        else if(s[i] == ' ') space++;
        else others++;
    }
    printf("英文字母有:%d个,空格有%d个,数字有%d个,其他字符有%d个\n", letter, space, num, others);

    return 0;
}


3. 输出所有"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该本身。例如:153是一个水仙花数,因为153=1^3 + 5^3 + 3^3。
解:

//
// @Author: Brisa
// @Date: 2021/10/5
// @Description:  输出所有"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该本身。例如:153是一个水仙花数,因为153=1^3+5^3+3^3。
//
#include<stdio.h>
#include<math.h>

int main(){
    int hundred=0, ten=0, indiv=0;
    int temp;
    for(int i=100; i<1000; i++){
        //求三个位置的数
        hundred = i / 100;
        ten = (i % 100) / 10;
        indiv = i % 10;
        temp = pow(hundred, 3) + pow(ten, 3) + pow( indiv, 3);
        if(temp == i) //满足水仙花的条件
            printf("%d\n", i);
    }

    return 0;
}


4. 猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。
解:

//
// @Author: Brisa
// @Date: 2021/10/5
// @Description: 猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。
//

#include<stdio.h>

int main(){
    /*分析:总共吃了9天,后一天是i, 则前一天是 (i+1)*2 */
    int sum = 1;
    for(int i=9; i>0; i--){
        sum = (sum + 1) * 2;
    }
    printf("总共有%d个\n", sum);
    return 0;
}

5. 一球从100米高度自由下落,每次落地后返回原高度的一半,再落下。求它在第10次落地时,共经过了多少米?第10次反弹多高? 
解:

//
// @Author: Brisa
// @Date: 2021/10/5
// @Description:  一球从100米高度自由下落,每次落地后返回原高度的一半,再落下。求它在第10次落地时,共经过了多少米?第10次反弹多高?
//
#include<stdio.h>
int main(){
    double high=100.00, sum=0.0;
    for(int i=1; i<=10; i++){
        sum = sum + high;
        high = high / 2.0;
        sum = sum + high;
    }
    sum -= high; //减去弹上去的一半
    printf("在第10次落地时,共经过了%f米,第10次反弹%f米\n", sum, high);
    return 0;
}


  1. 打印以下图案
   *  
  ***  
 *****  
*******  
 *****  
  ***  
   *  

解:

//
// @Author: Brisa
// @Date: 2021/10/5
// @Description: 打印以下图案
//
#include<stdio.h>

int main(){
    for(int i=1; i<=4; i++){
        for(int j=1; j<=4-i; j++){
            printf(" ");
        }
        for(int j=1; j <= 2*i - 1; j++){
            printf("*");
        }
        printf("\n");
    }
    for(int i=1; i<=3; i++){
        for(int j=3; j>=4-i; j--){
            printf(" ");
        }
        for(int j=1; j <= 7-2*i; j++){
            printf("*");
        }
        printf("\n");

    }
    
    return 0;
}


8. 两个乒乓球队进行比赛,各出3人。甲队为A、B、C 3人,乙队为X、Y、Z 3人。已抽签决定比赛名单。有人向队员打听比赛的名单,A说他不和X比,C说他不和X、Y比,请编程序找出3三队选手的对阵名单。
解:

//
// @Author: Brisa
// @Date: 2021/10/5
// @Description: 8. 两个乒乓球队进行比赛,各出3人。甲队为A、B、C 3人,乙队为X、Y、Z 3人。已抽签决定比赛名单。有人向队员打听比赛的名单,A说他不和X比,C说他不和X、Y比,请编程序找出3三队选手的对阵名单。
//

#include<stdio.h>

int main(){
    /*i是A的对手,j是B的对手,k是C的对手*/
    char i, j, k;
    for(i='X'; i<='Z'; i++){
        for(j='X'; j<='Z'; j++){
            if(i != j){//AB对手不能一样
                for(k='X'; k<='Z'; k++){
                    if(i!=k && j!=k){//ABC对手不能一样
                        if(i!='X' && k=='Z')//A说他不和X比,C说他不和X、Y比
                            printf("order is A--%c\tB--%c\tC--%c\n",i,j,k);
                    }

                }

            }

        }
    }


    return 0;
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值