C语言教材答案

C语言教材答案

可能会错,有问题联系QQ3364445435

第五章

[collapse status="false" title="5.5"]

#include <stdio.h>
#include <stdlib.h>
int main() {
    char c1 = 'C', c2 = 'h', c3 = 'i', c4 = 'n', c5 = 'a';
    printf("%c%c%c%c%c", c1 + 4, c2 + 4, c3 + 4, c4 + 4, c5 + 4);
    return 0;
}

[/collapse]

[collapse status="false" title="5.6"]

/*
题目:小明和小红和你正在玩数字游戏,小明要随机说出一个自然数,而小红会随机说出一个整数,你的任务是去计算这两个数的和。
自然数符合unsigned int范围,整数符合int范围。
*/
#include <stdio.h>
int main() {
    unsigned int a;
    int b;
    scanf("%d%d", &a, &b);
    long ans = a + b;
    printf("%ld", ans);
    return 0;
}


[/collapse]

[collapse status="false" title="5.7"]

#include <stdio.h>
int main() {
    short s = -32768;
    printf("%d\n", s - 2);
    s = s - 2;
    printf("%d", s);
    return 0;
}

[/collapse]

[collapse status="false" title="5.9"]

#include <stdio.h>
int main() {
    int a = 4, b = 6;
    printf("%x\n", a * b);
    return 0;
}

[/collapse]

第六章

[collapse status="false" title="6.1"]

#include <stdio.h>
int main() {
    double a, h;
    scanf("%lf%lf", &a, &h);
    double ans = 1.00 / 2 * a * h;
    printf("%f\n", ans);
    return 0;
}

[/collapse]

[collapse status="false" title="6.2"]

#include <stdio.h>
int main() {
    int a;
    scanf("%d", &a);
    char ch1 = a / 100 + '0';
    char ch2 = a / 10 % 10 + '0';
    char ch3 = a % 10 + '0';
    printf("%c%c%c\n", ch3, ch2, ch1);
    return 0;
}

[/collapse]

[collapse status="false" title="6.3"]

#include <stdio.h>
int main() {
    double a, b, c;
    scanf("%lf%lf%lf", &a, &b, &c);
    double maxx, minn;
    a > b ? maxx = a : b > c ? maxx = b : maxx = c;
    a < b ? minn = a : b < c ? minn = b : minn = c;
    printf("%f\n%f", maxx, minn);
    return 0;
}

[/collapse]

[collapse status="false" title="6.4"]

/*
题目:给出两个整数a,b,求((a + 1) * (b - 1) + (a + 2) / (b - 2)) % 2的结果
*/
#include <stdio.h>
int main() {
    int a, b;
    scanf("%d%d", &a, &b);
    int tmp1 = (++a) * (--b);
    int tmp2 = (a + 1) / (b - 1);
    int ans = (tmp1 + tmp2) % 2;
    printf("%d\n", ans);
    return 0;
}

[/collapse]

[collapse status="false" title="6.5"]

#include <stdio.h>
int main() {
    int a, b;
    scanf("%d%d", &a, &b);
    int c, d, e, f, g, h;
    g = e = c = a;
    h = f = d = b;
    printf("a++:%d\n", a ++ );
    printf("b--:%d\n", b -- );
    a -- , b ++ ;
    printf("++a:%d\n", ++ a);
    printf("--b:%d\n", -- b);
    printf("a++ + b++:%d\n", c++ + d++);
    printf("++a + ++b:%d\n", ++e + ++f);
    return 0;
}

[/collapse]

[collapse status="false" title="6.6"]

(1) num % 6 == 0;
(2) x > -2 && x < 2 && y > -2 && y < 2 && (x * x) + (y * y) > 1
(3) a + b > c && a + c > b && b + c > a 

[/collapse]

[collapse status="false" title="6.7"]

#include <stdio.h>
#include <math.h>
int main() {
    int a, b, c, maxx = 0, flag;
    double ans;
    scanf("%d%d%d", &a, &b, &c);
    a > maxx ? maxx = a, flag = 1:1;
    b > maxx ? maxx = b, flag = 2:1;
    c > maxx ? maxx = c, flag = 3:1;
    flag == 1 ? ans = sqrt(1 - (1.00 * (b * b + c * c - a * a) / (2 * b * c)) * (1.00 * (b * b + c * c - a * a) / (2 * b * c))):1;
    flag == 2 ? ans = sqrt(1 - (1.00 * (c * c + a * a - b * b) / (2 * a * c)) * (1.00 * (c * c + a * a - b * b) / (2 * a * c))):1;
    flag == 3 ? ans = sqrt(1 - (1.00 * (b * b + a * a - c * c) / (2 * a * b)) * (1.00 * (b * b + a * a - c * c) / (2 * a * b))):1;
    printf("%f", ans);
    return 0;
}

[/collapse]

[collapse status="false" title="6.8"]

#include <stdio.h>
int main() {
    // printf("输入时间:");
    int a, b;
    scanf("%d%d", &a, &b);
    double time = a + b / 60.0;
    double tmp1 = 4 * time * time;
    double tmp2 = time + 2;
    double ans = tmp1 / tmp2 - 20;
    printf("%.2f\n", ans);
    return 0;
}

[/collapse]

[collapse status="false" title="6.9"]

#include <stdio.h>
int main() {
    int strx, endx;
    int strh, strm, strs;
    int endh, endm, ends;
    int x, timh, timm, tims;
    double ans;
    printf("所有输入数据为整数\n");
    printf("开始里程?\n");
    scanf("%d", &strx);
    printf("开始时间(时,分,秒)\n");
    scanf("%d%d%d", &strh, &strm, &strs);
    printf("结束里程?\n");
    scanf("%d", &endx);
    printf("结束时间(时,分,秒)\n");
    scanf("%d%d%d", &endh, &endm, &ends);
    x = endx - strx;
    printf("汽车行驶了%d公里\n", x);
    ends - strs >= 0 ? tims = ends - strs : endm -= 1, tims = ends + 60 - strs;
    endm - strm >= 0 ? timm = endm - strm : endh -= 1, timm = endm + 60 - strm;
    timh = endh - strh;
    printf("消耗时间%d小时%d分%d秒\n", timh, timm, tims);
    ans = 1.00 * x / (timh + 1.0 * timm / 60 + 1.0 * tims / 3600);
    printf("平均速度:%.4f公里/小时", ans);
    return 0;
}

[/collapse]

[collapse status="false" title="6.10"]

#include <stdio.h>
#define dj 10800
#define tc 1000
int main() {
    int mon, num;
    double ans = 0;
    printf("请输入基本工资、销售台数\n");
    scanf("%d%d", &mon, &num);
    ans = mon;
    ans += tc * num;
    dj * num > 100000 ? ans += 0.02 * dj * num : 1;
    printf("%f", ans);
    return 0;
}

[/collapse]

第七章

[collapse status="false" title="7.1"]

#include <stdio.h>
#include <math.h>

int main() {
    int a, b, c, tmp;
    scanf("%d %d %d", &a, &b, &c);
    if (a > b) {
        if (b > c) {
            printf("%d %d %d", c, b, a);
        }
        else {
            if (a > c) {
                printf("%d %d %d", b, c, a);
            }
            else {
                printf("%d %d %d", b, a, c);
            }
        }
    }
    else {
        if (c < a) {
            printf("%d %d %d", c, a, b);
        }
        else {
            if (b > c) {
                printf("%d %d %d", a, c, b);
            }
            else {
                printf("%d %d %d", a, b, c);
            }
        }
    }
    
    return 0;
}

[/collapse]

[collapse status="false" title="7.2"]

#include <stdio.h>
int main() {
    int w;
    double h, ans;
    scanf("%lf%d", &h, &w);
    ans = 1.00 * w / (h * h);
    if (ans < 18) {
        printf("偏瘦\n");
    }
    else if (ans <= 25) {
        printf("正常体重\n");
    }
    else if (ans < 27){
        printf("超重体重\n");
    }
    else {
        printf("肥胖\n");
    }
    return 0;
}

[/collapse]

[collapse status="false" title="7.5"]

#include <stdio.h>
int main() {
    char ch;
    scanf("%c", &ch);
    if (ch >= '0' && ch <= '9') {
        printf("数字\n");
    }
    else if (ch >= 'A' && ch <= 'Z') {
        printf("大写字母\n");
    }
    else if (ch >= 'a' && ch <= 'z') {
        printf("小写字母\n");
    }
    else {
        printf("其他字符\n");
    }
    return 0;
}

[/collapse]

[collapse status="false" title="7.7"]

//整数:
// #include <stdio.h>
// int main() {
//     int a, b;
//     int ans;
//     char ch;
//     scanf("%d %c %d", &a, &ch, &b);
//     if (ch == '+') {
//         ans = a + b;
//     }
//     if (ch == '-') {
//         ans = a - b;
//     }
//     if (ch == '*') {
//         ans = a * b;
//     }
//     if (ch == '/') {
//         ans = a / b;
//     }
//     printf("%d", ans);
//     return 0;
// }



/*浮点数:
#include <stdio.h>
int main() {
    double a, b;
    double ans;
    char ch;
    scanf("%lf %c %lf", &a, &ch, &b);
    if (ch == '+') {
        ans = 1.0 * a + b;
    }
    if (ch == '-') {
        ans = 1.0 * a - b;
    }
    if (ch == '*') {
        ans = 1.0 * a * b;
    }
    if (ch == '/') {
        ans = 1.0 * a / b;
    }
    printf("%f", ans);
    return 0;
}
*/

//多次:
// #include <stdio.h>
// int main() {
//     int a, b;
//     double ans = 0;
//     char ch;
//     scanf("%d", &a);
//     ans += a;
//     while (1) {
//         getchar();
//         do {
//             scanf("%c", &ch);
//         } while(ch == ' ' || ch == '\n');
//         scanf("%d", &b);
//         if (ch == '+') {
//             ans += b;
//         }
//         else if (ch == '-') {
//             ans -= b;
//         }
//         else if (ch == '*') {
//             ans *= b;
//         }
//         else if (ch == '/') {
//             ans /= 1.0 * b;
//         }
//         printf("%f", ans);
//     }
//     return 0;
// }

[/collapse]

[collapse status="false" title="7.8"]

#include <stdio.h>
int main() {
    int year, month, day, maxx;
    bool run = 0;
    scanf("%d%d%d", &year, &month, &day);
    if (month > 12 || month < 1) {
        printf("无效\n");
        return 0;
    }
    switch (month)
    {
    case 1 : case 3 : case 5: case 7 : case 8 : case 10 : case 12 :
        maxx = 31; break;
    case 2 :
        maxx = 28; break;
    default:
        maxx = 30; break;
    }
    if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
        if (month == 2) {
            maxx += 1;
        }
    }
    if (day > maxx || day < 1) {
        printf("无效\n");
        return 0;
    }
    printf("有效\n");
    return 0;
}

[/collapse]

[collapse status="false" title="7.10"]

#include <bits/stdc++.h>
using namespace std;
int main() {
    int n;
    scanf("%d", &n);
    int a = n / 1000, b = n % 1000 / 100, c = n % 100 / 10, d = n % 10;
    if (a != 0) {
        switch(a) {
            case 1 : printf("壹");break;   case 2 : printf("贰");break;   case 3 : printf("叁");break; 
            case 4 : printf("肆");break;   case 5 : printf("伍");break;   case 6 : printf("陆");break; 
            case 7 : printf("柒");break;   case 8 : printf("捌");break;   case 9 : printf("玖");break;
        }
        printf("千");
    }
    switch(b) {
        case 1 : printf("壹");break;   case 2 : printf("贰");break;   case 3 : printf("叁");break; 
        case 4 : printf("肆");break;   case 5 : printf("伍");break;   case 6 : printf("陆");break; 
        case 7 : printf("柒");break;   case 8 : printf("捌");break;   case 9 : printf("玖");break;
        case 0 : printf("零");break;
    }
    if (b != 0) {
        printf("百");
    }
    switch(c) {
        case 1 : printf("壹");break;   case 2 : printf("贰");break;   case 3 : printf("叁");break; 
        case 4 : printf("肆");break;   case 5 : printf("伍");break;   case 6 : printf("陆");break; 
        case 7 : printf("柒");break;   case 8 : printf("捌");break;   case 9 : printf("玖");break;
        case 0 : printf("零");break;
    }
    if (c != 0) {
        printf("拾");
    }
    switch(d) {
        case 1 : printf("壹");break;   case 2 : printf("贰");break;   case 3 : printf("叁");break; 
        case 4 : printf("肆");break;   case 5 : printf("伍");break;   case 6 : printf("陆");break; 
        case 7 : printf("柒");break;   case 8 : printf("捌");break;   case 9 : printf("玖");break;
    }
    return 0;
    
}

[/collapse]

第八章

[collapse status="false" title="8.1"]

/*(1)*/
//for循环

// #include <stdio.h>
// int main() {
//     int n, ans = 1;
//     scanf("%d", &n);
//     for (int i = n; i >= 1; i -- ) {
//         ans *= i;
//     }
//     printf("%d\n", ans);
//     return 0;
// }

//while循环

// #include <stdio.h>
// int main() {
//     int n, ans = 1;
//     scanf("%d", &n);
//     while (n > 0) {
//         ans *= n;
//         n --;
//     }
//     printf("%d\n", ans);
//     return 0;
// }

//do-while循环

// #include <bits/stdc++.h>
// int main() {
//     int n, ans = 1;
//     scanf("%d", &n);
//     do {
//         ans *= n;
//     }while (-- n);
//     printf("%d\n", ans);
//     return 0;
// }

/*(2)*/
//for循环

// #include <stdio.h>
// int main() {
//     int m, now = 1, ans = 0;
//     scanf("%d", &m);
//     for (int i = 1; i <= m; i ++ ) {
//         now *= i;
//         ans += now;
//     }
//     printf("%d\n", ans);
//     return 0;
// }

//while循环

// #include <stdio.h>
// int main() {
//     int m, now = 1, ans = 0;
//     scanf("%d", &m);
//     int i = m;
//     while(i -- ) {
//         now *= m - i;
//         ans += now;
//     }
//     printf("%d", ans);
//     return 0;
// }




/*(3)*/
//for循环

// #include <stdio.h>
// int main() {
//     int now = 1;
//     double ans = 1.0;
//     for (int i = 1; i <= 10; i ++ ) {
//         now *= i;
//         ans += 1.0 / now;
//     }
//     printf("%f\n", ans);
//     return 0;
// }

//while循环

// #include <stdio.h>
// int main() {
//     int now = 1, maxx = 10;
//     double ans = 1.0;
//     while (maxx -- ) {
//         now *= 10 - maxx;
//         ans += 1.0 / now;
//     }
//     printf("%f\n", ans);
//     return 0;
// }

/*(4)*/
//for循环

// #include <stdio.h>
// int main() {
//     int x, now = 1;
//     double ans = 1.0;
//     scanf("%d", &x);
//     for (int i = 1; i <= 10; i ++ ) {
//         now *= i;
//         ans += 1.0 * x / now;
//     }
//     printf("%f\n", ans);
//     return 0;
// }

//while循环

// #include <stdio.h>
// int main() {
//     int now = 1, maxx = 10;
//     int x;
//     double ans = 1.0;
//     scanf("%d", &x);
//     while (maxx -- ) {
//         now *= 10 - maxx;
//         ans += 1.0 * x / now;
//     }
//     printf("%f\n", ans);
//     return 0;
// }


[/collapse]

[collapse status="false" title="8.2"]

#include <stdio.h>
#define pi 3.1415926
int main() {

	//公式1
	double ans1 = 0, ans2 = 1;
	int n = 1, sgn = 1; // sgn为符号函数
	while(ans1 * 4.00 < pi - 1e-7 || ans1 * 4.00 > pi + 1e-7) {
		ans1 += sgn * 1.00 / (2.00 * n - 1);
		n ++ ;
		sgn = -sgn;
	}
	printf("%.7lf\n", ans1 * 4);
	//公式2
	n = 1; //计数器清零
	while(ans2 * 2.00 < pi - 1e-7 || ans2 * 2.00 > pi + 1e-7) {
		double tmp = 4.00 * n * n;
		ans2 *= tmp / (tmp - 1);
		// (2n * 2n) / ((2n - 1)*(2n + 1)) = tmp / (tmp - 1)
		n ++ ;
	}
	printf("%.7lf\n", ans2 * 2);
	return 0;
}

[/collapse]

[collapse status="false" title="8.3"]

// 穷举法

// #include <stdio.h>
// int main() {
//     int n, m, minn;
//     scanf("%d%d", &n, &m);
//     n > m ? minn = m : minn = n;
//     for (int i = minn; i >= 1; i -- ) {
//         if (n % i == 0 && m % i == 0) {
//             printf("%d\n", i);
//             break;
//         }
//     }
//     return 0;
// }


// 迭代法

// #include <stdio.h>
// int main() {
//     int n, m, tmp, now;
//     scanf("%d%d", &n, &m);
//     if (m > n) {
//         int tmp = n;
//         n = m;
//         m = tmp;
//     }
//     while (m != 0) {
//         now = n % m;
//         n = m;
//         m = now;
//     }
//     printf("%d\n", n);
//     return 0;
// }

[/collapse]

[collapse status="false" title="8.4"]

#include <stdio.h>
int main() {
    int cnt = 2;
    int tmp1 = 0, tmp2 = 1;
    printf("%-5d %-5d ", tmp1, tmp2);
    for (int i = 3; i <= 20; i ++ ) {
        int now = tmp1 + tmp2;
        tmp1 = tmp2;
        tmp2 = now;
        printf("%-5d ", now);
        if (i % 8 == 0) {
            printf("\n");
        }
    }
    return 0;
}

[/collapse]

[collapse status="false" title="8.5"]

#include <stdio.h>
int main() {
    int tmp1 = 1;
    int tmp2 = 2;
    double ans = 0;
    for (int i = 1; i <= 20; i ++ ) {
        ans += 1.0 * tmp2 / tmp1;
        int tmp = tmp1 + tmp2;
        tmp1 = tmp2;
        tmp2 = tmp;
    }
    printf("%f\n",ans);
    return 0;
}

[/collapse]

[collapse status="false" title="8.6"]

//判断是否为素数

// #include <stdio.h>
// int main() {
//     int a;
//     scanf("%d", &a);
//     if (a == 1) {
//         printf("No");
//         return 0;
//     }
//     for (int i = 2; i * i <= a; i ++ ) {
//         if (a % i == 0) {
//             printf("No");
//             return 0;
//         }
//     }
//     printf("Yes");
//     return 0;
// }

//m,n之间的素数

// #include <stdio.h>
// int main() {
//     int n, m, cnt = 0;
//     bool flag = 1;
//     scanf("%d%d", &n, &m);
//     for (int i = n; i <= m; i ++ ) {
//         if (i == 1) {
//             continue ;
//         }
//         flag = 1;
//         for (int j = 2; j * j <= i; j ++ ) {
//             if (i % j == 0) {
//                 flag = 0;
//                 break;
//             }
//         }
//         if (flag == 1) {
//             cnt ++ ;
//             printf("%d ", i);
//         }
//     }
//     printf("\ntotal:%d\n", cnt);
//     return 0;
// }

[/collapse]

[collapse status="false" title="8.7"]

#include <stdio.h>
int main() {
    int num;
    bool lazy = 0;
    scanf("%d", &num);
    printf("%d=", num);
    while (num > 1) {
        for (int i = 2; i <= num; i ++) {
            bool flag = 1;
            for (int j = 2; j * j <= i; j ++ ) {
                if (i % j == 0) {
                    flag = 0;
                    break;
                }
            } 
            if (flag == 1) {
                while (num % i == 0) {
                    num /= i;
                    if (lazy == 0) {
                        printf("%d", i);
                        lazy = 1;
                    }
                    else {
                        printf("*%d", i);
                    }
                }
            }
        }
    }
    return 0;
}

[/collapse]

posted @ 2021-11-02 22:24  筱柒_Littleseven  阅读(141)  评论(1编辑  收藏  举报