课后习题

最大公约数和最小公倍数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/*输入两个数,求最大公约数和最小公约数*/
#include <stdio.h>

int main() {
int a, b, x , y, t;
scanf("%d %d", &a, &b);
x = a;
y = b;
// 交换a与b的值
if ( a < b){
t = b;
b = a;
a = t;
}
// 当b不等于0时执行循环体语句
while( b != 0){
t = a % b;
a = b; // a 最后的结果为最大公约数
b = t;
}
int i = x * y / a; // 最初值相乘除以最大公约数得到最小公倍数
printf("最大公约数是:%d\n"
"最小公约数是:%d", a, i);
return 0;
}

打印如下图案

07-19_16:57

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/*
*
***
*****
*******
*****
***
*
*/
#include <stdio.h>


int main() {
for (int i = 1; i <= 4; i++) { // 循环次数
for (int k = 1; k <= 4 - i; ++k) { // 空格
printf(" ");
}
for (int j = 1; j <= i * 2 - 1; j++) { // 星号
printf("*");
}
printf("\n");
}
for (int i = 3; i >= 1 ; i--) { // 循环次数
for (int k = 1; k <= 4 - i ; ++k) { // 空格
printf(" ");
}
for (int j = 1; j <= i * 2 -1; ++j) { // 星号
printf("*");
}
printf("\n");
}
return 0;
}

函数实现素数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/*
* 输入一个值,并传递给函数isSushu
* 在函数isSushu中判断该值是否为素数*/
#include <stdio.h>

int isSushu(int x);
int main() {
int x;
scanf("%d", &x);
// 传递参数
isSushu(x);
}
int isSushu(int x){
int i = 2,isTrue = 1;
// 素数算法
while (i < x) {
if (x % i == 0) {
isTrue = 0;
}
i++;
}
// 判断
if ( isTrue ){
printf("%d是素数\n", x);
} else {
printf("%d不是素数", x);
}
// 返回空值
return 0;
}

100以内的所有素数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 求100以内的素数
#include <stdio.h>

int main() {
for (int x = 3; x <= 100; x++) {
int isPrime = 1;
for (int i = 3; i < x; i++) {
// 当x % i 的值为0 时
if (!(x % i)) {
isPrime = 0;
}
}
// 如果isPrime不为0,代表这个值是素数,输出它
if (isPrime) {
printf("%d\t", x);
}
}
return 0;
}

冒泡算法 - 输入十个数,将其从大到小输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/*编写一个程序输入10个数,将其中最大的数和第一个数对换
* 最小数和最后一个数对换,输出对换后的10个数*/
#include <stdio.h>

int main() {
const int NUM = 11;

int a[NUM], i, j, k;
// 输入数据
for (i = 0; i < NUM - 1; i++) {
scanf("%d", &a[i]);
}
for (j = 0; j < NUM - 1; j++) {
for (k = 0; k < NUM - 1; k++) {
// 如果后者大于前者
if (a[k] < a[k + 1]) {
// 将其往前移一位
int tmp = a[k + 1];
a[k + 1] = a[k];
a[k] = tmp;
}
}
}
// 遍历数组并输出
for (i = 0; i < NUM - 1; ++i) {
printf("%d ", a[i]);
}
return 0;
}

输入 不多于五位的正整数,输出其位数,每一个数字,逆向输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
#include "math.h"

int main() {
int x, n, tmp;
scanf("%d", &x);
// 将x的值赋给临时变量tmp
tmp = x;
// 输出输入数的位数
for (n = 0; tmp > 0; n++) {
tmp /= 10;
}
printf("它是%d位数\n", n);

// 挨个输出x的值
printf("每一个数字是:");
for (int i = n; i > 0; i--) {
int t = (int) (x / pow(10, i - 1));
printf("%d ", t % 10);
}

// 逆向输出x的值
printf("\n逆向输出结果是:");
for (int j = 0; j < n; j++) {
int t = x % 10;
printf("%d", t);
x /= 10;
}
}

输入一串字符,统计英文,空格,数字,其他字符数量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/*输入一行字符,分别统计出其中英文字母,空格,数字和其他字符的个数*/
#include <stdio.h>

int main() {
char c;
int letter = 0, space = 0, num = 0, other = 0;
while ((c = getchar()) != '\n') {
// 统计英文个数
if (c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z') {
letter++;
// 统计空格个数
} else if (c == ' ') {
space++;
// 统计数字个数
} else if (c >= '0' && c <= '9') {
num++;
// 统计其他字符个数
} else other++;
}
printf("英文有:%d个\n空格有:%d个\n"
"数字有%d个\n其他字符有%d个",
letter, space, num, other);
}

求x + xx + xxx + xxxx +… = S ^ n

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>

int main() {
int i, temp = 0, sum = 0, t;
scanf("%d", &i);
t = i;
for (int j = 1; j <= t; j++) {
temp += i;
sum += temp;
i *= 10;
}
printf("%d\n", sum);
return 0;
}

求∑ (n = 1到20) n !

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 1! + 2! + 3! + 20!
#include <stdio.h>

int main() {
double fact = 1, sum = 1;
for (int i = 1; i <= 20; i++) {
// 阶乘的值
fact *= i;
// 各个阶乘值相加
sum += fact;
}
// 以指数形式输出,并精确到小数点后15位
printf("%.15e", sum);
return 0;
}

输入三个字符串,求最大的一个

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/* 有三个字符串,要求找出其中最大者 */
#include <stdio.h>
#include "string.h"

int main() {
// 定义一个二维字符串数组x,三列字符长度均20
char x[3][20] = {};
// 定义一个字符变量string,存放最大者
char string[20];
// 输入三次,分别存放在x[0],x[1],x[2]
for (int i = 0; i < 3; ++i) {
gets(x[i]);
}
// 判断,对比x[0]和x[1]的值,如果x0大于x1则将x0的值赋给string变量
if (strcmp(x[0],x[1]) > 0){
strcpy(string, x[0]);
// 否则将x1的值赋给string变量
} else strcpy(string, x[1]);
// 判断,对比x[2]和string的值,如果x2大于string则将x2的值赋给string变量
if (strcmp(x[2],string) > 0){
strcpy(string, x[2]);
}
printf("%s", string);
}

评论