当前位置:首页 > c语言课程设计报告
scanf(\ day=find(year,month,date);
printf(\return 0; }
int find(int x,int y,int z)
{int i,s,t,days=0; if(x%4==0)t=1; else t=0;
for(i=1;i days+=30+i%2-s; } days=days+z; return(days); } 【编译示图】(示图中要有0 error,0 warning的提示) 【运行结果示图】 第2章 数组与函数 2.1 启示与范例 【示范1】输入n个学生的成绩,并求出其中高于平均分的人数。 【编程提示】用程序来实现本题的要求,首先有两个值得思考的问题:一是数据结构的选择;二是数组的长度。 ① 数据结构的选择:n个学生的成绩是否有必要开辟数组来存放还是定义变量来存放?从任务要求分析知,两次用学生成绩,一次是求平均分;另一次是将每个学生的成绩与平均分比较,高于平均分要输出。因此有必要将其定义数组。 ② 数组的长度定义:学生个数n的具体数值一般表示在编写程序时是未知的,而在程序执行时由使用者随意确定。即n是一个变量,其值需要用输入来确定。这样一来,存放n个分数的数组a,其长度的定义就必须注意,既不能定义为int a[n];因为数组长度要求是常量,而n是一个变量,又不能将n定义成符号常量,因为n的具体值是未知的。对于这种情况的处理方法一般是:将数组的长度定义较大,让使用者在此范围内随意使用,当然这个长度的定义有其原则,那就是既不让使用者感到长度不够,又不至于定义过大而浪费内存,这种情况视应用情况而定。 【参考程序】 #include int i,a[1000],num=0,n; float aver=0; printf(\输入学生个数n\\n\ scanf(\ printf(\输入学生的成绩存放到数组a中\\n\ for(i=0;i scanf(\ aver=aver+a[i]; } aver=aver/n; for(i=0;i printf(\高于平均分的人数是:%d\\n\ return 0; } 【示范2】输入任意个学生的学号及成绩,然后按顺序输出高分的前十名。 【编程提示】依据设计任务的要求需要考虑几个问题:初始数据的数据结构选择;采用的算法如何实现及相关的数据结构;任意个数据的实现问题。 ① 初始数据的数据结构选择问题:所谓任意个学生,应该是个数不限,因此,对于存 放初始数据的数据结构不宜选择为数组。并且,从算法实现的角度考虑,每个学生的数据输入后只需使用一次,没有再保留的必要,因此可选择简单变量作数据结构来存放一个学生的数据,而且每个学生的初始数据都用同一个数据结构存放,即对一个学生的数据使用完后就将该数据结构让给下一个学生的数据使用。 ② 算法的实现及相关的数据结构:本题核心的算法是排序,由设计任务可知只要求前十名的排序结果,因此算法上不需考虑对所有学生数据进行排序,只考虑对前十名排序即可。因此,应选择合适的数据结构来存放前十名排序结果的数据,显然,选择数组是最合适的。关于算法的实现可采用插入排序法最为合适。即存放排序结果的数组始终是存放当前已插入数据的前十名的排序结果,而后每输入一个学生的数据就进行一次插入排序更新这一排序结果。 ③ 任意个的实现:对于本题的程序来说,总体结构还是一个循环结构,每次循环的任务是输入一个学生的数据并进行插入排序。问题是何时结束循环?循环结束的条件是什么?对用户输入的有用数据,循环继续;对用户输入的无用数据即输入数据为负数时,循环结束。 ④ 为了使程序更加清晰。主程序只提供输入学生的学号、成绩,并且输出前十名的学号及成绩;子函数实现插入排序的过程。 【参考程序】 #include void insertsort(int num[],int a[],int n,int number,int score) { int i,j; for(i=0;i int main() { int i,num[10],a[10],number,score; for(i=0;i<10;i++) { a[i]=0; num[i]=0; } while(1) { printf(\输入学生的学号及学生成绩:\\n\ scanf(\ if(number<0||score<0) break; insertsort(num,a,10,number,score); } for(i=0;i<10;i++) printf(\前十名学生学号%d 成绩是%d\\n\return 0; } 2.2 设计任务 1. 有一个一维数组score[],内存放10个学生的成绩,要求编写三个函数分别求学生的平均成绩,求10个学生的最高分,求10个学生的最低分。 2. 编写一个函数,将输入的一串字符中的小写字母转变成大写字母,并输出所有的大写字母。 3. 输入10个学生姓名,按字典顺序将排在最前面的学生姓名输出。即在字符数组中求最小字符串。 4. 用函数求N*N的对角线的和。其中的N是用户通过键盘输入的任意值。 5. “数学黑洞”:任意一个4位自然数,将组成该数的各位数字重新排列,形成一个最大数和一个最小数,之后两数相减,其差任为一个自然数。重复进行上述运算,会发现一个神秘的数。 2.3实现过程 2.3.1 设计任务1实现过程 【算法分析】(用文字或流程图进行描述) 首先输入每个学生的成绩,然后给AVER MAX MIN扶初始值,然后输出 【源程序代码】 #include float score[10],aver,max,min; int i; for(i=0;i<10;i++) scanf(\ max=score[0];min=score[0];aver=0; for(i=0;i<10;i++) { if(max
共分享92篇相关文档