当前位置:文档之家› C语言 实验三 模块化程序设计

C语言 实验三 模块化程序设计

实验三模块化程序设计(3学时)【实验目的】1. 掌握一维数组和二维数组的定义、赋值和输入输出的方法。

2. 掌握字符数组和字符串函数的使用。

3. 掌握与数组有关的算法。

4. 掌握函数定义的方法。

5. 掌握函数实参与形参的传递方式。

6. 掌握函数的嵌套调用和递归调用的方法。

7. 了解全局变量和局部变量、动态变量、静态变量的概念和使用方法。

【实验内容】任务1 数组的基本定义与应用1. 定义一个10个元素的int数组a,输入10个数,并输出。

参考程序:main(){int i,a[10];for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=0;i<10;i++)printf("%5d",a[i]);printf("\n");}运行结果:2. 寻找整数数组num中的最大值及其所在的下标。

参考程序:main(){int i,max,p,a[10];printf("please enter 10 data:\n");for(i=0;i<10;i++)scanf("%d",&a[i]);max=a[0];p=0;for(i=1;i<10;i++)淮南师范学院电气信息工程学院 1if(a[i]>max) {max=a[i];p=i;}printf("max is:%d\n",max);printf("point is:%d\n",p+1);}运行结果:3. 实现对n个数的数列从小到大排序。

(比较交换法、选择法、冒泡法)参考程序:冒泡法#include <conio.h>main(){int i,j,n,a[100];int temp;clrscr();printf("enter the number:\n");scanf("%d",&n);for(i=0;i<n;i++) scanf("%d",&a[i]);printf("\n output the original array\n");for(i=0;i<n;i++) printf("%5d",a[i]);for(i=0;i<n-1;i++)for(j=0;j<n-1-i;j++)if(a[j]>a[j+1]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;}printf("\n output the sorted array\n");for(i=0;i<n;i++) printf("%5d",a[i]);printf("\n");}运行结果:4. 有一个4×4的矩阵,编程将行和列的元素互换,输出互换后的矩阵。

参考程序:main(){int a[4][4],i,j,t;for(i=0;i<4;i++)for(j=0;j<4;j++) scanf("%d",&a[i][j]);printf("output array a: before change:\n");for(i=0;i<4;i++){for(j=0;j<4;j++) printf("%5d",a[i][j]);printf("\n");}for(i=0;i<4;i++)淮南师范学院电气信息工程学院 2for(j=0;j<i;j++){t=a[i][j];a[i][j]=a[j][i];a[j][i]=t;}printf("output array a: after change:\n");for(i=0;i<4;i++){for(j=0;j<4;j++) printf("%5d",a[i][j]);printf("\n");}}运行结果:(统一输入4×4矩阵为: 2 0 0 10 2 1 00 2 1 02 0 0 1 )任务2. 字符数组1.用户从键盘输入一个字符串(不包含空格),当输入回车时认为输入结束,统计输入字符串中小写英文字母、大写英文字母、数字字符、其他字符的个数。

参考程序:#include "string.h"main(){char a[80],i,c1=0,c2=0,c3=0,c4=0;gets(a); i=0;while(a[i]!='\0'){if(a[i]>='a'&&a[i]<='z') c1+=1;else if(a[i]>='A'&&a[i]<='Z') c2+=1;else if(a[i]>='0'&&a[i]<='9') c3+=1;else c4+=1;i++;}printf("number of lower letters are:%d\n",c1);printf("number of upper letters are:%d\n",c2);printf("number of digit are:%d\n",c3);printf("number of other letters are:%d\n",c4);}运行结果:淮南师范学院电气信息工程学院 32. 输入一个字符串,将其中的小写字母转换成大写字母,输出转换后的字符串。

参考程序:#include "string.h"main(){char s[80],i;gets(s);i=0;while(s[i]!='\0'){if(s[i]>='a'&&s[i]<='z')s[i]=s[i]-32;i++;}puts(s);}运行结果:任务3. 函数的定义和声明1.分析推测下面程序的输出,并上机运行验证结果。

(运行结果:)#include <stdio.h>unsigned fun26(unsigned num){unsigned k=1;do{ k*=num%10;num/=10; }while(num);return k;}main(){unsigned n=26;printf("%d\n",fun26(n));}2.求出以下程序的运行结果,并描述程序所完成的功能。

(运行结果:程序功能是:)#include <stdio.h>main(){int power(int x,int n);int x=2,n=4;printf("\ns=%d",power( x,n));}int power(int x,int n)淮南师范学院电气信息工程学院 4{int i,p=1;for(i=1;i<=n;i++)p=p*x;return(p);}3.下面程序中,函数fun的功能是根据形参m计算公式T=1/1!+1/2!+1/3!+…+1/m!的值,上机调试,当从键盘输入10时,给出程序运行的正确结果(按四舍五入保留10位小数)。

输入10时的结果:)#include <stdio.h>main(){double fun(int m); //先调用再定义,且不是能缺省的int型,请加上函数说明。

int m;printf("\n input m:");scanf("%d",&m);printf("\n t=%12.10lf \n",fun(m));}double fun(int m){double fac,t=0.0;int i=1,j;for(i=1;i<=m;i++){fac=1.0;for(j=1;j<=i;j++) fac=fac*j;t+=1.0/fac;}return t;}任务4. 数组与函数的综合应用1. 在一个一维数组a中存放10个正整数, 求其中所有的素数。

(用数组元素作为函数的实际参数)参考程序:int sushu(int x){int i,k=1;if(x==1) k=0;for(i=2;i<=x/2;i++)if(x%i==0) k=0;return(k); }main( )淮南师范学院电气信息工程学院 5{int a[10],i;for(i=0;i<10;i++) scanf("%d",&a[i]);printf("sushu of array a are:\n");for(i=0;i<10;i++)if(sushu(a[i])) printf("%5d",a[i]);printf("\n");}运行结果:2. 设有一个3×4的矩阵,求出其中的最大元素。

(要求:将计算最大值的功能设计成函数,数组名作为参数)参考程序:max_value(int array[12]){int i,max;max=array[0];for(i=0;i<12;i++)if(array[i]>max) max=array[i];return(max);}main(){int a[3][4]={{1,3,5,7},{2,4,6,8},{15,17,34,12}};printf("max=%d\n",max_value(a));}运行结果:任务5. 函数的嵌套调用1.跟踪调试下面程序,注意函数调用的过程中形参、实参的关系。

记录并分析结果;将形参a,b对应改为x,y,使之与实参变量同名,记录并分析结果。

#include <stdio.h>main(){int t,x=2,y=5;int swap(int,int);printf("(1) in main: x=%d,y=%d\n",x,y);swap(x,y);printf("(4) in main: x=%d,y=%d\n",x,y);}swap(int a,int b){淮南师范学院电气信息工程学院 6int t;printf("(2) in swap: a=%d,b=%d\n",a,b);t=a;a=b;b=t;printf("(3) in swap: a=%d,b=%d\n",a,b);}运行结果:将形参a,b对应改为x,y 的结果:结论:无论实参、形参是否同名,交换的只是子函数(swap)中两个变量的值。

相关主题