C程序设计实验指导书 - 2014版 下载本文

实验六 函数

【例5】写一函数,用“冒泡法”对输入的10个字符按由小到大顺序排序。 源程序如下: /*冒泡法排序*/ #include #include #define N 10 void sort( ) void sort(char str[]); { void main() { int i,flag=1; char str[N]; while(flag) { printf(\输入字符串,长度为10:\\n\ gets(str); if (strlen(str)>N) printf(\超过长度,请重输!\ else flag = 0; } printf(\ sort(str); printf(\排序结果:\} for (i=0;i

【例6】编写程序,从键盘分别输入年、月、日,计算出该天时这年中的第几天。 示例输出:

Input year_month_day: 2005 12 12 是这年的第346天。 请按下面程序中的提示完成整个程序。 #include ―stdio.h‖ Int day_tab[2][13]={

{0,31,28,31,30,31,30,31,31,30,30,31}, {0,31,29,31,30,31,30,31,31,30,30,31}}; /*统计天数函数的头部*/ { int i,j;

/*判断该年是否是闰年,并将其逻辑值赋给变量i*/

39

实验六 函数

for(j=1;j

/*返回总的天数*/ }

void main( ) {

int y,m,d;

/*提示输入年月日*/

/*分别输入年月日*/

printf(―是这年的第%d天\\n‖,day_year(y,m,d)); }

【思考】

a. 不使用二维数组存放每个月的天数,用两个一维数组分别存放闰年和非闰年的天数,重

新编写程序。

b. 用if语句对年、月、日的正确性进行验证,若不符合年、月、日的要求就退出程序。 c. 将存放每个月天数的二维数组说明为局部数组,要如何修改程序?

编程作业

1.定义一个函数,功能是计算n个学生的成绩中,高于平均成绩的人数,并作为函数值。用主函数来调用它,统计50个学生成绩中,高于平均成绩的有多少人?

40

实验六 函数

2.编写一个对n个数据从大到小的排序C函数,再编写一个计算最后得分的C函数,计算方法是:去除一个最高分,去除一个最低分,其余的平均分为参赛选手的最后得分。并在主函数中调用它们对有n个评委评分,m个选手参赛的最后得分,从大到小排序输出。

3.用一个函数来实现将一行字符串中最长的单词输出。此行字符串从主函数传递给该函数.(习题8.10)

【注意】此题要求实现两个版本,第一个版本要求把两个函数放在同一个程序文件中,作为一个文件进行编译和运行。第二个版本把两个函数分别放在两个程序文件中,作为两个文件进行编译、连接和运行。

41

实验六 函数

选做题

1.编写一个程序,包括主函数和如下子函数。

(1) 输入10个无序的整数; (2) 用冒泡法从大到小排序;

(3) 要求输入一个整数,用折半查找法找出该数,若存在,在主函数中输出其所处的位置,否则,插入适当位置。

【提示】用input函数完成10个整数的录入,sort函数完成冒泡法排序,search函数完成输入数的查找。

2.根据条件进行学生成绩排名

(1)在函数中进行10个学生成绩从高到低排名 sort(int a[10]);

(2)改进第一步的函数为sort(int a[],int n),进行n个学生成绩从高到低排名;

(3)改进第二步的函数为sort(int a[],int n, char style), 将n个学生成绩从高到低排名,排名方式根据sort()函数的style参数进行,如style为‘a’按升序排,style为’d’按降序排;(a:ascending 升,d:descending 降)

(4)在main() 函数中调用它们,实现完整的功能。

知识点描述及编程体会

实验成绩 签名

年 月 日

42