第二周项目2 程序的多文件组织

【1】头文件head.h

#include <stdio.h>
#define MaxStud 50      //学生人数最多为50
#define MaxCour 300     //学生成绩记录数最多为50*6
struct stud1
{
    int no;         //学号
    char name[10];  //姓名
    int bno;        //班号
};
struct stud2
{
    int no;         //学号
    int cno;        //课程编号
    int deg;        //分数
};
double studavg(struct stud2 s2[],int m,int i);


【2】cpp源文件  实现自定义函数

double studavg(struct stud2 s2[],int m,int i)   //求学号为i的学生的平均分
{
    int j,n=0;              //n为学号为i的学生选学课程数
    double sum=0;           //学号为i的学生总分
    for (j=0; j<m; j++)
        if (s2[j].no==i)    //学号为i时统计
        {
            n++;
            sum+=s2[j].deg;
        }
    return(sum/n);
}
double couravg(struct stud2 s2[],int m,int i)   //求编号为i的课程的平均分
{
    int j,n=0;              //n为编号为i的课程选修人数
    double sum=0;           //编号为i的课程总分
    for (j=0; j<m; j++)
    {
        if (s2[j].cno==i)   //课程编号为i时统计
        {
            n++;
            sum+=s2[j].deg;
        }
    }
    return(sum/n);
}
void allavg(struct stud1 s1[],int n,struct stud2 s2[],int m)    //求学生平均分和课程平均分
{
    int i,j;
    printf("学生平均分:\n");
    printf("  学号     姓名 平均分\n");
    i=0;
    while (i<n)
    {
        j=s1[i].no;
        printf("%4d %10s %g\n",s1[i].no,s1[i].name,studavg(s2,m,j));
        i++;
    }
    printf("课程平均分:\n");
    for (i=1; i<=6; i++)
        printf(" 课程%d:%g\n",i,couravg(s2,m,i));
}
(3)主函数main.cpp
int main()
{
    int n=7;        //学生记录人数
    int m=21;       //学生成绩记录数
    struct stud1 s1[MaxStud]=
    {
        {1,"张斌",9901},
        {8,"刘丽",9902},
        {34,"李英",9901},
        {20,"陈华",9902},
        {12,"王奇",9901},
        {26,"董强",9902},
        {5,"王萍",9901}
    };
    struct stud2 s2[MaxCour]=   //规定课程的编号从1到6,同一学生成绩记录连续存放
    {
        {1,1,67},
        {1,2,98},
        {1,4,65},
        {8,1,98},
        {8,3,90},
        {8,6,67},
        {34,2,56},
        {34,4,65},
        {34,6,77},
        {20,1,68},
        {20,2,92},
        {20,3,64},
        {12,4,76},
        {12,5,75},
        {12,6,78},
        {26,1,67},
        {26,5,78},
        {26,6,62},
        {5,1,94},
        {5,2,92},
        {5,6,89}
    };
    allavg(s1,n,s2,m);
    return 0;
}
运行结果:
<img src="https://img-blog.csdn.net/20150924133508580?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
学习心得:
    对于大规模程序,不用对程序整体进行编译。缩短了程序执行时间,提高了机器运行效率。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
程序文件 沪杭甬集团项目开发程序 文 件 号 版 次 1 编 制 HG-X-1** 审 核 批 准 共 2 页 第 1 页 日 期 日 期 日 期 生效日期 更 改 记 录 标记 处数 更 改 单 号 更 改 人 更改日期 更 改 记 录 标 记 处 数 更 改 单 号 更 改 人 更改日期 目的、范围及适用 本程序的目的:提高项目开发的效率,确保新项目对公司价值的贡献。 本程序的适用范围为沪杭甬公司项目开发工作。 本程序由公司项目开发部拟订,其解释权及修改权归公司项目开发部。 本程序自2000年 月 日起执行。 职责 项目开发流程的总责任人是项目开发部经理,通过不断提高本流程所需的技能、在公司中宣传贯彻本流程、在实际项目开发过程中协调、并不断改善本流程,来确保公司项目开发工作的高效和顺畅。 公司内所有人都有权提案。 行业项目开发经理负责初步筛选《商业计划书》或《购并项目提案书》、提出立项建议、立项后的项目评估、组建项目小组制订项目实施方案、组织并参与交易。 各部门经理与业务单位主管及其他人员根据需要加入项目小组,参与提案、制订方案及参与交易。 分管副总负责立项评估的终审、项目实施方案的初审,并签署意向性与正式协议,提名购并后项目公司的总经理和联络经理。 总经理负责终审项目评估报告、项目实施方案和意向性协议,任命购并后项目公司的总经理和联络经理。 董事会负责审批项目实施方案和意向性协议。 程序概要 项目开发程序文件全文共5页,当前为第1页。 产生项目信息,有两种项目信息:公司内部内部发展项目或外部购并目标项目,前者形成《内部发展项目商业计划书》,后者形成《购并项目提案书》,提交到负责该行业的项目开发经理处。产生项目信息有两条途径: 项目开发程序文件全文共5页,当前为第1页。 3.1.1 分管该行业的项目开发经理主动在他所负责的行业中寻找到的项目信息; 3.1.2 公司其他人员提交的项目信息。 负责该行业的项目开发经理根据公司战略要求对《商业计划书》或《购并项目提案书》作初步评估,在《商业计划书》或《购并项目提案书》书上填写初选意见,剔除不符合要求的《商业计划书》或《购并项目提案书》,并存档;把有价值的、需立项作进一步评估的《商业计划书》或《购并项目提案书》书报送分管该行业的分管副总经理。 分管副总经理对《商业计划书》或《购并项目提案书》书进行审批,不同意立项的签批后交项目开发经理存档,并反馈给提案人;同意立项的由项目开发经理组建项目小组对该项目进行评估。 项目开发经理完成《项目评估报告》提交分管该行业的副总经理。 分管副总经理初审《项目评估报告》,未通过的或责成项目开发经理作进一步评估,或停止该项目,批注后交项目开发经理存档;通过的提交总经理审批。 总经理终审《项目评估报告》,未通过的或责成分管副总进一步评估,或停止该项目,批注后交项目开发经理存档;通过的交项目开发经理设计《项目实施方案》(包括交易方案和交易后管理方案)。 项目开发经理组建项目小组制定《项目实施方案》,提交分管副总初审;通过的提交总经理终审;未通过的返回项目开发经理修改,再转入3.7。 项目开发程序文件全文共5页,当前为第2页。总经理终审《项目实施方案》,通过的分2种:内部发展的项目指定人员(一般为提案人)组织项目小组进入实施;并购项目项目开发经理组织项目小组实施交易。未通过的或责成分管副总进一步修改,或停止该项目,批注后交项目开发经理存档。 项目开发程序文件全文共5页,当前为第2页。 达成交易后,根据项目重要性分管副总或总经理签署意向性协议,并提交董事会或股东会审批;未达成交易的停止。 董事会或股东会批准的一方面由董事会秘书室备案并披露信息,一方面进入交易后管理;未批准的停止交易。 由分管副总提名并有总经理任命一名总经理(多数情况下为该公司原总经理)和一名购并联络经理(一般为沪杭甬的资深经理)负责执行《项目实施方案》的购并后管理部分。 相关程序文件 HG-P-1《战略规划程序》 附录 《项目开发流程图》 《项目提案表》 《商业计划书》 《项目评估报告》 《项目实施方案》 《意向性协议书》 《正式协议》 程序文件 沪杭甬集团价格制定程序 文 件 号 Y- -×× 版 次 × 编 制 JG-P-2** 审 核 批 准 共 2 页 第 1 页 日 期 日 期 日 期 生效日期 更 改 记 录 标记 处数 更 改 单 号 更 改 人 更改日期 更 改 记 录 标 记 处 数 更 改 单 号 更 改 人 更改日期 目的、范围及适用 项目开发程序文件全文共5页,当前为第3页。为了使集团的价格策略更具市场竞争力,确保价格执行的一致性,特制订本程序项目开发程序文件全文共5页,当前为第3页。 本程序的适用范围为沪杭甬集团下属各区域公司、地域公司。 本程序由集体业务部拟
"项目开发程序文件 "沪杭甬集团项目开发程序 "文 件 " " " " "号 " " " " "版 " 1 " " " "次 " " "编 制"HG-X-1** "审 核" "批 准" "共 2 页"第 1 页 " "日 期" "日 期" "日 期" "生效日 " " " " " " " " "期 " " "更 "标记 "处数 "更 改 单 " "改 " " "号 " "记 " " " " "录 " " " " " " "版 " × " " " "次 " " "编 制"JG-P-2** "审 核" "批 准" "共 2 页"第 1 页 " "日 期" "日 期" "日 期" "生效日 " " " " " " " " "期 " " 更 改 记 录 "标记 "处数 "更 改 单 号 "更 改 人 "更换日期 " "更 改 记 录 "标 记 "处 数 "更 改 单 号 "更 改 人 "更换日期 " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "目的、范畴及适用 1. 为了使集团的价格策略更具市场竞争力,确保价格执行的一致性,特制订本程序。 2. 本程序的适用范畴为沪杭甬集团下属各区域公司、地域公司。 3. 本程序由集体业务部拟订,其说明权及修改权归集团业务部。 4. 本程序自2000年 月 日起执行。 1. 职责 1. 价格制定流程的总责任人是区域公司总经理。 2. 区域公司总经理负责组织定价和谐会议,审定散批价、零售价和槽批价的最低限价。 3. 区域公司市场部负责提出关于散批价、零售价最低限价的建议,参加定价和谐会议, 下达散批、零售最低限价,并对实际散批价、零售价备案。 4. 区域公司业务部负责提出关于槽批价最低限价的建议,参加定价和谐会议,并执行确 定的槽批价最低限价。 5. 地域公司零售部依照区域公司市场部下达的零售最低限价,结合当地市场情形,制定 和公布零售价,并反馈给区域公司市场部。 6. 地域公司批发部依照区域公司市场部下达的散批最低限价,结合当地市场情形,制定 和公布散批价,并反馈给区域公司市场部。 2. 程序概要 1. 区域公司市场部依照经审批后的市场规划、市场信息和区域公司业务部提供的库存采 购成本,提出关于散批价、零售价最低限价的建议。此项任务在调整最低限价的前 一天完成。 2. 区域公司业务部提出关于槽批价最低限价的建议。此项任务在调整最低限价的前一天 完成。 3. 区域公司总经理组织由区域公司市场部经理、业务部经理参加的定价和谐会议,在会 议上审定散批价、零售价和槽批价的最低限价。 4. 区域公司市场部于审定最低限价的当天下达审定后的散批价、零售价最低限价。 5. 区域公司业务部执行槽批最低限价,并即时将实际的槽批价反馈给集团业务部。 6. 地域公司零售部依照区域公司市场部下达的零售最低限价,结合当地市场情形,制定 零售价。 7. 地域公司零售部公布零售价,并即时反馈给区域公司市场部和集团业务部。 8. 地域公司批发部依照区域公司市场部下达的散批最低限价,结合当地市场情形,制定 散批价。 9. 地域公司批发部公布散批价,并即时反馈给区域公司市场部和集体业务部。 10. 区域公司市场部对实际散批价、零售价备案。 11. 集团业务部对实际散批价、零售价备案。 3. 相关程序文件 4. 附录 《价格制定流程》 《库存采购成本分析表》 ----------------------- 项目开发程序文件全文共7页,当前为第1页。 项目开发程序文件全文共7页,当前为第2页。 项目开发程序文件全文共7页,当前为第3页。 项目开发程序文件全文共7页,当前为第4页。 项目开发程序文件全文共7页,当前为第5页。 项目开发程序文件全文共7页,当前为第6页。 项目开发程序文件全文共7页,当前为第7页。
光盘说明 本光盘为《精通LabVIEW程序设计(第2版)》的随书光盘,包含了原书各章节中各个例子的源程序文件,供读者在阅读时参考使用。 1.为方便不同版本LabVIEW环境下的读者使用,各个例子均包括LabVIEW8.2和LabVIEW8.5两种版本,分别位于文件夹“Opened with LabVIEW 8.2”和“Opened with LabVIEW 8.5”下。因为LabVIEW版本兼容性的关系,对于使用LabVIEW8.2版本的读者,可以打开前者;对于使用LabVIEW8.5的读者,两者都可以打开。 2.各个例子的源程序文件按章节号和例子顺序进行组织,例如在文件夹“第2章\例2-1”下的源程序文件对应于书中第2章例2-1。 3.本书中的所有例子均运行于Windows操作系统下(推荐使用XP版本)。使用本光盘中的例子前,必须先安装LabVIEW8.2或以上的版本。为了正常打开与数据采集或控制设计工具包相关的vi,除LabVIEW外还需安装以下驱动程序和工具包: (1) NI Traditional DAQ 驱动程序(推荐7.4.4版本) (2) NI-DAQmx 驱动程序(至少8.6.1或以上的版本) (3) NI LabVIEW Control Design Toolkit 控制设计工具包(推荐2.1.2或以上的版本) 以上前两者可以在NI官方网站上免费下载,例如在http://www.ni.com/support/zhs/页面上点击“驱动与升级”然后搜索相关字样;控制设计工具包则可以通过NI官方网站购买或获得试用版本。 4.“第4章\例4-6\example”文件夹下的源程序为该例中对应的VC源程序,可以使用Microsoft Visual C++ 6.0打开“example.dsw”文件进行阅读。.ncb和.opt文件都是在创建VC源程序项目(.dsw文件)时由VC自动产生的。 5.本光盘内容的著作权属本书作者所有。所有源程序仅供本书读者学习和研究之用,任何人未经授权不得擅自复制、传播或用于商业用途。 6.使用过程中如有任何问题,欢迎与作者联系
EXT2是Linux中使用的一种文件系统,它是一种基于磁盘的文件系统,支持多种文件类型和权限控制。EXT2文件系统的结构比较复杂,包括超级块、组描述符、inode表、数据块等多个部分。下面我们来分析一下EXT2文件系统的结构,并介绍一些跟踪程序。 1. 超级块 EXT2文件系统的第一个块是超级块,它包含了文件系统的基本信息,如文件系统的大小、块大小、inode数量、块数量等。超级块还包含了文件系统的状态信息和文件系统的特性信息,如是否支持日志、是否支持扩展属性等。跟踪程序可以通过读取超级块来获取EXT2文件系统的基本信息。 2. 组描述符 EXT2文件系统将磁盘空间划分为多个组,每个组包含若干个块。每个组都有一个组描述符,它包含了该组的基本信息,如该组中的块数量、inode数量、空闲块数量、空闲inode数量等。跟踪程序可以通过读取组描述符来了解文件系统中的块和inode的分布情况。 3. inode表 EXT2文件系统中的每个文件都对应一个inode,inode表记录了所有文件的inode信息。inode包含了文件的基本属性信息,如文件类型、文件大小、权限、创建时间、修改时间等。inode表还包含了文件数据块的指针,用于记录文件数据块的位置。跟踪程序可以通过读取inode表来了解文件的基本属性信息和文件数据块的分布情况。 4. 数据块 EXT2文件系统的数据块用于存储文件的实际数据。数据块分为若干个块组,每个块组包含若干个数据块。数据块可以按照不同的方式组织,如按照文件大小、按照文件类型等。跟踪程序可以通过读取数据块来获取文件的实际数据。 下面是一个简单的EXT2文件系统跟踪程序实现: ```c #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <sys/stat.h> #include <sys/types.h> #include <unistd.h> #include <errno.h> #define EXT2_SUPER_MAGIC 0xEF53 #define EXT2_BLOCK_SIZE 1024 typedef struct { unsigned short s_magic; // 文件系统魔数 unsigned short s_state; // 文件系统状态 unsigned int s_blocks_count; // 文件系统总块数 unsigned int s_inodes_count; // 文件系统总inode数 unsigned int s_log_block_size; // 块大小的对数(以2为底) unsigned int s_blocks_per_group; // 每个块组的块数 unsigned int s_inodes_per_group; // 每个块组的inode数 unsigned int s_first_data_block; // 第一个数据块 unsigned int s_feature_compat; // 文件系统支持的特性 unsigned int s_feature_incompat; // 文件系统不支持的特性 unsigned int s_feature_ro_compat; // 文件系统只读支持的特性 char s_volume_name[16]; // 卷名 } ext2_super_block; typedef struct { unsigned int bg_block_bitmap; // 块位图所在块号 unsigned int bg_inode_bitmap; // inode位图所在块号 unsigned int bg_inode_table; // inode表所在块号 unsigned short bg_free_blocks_count; // 块组中空闲块数 unsigned short bg_free_inodes_count; // 块组中空闲inode数 unsigned short bg_used_dirs_count; // 块组中目录数 unsigned short bg_pad; unsigned char bg_reserved[12]; } ext2_group_desc; typedef struct { unsigned short i_mode; // 文件类型和权限 unsigned short i_uid; // 文件所有者ID unsigned int i_size; // 文件大小 unsigned int i_atime; // 最近一次访问时间 unsigned int i_ctime; // 最近一次修改时间 unsigned int i_mtime; // 最近一次状态改变时间 unsigned int i_dtime; // 文件删除时间 unsigned short i_gid; // 文件所属组ID unsigned short i_links_count; // 文件硬链接数 unsigned int i_blocks; // 文件数据块数 unsigned int i_flags; // 扩展属性标志 unsigned int i_osd1; unsigned int i_block[15]; // 数据块指针 unsigned int i_generation; // 文件版本号 unsigned int i_file_acl; // 文件ACL指针 unsigned int i_dir_acl; // 目录ACL指针 unsigned int i_faddr; // 片外块地址 unsigned char i_osd2[12]; } ext2_inode; int main(int argc, char *argv[]) { int fd; ext2_super_block sb; ext2_group_desc gd; ext2_inode inode; if (argc != 2) { fprintf(stderr, "Usage: %s <device>\n", argv[0]); exit(EXIT_FAILURE); } fd = open(argv[1], O_RDONLY); if (fd == -1) { perror("open"); exit(EXIT_FAILURE); } // 读取超级块 if (pread(fd, &sb, sizeof(sb), EXT2_BLOCK_SIZE) == -1) { perror("pread"); exit(EXIT_FAILURE); } // 检查文件系统魔数 if (sb.s_magic != EXT2_SUPER_MAGIC) { fprintf(stderr, "Not an EXT2 filesystem\n"); exit(EXIT_FAILURE); } // 输出文件系统的基本信息 printf("Filesystem size: %u blocks\n", sb.s_blocks_count); printf("Block size: %u bytes\n", 1024 << sb.s_log_block_size); printf("Inode count: %u\n", sb.s_inodes_count); printf("Groups count: %u\n", sb.s_blocks_count / sb.s_blocks_per_group); // 读取组描述符 if (pread(fd, &gd, sizeof(gd), EXT2_BLOCK_SIZE * 2) == -1) { perror("pread"); exit(EXIT_FAILURE); } // 输出第一个块组的基本信息 printf("Block group size: %u blocks\n", sb.s_blocks_per_group); printf("Inode group size: %u inodes\n", sb.s_inodes_per_group); printf("Free blocks count: %u\n", gd.bg_free_blocks_count); printf("Free inodes count: %u\n", gd.bg_free_inodes_count); printf("Used dirs count: %u\n", gd.bg_used_dirs_count); // 读取inode表 if (pread(fd, &inode, sizeof(inode), EXT2_BLOCK_SIZE * gd.bg_inode_table) == -1) { perror("pread"); exit(EXIT_FAILURE); } // 输出根目录的基本信息 printf("Root inode:\n"); printf(" Size: %u bytes\n", inode.i_size); printf(" Blocks: %u\n", inode.i_blocks); printf(" Type: directory\n"); close(fd); return 0; } ``` 以上程序可以读取EXT2文件系统的超级块、组描述符和inode表,并输出文件系统的基本信息、第一个块组的基本信息和根目录的基本信息。通过这些信息,我们可以了解EXT2文件系统的结构和文件的分布情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值