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.求的值,其中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.求
#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.求
#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.有一个分数序列,求出这个数列前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;
}