C Primer Plus 第9章 函数 编程练习

复习题:

8.
int choice(int a,int b,int c){
    int max;
        max = a;
    if (b > max)
        max = b;
    if (c > max)
        max = c;
    return max;
}
9.
#include <stdio.h>

void menu(void);
int choice(int low,int high);

int main(void){
    menu();
    int ch = choice(1,4);
    switch (ch){
        case 1:printf("you choice is : copy files\n");
            break;
        case 2:printf("you choice is : move files\n");
            break;
        case 3:printf("you choice is : remove files\n");
            break;
        case 4:break;
    }
    printf("Bye~");

    return 0;
}

void menu(void){
    printf("Please choose one of the following:\n");
    printf("1) copy files        2) move files\n");
    printf("3) remove files      4) quit\n");
    printf("Enter the number of your choice:");
    return;
}

int choice(int low,int high){
    int ch;
    if (scanf("%d", &ch) != 1)
        return 4;
    while (ch > high || ch < low){
        menu();
        ch = choice(1,4);
    }

    return ch;
}

编程练习:

1.
#include <stdio.h>
double min(double a, double b);

int main(void){
    double x = 1.0;
    double y = 2.0;
    double c;
    c = min(1,2);
    printf("%.2f", c);
}

double min(double a, double b){
    return ( b < a ? b : a);
}
2.
#include <stdio.h>
void chline(char ch, int i, int j);

int main(void){
    char ch = '*';
    int row = 5, col = 10;
    chline(ch,row,col);
    return 0;
}

void chline(char ch, int i, int j){
    for (int x = 0; x < i; ++x) {
        for (int y = 0; y < j; ++y) {
            putchar(ch);
        }
        putchar('\n');
    }
}
3.
#include <stdio.h>
void chline(char ch, int i, int j);

char character(void);
int number(void);
int main(void){
    char ch;
    int row, col;
    while ((ch = character()) != 'q'){
        printf("Please enter the number of lines to be printed:");
        row = number();
        printf("Please enter the number of columns to be printed:");
        col = number();
        chline(ch, row, col);
    }
    return 0;
}

void chline(char ch, int i, int j){
    for (int x = 0; x < i; ++x) {
        for (int y = 0; y < j; ++y) {
            putchar(ch);
        }
        putchar('\n');
    }
}

char character(void){
    char ch;
    printf("Please enter the character you need print(q to quit):");
    while ((ch = getchar()) == '\n')
        continue;
    while (getchar() != '\n')
        continue;
    return ch;
}

int number(void){
    int num;
    char ch;
    while (scanf("%d", &num) != 1){
        while ((ch = getchar()) != '\n') //处理错误输出***
            putchar(ch);
        printf("is not an number.\n");
        printf("Please enter an number such as 3,5");
    }
    if (num <= 0){
        printf("Please enter the number than 0:");
        while ((ch = getchar()) != '\n') //处理错误输出
            putchar(ch);
        num = number();
    }
    return num;
}
4.
#include <stdio.h>
double countdouwn_average(double num1, double num2);

int main(void){
    double a = 10, b = 20, c;
    c = countdouwn_average(a,b);
    printf("%lf",c);
    return 0;
}

double countdouwn_average(double num1, double num2){
    double countdown1,countdown2,ctd_average;
    countdown1 = 1 / num1;
    countdown2 = 1 / num2;
    ctd_average = 1 / ((countdown1 + countdown2) / 2);
    return ctd_average;
}
5.
#include <stdio.h>
void larger_of(double * num1, double * num2);

int main(void){
    double a = 10, b = 20;
    larger_of(&a,&b);
    printf("%.2lf  %.2lf", a, b);
    return 0;
}
void larger_of(double * num1, double * num2){
    double max;
    max = *num1 > *num2 ? *num1 : *num2;
    *num1 = max;
    *num2 = max;
    return;
}
6.
#include <stdio.h>
void larger_of(double * num1, double * num2, double * num3);

int main(void){
    double a = 60, b = 39, c = 50;
    larger_of(&a,&b,&c);
    printf("%.2lf  %.2lf  %.2lf", a, b, c);
    return 0;
}

void larger_of(double * num1, double * num2, double * num3){
    double max,min,c;
    max = * num1;
    if (max < *num2)
        max = *num2;
    if (max < *num3)
        max = *num3;
    min = * num1;
    if (min > *num2)
        min = *num2;
    if (min > *num3)
        min = *num3;
    c = *num1 + *num2 + *num3 - min - max;
    *num1 = min;
    *num2 = c;
    *num3 = max;
}
7.
#include <stdio.h>
#include <ctype.h>
int show_location(char ch);

int main(void){
    char ch;
    printf("Please enter the charaster:");
    while ((ch = getchar()) != '\n'){  //ch = getchar()要框起来。
        printf("%c,%d\n", ch,show_location(ch));
    }

    return 0;
}
//用isaplpa 和 toupper我是真不会。看了答案
//发现答案真机智~
int show_location(char ch){
    int result;
    if (isalpha(ch)){
        result = toupper(ch) - 'A' + 1;
    } else result = -1;

    return result;
}
8.
#include <stdio.h>
double power(double n, double p);

int main(void){
    double a = 2,b = 2;
    printf("%lf", power(a,b));
    return 0;
}

double power(double n, double p){
    double pow = 1;
    int i;
    if (n == 0)
        return 0;
    if (p == 0)
        return 1;
    if (p > 0){
        for (i = 1;i <= p; i++) {
            pow = pow * n;
        }
        return pow;
    }
    if (p < 0){
        for (i = 1;i  <= -p ; i++) {
            pow = pow * n;
        }
        return 1 / pow;
    }
}
9.
#include <stdio.h>
double power(double n, double p);

int main(void){
    double a = 2,b = -2;
    printf("%lf", power(a,b));
    return 0;
}

double power(double n, double p){
    double pow = 1;
    int i;
    if (n == 0)
        return 0;
    if (p == 0)
        return 1;
    if (p > 0){
        for (i = 1;i <= p; i++) {
            pow = pow * n;
        }
        return pow;
    }
    if (p < 0){
        return 1 / power(n, -p);
    }
}
10.
#include <stdio.h>
void to_binary(int a, int b);

int main(void){
    int a,b;
    char ch;
    printf("Please enter an integer(q to quit):");
    while (scanf("%d", &a) == 1){
        printf("Please enter number base (2-10):");
        while (scanf("%d", &b) == 1 && b >= 2 && b <= 10){
            to_binary(a,b);
            putchar('\n');
            break;
        }
        while ((ch = getchar()) != '\n'); //处理错误输入
        printf("Please enter an integer(q to quit):");
    }
    return 0;
}

void to_binary(int a, int b){
    int r;
    r = a % b;
    if (a > b)
        to_binary(a / b, b);
    printf("%d", r); //暂时不理解putchar('0' + r)是什么意思,所以就先用这个吧。
    return;
}
posted @ 2017-10-14 17:28  AprilieJin  阅读(223)  评论(0编辑  收藏  举报