实验十一函数(2 班级 姓名 指导老师 成绩 第 机房 号机器时间: 实验目的:1.进一步掌握函数的定义和调用 2.掌握函数的嵌套调用 3.了解函数的递归调用 4.重点掌握数组作函数参数 实验要求:每次实验前,学生要先预习实验内容,写出分析结果或程序,经实验指导 老师检查后,上机运行、调试程序,得出最终正确结果 实验内容 读程序 要求:读懂程序,写出分析结果;上机运行程序,得到运行结果,比较之。 include <stdio. h f(int b[], int m, int n) for (i=m; i<n; i=i+2) s=s+b[i] return si main () intx,a【]={1,2,3,4,5,6,7,8,9}; x=f(a,3,7) printf("sd\n",x)i 分析结果 运行结果 2. include <stdio. h> char char(char ch) if(ch>='A'&&ch<='Z) ch=c return ch main ()
实验十一 函数(2) 班级______________姓名___________指导老师_____________成绩___________ 第_____________机房___________号机器 时间:________________________ 实验目的:1. 进一步掌握函数的定义和调用。 2. 掌握函数的嵌套调用。 3. 了解函数的递归调用。 4. 重点掌握数组作函数参数。 实验要求:每次实验前,学生要先预习实验内容,写出分析结果或程序,经实验指导 老师检查后,上机运行、调试程序,得出最终正确结果。 实 验 内 容 一、读程序 要求:读懂程序,写出分析结果;上机运行程序,得到运行结果,比较之。 1. # include <stdio.h> f(int b[ ],int m,int n) { int i,s=0; for(i=m;i<n;i=i+2) s=s+b[i]; return s; } main() { int x,a[ ]={1,2,3,4,5,6,7,8,9}; x=f(a,3,7); printf("%d\n",x); } 分析结果 运行结果 2. # include <stdio.h> char cchar(char ch) { if(ch>=’A’&&ch<=‘Z') ch=ch-‘A'+‘a'; return ch; } main()
第一部分c语言程序设计上机指导 char s[ ]="ABC+abc=defDEF " i le( s[il s[i]= char(s【i]); printf("旨s\n",s) 分析结果 #include <stdio. h> funcl(int i) unc2(int i) char st[]="hello, friend! funcl(int i) printf("s",st【i]) if(i<3){i+=2;func2(1);} func2(int i) printf( (i<3){i+=2;func1(1);} 分析结果 #include <stdio. h> [ int n if(a[i]<a[j]) I t=a[i]; a[i]=a[j] i a[jl=t i 1 int aa[10]={1,2,3,4,5,6,7,8,9,10},i (i=0; i<10; i++) printf("d ," aa [i]) 分析结果 行结果
第一部分 C 语言程序设计上机指导 ·59· ·59· { int i=0; char s[ ]="ABC+abc=defDEF"; while( s[i] ) { s[i]=cchar(s[i]); i++; } printf("%s\n",s); } 分析结果 运行结果 3. #include <stdio.h> func1(int i); func2(int i); char st[]="hello,friend!"; func1(int i) { printf("%s",st[i]); if(i<3){i+=2;func2(i);} } func2(int i) { printf("%s",st[i]); if(i<3){i+=2;func1(i);} } main() { int i=0; func1(i); printf("\n");} 分析结果 运行结果 4. #include <stdio.h> sort(int a[ ],int n) { int i , j , t ; for( i=0 ;i<n-1 ; i++ ) for( j=i+1; j<n ; j++) if(a[i]<a[j]) { t=a[i]; a[i]=a[j] ; a[j]=t ; } } main() { int aa[10]={1,2,3,4,5,6,7,8,9,10},i; sort(&aa[3],5); for(i=0;i<10;i++) printf("%d ,",aa[i]); printf('\n'); } 分析结果 运行结果
60 C语言程序设计上机指导与同步训练 #include <stdio. h> I switch(g case o: return case 1 i long int k printf("\nk= d\n",k) 运行结果 k=34 6. #include <stdio. h> int f(int i int i,j, s=0 if(i>2)i=3-j; e turn main( inta[4][4]={{1,2,3,4},{0,2,4,5},{3,6,9,12},{3,2,1,0}} printf("d\n”,f(a) 、完成程序 要求:根据要求,分析给出的上下语句,填写程序 1.以下程序调用 findmax函数返回数组中的最大值,在下划线处应填入正确内容。 lude <stdio. h> findmax(int a[5] int n) int s for(i=1,s=a[0];i<n;i++)
·60· C 语言程序设计上机指导与同步训练 ·60· 5. #include <stdio.h> long f( int g) { switch(g) { case 0:return 0; case 1: case 2: return 1; } return ( f(g-1)+ f(g-2)); } main ( ) { long int k; k = f(9); printf("\nk= %d\n",k); } 分析结果 运行结果 k=34 6. #include <stdio.h> int f(int b[ ][4]) { int i,j,s=0; for(j=0;j<4;j++) { i=j; if(i>2) i=3-j; s+=b[i][j]; } return s; } main( ) { int a[4][4]={{1,2,3,4},{0,2,4,5},{3,6,9,12},{3,2,1,0}}; printf(“%d\n”,f(a) ); } 分析结果 运行结果 二、完成程序 要求:根据要求,分析给出的上下语句,填写程序。 1. 以下程序调用 findmax 函数返回数组中的最大值,在下划线处应填入正确内容。 # include <stdio.h> findmax(int a[5],int n) { int i; int s ; for(i=1 ,s=a[0]; i<n; i++) if ( ) s = a[i];
第一部分c语言程序设计上机指导 return(a)i1 main() intx[5]={12,21,13,6,18} printf("gd\n", findmax(x, 5)) 2. mystrlen函数的功能是计算字符串的长度,并作为函数值返回。请填空,并配写主调 函数 #include <stdio. h> t mystrlen(char str[ ]) for(i=0 !='\0';i++); return( 3.以下程序中函数 reverse的功能是将a所指数组中的内容进行逆置,请填入正确 1容 #include <stdio. h> reverse(int a[ ] int n) I int i,ti or(i=0;i<n/2;i++) [t=a[i] main() intb[10]={1,2,3,4,5,6,7,8,9,10};inti,s=0 everse(b, 10) printf("\n") for(i=0;i<10;i++) printf("gd ,", b[]) for(i=6;i<10;i++)s+=b[i]; printf("\n%d\n", s) 4.通过函数求fx)的累加和,其中f(x)=x*x+1 #include <stdio. h> int SunFun(int n)i ont F( int x) main() intf("The 号dln”, SunFun(10)) SunFun(int n)
第一部分 C 语言程序设计上机指导 ·61· ·61· return(a); } main() { int x[5]={12,21,13,6,18}; printf("%d\n",findmax(x,5)); } 2. mystrlen 函数的功能是计算字符串的长度,并作为函数值返回。请填空,并配写主调 函数。 #include <stdio.h> int mystrlen(char str[ ]) { int i; for(i=0; ____________!=‘\0';i++); return(_______); } main ( ) { _______________; ____________________; _______________________; } 3. 以下程序中函数 reverse 的功能是将 a 所指数组中的内容进行逆置,请填入正确 内容。 #include <stdio.h> reverse(int a[ ],int n) { int i,t; for(i=0;i<n/2;i++) { t=a[i];______________;_______________;} } main() { int b[10]={1,2,3,4,5,6,7,8,9,10}; int i,s=0; reverse(b,10); printf("\n"); for(i=0;i<10;i++) printf("%d ,",b[i]); for(i=6;i<10;i++) s+=b[i]; printf("\n%d\n",s); } 4. 通过函数求 f(x)的累加和,其中 f(x)=x*x+1。 #include <stdio.h> int SunFun(int n) ; ont F( int x) ; main() { printf("The sum=%d\n",SunFun(10)); } SunFun(int n) {
C语言程序设计上机指导与同步训练 int x,S=O for(x=li x<=n; x++) S+=F( return si 三、调试程序 要求:分析下列程序是否正确,如有错,错在哪儿?应如何改正?如正确,运行结果 如何?上机调试之。 1.以下程序是将字符串中所有指定字母由小写转换成大写字母 ss(char s[ ] char t) i int i=0; while(s【i]) if(s[i]=t)s[i]=t-"a'+'A'; I char strl[100]-abcddfefdbd",c='d printf("s\n”,stx1) 正确 运行结果 错误 错误所在 2.函数 sstrcmp(的功能是对两个字符串进行比较。当s数组中字符串和t数组中字符 串相等时,返回值为0;当s数组中字符串大于t数组中字符串时,返回值大于0:当s数 组中字符串小于t数组中字符串时,返回值小于0(功能等同于库函数 strcmp0)。 #include int sstrcmp(char s[ ], char t[]) whi1e(s[i]&&t[]&&s[i]==t[]); return s[i]-t[j main() char s1[50],s2[50]; scanf("Bs%s",sl, s2) x=sstrcmp(sl, s2) printf("\n器d\n",x);
·62· C 语言程序设计上机指导与同步训练 ·62· int x,s=0; for(x=1;x<=n;x++) s+=F( ____________ ); return s; } F( int x) { return (___________);} 三、调试程序 要求:分析下列程序是否正确,如有错,错在哪儿?应如何改正?如正确,运行结果 如何?上机调试之。 1. 以下程序是将字符串中所有指定字母由小写转换成大写字母。 ss(char s[ ],char t) { int i=0; while(s[i]) { if(s[i]==t) s[i]=t-‘a’+‘A’; i++; } } main() { char str1[100]=“abcddfefdbd”,c=‘d’; ss(str1[0],c); printf(“%s\n”,str1); } 正确 运行结果: 错误 错误所在: 应改为: 2. 函数 sstrcmp()的功能是对两个字符串进行比较。当 s 数组中字符串和 t 数组中字符 串相等时,返回值为 0;当 s 数组中字符串大于 t 数组中字符串时,返回值大于 0;当 s 数 组中字符串小于 t 数组中字符串时,返回值小于 0(功能等同于库函数 strcmp())。 #include <stdio.h> int sstrcmp(char s[ ],char t[]) { int i=0 , j=0 ; while(s[i]&&t[j]&& s[i]== t[j] ) ; return s[i]-t[j]; } main() { int x; char s1[50],s2[50]; scanf("%s%s",s1,s2); x= sstrcmp(s1,s2); printf("\n%d\n",x); }