孝感学院-物电学院实验中心
{int i,j,sum=0; int a[N][N]={0};
printf(\5 data:\\n\for(i=1;i { printf(\for(j=1;j for(i=1;i for(i=1;i 1. 求一个3×3矩阵对角线元素之和。 2. 打印出以下的杨辉三角形(要求打印出10行)。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 …………………… 3. 有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数 22 纸上得来终觉浅,绝知此事要躬行 孝感学院-物电学院实验中心 实验八 函数 【目的与要求】 1.掌握C语言函数的定义方法、函数的声明及函数的调用方法。 2.了解主调函数和被调函数之间的参数传递方式。 【上机内容】 【例1】写一个判断素数的函数,在主函数输入一个整数,输出是否素数的信息。 源程序如下: mian() { int number; printf(“请输入一个正整数:\\n”); scanf(“%d”,&number); if (prime(number)) printf(“\\n %d是素数.”,number); else printf(“\\n %d不是素数.”,number); } int prime(number) /*此函数用于判别素数*/ int number; { int flag=1,n; for(n=2;n 判断素数的算法,我们在以前学习循环的时候已经学过了,在这里只是把这个算法用函数的形式表示出来。这里我们要注意函数的定义、声明的方法和格式。 【例2】写一函数,是给定的一个二位数组(4×4)转置,即行列互换。 源程序如下: /*矩阵的转置*/ #define N 4 int array[N][N]; convert(array) int array[4][4]; { int i,j,t; for (i=0;i t=array[i][j]; array[i][j]=array[j][i]; array[j][i]=t; } } 23 纸上得来终觉浅,绝知此事要躬行 孝感学院-物电学院实验中心 main() {int i,j; printf(“输入数组元素:\\n”); for (i=0;i for (j=0;j conver(array); printf(“转置数组是:\\n”); for (i=0;i for (j=0;j 本例题用数组作为函数参数,大家要注意数组作为函数参数时的用法。 【典型示例】 【例1】写两个函数,分别求两个正数的最大公约数和最小公倍数,用主函数调用这两个函数并输出结果。两个正数由键盘输入。 源程序如下: #include \hcf(u,v) int u,v; { int a,b,t,r; if(u>v) { t=u; u=v; v=t; } a=u; b=v; while((r=b%a)!=0) { b=a; a=r; } return(a); } lcd(u,v,h) 24 纸上得来终觉浅,绝知此事要躬行 孝感学院-物电学院实验中心 int u,v,h; { return(u*v/h); } main(){ int u,v,h,l; scanf(\h=hcf(u,v); printf(\l=lcd(u,v,h); printf(\} 这是一个十分典型的算法,同学们一定要认真分析、学习。 【例2】写一函数,用“起泡法”对输入的10个字符按由小到大顺序排序。 源程序如下: /*起泡法排序*/ #define N 10 char str[N]; main() { int i,flag; for (flag=1; flag = =1;) { printf(“\\n输入字符串,长度为10:\\n”); scanf(“%s”,&str); if (strlen(str)>N) printf(“超过长度,请重输!”); else flag = 0; } sort(str); printf(“\\n排序结果:”): for (i=0;i