C_TA_Website/source/_posts/answer3.md

212 lines
4.3 KiB
Markdown
Raw Normal View History

---
title: 第三次作业(答案)
2020-10-30 15:57:44 +08:00
date: 2020-10-30 15:53:35
tags:
---
2020-10-30 15:57:44 +08:00
# P108-3
写出下面各逻辑表达式的值。设`a = 3`,`b = 4`,`c = 5`。
| # | 表达式 | 答案 |
| :---: | :------------------------------ | :-- |
| 1 | `a + b > c && b == c` | `0` |
| 2 | `a || b + c && b - c` | `1` |
| 3 | `!(a > b) && !c || 1` | `1` |
| 4 | `!(x = a) && (y = b) && 0` | `0` |
| 5 | `!(a + b) + c - 1 && b + c / 2` | `1` |
# P108-6
```C
#include <stdio.h>
#include <stdlib.h>
int main()
{
double x, y;
printf("This program calculates y: \n");
printf("\n");
printf(" y = x (x < 1)\n");
printf(" 2x - 1 (1 <= x < 10)\n");
printf(" 3x - 11 (x >= 10)\n");
printf("\n");
printf("Please input x:\n");
printf("x = ");
if (scanf("%lf", &x) != 1) {
fprintf(stderr, "Invalid input!\n");
exit(EXIT_FAILURE);
}
if (x < 1) {
y = x;
} else if (x < 10) {
y = 2 * x - 1;
} else {
y = 3 * x - 11;
}
printf("y = %f\n", y);
return 0;
}
```
# P108-9
```C
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
printf("请输入n: \nn = ");
if (scanf("%d", &n) != 1 || n > 99999 || n < 1) {
fprintf(stderr, "非法输入!\n");
exit(EXIT_FAILURE);
}
// 求位数
int tmp = n;
int digits = 5;
for (int i = 0; i < 5; ++i) {
if (tmp == 0) {
digits = i;
break;
}
tmp /= 10;
}
printf("%d有%d位\n", n, digits);
// 输出每一位:
tmp = n;
int digit_1 = tmp % 10;
tmp /= 10;
int digit_2 = tmp % 10;
tmp /= 10;
int digit_3 = tmp % 10;
tmp /= 10;
int digit_4 = tmp % 10;
tmp /= 10;
int digit_5 = tmp;
if (digits >= 1) {
printf("它的个位是%d\n", digit_1);
}
if (digits >= 2) {
printf("它的十位是%d\n", digit_2);
}
if (digits >= 3) {
printf("它的百位是%d\n", digit_3);
}
if (digits >= 4) {
printf("它的千位是%d\n", digit_4);
}
if (digits >= 5) {
printf("它的万位是%d\n", digit_5);
}
// 逆向输出
printf("逆向输出是");
printf("%d", digit_1);
if (digits >= 2) {
printf("%d", digit_2);
}
if (digits >= 3) {
printf("%d", digit_3);
}
if (digits >= 4) {
printf("%d", digit_4);
}
if (digits >= 5) {
printf("%d", digit_5);
}
printf("\n");
return 0;
}
```
# P108-12
```C
#include <stdio.h>
#include <stdlib.h>
2020-10-30 15:57:44 +08:00
#include <math.h>
int main()
{
double r2 = 1;
double x, y;
printf("请分别输入所在位置的的x、y坐标:\nx = ");
if (scanf("%lf", &x) != 1) {
fprintf(stderr, "非法输入!\n");
exit(EXIT_FAILURE);
}
printf("y = ");
if (scanf("%lf", &y) != 1) {
fprintf(stderr, "非法输入!\n");
exit(EXIT_FAILURE);
}
2020-10-30 15:57:44 +08:00
x = fabs(x);
y = fabs(y);
double d2 = pow(x - 2, 2) + pow(y - 2, 2);
if (d2 < r2) {
printf("该点高度是10m\n");
} else {
printf("该点高度是0m\n");
}
return 0;
}
```
# 解一元二次方程
```C
#include <stdio.h>
#include <stdlib.h>
#include <complex.h>
#include <math.h>
int main()
{
double a, b, c;
printf("一元二次方程求根\n");
printf("a x^2 + b x + c = 0\n");
printf("请输入a、b、c:\na = ");
if (scanf("%lf", &a) != 1 || a == 0) {
fprintf(stderr, "非法输入!\n");
exit(EXIT_FAILURE);
}
printf("b = ");
if (scanf("%lf", &b) != 1) {
fprintf(stderr, "非法输入!\n");
exit(EXIT_FAILURE);
}
printf("c = ");
if (scanf("%lf", &c) != 1) {
fprintf(stderr, "非法输入!\n");
exit(EXIT_FAILURE);
}
double delta = b * b - 4 * a * c;
if (delta == 0) {
printf("x1 = x2 = %f\n", -b / 2 / a);
} else if (delta > 0) {
double x1 = (-b + sqrt(delta)) / 2 / a;
double x2 = (-b - sqrt(delta)) / 2 / a;
printf("x1 = %f\nx2 = %f\n", x1, x2);
} else {
double complex x1 = (-b + csqrt(delta)) / 2 / a;
double complex x2 = (-b - csqrt(delta)) / 2 / a;
printf("x1 = %f %+fi\nx2 = %f %+fi\n", creal(x1), cimag(x1), creal(x2), cimag(x2));
}
return 0;
}
```