实验7 函数程序设计
一、实验目的
1、掌握函数定义的方法。
2、掌握函数实参与形参的传递方式。
3、掌握函数的嵌套调用和递归调用的方法。
4、了解全局变量和局部变量、动态变量、静态变量的概念和使用方法。
二、实验内容 1.改错题
(1)下列sub函数的功能为:将s所指字符串的反序和正序进行连接形成一个新串放在t所指的数组中。例如,当s所指字符串的内容为“ABCD”时,t所指数组中的内容为“DCBAABCD”。纠正程序中存在的错误,以实现其功能。程序以文件名sy7_1.c保存。 #include #include void sub(char s[],char t[]) {
int i,d;
d=strlen(s);
for(i=1;i
t[i]=s[d-1-i];
for(i=0;i
t[2*d]=’\\0’; } main() { char s[100],t[100]; printf(“Please enter string s:”); scanf(“%s”,s); sub(s,t); printf(“\\nThe result is:%s\\n”,t); } (2)下列程序的功能为:将字符数组中的字符串逆序输出。纠正程序中存在的错误,以实现其功能。程序以文件名sy7_2.c保存。 #include #include #define ARR_SIZE=80; void Inverse(char str[]) main() {
char a[ARR_SIZE]; printf(“Please enter a string:”); gets(a); Inverse(char a[]); printf(“The inversed string is :”); puts(a); } void Inverse(char str[]) {
int len,i=0,j;
char temp;
len=strlen(str);
for(j=len-1;i
{
temp=str[i];
str[j]=str[i];
str[j]=temp;
} }
(3)下列程序的功能为:求整数n的阶乘。纠正程序中存在的错误,以实现其功能。程序以文件名sy7_3.c保存。 #include int fun(int n) {
static int p=1;
p=p*n;
return p; } void main() {
int n,i;
int f=0;
printf(“input member:”);
scanf(“%d”,&n);
for(i=1;i
f=f*fun(i); printf(“%d!=%d\\n”,n,f); }
2.程序填空题
(1)下列sum()函数的功能是:计算数组x前n个元素之和。在主函数中,输入10个任意整数和下标i
1、i2的值(设1 int sum(int x[],int n) {
int i,s=0;
for (i=0;______________;i++)
s=____________;
return s; } void main() {
int i,i1,i2,result;
int x[10];
for(i=0;i
scanf(“%d”,&x[i]);
scanf(“%d%d”,&i1,&i2);
result=sum(x+i1,___________); printf(“Sum=%d\\n”,result); }
(2)以下程序的功能是:输入一个字符数小于100的字符串string,然后将string所保存字符串中的每个字符之间加一个空格。补充完善程序,以实现其功能。程序以文件名sy7_5.c保存。
#include ______________________ #define MAX 100 void Insert(char s[]); main() {
char string[MAX];
scanf(“%s”,string);
Insert(_______________);
printf(“%s”,string); } void Insert(char srcStr[]) {
char strTemp[MAX];
int i=0,j=0;
strcpy(strTemp,srcStr);
while(________________________)
{
srcStr[i]=strTemp[j];
i++;
_______________________
srcStr[i]=’ ‘;
i++;
}
srcStr[i]=’\\0’; } (3)下列程序的功能为:输出如下图所示的图形。补充完善程序,以实现其功能。程序以文件名sy7_6.c保存。 #include void a(int i) {
int j,k;
for(j=1;j
for(k=1;k
printf(“\\n”); } void main() {
int i;
for (i=1;i
for (i=6;i>=1;i--) _____________; }
222
33333
4444444
555555555
66666666666
7777777777777
66666666666
555555555
4444444
33333
222
1
3.编程题
(1)从键盘输入10个数,用函数编程实现将其中最大数与最小数的位置对换后,再输出调整后的数组。程序以文件名sy7_7.c保存。
(2)编写一函数,判断一字符串是否为回文。所谓“回文”是指顺读和倒读都一样的字符串,如“deed”和“level”是回文。在主函数中对输入的5个字符串统计其中回文的个数。程序以文件名sy7_8.c保存。
(3)编写一函数,实现将一个十进制转换成二进制数。程序以文件名sy7_9.c保存。