书本练习题+课后习题

目录


第1章


练习1-1 略
练习1-2 求 1~100 能被6整除的所有整数的和
  1. #include <stdio.h>
  2. int main(void) {
  3. int sum , i, n;
  4. n = 100;
  5. for ( i = 0; i < n; i++)
  6. {
  7. if ( i % 6 == 0) {
  8. sum += i;
  9. }
  10. }
  11. printf("结果为:%d",sum);
  12. return 0;
  13. }
练习1-3. 略
练习1-4. 判断质数
  1. ```
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. int main()
  5. {
  6. int n, f, i;
  7. f = 0;
  8. scanf("%d", &n);
  9. for (i = 2; i <= n - 1; i++)
  10. {
  11. if (n % i == 0)
  12. {
  13. f = 1;
  14. break;
  15. }
  16. }
  17. if (f == 0)
  18. printf("质数\n");
  19. else
  20. printf("非质数\n");
  21. system("pause");
  22. return 0;
  23. }
  1. ##### 练习1-5. 求阶乘
  1. #include <stdio.h>
  2. int main(void)
  3. {
  4. int n;
  5. scanf("%d", &n);
  6. int factorial(int n);
  7. printf("%d\n", factorial(n));
  8. return 0;
  9. }
  10. int factorial(int n)
  11. {
  12. int i, fact = 1;
  13. for (i = 1; i <= n; i++)
  14. {
  15. fact *= i;
  16. }
  17. return fact;
  18. }
  1. #### 第2章
  2. ---
  3. ##### 练习2-1 屏幕显示 "Programmimg in C is fun!".

include

int main(void) { printf(“Programmimg in C is fun!”); return 0; }

  1. ##### 练习2-2 下面程序的运行结果? 与例2-2 的不同? 为什么?**`printf( "Programming is fun. And programming in C is even more fun!\n " )`**
  2. 一行显示,因为只有一个换行符 \n
  3. ##### 练习2-3 在屏幕上显示下列图案


*

  1. ```
  2. #include <stdio.h>
  3. int main(void) {
  4. printf("\n\
  5. ****\n\
  6. ***\n\
  7. **\n\
  8. *\n");
  9. return 0;
  10. }
练习2-4 求华氏摄氏度150度对应的摄氏温度
  1. include <stdio.h>
  2. int main(void) {
  3. int fahr;
  4. double celsius;
  5. fahr = 150;
  6. celsius = 5.0 * (fahr - 32) / 9;
  7. printf("对应的温度是: %.6lf", celsius);
  8. return 0;
  9. }
练习2-5 算数表达式 5(fahr-32)/9 能改写成 5(fahr-32)/9 吗? 为什么?如果将其改写成 5/9(fahr - 32), 会影响运算结果吗?

5(fahr-32)/9 不是合法的算术表达式, 不可以被省略的。
5/9
(fahr - 32), 为防止 C 语言中 两个整数 相除 其结果必定是整数, 这样写可能会导致 0.002 这样的数,显示为 0.0000

练习2-6 一物体从100m出落下,求它3s后的移动距离 (g=10 m/s^2)
  1. #include <stdio.h>
  2. #include <math.h>
  3. int main(void) {
  4. double height;
  5. int t = 3;
  6. height = 0.5 * 10 * pow(3.0 , 2.0);
  7. printf("3s 后的物体的距离是:%.2lf ", height);
  8. return 0;
  9. }
  10. // 运算结果 45m
练习2-7

提示语句在前,输入语句在后。
不能,占位符必须和后面参数的对应的书籍类型相匹配。
可以,(1000,0.025,3);

练习2-8

重复了,略过

练习2-9 输入三个整数,求平均值。
  1. #include <stdio.h>
  2. int main(void)
  3. {
  4. int a, b, c;
  5. double avg;
  6. printf("请输入三个整数:\n");
  7. scanf("%d %d %d", &a, &b, &c);
  8. avg = (a + b + c) * 1 /3.0;
  9. printf("avg = %.3lf", avg);
  10. return 0;
  11. }
练习2-10 分段函数
  1. #include <stdio.h>
  2. int main(void)
  3. {
  4. double x, y;
  5. printf("Enter x:");
  6. scanf("%lf", &x);
  7. if (x == 0)
  8. y = 0;
  9. else
  10. y = 1.0 / x;
  11. printf("y = %.3lf", y);
  12. return 0;
  13. }
练习2-11 分段函数
#include <stdio.h>
#include <math.h>
int main(void)
{
    double x, y;
    printf("Enter x:");
    scanf("%lf", &x);
    if (x >= 0)
        y = sqrt(x);
    else
        y = pow( x, 2) + 2 * x + 1.0 / x;
    printf("y = %.3lf", y);
    return 0;
}
练习2-12 华氏摄氏度-转换表 每次 +2°

重复, 略过

练习2-13 求和 1+ 1/2 + … = 1/n
#include <stdio.h>
int main(void)
{
    int i, n;
    float y;
    printf("Enter n:");
    scanf("%d", &n);
    for (i = 1; i <= n; i++)
    {
        y += (1.0 / i);
    }
    printf("y=%.6f", y);
    return 0;
}
练习2-14 求和 1+ 1/3 + 1/5 +
#include <stdio.h>
int main(void)
{
    int i, n;
    float y;
    printf("Enter n:");
    scanf("%d", &n);
    for (i = 1; i <= n; i++)
    {
        y += 1.0 / (2 * i -1);
    }
    printf("y=%.6f", y);
    return 0;
}
练习2-15 求 1 - 1/4+1/7-1/10+1/13 ….
#include <stdio.h>
int main(void)
{
    int i, n;
    float y;
    printf("Enter n:");
    scanf("%d", &n);
    for (i = 1; i <= n; i++)
    {
        if ( i % 2 != 0){
            y += 1.0 / (3 * i - 2);
        }else{
            y -= 1.0 / (3 * i - 2);
        }
    }
    printf("y=%.6f", y);
    return 0;
}
练习2-16 输入两个正整数 m,n,计算 m! + n!
#include <stdio.h>
int main(void)
{
    int m, n;
    double y;
    int factorial(int x);
    printf("Enter m, n: \n");
    scanf("%d %d", &m, &n);
    y = factorial(m) + factorial(n);
    printf("y = %d! + %d! = %.0f\n", m, n, y);
    return 0;
}
int factorial(int x)
{
    int i, fact = 1;
    for (i = 1; i <= x; i++)
    {
        fact *= i;
    }
    return fact;
}
练习2-17

10

练习2-18 输入一个正整数n,生成一张3的乘方表。
// 乘方表 
#include <stdio.h>
#include <math.h>
int main(void)
{
    int n, y;
    printf("Enter n :", &n);
    scanf("%d", &n);
    for (int i = 0; i <= n; i++)
    {
        y = pow(3, i);
        printf("y = pow(3, %d) = %d \n", i, y);
    }
    return 0;
}
练习2-19 输入一个正整数n,生成一张阶乘表。
// 阶乘表
#include <stdio.h>
int main(void)
{
    int n, y;
    int factorial(int x); // 阶乘函数声明
    printf("Enter n :\n");
    scanf("%d", &n);
    for (int i = 0; i <= n; i++)
    {
        y = factorial(i);
        printf(" %d! = %d \n", i, y);
    }
    return 0;
}
int factorial(int x)
{
    int i, fact = 1;
    for (i = 1; i <= x; i++)
    {
        fact *= i;
    }
    return fact;
}
练习2-20 计算 n! / m!(n - m)!
#include <stdio.h>
int main(void)
{
    int m, n;
    double y;
    int factorial(int x);
    printf("Enter m , n :\n");
    scanf("%d%d", &m, &n);
    y = factorial(n) / (factorial(m) * factorial(n - m));
    printf("y = %d! / %d!(%d - %d)! = %.3lf", n, m, n, m, y);
    return 0;
}
int factorial(int x)
{
    int i, fact = 1;
    for (i = 1; i <= x; i++)
    {
        fact *= i;
    }
    return fact;
}
习题2-1 输入两个正整数 num1 num2 ,计算它们的和、差、积、商、余
#include <stdio.h>
int main(void) {

    int num1, num2;
    printf("Enter num1, num2:\n");
    scanf("%d%d",&num1,&num2);
    printf(" num1 + num2 = %d + %d = %d \n", num1, num2, (num1 + num2));
    printf(" num1 - num2 = %d - %d = %d \n", num1, num2, (num1 - num2));
    printf(" num2 - num1 = %d - %d = %d \n", num2, num1, (num2 - num1));
    printf(" num1 * num2 = %d * %d = %d \n", num1, num2, (num1 * num2));
    printf(" num2 / num1 = %d - %d = %f \n", num2, num1, (num2 * 1.0/ num1));
    printf(" num1 / num2 = %d - %d = %f \n", num1, num2, (num1 * 1.0/ num2));
    printf(" num1 Mod mum2 = %d \n",  ((num1 ) % num2));
    printf(" num2 Mod mum1 = %d \n",  ((num2 ) % num1));
    return 0;
}
习题2-2 计算电费,分段函数。 f(x) = { 0.53x (050) }
#include <stdio.h>
int main(void) {
    double x, y;
    printf("Enter used electricity : \n");
    scanf("%lf" , &x);
    if(x <= 50)
        y = 0.53 * x;
    else
        y = (x - 50) * 0.05 + 0.53 * 50;
    printf("Money = %.6lf", y);
    return 0;
}
习题2-3 输入实数 x和 正整数 n,计算 x^n , 不允许调用 pow() 函数
#include <stdio.h>
int main(void)
{
    int n;
    float x;
    float fun_1(float x, int n);
    // printf("Enter float number , int number : \n");
    // scanf("%f%d",&x, &n);
    // x = 1.1;
    // n = 2;
    printf("res = %f \n", fun_1(1.1, 2));
    return 0;
}
float fun_1(float x, int n)
{
    float res = 1.0;
    for (int i = 1; i <= n; i++)
    {
        res = res * x;
        printf("%f \n" ,res);
    }
    return res;
}
习题2-4 输入两个正整数 m,n 计算 区间 [m,n] 的 x^2 + 1/x^2.
#include <stdio.h>
int main(void)
{
    int i, m, n;
    double sum;
    printf("Enter m,n : \n");
    scanf("%d%d", &m, &n);
    for (i = m; i <= n; i++)
    {
        sum += i * i + 1 / (i * i);
    }
    printf("sum = %lf ", sum);
    return 0;
}
习题2-5 输入一个正整数 n,计算 1-2/3+3/5-4/7 … 的前n项之和.
#include <stdio.h>
int main(void)
{
    int n;
    double sum;
    printf("输入一个正整数 n: ");
    scanf("%d", &n);
    for (int i = 1; i <= n; i++)
    {
        if (i & 1 == 1) /* 为1 则是奇数,为0则是偶数 */
        {
            sum += i * 1.0 / (2 * i - 1);
        }
        else
        {
            sum -= i * 1.0 / (2 * i - 1);
        }
    }
    printf("sum = %.6lf", sum);
    return 0;
}
习题2-6 商业贷款,计算公式 money = load ( rate (rate +1) ^month / ( (1 + rate)^month - 1 )
// 习题2-6 商业贷款,计算公式
// money = loan * ( rate *  (rate +1) ^month / ( (1 + rate)^month - 1 )
/* year [5,30] => month [60,360] */
#include <stdio.h>
#include <math.h>
int main(void)
{
    double loan, rate, money, cal;
    int year;
    printf("请输入本金:");
    scanf("%lf", &loan);
    printf("请输入利率:");
    scanf("%lf", &rate);
    for (year = 5; year <= 30; year++)
    {
        cal = pow(1 + rate, year * 12);
        money = loan * rate * cal / (cal - 1);
        printf("year = %d , money = %f \n", year, money);
    }
    return 0;
}
习题2-7 输入一个正整数, 求 2^1+2^2+…+2^n.
#include <stdio.h>
#include <math.h>
int main(void)
{
    int n, sum;
    n = 10;
    for (int i = 1; i <= n; i++)
    {
        sum += pow(2, i);
    }
    printf("sum = %d", sum);
    return 0;
}
习题2-8 求 1!+2!+…+n! = ?
#include <stdio.h>
int main(void)
{
    int n;
    double sum;
    double fact(int n);
    n = 10;

    for (int i = 1; i <= n; i++)
    {
        sum += fact(i);
    }
    printf("sum = %lf", sum);
    return 0;
}
/* 求阶乘 */
double fact(int n)
{
    double fact = 1;
    for (int i = 1; i <= n; i++)
    {
        fact *= i;
    }
    return fact;
}

第3章

练习3-4 连续输入15个字符 统计其中的 英文字母、数字、空格、回车、其他字符的数量
#include <stdio.h>
int main(void)
{
    int  letter, digit, space, enter, other;
    int i;
    char ch;
    letter = digit = space = enter = other = 0;
    for (i = 0; i < 5; i++){
        ch = getchar();
        if (ch >= '0' && ch <= '9'){
            digit ++;
        }else if ((ch >= 'a' && ch <= 'z') || (ch > 'A' && ch <= 'Z')) {
            letter ++;
        }else if (ch == ' ') {
            space ++;
        }else if (ch == '\n') {
            enter ++;
        }else {
            other ++;
        } 
    }
    printf("digit = %d, letter = %d,space = %d, enter = %d, other = %d \n", digit, letter, space, enter, other);
    return 0;
}
练习3-5 判断闰年
#include <stdio.h>
int main(void) {

    int year = 2000;
    if((year % 4 == 0 && year % 100 != 0 ) || ( year % 400 == 0 )){
        printf("是闰年");
    }else{
        printf("不是闰年");
    }
    return 0;
}
例题3-8 商品选择
#include <stdio.h>
int main(void)
{
    int choise, i;
    double price;
    for (i = 0; i < 5; i++)
    {
        printf("[1]Select crisps \n");
        printf("[2]Select popcorn \n");
        printf("[3]Select chocolate \n");
        printf("[4]Select cola \n");
        printf("[0]exit \n");
        printf("Enter your chise :");
        scanf("%d", &choise);

        if (choise == 0) {
            break;
        }
        switch (choise)
        {
        case 1:
            price = 2.5;
            break;
        case 2:
            price = 3.0;
            break;
        case 3:
            price = 2.4;
            break;
        case 4:
            price = 5.0;
        default:
            break;
        }
        printf("price = %.1lf \n", price);
    }
    printf("thanks! \n");
    return 0;
}
例题3-9 简单四则运算
#include <stdio.h>
int main(void) {
    double num1, num2;
    char op;
    printf("Enter a express :");
    scanf("%lf %c %lf", &num1, &op, &num2);
    switch (op){
    case '+':
        printf("num1 + num2 = %lf \n", num1 + num2);
        break;
    case '-':
        printf("num1 - num2 = %lf \n", num1 - num2);
        break;
    case '*':
        printf("num1 * num2 = %lf \n", num1 * num2);
        break;
    case '/':
        printf("num1 / num2 = %lf \n", num1 / num2);
        break;  
    default:
        break;
    }
    return 0;
}
习题 选择题
1.D 、2.C 、3.D 、 4.C 、 5.C 、 6.A 、 7.C
习题 填空题
略过
程序设计题 1. 已知三角形三边,求三角形面积和周长.
#include <stdio.h>
#include <math.h>
int main(void) {
    double a, b, c, s, lengh, area;
    printf("Enter a, b, c :\n");
    scanf("%lf%lf%lf", &a, &b, &c);
    if (a + b > c && a + c > b && b + c > a) {
        s = (a + b + c) * 0.5;
        lengh = 2 * s;
        area = sqrt(s*(s-a)*(s-b)*(s-c));
        printf("length = %.2lf \n", lengh);
        printf("area = %.2lf \n", area);
    }else {
        printf("无法构成三角形 \n");
    }
    return 0;
}
程序设计题 2. 计算个人所得税
#include <stdio.h>
int main(void) {
    double tax, rate, salary, deduction;
    printf("请输入月薪: \n");
    scanf("%lf", &salary);
    if (salary > 0 && salary <= 3500) {
        rate = 0;
        deduction = 0;
    }else if (salary >3500 && salary <= 5000) {
        rate = 0.03;
        deduction = 0;
    }else if (salary >5000 && salary <= 8000) {
        rate = 0.1;
        deduction = 105;
    }else if (salary >8000 && salary <= 12500) {
        rate = 0.2;
        deduction = 555;
    }else if (salary >12500 && salary <= 38500) {
        rate = 0.25;
        deduction = 1005;
    }else if (salary >38500 && salary <= 58500) {
        rate = 0.3;
        deduction = 2755;
    }else if (salary >58500 && salary <= 83500) {
        rate = 0.35;
        deduction = 5505;
    }else if (salary > 83500) {
        rate = 0.45;
        deduction = 13505;
    }
    tax = rate * (salary - 3500) - deduction;
    printf("需要缴纳个人所得税: tax = %.2lf \n", tax);
    return 0;
}
程序设计题 3. 出租车收费
略过
程序设计题 4. 计算学生成绩
#include <stdio.h>

int main(void) {

    int n, A, B, C, D, E;
    double grade, sum, avg;

    A = B = C = D = E = 0;

    printf("请输入学生人数: \n");
    scanf("%d", &n);

    printf("请再次输入他们的成绩: \n");
    for (int i = 1; i <= n; i++){
        scanf("%lf", &grade);
        if (grade >= 90 && grade <= 100) {
            A ++;
        }else if (grade >= 80 && grade < 90) {
            B ++;
        }else if (grade >= 70 && grade < 80) {
            C ++;
        }else if (grade >= 60 && grade < 70) {
            D ++;
        }else {
            E ++;
        }
        sum += grade;
    }
    avg = sum / n;
    printf("avg = %.1lf \n", avg);
    printf("A = %d \n", A);
    printf("B = %d \n", B);
    printf("C = %d \n", C);
    printf("D = %d \n", D);
    printf("E = %d \n", E);

    return 0;
}
程序设计题 5. 输出21世纪的所有闰年
#include <stdio.h>
int main(void) {
    for (int i = 2000; i < 2099; i++){
        if( (i % 4 == 0 && i % 100 != 0) || (i % 400 == 0)){
            printf("year = %d \n", i);
        }
    }
    return 0;
}

第4章


例4-1. 格雷戈里公式求π的近似值
#include <stdio.h>
#include <math.h>
int main(void)
{
    int denominator, flag; //flag 做一个标志符,依次叠加,通过判断flag的奇偶,来确顶 item 的正负值关系
    double molecule, item, pi;
    denominator = 1;
    flag = 1;
    molecule = 1.0;
    item = 1.0;
    while (fabs(item) >= 0.0001)
    {
        if (flag & 1 == 1)
        { //此项是奇数
            item = molecule / denominator * 1;
        }
        else
        {
            item = molecule / denominator * -1;
        }
        pi = (pi + item);
        denominator += 2;
        flag++;
    }

    pi = 4 * pi;
    printf("计算到了第%d项,此时item = %lf \n", flag, item);
    printf("pi = %f \n", pi);
    return 0;
}
例4-2 学生成绩判断,输入一批学生成绩,统计及格和不及格的人数,60分及格
#include <stdio.h>
#include <math.h>
int main(void)
{
    int passNum, failNum; //定义及格人数和不及格人数
    double grade, sumGrade, avg; //定义单个成绩 总成绩 平均分
    passNum = failNum = 0;
    sumGrade = 0;
    avg = 0;
    printf("请输入学生的成绩:");
    scanf("%lf" , &grade);
    while ( grade > 0 )
    {   
        sumGrade += grade;
        if ( grade >= 60 ) {
            passNum ++;
        }else{
            failNum ++;
        }
        scanf("%lf" , &grade); // 读入一个新数据
    }
    avg = sumGrade / (passNum + failNum);
    printf("总人数:%d \n", passNum + failNum);
    printf("平均分:%lf \n", avg);
    printf("及格人数: %d , 不及格人数: %d \n", passNum, failNum);
    return 0;
}
例4-3 输入一个整数判断它的位数
#include <stdio.h>
#include <math.h>
int main(void) {
    int number, count;
    int num;
    printf("请输入一个整数:");
    scanf("%d", &number);
    num = fabs(number);
    do{
        count++;
        num = num / 10;
        // printf("num = mum /10 =%d \n",num);
        // printf("count = %d \n",count);
    }while (num != 0);
    printf("count = %d", count);
    return 0;
}
例4-4 判断素数. 定义是 除1和自身不能被其他整数整除
#include <stdio.h>
#include <math.h>
int main(void) {
    int i, num;
    printf("请输入一个正整数: ");
    scanf("%d", &num);
    for (i = 2; i < sqrt(num); i++)
    {
        if ( num % 2 == 0){
            printf("No \n");
            break;
        }
    }
    if (i > sqrt(num) ) {
        printf("Yes \n");
    }
    return 0;
}
例4-5 逆序输出正整数

#include <stdio.h>
int main(void) {
    int number = 12345;
    while (number != 0 )
    {
        printf("%d ",number % 10);
        number = number / 10;
    }
    return 0;
}
例4-10 求100内所有的素数,没行输出10个
#include <stdio.h>
#include <math.h>

int main(void)
{
    int limit = 100;
    int m, n, i, count;
    count = 0;
    for (m = 2; m < limit; m++)
    {
        n = sqrt(m);
        for (i = 2; i <= n; i++)
        {
            if (m % i == 0)
            {
                break;
            }
        }
        if (i > n)
        {
            printf("%6d", m);
            count++;
        }
        if (count % 10 == 0)
        {
            printf("\n");
        }
    }
    return 0;
}
例4-11 输出斐波那契数列的前 10 项 1 1 2 3 5 8 13 21 34 55
#include <stdio.h>
#include <math.h>

int main(void)
{
    int x1, x2;
    int x;
    x1 = x2 = 1;
    printf("%6d%6d", x1, x2);
    for (int i = 0; i < 8; i++)
    {
        x = x1 + x2;
        printf("%6d ",x);
        x1 = x2;
        x2 = x;
    }
    return 0;
}
例4-12 穷举算法

问题描述: 男一人搬3块砖,女一人搬砖2块,小孩2人搬砖1块。请列举出 45人搬45砖的搜有情况。

#include <stdio.h>
#include <math.h>
int main(void) {
    int x, y, z;
    for ( x = 0; x <= 45; x++){
        for ( y = 0; y <= 45; y++){
            for ( z = 0; z <= 45; z++){
                if ( x + y + z == 45 && 3 * x + 2  *y + 0.5 * z == 45) {
                    printf("x = %d , y = %d , z = %d \n",x, y, z);
                }
            }
        }
    }
    return 0;
}

//--------------------------------//
#include <stdio.h>
#include <math.h>
int main(void) {
    int x, y, z;
    for ( x = 0; x <= 15; x++){
        for ( y = 0; y <= 22; y++){
            z = 45 - x - y;
            if(3 * x + 2  *y + 0.5 * z == 45){
                printf("x = %d , y = %d , z = %d \n",x, y, z);
            }
        }
    }
    return 0;
}
习题选择题

1.A 2.C 3.D 4.A 5.B 6.B 7.C 8.A
1.在循环体内使用break和continue的作用相同吗?

  • 同,break 终止了循环/跳出了循环,循环不会在继续执行下去了。而continue只是结束了本次执行的循环,下一次的循环还是会继续执行的.

+break 关键字只能用在 循环语句 和 switch 语句中,而 continue就只能用在 循环语句中。

  1. while ( !x ) { } …. ! 非 去反的意思。表达式为真一直执行,表达式为假不执行。1 为 true 0 为 false ,在此种 换成while (2) 任何一个 非0的数 都将会无限的循环下去。 !1 = !2 =!3 =0 =false,!0 = 1 = true
    习题填空题
    习题程序设计题
    习题 3.1 输入一批整数,以负数/0为结束标志,求其中的偶数和。
    注意我下面 (num & 1) == 0 我用了括号,如果没用括号,因为优先级的问题先进行了 1== 0,然后 num & 0 一定是0,判断进不去…… 注意这个小细节。 ```

    include

int main(void) { int num , evenSum; printf(“输入一批整数,以负数/0为结束标志: \n”); scanf(“%d”, &num); while (num > 0) { if ( (num & 1) == 0) { evenSum += num; } scanf(“%d”, &num); } printf(“evenSUm = %d \n”, evenSum); return 0; }

###### 习题 3.2 计算

include

include

int main(void) { double s,x,item; // 输入的实数 double fact(int n); // 声明阶乘函数 s = 0; printf(“请输入一个实数:\n”); scanf(“%le”,&x); item = x; int i = 1; while ( fabs(item) >= 0.00001 ) { item = pow(x , i) / fact(i); s += item; i++; printf(“item = %.6f , s = %.6f \n”,item ,s); } printf(“s = %.6f \n”, s); return 0; }

// 定义一个球阶乘的函数 double fact(int n) { double fact = 1; for (int i = 1; i <= n; i++) { fact *= i; } return fact; }

###### 习题 3.3 输入一个整数,求各位数字之和以及位数

include

include

int main(void) { int number, num, remainder, sum, count; // number 为输入的整数,num 为整数的绝对值 printf(“Enter a number: \n”); scanf(“%d”, &number);

num = abs(number); 
count = 1;
sum = 0;
while(num !=0 ){
    remainder = num % 10;
    num = num / 10;
    count ++; 
    sum += remainder;
}
printf("位数为: %d , 各位数之和为: %d \n", count, sum);
return 0;

}

###### 习题3.4 输入一个正整数 n ,求 2/1+3/2+5/3+8/5+ ... 的前n项之和(保留两位小数)

include

int main (void) { int number, m, n, t; // m 为分子,n 为分母 double item, sum; // item 为每一项,sum为求和的值 printf(“输入一个正整数: \n”); scanf(“%d”, &number);

m = 2;
n = 1;
sum = 0;
for (int i = 1; i <= number; i++) {
    item = m / n * 1.0;
    sum += item;
    n = m;
    m = t + n;
    n = t;
}
printf("sum = %.2f \n", sum);
return 0;

}

###### 习题3.5  输入两个正整数a和n,求 a + aa + aaaa + aa...a 的前n项之和

include

int main(void) { int a, n, item, sum; printf(“请输入两个正整数a和n: \n”); scanf(“%d%d”, &a, &n); sum = 0; item = a;

for (int i = 0; i < n; i++)
{   
    sum += item;
    item = 10 * item + a;
}
printf("sum = %d \n", sum);
return 0;

}

###### 习题3.6  1元硬币换1分、3分、5分。要求这三种银币各至少1枚,列举所有的可能。

include

int main(void){

int x, y, z; // 5分 2分 1分

for (x = 1; x < 20; x++){
    for (y = 1; y < 50; y++){
        for (z = 1; z < 100; z++){
            if (5 * x + 2 * y + z == 100){
                printf("5分-%d枚,2分-%d枚,1分-%d枚 \n", x, y, z);
            }
        }
    }
}

return 0;

}

###### 习题3.7 求1~10000 之间所有,各未数立方根之和 = 自身的数 (例如 1^3 +5^3 +3^3 = 153)

include

include

int main(void) {

int number, remainder, sum;// 位数 和 余数
for (int i = 1; i <= 10000; i++){
    number = i;
    sum = 0;
    while (number != 0) {
        remainder = number % 10;
        number = number / 10;
        sum = sum + pow(remainder, 3);
    }
    if (sum == i) {
        printf("i = %d \n", i);
    }
}

return 0;

}

###### 习题3.8 验证哥德巴赫猜想输出6~100,所有偶数 = 质数 + 质数

include

int fun1(int n); int main(void) { int i, m; int count = 0; for (m = 6; m <= 100; m = m+2) { for(i = 3; i <= m/2; i = i+2){ if(fun1(i) && fun1(m-i)){ printf(“%4d = %4d + %4d;”, m, i, m-i); count++; if(count % 5 == 0){ printf(“\n”); } } } } return 0; }

// 判断一个数是为质数,返回true表示是质数,返回false表示不是质数。 int fun1(int n) { int i,flag = 1; if(n == 1){ flag = 0; } for (i = 2; i <= n/2; i++){ if (n % i == 0) { flag = 0; break; } } return flag; }

###### 习题3.9
###### 习题3.10
###### 习题3.11
###### 习题3.12
###### 习题3.13
###### 习题3.14
#### 第5章
##### 例5-1 求圆柱体体积

include

int main (void) { double height, radius, volume; double cylinder(double r,double h); printf(“Enter radius and heifht : \n”); scanf(“%lf%lf”, &radius, &height); volume = cylinder(radius,height); printf(“volume = %.3f \n”, volume); return 0; }

double cylinder(double r,double h) { double v; v = 3.1415926 r r * h; return v; }

##### 例5-4 求100以内的所有质数

include

include

int main(void) { int count = 0; int prime(int n); for (int i = 2; i <= 100; i++) { if( prime(i)){ printf(“%d ,”, i); count++; if (count % 10 == 0) { printf(“\n”); } }

}
return 0;

}

int prime (int n) { int flag = 1; if (n == 1){ flag = 0; } for (int i = 2; i <= sqrt(n) ; i++) { if (n % i == 0){ flag = 0; break; }
} return flag; }

##### 例5-9 静态变量求范围阶乘 1!~n!

include

double fact(int n);

int main(void) { int i,n; printf(“Input n: \n”); scanf(“%d”, &n);

for (i = 1; i <= n; i++){
    printf("%3d!=%.0f\n", i , fact(i));
}
return 0;

}

double fact(int n) { static double f = 1; //将每次的计算结构存放在静态的变量中 f *= n; return(f); }

##### 习题选择题
DDBCCB
##### 习题填空题
其中一道选择题的思考 下列打印的值是多少?<br />#include <stdio.h><br />
void fun(int a, int b, int c){<br />
    c = a * b;<br />
}<br />
int main(void){<br />
    int c ;<br />
    for(int i = 1; i <= 10; i++){<br />
        fun(2, 3, c);<br />
        printf("%d\n", c);<br />
    } <br />
    return 0;<br />
}

> fun(2, 3, c); 和上面自定义的函数都是迷惑条件,不用管。<br />
 将这道题定义为 int c ,打印c d的值是多少?<br />
 是 0 吗?,**其实不是的** 。完整的定义c为,`auto c int` 而 auto类型的变量不给赋值,它是随机的,所以打印出来是10个一样的随机整数,我自己电脑打印出来的是16;如果我们 static c; 那么它就会给赋上默认值为 0;


##### 习题程序设计题

---

#### 第6章
##### 略过... ....

---

#### 第7章
##### 练习7-1

> 编写程序,输入一个正整数n (1 < n <= 10),再输入n个整数,输出这几个数的平均值(保留两位小数)

include

int main(void) {

int n, sum = 0;
double avg = 0;
printf("请输入一个正整数n : \n");
scanf("%d", &n);
int arr[n];

for (int i = 0; i < n; i++){
    printf("输入第%d个数 \n", i+1);
    scanf("%d", &arr[i]);
}

for (int i = 0; i < n; i++){
    sum += arr[i];
}

avg = 1.0 * sum / n;
printf("average = %.2lf \n", avg);

return 0;

}

##### 练习7-2.

> 编写程序,输入一个正整数n (1 < n <= 10),再输入n个整数,逆序输出输入的数

// 编写程序,输入一个正整数n (1 < n <= 10),再输入n个整数,逆序输出输入的数

include

int main(void) {

int n, sum = 0;
double avg = 0;
printf("请输入一个正整数n : \n");
scanf("%d", &n);
int arr[n];

for (int i = 0; i < n; i++){
    printf("输入第%d个数 \n", i+1);
    scanf("%d", &arr[i]);
}

printf("正序输出 : ");
for (int i = 0; i < n; i++){
    printf("%d, ",arr[i]);
}

printf("\n");
printf("反序输出 : ");
for (int i = n -1; i >= 0; i--){
    printf("%d, ",arr[i]);
}

return 0;

}

```


第8章


第9章


第10章


第11章


第12章