《高级语言程序设计》实验报告班级:___________ 学号:________ 姓名:____________ 成绩: ___________实验7函数程序设计一、实验目的1 •掌握函数定义的方法。
2. 掌握函数实参与形参的传递方式。
3. 掌握函数的嵌套调用和递归调用的方法。
4. 了解全局变量和局部变量、动态变量、静态变量的概念和使用方法。
二、实验内容1.改错题(在程序中画出错误的语句,将修改后的语句完整地写在该语句的右边。
|)(1)下列sub函数的功能为:将s所指字符串的反序和正序进行连接形成一个新串放在t所指的数组中。
例如,当s所指字符串的内容为“ ABCD ”时,t所指数组中的内容为“DCBAABCD ”。
纠正程序中存在的错误,以实现其功能。
程序以文件名存盘。
#in elude <>#in elude <>void sub( char s[], char t[]){int i, d;d=strle n( s );for( i=1; i< d ; i++ ) for( i= 0; i< d ; i++ )t[i]=s[d-1-i];for( i=0; i<d; i++ )t[d+i]=s[i];t[2*d]='/0' ; t[2*d]=' O'}mai n(){char s[100], t[100];printf(” Please en ter stri ng s :");scan f("%s" , s );sub(s,t);printf( " \n The result is : %s \n ", t );}(2)下列程序的功能为:将字符数组中的字符串逆序输出。
纠正程序中存在的错误,以实现其功能。
程序以文件名存盘。
#in clude<>#in clude<>#defi ne ARR_SIZE = 80; void In verse(char str[])#defi ne ARR_SIZE 80 void Inverse(char str[]);main (){ char a[ARR_SIZE];printf("Please enter a string:");gets(a);In verse(char a[]);printf ("The in versed stri ngis:"); puts(a);}void In verse(char str[]){ int len, i = 0, j;char temp;len = strle n(str);for (j=len-1; i<j; i++, j--){ temp = str[i];str[j] = str[i];str[j] = temp; Inverse(a);str[i] = str[j];} }(3)下列程序的功能为:求整数程序以文件名存盘。
n的阶乘。
纠正程序中存在的错误,以实现其功能。
#in clude<>int fun (i nt n){ static int p=1; int p=1; p=p* n;return p;}void mai n(){ int n ,i;int f=0; int f=1;prin tf("i nput member:");scan f("%d",&n);for(i=1;i<=n ;i++)f=f*fun( i); f= fun (i); prin tf("%d!=%d\n", n,f);}2 •程序填空题(1)下列sum()函数的功能是:计算数组x前n个元素之和。
在主函数中,输入任意整数和下标i1、i2的值(设K i1 < i2 < 9),调用sum()函数计算从第i1元素到第素的和,并输出结果。
补充完善程序,以实现其功能。
程序以文件名存盘。
10个i2元#in clude<>int sum( int x[], int n ){int i, s=0;for ( i=0; _i<n _; i++ )s = s+x[i] return s; }void mai n() {int i, i1, i2, result; int x[10];for ( i=0; i<10; i++ )scan f( "%d", &x[i]); scan f( "%d%d", &1, &i2 ); result = sum( x+i1, _i2-i1+1 _ ); prin tf( "Sum=%d\n", result ); }(2)下列程序的功能为:输入一个字符数小于 100的字符串string ,然后将string 所存盘字符串中的每个字符之间加一个空格。
补充完善程序,以实现其功能。
程序以文件名存盘。
#in clude<>{ char strTemp[MAX];#in clude<>int i = 0, j = 0;#define MAX 100 strcpy(strTemp, srcStr); void Insert(char srcStr[]); while ( j<MAX ) strTemp[j]!= '\0'main () { srcStr[i] = strTemp[j];{i++; char stri ng[MAX]; j++scan f("%s",stri ng); srcStr[i]=''; In sert( stri ng );i++;prin tf("%s",stri ng);}}srcStr[i] = '\0';void In sert(char srcStr[]) }(3)下列程序的功能为:输出如下图形,补充完善程序,以实现其功能。
程序以文件 名保存。
#in clude<> void a(i nt i) { int j,k;for(j=1;j<=30-i;j++) pri ntf("%c",''); for(k=1;k<= _2*i-1 _ ;k++) printf( %c ”+48_); prin tf("\n"); or %d ”}void mai n() { int i;for(i=1;i<=7;i++) —a(i)_; for(i=6;i>=1;i--)一a(i) 一;}3.编程题 (1)从键盘任意输入10个整数,用函数编程实现将其中最大数与最小数的位置对换后, 再输出调整后的数组。
程序以文件名存盘。
#include<>#define N 10void EXmaxmin(int a[],int n) // 求最大数和最小数{int i,j=0,k=0,t;int max,min;max=a[0]; min=a[0];for(i=1;i<n;i++)if(max<a[i]) {max=a[i];j=i;}else if(min>a[i]) { min=a[i]; k=i;}t=a[j];a[j]=a[k];a[k]=t;}void main(){int i;int a[N];printf(" 请输入%d 个整数:",N);for(i=0;i<N;i++) scanf("%d",&a[i]);printf(" 调整前的数组元素为:"); for(i=0;i<N;i++) printf("%5d",a[i]);printf("\n");EXmaxmin(a,N);printf(" 调整后的数组元素为:"); for(i=0;i<N;i++)printf("%5d",a[i]);}(2)编写一函数,判断一字符串是否为回文。
所谓“回文”是指顺读和倒读都一样的字符串,如“ deed'和“ level”是回文。
在主函数中对输入的5个字符串统计其中回文的个数。
程序以文件名存盘。
#include <>#include <>int function(char x[]){int i;int y=strlen(x);for(i=0;i<y/2;i++) if(x[i]!=x[l-i-1]) return 0;return 1;}void main(){char s[100];int count=0,i; for(i=1;i<=5;i++){ printf(" 输入第%d 个字符串:",i); scanf("%s",s); if(function(s)){printf("%s 是回文\n",s);count++;} else printf("%s 不是回文\n",s);}printf(" 共有回文%d 个\n",count);}3)编写一函数,实现将一个十进制数转换成二进制数。
程序以文件名存盘。
#include <> int n=0;void tentotwo(int number,int b[ ]){ while(number) {b[n]=number%2; number=number/2; n++;}}void main(void){int inumber;int a[20],i; printf("please input nunber: "); scanf("%d",&inumber);printf("\n"); tentotwo(inumber,a ); for(i=n-1;i>=0;i--) printf("%d",a[i]);printf("\n");}。