C_TA_Website/source/_posts/answer5.md

233 lines
5.1 KiB
Markdown
Raw Permalink Normal View History

2020-11-11 23:07:06 +08:00
---
title: 第五次作业(答案)
date: 2020-11-11 22:11:05
tags:
---
2020-11-12 20:51:28 +08:00
2020-11-11 23:07:06 +08:00
# P138-17
答案:A对Z,B对X,C对Y
```C
#include <stdio.h>
int main()
{
int result[3] = { 0, 0, 0 }; // 分别表示ABC三人的对手
// 分别给ABC指派对手
for (int i = 0; i < 3; ++i) { // A
result[0] = 'X' + i;
for (int j = 0; j < 3; ++j) { // B
result[1] = 'X' + j;
for (int k = 0; k < 3; ++k) { // C
result[2] = 'X' + k;
// 检查合法性
// 两人的对手不能一样
if (result[0] == result[1]) {
continue;
}
if (result[0] == result[2]) {
continue;
}
if (result[1] == result[2]) {
continue;
}
// A不和X比
if (result[0] == 'X') {
continue;
}
// C 不和X,Z比
if (result[2] == 'X') {
continue;
}
if (result[2] == 'Z') {
continue;
}
// 剩下的就是正确答案
printf("A的对手是%c\n", result[0]);
printf("B的对手是%c\n", result[1]);
printf("C的对手是%c\n", result[2]);
}
}
}
return 0;
}
```
# 二分查找
```C
#include <stdio.h>
int main()
{
int a[100];
printf("二分查找");
int n;
printf("请输入n:\nn = ");
scanf("%d", &n);
printf("请输入n个有序数(从小到大):\n");
for (int i = 0; i < n; ++i) {
scanf("%d", a + i);
}
printf("请输入你要找的数:");
int m;
scanf("%d", &m);
int l = 0;
int r = n - 1;
while (1) {
if (l == r) {
if (m == a[l]) {
printf("a[%d] = %d\n", l, m);
} else if (m < a[l]) {
for (int i = n - 1; i >= l; --i) {
a[i + 1] = a[i];
}
a[l] = m;
printf("%d被插入到了a[%d]的位置\n", m, l);
for (int i = 0; i < n + 1; ++i) {
printf("a[%d] = %d\n", i, a[i]);
}
} else {
for (int i = n - 1; i >= l + 1; --i) {
a[i + 1] = a[i];
}
a[l + 1] = m;
printf("%d被插入到了a[%d]的位置\n", m, l + 1);
for (int i = 0; i < n + 1; ++i) {
printf("a[%d] = %d\n", i, a[i]);
}
}
break;
} else if (r == l + 1) {
if (m == a[l]) {
printf("a[%d] = %d\n", l, m);
break;
} else if (m < a[l]) {
for (int i = n - 1; i >= l; --i) {
a[i + 1] = a[i];
}
a[l] = m;
printf("%d被插入到了a[%d]的位置\n", m, l);
for (int i = 0; i < n + 1; ++i) {
printf("a[%d] = %d\n", i, a[i]);
}
break;
} else {
l++;
}
} else {
int c = (l + r) / 2;
if (m == a[c]) {
printf("a[%d] = %d\n", c, m);
break;
} else if (m < a[c]) {
r = c - 1;
} else {
l = c + 1;
}
}
}
return 0;
}
```
# P165-3
```C
#include <stdio.h>
int main()
{
int a[3][3];
printf("请输入一个3x3的矩阵:\n");
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
scanf("%d", &a[i][j]);
}
}
int sum = a[0][0] + a[0][2] + a[1][1] + a[2][0] + a[2][2];
printf("对角线元素之和为%d\n", sum);
return 0;
}
```
# P165-6
```C
#include <stdio.h>
int main()
{
int a[10][10];
for (int i = 0; i < 10; ++i) {
a[i][0] = 1;
a[i][i] = 1;
}
for (int i = 1; i < 10; ++i) {
for (int j = 1; j < i; ++j) {
a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
}
}
for (int i = 0; i < 10; ++i) {
for (int j = 0; j <= i; ++j) {
printf("%-5d", a[i][j]);
}
printf("\n");
}
return 0;
}
```
# P165-10
```C
#include <stdio.h>
int main()
{
int upper = 0, lower = 0, num = 0, space = 0, others = 0;
for (int i = 0; i < 80; ++i) {
int c = getchar();
if (c == ' ') {
space++;
continue;
}
if (c >= 'a' && c <= 'z') {
lower++;
continue;
}
if (c >= 'A' && c <= 'Z') {
upper++;
continue;
}
if (c >= '0' && c <= '9') {
num++;
continue;
}
others++;
}
printf("大写字母有%d\n", upper);
printf("小写字母有%d\n", lower);
printf("数字有%d\n", num);
printf("空格%d\n", space);
printf("其它字符有%d\n", others);
return 0;
}
```