C程序设计(第五版)谭浩强---第五章 循环结构程序设计习题

本文展示了C语言编程中的几个实例,包括计算两个正整数的最大公约数和最小公倍数、统计字符中的各种类型、求解数字的阶乘、寻找水仙花数、查找完数、分数序列求和、球体运动和猴子吃桃问题,以及解决乒乓球比赛对阵安排问题。
摘要由CSDN通过智能技术生成

 1.输入两个正整数m和n,求其最大公约数和最小公倍数

#include<stdio.h>

int Litmultiple(int m, int n) {
    // 从最大的数开始遍历,刚好能整除m,n时返回
    int max, i;
    max = m > n ? m: n;
    while (1) {
        if (max % m == 0 && max % n == 0)
            break;
        max++;
    }
    return max;
}

int MLitmultiple(int m, int n) {
    // 从最小的数开始遍历,搞好能被m,n整除时返回
    int min, i, flag;
    min = m < n ? m : n;
    for (i = 1; i <= min; i++) {
        if (m % i == 0 && n % i == 0) {
            flag = i;
        }
    }
    return flag;
}

int main() {
    int m, n, min, max;
    scanf("%d %d", &m, &n);
    min = Litmultiple(m, n);
    max = MLitmultiple(m, n);
    printf("%d和%d的最大公因数是%d,最小公倍数是%d", m, n, max, min);
    return 0;
}

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

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>

int main() {
	int i, letters = 0, number = 0, space = 0, others = 0;
	char str[20];
	printf("请输入字符:");
	gets_s(str);
	for (i = 0; i < strlen(str); i++) {
		if (('a' <= str[i] && str[i] <= 'z') || ('A' <= str[i] && str[i] <= 'Z'))
			letters++;
		else if ('1' <= str[i] && str[i] <= '9')
			number++;
		else if (str[i] == ' ')
			space++;
		else
			others++;
	}
	printf("字母数:%d\n,数字数:%d\n,空格数:%d\n,其他字符数:%d\n", letters, number, space, others);
	return 0;
}

3.求S_{n}=a+aa+aaa+...+aaa...a的值,其中a是一个数字,n表示a的位数,n是由键盘输入。例如:2+22+222+2222+22222(此时n=5)

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int main() {
	int  a, n, i, ret = 0, sum = 0;
	printf("a,n=");
	scanf("%d,%d", &a, &n);
	for (i = 0; i < n; i++) {
		ret = ret * 10 + a;
		sum += ret;
	}
	printf("a+aa+aaa+...=%d", sum);
	return 0;
}

4.求\sum_{n=1}^{20}n!(1!+2!+3!+...+20!)

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int main() {
	double sum = 0, ret=1;
	int i;
	for (i = 1; i <= 20; i++) {
		ret = ret * i;
		sum = sum + ret;
	}
	printf("1!+2!+3!+...+20!=%22.15e", sum);
	return 0;
}

5.求\sum_{k=1}^{100}k+\sum_{k=1}^{50}k+\sum_{k=1}^{10}\frac{1}{k}

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int main() {
	int k=1, i;
	double s1 = 0, s2 = 0, s3 = 0;
	for (i = 1; i <= 100; i++) {
		s1 += k;
		k++;
	}
	k = 1;
	for (i = 1; i <= 50; i++) {
		s2 = s2+ k * k;
		k++;
	}
	k = 1;
	for (i = 1; i <= 10; i++) {
		s3 += 1.0 / k;
		k++;
	}
	printf("sum=%15.6f", s1+s2+s3);
	return 0;
}

6.输出所有的“水仙花数”

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<math.h>

int main() {
	int i, j, k, n;   // i,j,k --> 个位、十位、百位
	for (n = 153; n < 1000; n++) {
		i = (n % 100) % 10;
		j = (n % 100) / 10;
		k = n / 100;
		if (pow(i, 3) + pow(j, 3) + pow(k, 3)==n) {
			printf("%d\n", n);
		}
 	}
	return 0;
}

7.一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1,2,3,而6=1+2+3,因此6是完数。编程序找出1000以内的所有完数,并按如下格式输出其因子:               6 its factors are 1,2,3

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int main() {
	int i, j, ret;
	for (i = 2; i < 1000; i++) {
		ret = 0;
		for (j = 1; j < i; j++) {
			if (i % j == 0) {   // j是i的因子
				ret += j;
			}
		}
		if (ret == i) {
			printf("%d its factors are ",ret);
			for (j = 1; j < i; j++) {
				if (ret % j == 0)
					printf("%d ", j);
			}
			printf("\n");
		}
	}
	return 0;
}

8.有一个分数序列\frac{2}{1},\tfrac{3}{2},\frac{5}{3},\frac{8}{5},\frac{13}{8},...,求出这个数列前20项之和

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int main() {
	int  i, temp;  // numerator,denominator --> 分子,分母
	float  sum = 0, numerator = 2, denominator = 1;
	for (i = 0; i < 20; i++) {
		sum += numerator / denominator;
		temp = numerator;
		numerator = numerator + denominator;
		denominator = temp;
	}
	printf("sum=%.6f", sum);
	return 0;
}

9.一个球从100m高度自由下落,每次落地后反弹回高度的一半,再落下,再反弹,求它第十次落地时共经过多少米,第10次反弹多高

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int main() {
	int i;
	double sum = 0, h = 100;
	sum += h;
	for (i = 0; i < 10; i++) {
		h /= 2;
		sum = sum + 2 * h;
	}
	printf("10次落地共经过%.6f米\n第10次反弹高度%.6f米\n", sum, h);
	return 0;
}

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

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int main() {
	int i, n = 1;
	for (i = 10; i > 1; i--) {
		n = (n + 1) * 2;
	}
	printf("sum=%d\n", n);
	return 0;
}

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

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int main() {
	char a, b, c;
	for (a = 'x'; a <= 'z'; a++) {			//  a--x,b--y,c--z
		for (b = 'x'; b <= 'z'; b++) {
			if (a != b) {					// a和b不能对同一个对手
				for (c = 'x'; c <= 'z'; c++) {
					if (a != c && b != c) {			// a和c不能对同一个对手 并且 // b和c也不能对同一个对手
						if (a != 'x' && c != 'x' && c != 'z') {
							printf("a--%c\nb--%c\nc--%c\n", a, b, c);
						}
					}	
				}
			}
		}
	}
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值