1.编写函数fun1,fun2,分别用冒泡排序,选择排序,对输入的十个数字从小到大的顺序进行排序。
(冒泡排序:外层for循环决定冒泡排序的趟数,内层for循环决定每趟所进行两两比较的次数。
选择排序:外层for循环是确定位置的,该位置是存放每次从待排序数列中经选择和交换后所选出的最小数。内层for循环是实现将确定位置上的数与后面待排序区间中的数进行比较的。)
#include<stdio.h> #define M 10 void fun1(int *arr, int size) // 冒泡排序 { } void fun2(int *arr,int size)//选择排序 { } int main() { int array[M],i; int arrayselect[M]; for(i=0;i<M;i++) { printf("请输入第%d个数字:",i+1); scanf("%d",&array[i]); arrayselect[i]=array[i]; } fun1(array,M); printf("冒泡排序输出结果!\n"); for(i=0;i<M;i++) { printf("%d\t",array[i]); } fun2(arrayselect,M); printf("选择排序输出结果!\n"); for(i=0;i<M;i++) { printf("%d\t",arrayselect[i]); } }
2.编写函数fun,求出两个非零正整数的最大公约数,并作为函数值返回。(辗转相除法)
(判断 a 和 b 的关系,如果 a 小于 b,则利用中间变量 t 将其互换。再利用辗转相除法(用较大数除以较小数,再用出现的余数(第一余 数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。)求出最大公约数,进而求出最小公倍数(a和b的乘积除以它们的最大公约数就是最小公倍数))。
/*例如,若给n和m分别输入27和81,则输出的最大公约数为27。 注意:不要改动main函数,不能增行或删行,也不能更改程序的结构。*/ #include<stdio.h> int fun(int a,int b) { } main() { int n,m,a; printf("Input n m: "); scanf("%d%d",&n,&m); printf("n=%d m=%d\n\n",n,m); a=fun(n,m); printf("The maximun common divisor is %d\n\n",a); }
3.给定程序中,函数fun的功能是:将形参std所指结构体数组中年龄最大者的数据作为函数值返回,并在主函数中输出。
函数接口定义:
struct student fun(struct student std[], int n);
其中 std 和 n 都是用户传入的参数。 函数fun的功能是将含有 n 个人的形参 std 所指结构体数组中年龄最大者的数据作为函数值返回。
测试程序样例:
#include <stdio.h> struct student { char name[10]; int age; }; struct student fun(struct student std[], int n); fun(struct student std[], int n) { } int main() { struct student std[5]={“aaa”,17,“bbb”,16,“ccc”,18,“ddd”,17,“eee”,15 }; struct student max; max=fun(std,5); printf("\nThe result:\n"); printf("\nName : %s, Age : %d\n", max.name,max.age); return 0; }
4.编写函数fan,实现功能:统计一行字符串中单词个数,作为函数值返回。字符串在主函数中输入,规定所有单词有小写字母组成,单词之间有若干个空格隔开,一行的开始没有空格。(仅修改fun函数即可)
#include<stdio.h> #include<string.h> #define M 100 int fun(char*str) { } int main() { char s[M]; int sum=0; printf("Enter a string:\n"); gets(s); sum=fun(s); printf("The number of word is:%d\n\n",sum); }
5.学生的记录由学号和成绩组成,M名学生的数据已在主函数中放入结构体数组stu中,请编写函数fun,它的功能是:函数返回指定学号的学生数据,指定的学号在主函数中输入。若没找到指定学号,在结构体变量中给学号置空串,给成绩置-1,作为函数值返回(用于字符串比较的函数是strcmp)。
#include<stdio.h> #include<string.h> #define M 10 #define M 10 typedef struct { char num[10];//学号 int s;//成绩 }SCORE; SCORE fun(SCORE*p,char*q) { } int main() { SCORE stu[M]={{"G002",69},{"G004",85},{"G001",96},{"G007",72},{"G008",64},{"G006",87},{"G015",85},{"G013",94},{"G012",64},{"G014",91}}; SCORE t; char m[10]; int i; printf("The original data:\n"); for(i=0;i<M;i++)//打印所有学生数据 { if(i%4==0) printf("\n"); printf("%s %3d\n",stu[i].num,stu[i].s); } printf("\n\nEnter the number:"); gets(m); t=fun(stu,m); printf("The data :"); printf("\n%s %4d\n",t.num,t.s); printf("\n"); }
6.编写函数fun,函数fun的功能是:用递归算法计算斐波拉契级数数列中第n项的值。从第1项起,斐波拉契级数序列为1、1、2、3、5、8、…
#include<stdio.h> long fun(int m) { } int main() { long a; int n; printf("Input n: "); scanf("%d",&n); printf("n=%d\n",n); a=fun(n); printf("a=%d\n\n",a); }