1、程序设计课程设计姓 名:学 号:班 级:软件工程 1334 班指导教师: 杨永强 成 绩:2015 年 6 月实验一:谁拿了最多奖学金1【问题描述】(1)问题描述某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有五种,获取的条件各自不同:1) 院士奖学金,每人 8000 元,期末平均成绩高于 80 分(80),并且在本学期内发表 1 篇或 1 篇以上论文的学生均可获得;2) 五四奖学金,每人 4000 元,期末平均成绩高于 85 分(85),并且班级评议成绩高于 80 分(80 )的学生均可获得;3) 成绩优秀奖,每人 2000 元,期末平均成绩高于 90 分(90)的学生均可获得
2、;4) 西部奖学金,每人 1000 元,期末平均成绩高于 85 分(85)的西部省份学生均可获得;5) 班级贡献奖,每人 850 元,班级评议成绩高于 80 分(80)的学生干部均可获得;只要符合条件就可以得奖,每项奖学金的获奖人数没有限制,每名学生也可以同时获得多项奖学金。例如姚林的期末平均成绩是 87 分,班级评议成绩 82 分,同时他还是一位学生干部,那么他可以同时获得五四奖学金和班级贡献奖,奖金总数是 4850 元。2【设计需求及分析】(1)设计思路先定义了一个 Student 的结构体,它里面定义了关于学生的各个属性。比如期末平均成绩,班级评议成绩,班干部等等。然后设计了一个判断函数
3、,判断他得到奖学金的多少。接下来就是主函数了,在主函数里,有着输出输入变量,和赋值函数,最重要的是比较函数,比较出哪一位学生的奖学金多及所有金额的总计。最后输出。下面是关键步骤:(2)输出输入格式输入数据格式格式:输入的第一行是一个整数 N( 1 #include using namespace std;string stu_name100;int stu_num100;int main()int n;cinn;memset(stu_name,0,sizeof stu_name);memset(stu_num,0,sizeof stu_num);for (int i=0;istu_namei;
4、cinsc1sc2fl1fl2c;if (sc180if (sc185if (sc190)stu_numi += 2000;if (sc185if (sc280int max_index = 0;int max_num = 0;for (int i=0;istu_nummax_index)max_index = i;max_num += stu_numi;cout的区别。从以前的忘记到现在的熟悉。走过了一大段路。实验二:统计数字1.【问题描述】某次科研调查时得到了 n 个自然数,每个数均不超过 1500000000(1.5*10 9)。已知不相同的数不超过 10000 个,现在需要统计这些自然
5、数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。2【设计需求及分析】(1)设计要求原始数据保存在文件 count.in 中,文件包含 n+1 行。第 1 行是整数n(1aj+1) /冒泡排序 t=aj;aj=aj+1;aj+1=t;、 for(i=0;i int main()int a100; /创建容纳文件数据的数组 int i; FILE* fp=fopen(“count.txt“,“a+“); /用只读/的方式打开文件 if(fp=NULL)printf(“无文件“); /若没有文件则返回1 return -1;for(i=0;iaj+1) /冒泡排序 t=aj;aj=aj+1
6、;aj+1=t;printf(“结果为:n 数据 结果n“); int count;for(i=0;i#include#includeint readData(char filename);void writeData(int n );int main(void)char name40 = “e:abc2.txt“;int word_num; word_num = readData(name); writeData(word_num);return 0;int readData(char filename) /此函数计算英文单词个数FILE* fp;char ch;char flag = 0;
7、int num=0;if(fp = fopen(filename,“r“) = NULL)printf(“%s open failure“,filename);exit(EXIT_FAILURE);printf(“%s open sucessfully!n“,filename);while(!feof(fp)ch = fgetc(fp);if(ch = A /*起点*/ int end; /*终点*/ int dis;/*距离*/ node; node pmax,temp; /*p 记录城市信息*/ int pre100,rank100;/*用于判断是否构成回路*/int n=0,arcsMA
8、X_LNTMAX_LNT;/*n 表示城市个数, arcs记录城市间权值*/ int menu( ) /*菜单函数*/ int m; printf(“2015 年 6 月 28 日nn“); printf(“ 求最小生成树n“); printf(“ _nn“); printf(“ 1 输入城市之间的信息n“); printf(“ 2 判断是否能构成一个最小生成树n“); printf(“ 3 遍历所有城市生成最小生成树n“); printf(“ 4 退出n“); printf(“ _nn“); printf(“ 请输入所选功能 1-4n“); system(“color 8E“);/*改变界面
9、颜色的,对程序没什么影响*/scanf(“%d“, return m; /*下面三个函数作用是检验当一条边添加进去,是否会产生回路*/ void set(int x)/*初始化*/ prex = x; rankx = 0; int find(int x)/*找到这个点的祖先*/ if(x != prex) prex = find(prex); return prex; void Union(int x,int y)/*将这两个添加到一个集合里去*/ x = find(x); y = find(y); if(rankx = ranky) prey = x; rankx +;else prey =
10、 x; void Kruskal( ) int ans = 0,i,j,k = 0; /*ans 用来记录生成最小树的权总值 */ int index; int count = 0; /*记录打印边的条数*/ for(i = 1;i lowj)/*找到最小的 low值,并记录*/ min = lowj; k = j; for(j = 2;j arcskj) lowj = arcskj; /*修改 low值和 close值*/ closej = k; ans += arcsclosekk; if(ans = 100000000) printf(“不能构成最小生成树n“); else printf(“能构成最小生成树n“); int main( ) /*主函数*/ while(1) switch( menu( ) ) case 1:create( );break;/*输入城市信息 */ case 2:judge( );break;/*判断是否能够生成最小生成树 */ case 3:display( );break; /*显示生成的最小生成树 */ case 4:exit( 0 ); return 0; 9【使用说明】城市间距离两两之间没有的为无穷大,就把 10000 当成的无穷大10【心得体会】选择循环结构用的比较多!