C和指针 第十六章 习题

Posted 日拱一卒,功不唐捐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C和指针 第十六章 习题相关的知识,希望对你有一定的参考价值。

16.8 计算平均年龄

#include <stdlib.h>
#include <stdio.h>
#define MAX_LEN 512

int main()
{
    int age;
    int totalAge;
    float avgAge;
    int peopleNum;
    FILE *file;
    char info[MAX_LEN];
    char *infoPtr;
    file = fopen("D:/family.txt", "r");

    //按行读取文件
    while(fgets(info, MAX_LEN, file)){
        infoPtr = info;
        peopleNum = 0;
        totalAge = 0;
        //strtol转换字符到数字
        while((age = strtol(infoPtr, &infoPtr, 10)) > 0){
            totalAge += age;
            peopleNum++;
        }
        //类型转换为float,然后计算平均年龄
        avgAge = (float)totalAge / peopleNum;
        printf("%savg: %5.2f\n", info, avgAge);
    }

    return 0;
}

运行:

技术分享

16.9 计算相同生日概率

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

//比较元素
int compare(void const *birth1, void const *birth2){
    return *(int  *)(birth1) - *(int*)(birth2);
}

//打印数组
void print_arr(int *array, int len){
    int idx = 0;
    while(idx <= len){
        printf("%d ", array[idx]);
        idx++;
    }
}

//数组中是否有两个相同数
int count_same(int *array, int len){
    int same = 0;
    while(len > 0){
        if(array[len] == array[len - 1]){
            return 1;
        }
        len--;
    }
    return 0;
}
int main()
{
    int times = 0;
    int randBirthday[30];
    int peopleCount;
    int sameCount = 0;
    srand((unsigned int)time(0));

    while(times < 100000){
        peopleCount = 29;
        while(peopleCount >= 0){
            randBirthday[peopleCount] = rand() % 365;
            peopleCount--;
        }
        qsort(randBirthday, 30, sizeof(int), compare);
        sameCount += count_same(randBirthday, 29);
        times++;
    }
    printf("%f", (float)(sameCount) / 100000);
    return 0;
}

运行:

技术分享

16.10 插入排序

 

以上是关于C和指针 第十六章 习题的主要内容,如果未能解决你的问题,请参考以下文章

《C与指针》读后感

C++Primer 第十六章

算法导论第十六章

第十六章 C++与Lua的相互绑定之ELuna

C语言第十六章:linux系统vi编辑器

C Primer Plus(第六版)第十六章 编程练习答案