第7章(第四版)C语言程序设计练习

一、例题

1.调用函数,输出

*****************
How do you do
*****************

#include<stdio.h>
void print_star()
{
    printf("*****************\n");
}
void print_message()
{
    printf("How do you do\n");
}
int main()
{
    void print_star();
    void print_message();
    print_star();
    print_message();
    print_star();
    return 0;
}

2.输入两个整数,输出较大值

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int Max(int x, int y)
{
    int z = 0;
    z = x > y ? x : y;
    return z;
}
int main()
{
    int a, b;
    scanf("%d%d", &a, &b);
    int max = Max(a, b);
    printf("%d\n", max);
    return 0;
}

3.

4.输入实数,求和

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int Add(int x, int y)
{
    int z = 0;
    z = x + y;
    return z;
}
int main()
{
    int a, b;
    scanf("%d%d", &a, &b);
    int sum = Add(a, b);
    printf("%d\n", sum);
    return 0;
}

5.函数嵌套,输入4个整数,找其中最大的数

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int Max(int a, int b,int c,int d)
{
    int z = 0;
    z = max(a, b);
    z = max(z, c);
    z = max(z, d);
    return z;
}
int max(int x, int y)
{
    int z = 0;
    z = x > y ? x : y;
    return z;
}
int main()
{
    int a, b, c, d;
    scanf("%d%d%d%d", &a, &b, &c, &d);
    int max = Max(a, b,c,d);
    printf("%d\n", max);
    return 0;
}

6.学生5比学生4大2岁

学生4比学生3大2岁

学生3比学生2大2岁

学生2比学生1大2岁

学生1是10岁

#include<stdio.h>
int age(int x)
{
    int c;
    if (x == 1)
    {
        c = 10;
    }
    else
        c = age(x - 1) + 2;
    return c;
}
int main()
{
    int age(n);
    printf("%d", age(5));
    return 0;
}

 7.递归,求n!

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int Fac(int n)
{
    if (n < 0)
        printf("data error!");
    else if (n == 1 || n == 0)
        return 1;
    else
        return n * Fac(n - 1);
}
int main()
{
    int n = 0;
    int ret = 0;
    scanf("%d", &n);
    ret = Fac(n);
    printf("%d!=%d\n",n, ret);
    return 0;
}

为负数时候,存在bug

8.汉诺塔问题

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void hanoi(int num, char sou, char tar, char aux) 
//统计移动次数
{
    static int i = 1;//static静态变量
    //直接从起始柱移动到目标柱
    if (num == 1) 
    {
        printf("第%d次:从 %c 移动至 %c\n", i, sou, tar);
        i++;
    }
    else 
    {
        //将 num-1 个圆盘从起始柱移动到辅助柱上
        hanoi(num - 1, sou, aux, tar);
        //将起始柱上剩余的最后一个大圆盘移动到目标柱上
        printf("第%d次:从 %c 移动至 %c\n", i, sou, tar);
        i++;
        //递归调用 hanoi() 函数,将辅助柱上的 num-1 圆盘移动到目标柱上
        hanoi(num - 1, aux, tar, sou);
    }
}
int main()
{
    //起始柱、目标柱、辅助柱分别用 A、B、C 表示
    int m = 0;
    scanf("%d", &m);
    hanoi(m, 'A', 'B', 'C');
    return 0;
}

9.输入10个数,求最大元素和位置

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
    int max(int x, int y);
    int arr[10], m, n, i;
    printf("enter 10 integer number:");
    for (i = 0; i < 10; i++)
        //输入arr[0]~arr[9]的值
    {
        printf("a[%d]=", i + 1);
        scanf("%d", &arr[i]);
    }
    for (i = 1, m = arr[0], n = 0; i < 10; i++)
    {
        if (max(m, arr[i]) > m) 
        //max>m,max赋值给m,元素序号赋值给n
        {
            m = max(m, arr[i]);
            n = i;
        }
    }
    printf("The largest number is %d\nit is the %dth number.\n", m, n + 1);
}
int max(int x, int y)
//求最大
{
    return (x > y ? x : y);
}

10.一维数组score,内放10个学生成绩,求平均成绩。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void main()
{
    float score[10], aver;
    int i;
    printf("input 10 scores:\n");
    for (i = 0; i < 10; i++)//输入数据
        scanf("%f", &score[i]);
    aver = average(score);
    printf(" average score is %5.2f\n", aver);
}
float average(float array[10])
{
    int i;
    float aver, sum = array[0];
    for (i = 1; i < 10; i++)
        sum = sum + array[i];
    aver = sum / 10;
    return (aver);
}

11、两个班级,35名和30名学生,调用average函数,求两个班级的平均成绩

#include <stdio.h>
int main()
{
    float average(float array[], int n);
    float score1[5] = { 98.5,97,91.5,60,55 };
    float score2[10] = { 67.5,89.5,99,69.5,77,89.5,76.5,54,60,99.5 };
    printf("The average of class A is %6.2f\n", average(score1, 5));
    printf("The average of class B is %6.2f\n", average(score2, 10));
    return 0;
}
float average(float array[], int n)
{
    int i;
    float sum = 0, aver;
    for (i = 0; i < n; i++)
        sum = sum + array[i];//累加
    aver = sum / n;//求平均
    return (aver);
}

12.选择法,数组中10个整数由小到大排列

选择法,每轮找最小

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    void sort(int array[], int n);
    int i;
    int a[10];

    printf("enter array:\n");
    for (i = 0; i < 10; i++)
        scanf("%d", &a[i]);

    sort(a, 10);

    printf("The sorted array:\n");
    for (i = 0; i < 10; i++)
        printf("%d ", a[i]);
    
    return 0;
}
void sort(int array[], int n)
{
    int i, t, j, k;
    for (i = 0; i < n - 1; i++)
    //n-1轮
    {
        k = i;
        for (j = i + 1; j < n; j++)
        //i+1~n中求最小
        {
            if (array[j] < array[k])
            {
                k = j;
            }
        }
        t = array[k];
        array[k] = array[i]; 
        array[i] = t;
    }
}

13.3*4矩阵,求最大值

#include <stdio.h>
int max_value(int array[][4])
{
    int i, j, max;
    max = array[0][0];
    for (i = 0; i < 3; i++)
        for (j = 0; j < 4; j++)
            if (max < array[i][j])
                max = array[i][j];
    return (max);
}
int main()
{
    int max_value(int array[][4]);
    int a[3][4] = { {1,3,5,7},{2,4,6,8},{15,17,34,12} };
    printf("Max value is %d\n", max_value(a));
    return 0;
}

14一维数组,10个学生的成绩,写一个函数,求平均分、最高分和最低分

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    float min(float array[], int n);
    float max(float array[], int n);
    float average(float array[], int n);
    float ave, score[10];
    int i;
    float Max, Min;
    printf("Please enter 10 score:");
    for (i = 0; i < 10; i++)
        scanf("%f", &score[i]);
    ave = average(score, 10);
    Max = max(score, 10);
    Min = min(score, 10);
    printf("max=%6.2f\nmin=%6.2f\naverage=%6.2f\n", Max, Min, ave);
    return 0;
}
float average(float array[], int n)
{
    int i;
    float aver, sum = array[0];
    for (i = 1; i < n; i++)
    {
        sum = sum + array[i];
    }
    aver = sum / n;
    return (aver);

}
float max(float array[], int n)
{
    int i;
    float max = array[0];
    for (i = 1; i < 10; i++)
        if (max < array[i])
            max = array[i];
    return (max);
}
float min(float array[], int n)
{
    int i;
    float min = array[0];
    for (i = 1; i < 10; i++)
        if (min > array[i])
            min = array[i];
    return (min);
}

15

16.

17输出1~5的阶乘值

#include <stdio.h>
#include <math.h>
int fac(int b)
{
    //用static保留f的值
    static int f = 1;
    f = f * b;
    return (f);
}
int main()
{
    int fac(int b);
    int i;
    for (i = 1; i <= 5; i++)
        printf("%d!=%d\n", i, fac(i));
    return 0;
}

18.调用函数,求三个整数中最大数

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int max();
    extern int A,B,C;
    printf("Please enter three integer number:");
    scanf("%d%d%d",&A,&B,&C);
    printf("max=%d\n",max());
    return 0;
}
int A,B,C;
int max()
{
    int m;
    m=A>B?A:B;
    if(m<C)
        m=C;
    return (m);
        
}

 19. 给定b的值,输入a和m 求a*b和a的m次方的值

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int A;
int main()
{
    int power(int);
    int b = 3, c, d, m;
    printf("enter the number a and its power m:\n");
    scanf("%d,%d", &A, &m);
    c = A * b;
    printf("%d*%d=%d\n", A, b, c);
    d = power(m);
    printf("%d**%d=%d\n", A, m, d);
    return 0;
}
extern A;
int power(int n)
{
    int i, y = 1;
    for (i = 1; i <= n; i++)
        y *= A;
    return (y);
}

20.有一个字符串,内有若干个字符,现输入一个字符要求程序删除字符串中的该字符

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void enter_string(char str[80])
{
    gets(str);
}

void delete_string(char str[], char ch)
{
    int i, j;
    for (i = j = 0; str[i] != '\0'; i++)
    {
        if (str[i] != ch)
            str[j++] = str[i];//j++(后置++,先使用,后++)
    }
    str[j] = '\0';
}

void print_string(char str[])
{
    printf("%s\n", str);
}

int main()
{
    void enter_string(char str[]);
    void delete_string(char str[], char ch);
    void print_string(char str[]);
    char c, str[80];
    enter_string(str);//str中存放输入的字符
    scanf("%c", &c);//要删去的字符
    delete_string(str, c);//
    print_string(str);
    return 0;
}

二、习题

1.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int hcf(int, int);
    int lcd(int, int, int);
    int u, v, h, l;
    scanf("%d,%d", &u, &v);
    h = hcf(u, v);
    printf("H.C.F=%d\n", h);
    l = lcd(u, v, h);
    printf("L.C.D=%d\n", l);
    return 0;
}

int hcf(int u, int v)
{
    int t, r;
    if (v > u)
    {
        t = u; u = v; v = t;
    }
    while ((r = u % v) != 0)
    {
        u = v;
        v = r;
    }
    return(v);
}

int lcd(int u, int v, int h)
{
    return(u * v / h);
}

2.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
float x1, x2, disc, p, q;
int main()
{
    void greater_than_zero(float, float);
    void equal_to_zero(float, float);
    void smaller_than_zero(float, float);
    float a, b, c;
    printf("input a,b,c:");
    scanf("%f,%f,%f", &a, &b, &c);
    printf("equation: %5.2f*x*x+%5.2f*x+%5.2f=0\n", a, b, c);
    disc = b * b - 4 * a * c;
    printf("root:\n");
    if (disc > 0)
    {
        greater_than_zero(a, b);
        printf("x1=%f\t\tx2=%f\n", x1, x2);
    }
    else if (disc == 0)
    {
        equal_to_zero(a, b);
        printf("x1=%f\t\tx2=%f\n", x1, x2);
    }
    else
    {
        smaller_than_zero(a, b);
        printf("x1=%f+%fi\tx2=%f-%fi\n", p, q, p, q);
    }
    return 0;
}

void greater_than_zero(float a, float b)
{
    x1 = (-b + sqrt(disc)) / (2 * a);
    x2 = (-b - sqrt(disc)) / (2 * a);
}

void equal_to_zero(float a, float b)
{
    x1 = x2 = (-b) / (2 * a);
}

void smaller_than_zero(float a, float b)
{
    p = -b / (2 * a);
    q = sqrt(-disc) / (2 * a);
}

3.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int prime(int);
    int n;
    printf("input an integer:");
    scanf("%d", &n);
    if (prime(n))
        printf("%d is a prime.\n", n);
    else
        printf("%d is not a prime.\n", n);
    return 0;
}

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

4.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define N 3
int array[N][N];
int main()
{
    void convert(int array[][3]);
    int i, j;
    printf("input array:\n");
    for (i = 0; i < N; i++)
        for (j = 0; j < N; j++)
            scanf("%d", &array[i][j]);
    printf("\noriginal array :\n");
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < N; j++)
            printf("%5d", array[i][j]);
        printf("\n");
    }
    convert(array);
    printf("convert array:\n");
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < N; j++)
            printf("%5d", array[i][j]);
        printf("\n");
    }
    return 0;
}

void convert(int array[][3])
{
    int i, j, t;
    for (i = 0; i < N; i++)
        for (j = i + 1; j < N; j++)
        {
            t = array[i][j];
            array[i][j] = array[j][i];
            array[j][i] = t;
        }
}

5

#include <stdio.h> 
#include <string.h>
int main()
{void inverse(char str[]);
 char str[100];
 printf("input string:");
 scanf("%s",str);
 inverse(str);
 printf("inverse string:%s\n",str);
 return 0;
}

void inverse(char str[])
 {char t;
  int i,j;
  for (i=0,j=strlen(str);i<(strlen(str)/2);i++,j--)
   {t=str[i];
    str[i]=str[j-1];
    str[j-1]=t;
   }
 }

6.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    void concatenate(char string1[], char string2[], char string[]);
    char s1[100], s2[100], s[100];
    printf("input string1:");
    scanf("%s", s1);
    printf("input string2:");
    scanf("%s", s2);
    concatenate(s1, s2, s);
    printf("\nThe new string is %s\n", s);
    return 0;
}

void concatenate(char string1[], char string2[], char string[])
{
    int i, j;
    for (i = 0; string1[i] != '\0'; i++)
        string[i] = string1[i];
    for (j = 0; string2[j] != '\0'; j++)
        string[i + j] = string2[j];
    string[i + j] = '\0';
}

7

#include <stdio.h>
int main()
{
    void cpy(char[], char[]);
    char str[80], c[80];
    printf("input string:");
    gets(str);
    cpy(str, c);
    printf("The vowel letters are:%s\n", c);
    return 0;
}

void cpy(char s[], char c[])
{
    int i, j;
    for (i = 0, j = 0; s[i] != '\0'; i++)
        if (s[i] == 'a' || s[i] == 'A' || s[i] == 'e' || s[i] == 'E' || s[i] == 'i' ||
            s[i] == 'I' || s[i] == 'o' || s[i] == 'O' || s[i] == 'u' || s[i] == 'U')
        {
            c[j] = s[i];
            j++;
        }
    c[j] = '\0';
}

8.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
    char str[80];
    void insert(char[]);
    printf("input four digits:");
    scanf("%s", str);
    insert(str);
    return 0;
}

void insert(char str[])
{
    int i;
    for (i = strlen(str); i > 0; i--)
    {
        str[2 * i] = str[i];
        str[2 * i - 1] = ' ';
    }
    printf("output:\n%s\n", str);
}

9.

#include <stdio.h>
int letter, digit, space, others;
int main()
{
    void count(char[]);
    char text[80];
    printf("input string:\n");
    gets(text);
    printf("string:");
    puts(text);
    letter = 0;
    digit = 0;
    space = 0;
    others = 0;
    count(text);
    printf("\nletter:%d\ndigit:%d\nspace:%d\nothers:%d\n", letter, digit, space, others);
    return 0;
}

void count(char str[])
{
    int i;
    for (i = 0; str[i] != '\0'; i++)
        if ((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z'))
            letter++;
        else if (str[i] >= '0' && str[i] <= '9')
            digit++;
        else if (str[i] == 32)
            space++;
        else
            others++;
}

10

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
    int alphabetic(char);
    int longest(char[]);
    int i;
    char line[100];
    printf("input one line:\n");
    gets(line);
    printf("The longest word is :");
    for (i = longest(line); alphabetic(line[i]); i++)
        printf("%c", line[i]);
    printf("\n");
    return 0;
}

int alphabetic(char c)
{
    if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'z'))
        return(1);
    else
        return(0);
}

int longest(char string[])
{
    int len = 0, i, length = 0, flag = 1, place = 0, point;
    for (i = 0; i <= strlen(string); i++)
        if (alphabetic(string[i]))
            if (flag)
            {
                point = i;
                flag = 0;
            }
            else
                len++;
        else
        {
            flag = 1;
            if (len >= length)
            {
                length = len;
                place = point;
                len = 0;
            }
        }
    return(place);
}

11

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#define N 10
char str[N];
int main()
{
    void sort(char[]);
    int i, flag;
    for (flag = 1; flag == 1;)
    {
        printf("input string:\n");
        scanf("%s", &str);
        if (strlen(str) > N)
            printf("string too long,input again!");
        else
            flag = 0;
    }
    sort(str);
    printf("string sorted:\n");
    for (i = 0; i < N; i++)
        printf("%c", str[i]);
    printf("\n");
    return 0;
}

void sort(char str[])
{
    int i, j;
    char t;
    for (j = 1; j < N; j++)
        for (i = 0; (i < N - j) && (str[i] != '\0'); i++)
            if (str[i] > str[i + 1])
            {
                t = str[i];
                str[i] = str[i + 1];
                str[i + 1] = t;
            }
}

12

#include <stdio.h>
#include <math.h>
int main()
{float solut(float a,float b,float c,float d);
 float a,b,c,d;
 printf("input a,b,c,d:");
 scanf("%f,%f,%f,%f",&a,&b,&c,&d);
 printf("x=%10.7f\n",solut(a,b,c,d));
 return 0;
}

float solut(float a,float b,float c,float d)
{float x=1,x0,f,f1;
 do
   {x0=x;
    f=((a*x0+b)*x0+c)*x0+d;
    f1=(3*a*x0+2*b)*x0+c;
    x=x0-f/f1;
   }
 while(fabs(x-x0)>=1e-3);
 return(x);
}

13

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define N 10
#define M 5
float score[N][M];
float a_stu[N], a_cour[M];
int r, c;

int main()
{
    int i, j;
    float h;
    float s_var(void);
    float highest();
    void input_stu(void);
    void aver_stu(void);
    void aver_cour(void);
    input_stu();
    aver_stu();
    aver_cour();
    printf("\n  NO.     cour1   cour2   cour3   cour4   cour5   aver\n");
    for (i = 0; i < N; i++)
    {
        printf("\n NO %2d ", i + 1);
        for (j = 0; j < M; j++)
            printf("%8.2f", score[i][j]);
        printf("%8.2f\n", a_stu[i]);
    }
    printf("\naverage:");
    for (j = 0; j < M; j++)
        printf("%8.2f", a_cour[j]);
    printf("\n");
    h = highest();
    printf("highest:%7.2f   NO. %2d   course %2d\n", h, r, c);
    printf("variance %8.2f\n", s_var());
    return 0;
}

void input_stu(void)
{
    int i, j;
    for (i = 0; i < N; i++)
    {
        printf("\ninput score of student%2d:\n", i + 1);
        for (j = 0; j < M; j++)
            scanf("%f", &score[i][j]);
    }
}


void aver_stu(void)
{
    int i, j;
    float s;
    for (i = 0; i < N; i++)
    {
        for (j = 0, s = 0; j < M; j++)
            s += score[i][j];
        a_stu[i] = s / 5.0;
    }
}

void aver_cour(void)
{
    int i, j;
    float s;
    for (j = 0; j < M; j++)
    {
        s = 0;
        for (i = 0; i < N; i++)
            s += score[i][j];
        a_cour[j] = s / (float)N;
    }
}

float highest()
{
    float high;
    int i, j;
    high = score[0][0];
    for (i = 0; i < N; i++)
        for (j = 0; j < M; j++)
            if (score[i][j] > high)
            {
                high = score[i][j];
                r = i + 1;
                c = j + 1;
            }
    return(high);
}

float s_var(void)
{
    int i;
    float sumx, sumxn;
    sumx = 0.0;
    sumxn = 0.0;
    for (i = 0; i < N; i++)
    {
        sumx += a_stu[i] * a_stu[i];
        sumxn += a_stu[i];
    }
    return(sumx / N - (sumxn / N) * (sumxn / N));
}

14

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define N 10
#define M 5
float score[N][M];
float a_stu[N], a_cour[M];
int r, c;

int main()
{
    int i, j;
    float h;
    float s_var(void);
    float highest();
    void input_stu(void);
    void aver_stu(void);
    void aver_cour(void);
    input_stu();
    aver_stu();
    aver_cour();
    printf("\n  NO.     cour1   cour2   cour3   cour4   cour5   aver\n");
    for (i = 0; i < N; i++)
    {
        printf("\n NO %2d ", i + 1);
        for (j = 0; j < M; j++)
            printf("%8.2f", score[i][j]);
        printf("%8.2f\n", a_stu[i]);
    }
    printf("\naverage:");
    for (j = 0; j < M; j++)
        printf("%8.2f", a_cour[j]);
    printf("\n");
    h = highest();
    printf("highest:%7.2f   NO. %2d   course %2d\n", h, r, c);
    printf("variance %8.2f\n", s_var());
    return 0;
}

void input_stu(void)
{
    int i, j;
    for (i = 0; i < N; i++)
    {
        printf("\ninput score of student%2d:\n", i + 1);
        for (j = 0; j < M; j++)
            scanf("%f", &score[i][j]);
    }
}


void aver_stu(void)
{
    int i, j;
    float s;
    for (i = 0; i < N; i++)
    {
        for (j = 0, s = 0; j < M; j++)
            s += score[i][j];
        a_stu[i] = s / 5.0;
    }
}

void aver_cour(void)
{
    int i, j;
    float s;
    for (j = 0; j < M; j++)
    {
        s = 0;
        for (i = 0; i < N; i++)
            s += score[i][j];
        a_cour[j] = s / (float)N;
    }
}

float highest()
{
    float high;
    int i, j;
    high = score[0][0];
    for (i = 0; i < N; i++)
        for (j = 0; j < M; j++)
            if (score[i][j] > high)
            {
                high = score[i][j];
                r = i + 1;
                c = j + 1;
            }
    return(high);
}

float s_var(void)
{
    int i;
    float sumx, sumxn;
    sumx = 0.0;
    sumxn = 0.0;
    for (i = 0; i < N; i++)
    {
        sumx += a_stu[i] * a_stu[i];
        sumxn += a_stu[i];
    }
    return(sumx / N - (sumxn / N) * (sumxn / N));
}

15

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define N 10
#define M 5
float score[N][M];
float a_stu[N], a_cour[M];
int r, c;

int main()
{
    int i, j;
    float h;
    float s_var(void);
    float highest();
    void input_stu(void);
    void aver_stu(void);
    void aver_cour(void);
    input_stu();
    aver_stu();
    aver_cour();
    printf("\n  NO.     cour1   cour2   cour3   cour4   cour5   aver\n");
    for (i = 0; i < N; i++)
    {
        printf("\n NO %2d ", i + 1);
        for (j = 0; j < M; j++)
            printf("%8.2f", score[i][j]);
        printf("%8.2f\n", a_stu[i]);
    }
    printf("\naverage:");
    for (j = 0; j < M; j++)
        printf("%8.2f", a_cour[j]);
    printf("\n");
    h = highest();
    printf("highest:%7.2f   NO. %2d   course %2d\n", h, r, c);
    printf("variance %8.2f\n", s_var());
    return 0;
}

void input_stu(void)
{
    int i, j;
    for (i = 0; i < N; i++)
    {
        printf("\ninput score of student%2d:\n", i + 1);
        for (j = 0; j < M; j++)
            scanf("%f", &score[i][j]);
    }
}


void aver_stu(void)
{
    int i, j;
    float s;
    for (i = 0; i < N; i++)
    {
        for (j = 0, s = 0; j < M; j++)
            s += score[i][j];
        a_stu[i] = s / 5.0;
    }
}

void aver_cour(void)
{
    int i, j;
    float s;
    for (j = 0; j < M; j++)
    {
        s = 0;
        for (i = 0; i < N; i++)
            s += score[i][j];
        a_cour[j] = s / (float)N;
    }
}

float highest()
{
    float high;
    int i, j;
    high = score[0][0];
    for (i = 0; i < N; i++)
        for (j = 0; j < M; j++)
            if (score[i][j] > high)
            {
                high = score[i][j];
                r = i + 1;
                c = j + 1;
            }
    return(high);
}

float s_var(void)
{
    int i;
    float sumx, sumxn;
    sumx = 0.0;
    sumxn = 0.0;
    for (i = 0; i < N; i++)
    {
        sumx += a_stu[i] * a_stu[i];
        sumxn += a_stu[i];
    }
    return(sumx / N - (sumxn / N) * (sumxn / N));
}

16.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define MAX 1000
int main()
{
    int htoi(char s[]);
    int c, i, flag, flag1;
    char t[MAX];
    i = 0;
    flag = 0;
    flag1 = 1;
    printf("input a HEX number:");
    while ((c = getchar()) != '\0' && i < MAX && flag1)
    {
        if (c >= '0' && c <= '9' || c >= 'a' && c <= 'f' || c >= 'A' && c <= 'F')
        {
            flag = 1;
            t[i++] = c;
        }
        else if (flag)
        {
            t[i] = '\0';
            printf("decimal  number %d\n", htoi(t));
            printf("continue or not?");
            c = getchar();
            if (c == 'N' || c == 'n')
                flag1 = 0;
            else
            {
                flag = 0;
                i = 0;
                printf("\ninput a HEX number:");
            }
        }
    }
    return 0;
}

int htoi(char s[])
{
    int i, n;
    n = 0;
    for (i = 0; s[i] != '\0'; i++)
    {
        if (s[i] >= '0' && s[i] <= '9')
            n = n * 16 + s[i] - '0';
        if (s[i] >= 'a' && s[i] <= 'f')
            n = n * 16 + s[i] - 'a' + 10;
        if (s[i] >= 'A' && s[i] <= 'F')
            n = n * 16 + s[i] - 'A' + 10;
    }
    return(n);
}

17

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    void convert(int n);
    int number;
    printf("input an integer: ");
    scanf("%d", &number);
    printf("output: ");
    if (number < 0)
    {
        putchar('-'); putchar(' ');   /* 先输出一个‘-’号和空格 */
        number = -number;
    }
    convert(number);
    printf("\n");
    return 0;
}

void convert(int n)
{
    int i;
    if ((i = n / 10) != 0)
        convert(i);
    putchar(n % 10 + '0');
    putchar(32);
}

18

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int sum_day(int month, int day);
    int leap(int year);
    int year, month, day, days;
    printf("input date(year,month,day):");
    scanf("%d,%d,%d", &year, &month, &day);
    printf("%d/%d/%d ", year, month, day);
    days = sum_day(month, day);                  // 调用函数sum_day 
    if (leap(year) && month >= 3)                  // 调用函数leap 
        days = days + 1;
    printf("is the %dth day in this year.\n", days);
    return 0;
}

int sum_day(int month, int day)         // 函数sum_day:计算日期 
{
    int day_tab[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
    int i;
    for (i = 1; i < month; i++)
        day += day_tab[i];      // 累加所在月之前天数 
    return(day);
}                         // 函数leap:判断是否为闰年 

int leap(int year)
{
    int leap;
    leap = year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
    return(leap);
}

 

posted @ 2021-11-26 21:49  mljrm  阅读(115)  评论(0)    收藏  举报