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 插入排序

时间: 2024-10-11 01:15:33

C和指针 第十六章 习题的相关文章

C和指针 第十四章 习题

14.1 打印函数 #include <stdio.h> void print_ledger_long(){ printf("function print_ledger_long\n"); } void print_ledger_detailed(){ printf("function print_ledger_detailed\n"); } void print_ledger_default(){ printf("function print

C Primer Plus (第五版) 第十六章 C预处理器和C库 编程练习

第十六章 C预处理器和C库 开发一个包含您需要使用的预处理器定义的头文件 //max.h  #ifndef _MAX_H_     #define _MAX_H_     #define MAX(X, Y) ((X)>(Y)?(X):(Y)) #endif 2.两个数的调和平均数可用如下方法得到:首先对两数的倒数取平均值,最后再取倒数.使用#define指令定义一个宏"函数"执行这个运算.编写一个简单的程序测试该宏. #include <stdio.h> #defin

第十六章 多态性

相同函数名具有多态性: ①  译时的多态(由函数名来调用时体现):重载:同类,不同参 ②  运行时的多态(用指向不同类的指针来调用): 覆盖:  不同类,同参,基类有virtual(由指针的类型来决定,体现了多态性) 隐藏:①不同类,同参,基类无virtual②不同类,不同参(不论有无virtual)(由指针来决定,不能体现多态性) 1.  为什么要使用多重继承 多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数.C++多态性是通过虚函数(virtual)来实现的. 2.

Python核心编程(第二版) 第六章习题答案

6–1.字符串.string 模块中是否有一种字符串方法或者函数可以帮我鉴定一下一个字符串是否是另一个大字符串的一部分? 答:有,string.find(str,beg,end) 6–2.字符串标识符.修改例 6-1 的 idcheck.py 脚本,使之可以检测长度为一的标识符,并且可以识别 Python 关键字,对后一个要求,你可以使用 keyword 模块(特别是 keyword.kelist)来帮你. 1 #!/usr/bin/python 2 3 import string 4 impo

CSS3秘笈复习:十三章&amp;十四章&amp;十五章&amp;十六章&amp;十七章

第十三章 1.在使用浮动时,源代码的顺序非常重要.浮动元素的HTML必须处在要包围它的元素的HTML之前. 2.清楚浮动: (1).在外围div的底部添加一个清除元素:clear属性可以防止元素包围浮动元素.关键字:left.right或both. (2).浮动外围元素:让包含浮动元素的<div>也浮动.选择这种方法一定要在浮动容器后面的任何元素中添加一个clear属性,确保浮动元素落到容器的下方. (3).利用overflow : hidden.另一种常见的方法是在外围的样式中添加以下属性:

《Java并发编程实战》第十六章 Java内存模型 读书笔记

Java内存模型是保障多线程安全的根基,这里仅仅是认识型的理解总结并未深入研究. 一.什么是内存模型,为什么需要它 Java内存模型(Java Memory Model)并发相关的安全发布,同步策略的规范.一致性等都来自于JMM. 1 平台的内存模型 在架构定义的内存模型中将告诉应用程序可以从内存系统中获得怎样的保证,此外还定义了一些特殊的指令(称为内存栅栏或栅栏),当需要共享数据时,这些指令就能实现额外的存储协调保证. JVM通过在适当的位置上插入内存栅栏来屏蔽在JVM与底层平台内存模型之间的

Gradle 1.12 翻译——第十六章. 使用文件

有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com/1.12/userguide/userguide.html 本文原创,转载请注明出处:http://blog.csdn.net/maosidiaoxian/article/details/41113353 关于我对Gradle的翻译,以Github上的项目及http://gradledoc.qin

Gradle 1.12用户指南翻译——第三十六章. Sonar Runner 插件

本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://github.com/msdx/gradledoc/tree/1.12. 直接浏览双语版的文档请访问: http://gradledoc.qiniudn.com/1.12/userguide/userguide.html. 另外,Android 手机用户可通过我写的一个

《构建之法》第十六章读后感更正

第十六章IT行业的创新 1.关于灵感.灵光闪现固然重要,很多伟大的发明依靠的就是灵光一现的基础,但是灵光闪现的前提是个人的思考,长时间的思考.完成这一灵光的基础是不断的尝试,提高自己的技术.这样才会将自己的灵光变成一个实物而不是空想. 2.关于喜好.并不是人人都喜欢创新,因为创新本来就是个长耗时又难以被认可的东西.创新有需要考虑的因素有许多,个人.面子.优先级等等,现在人们更多的是支持在原有材料技术上的"线性发展"--扩充功能等. 3.关于想法.人们接受的并不是好的想法而是他们所需要的