分享

函数进阶典型程序

 巨之说 2022-05-11 发布于山东省

1. 编写交换两个变量值的函数,并调用该函数交换主函数中两个变量的值(不能使用全局变量传递数据)。

voidswap(int *p1,int *p2)
{int t;
 t=*p1;
 *p1=*p2;
 *p2=t;
}
main()
{int a,b;
 scanf("%d%d",&a,&b);
 swap(&a,&b);
 printf("a=%d,b=%d\n",a,b);
}

2. 编写交换两个变量值的函数,并调用该函数对三个数按升序排序(不能使用全局变量传递数据)。

voidswap(float *p,float *q)
{float t;
 t=*p;
 *p=*q;
 *q=t;
}
main()
{float a,b,c;
 scanf("%f%f%f",&a,&b,&c);
 if(a>b) swap(&a,&b);
 if(a>c) swap(&a,&c); /*不能写作else if(a>c)*/
 if(b>c) swap(&b,&c); /*不能写作else if(b>c)*/
 printf("%f,%f,%f\n",a,b,c);
}

3. 编写求两个数中最大数的函数,并调用该函数求出主函数中两个数中的最大数(不能使用全局变量或return语句传递数据)。

void max(int x,int y,int *p)
{int m;
 if(x>y)
  m=x;
 else
  m=y;
 *p=m;
}
main()
{int a,b,r;
 scanf("%d%d",&a,&b);
 max(a,b,&r);
 printf("r=%d\n",r);
}

4. 编写求三个数中最大数的函数,并调用该函数求出主函数中三个数中的最大数(不能使用全局变量或return语句传递数据)。

void max(int x,int y,int z,int*p)
{int m;
 if(x>y)
   m=x;
 else
   m=y;
 if(z>m)
   m=z;
 *p=m;
}
main()
{int a,b,c,r;
 scanf("%d%d%d",&a,&b,&c);
 max(a,b,c,&r);
 printf("r=%d\n",r);
}

5. 编写求n个数平均值的函数,并调用此函数求从键盘输入的100个数的平均值。

float ave(float a[],int n)

{float s=0,p;

 int i;

 for(i=0;i<n;i++)

 {s=s+a[i];}

 p=s/n;

 return(p);

}

main()

{float x[100],p;

 int i;

 for(i=0;i<100;i++)

 {scanf("%f",&x[i]);}

 p=ave(x,100);

 printf("p=%f\n",p);

}

6. 编写求n个数平均值的函数,并调用此函数求从键盘输入的100个数的平均值(要求用指针访问数组元素)。

float ave(float *p,int n)
{float s=0,r;
 int i;
 for(i=0;i<n;i++)
  {s=s+*(p+i);}
 r=s/n;
 return(r);
}
main()
{float a[100],pj;
 int i;
 for(i=0;i<n;i++)
  {scanf("%f",a+i);}
 pj=ave(a,100);
 printf("pj=%f\n",pj);
}

7. 编写求n个数平均值的函数,并调用此函数找出从键盘输入的100个成绩中所有低于平均分的成绩。

float ave(float a[],int n)

{float s=0,p;

 int i;

 for(i=0;i<n;i++)

 {s=s+a[i];}

 p=s/n;

 return(p);

}

main()

{float a[100],p;

 int i;

 for(i=0;i<100;i++)

 {scanf("%f",&a[i]);}

 p=ave(a,100);

 for(i=0;i<100;i++)

 {if(a[i]<p)

  printf("%f,",a[i]);

 }

}

8. 编写求字符串长度的函数,并调用此函数求一个字符串的长度。

int slen(char a[])

{int n=0;

 while(a[n]!='\0')

  n++;

 return(n);

}

main()

{char a[80];

 int n;

 gets(a);

 n=slen(a);

 printf("n=%d\n",n);

}

9. 编写字符串复制的函数,并调用此函数复制一个字符串。

void scopy(char b[],char a[])

{int i;

 for(i=0;a[i]!='\0';i++)

 b[i]=a[i];    /*未复制'\0'*/

 b[i]='\0';

}

main()

{char a[80],b[80];

 gets(a);

 scopy(b,a);

 puts(b);

}

10. 编写字符串复制的函数(要求用指针实现),并调用此函数复制一个字符串。

void scopy(char *b,char *a)
{while(*a!='\0')
  {*b=*a;    /*未复制'\0'*/
    a++;b++;
   }
  *b='\0';
}
main()
{char a[80],b[80];
  gets(a);
  scopy(b,a);
  puts(b);
}

11. 编写连接两个字符串的函数,并调用此函数连接两个字符串。

void scat(char a[],char b[])

{int i,n1,n2;

 n1=strlen(a);

 n2=strlen(b);

 for(i=0;i<=n2;i++)

  a[n1+i]=b[i];    /*已复制'\0'*/

 }

main()

{char a[200],b[100];

 gets(a);

 gets(b);

 scat(a,b);

 puts(a);

}

12. 编写连接两个字符串的函数(要求用指针实现),并调用此函数连接两个字符串。

void scat(char *a,char *b)
{while(*a!='\0')
   a++;
 while(*b!='\0')
   {*a=*b;    /*未复制'\0'*/
    a++;b++;
   }
  *a='\0';
}
main()
{char a[80],b[80];
  gets(a);
  gets(b);
  scat(a,b);
  puts(a);
}

13. 编写比较两个字符串大小的函数,并调用此函数比较两个字符串的大小。

int scomp(char a[],char b[])

{int i,r;

 i=0;

 while(a[i]!='\0'&&b[i]!='\0')  /*若遇到'\0',则停止比较*/

 {if(a[i]==b[i])

   i++;       /*若对应字符相等,则继续比较下一个*/

  else

  break;     /*若对应字符不相等,则停止比较*/

 }

 r=a[i]-b[i];  /*对应字符ASCII码之差,即比较结果*/

 return(r);

}

main()

{char a[80],b[80];

 int d;

 gets(a);

 gets(b);

 d=scomp(a,b);

 printf("d=%d\n",d);

}

14. 编写将字符数组中的字符串前后倒置的函数,并调用此函数将一个字符串前后倒置。

void srev(char a[])

{char t;

 int n,i,j;

 n=strlen(a);

 i=0;j=n-1;

 while(i<j)

 {t=a[i];a[i]=a[j];a[j]=t; /*交换对应元素的值*/

  i++;j--;

 }

}

main()

{char a[80];

 gets(a);

 srev(a)

 puts(a);

}

15. 编写将一个字符串前后倒置的函数(要求用指针实现),并调用此函数将一个字符串前后倒置。

void srev(char *p)
{char t,*q;
 int n;
 n=strlen(p);
 q=p+n-1;
 while(p<q)
 {t=*p;*p=*q;*q=t; /*交换对应元素的值*/
  p++;q--;
 }
}
main()
{char a[80];
 gets(a);
 srev(a)
 puts(a);
}

16. 编写判断回文的函数,并调用此函数判定一个字符串是否是回文。

int isR(char a[])

{int i,j n;

 n=strlen(a);

 i=0;

 j=n-1;

 while(i<j)

 {if(a[i]==a[j])

  {i++;j--;}    /*若对应字符相等,则继续比较*/

  else

  break;        /*否则中止比较*/

 }

 if(i>=j)

 return(1);     /*若所有对应字符都相等,则是回文*/

 else

  return(0);

}

main()

{char s[100];

 gets(s);

 if(isR(s)!=0)

 printf("yes.\n");

 else

 printf("no.\n");

}

17. 编写判断汉字回文的函数,并调用此函数判定一个汉字字符串是否是回文。

int isR(char a[])

{int i,j n;

 n=strlen(a);

 i=0;

 j=n-2;

 while(i<j)

 {if(a[i]==a[j]&&a[i+1]==a[j+1])

  {i+=2;j-=2;}

  else

   break;

 }

 if(i>=j)

  return(1);

 else

  return(0);

}

main()

{char s[100];

 gets(s);

 if(isR(s)!=0)

 printf("yes.\n");

 else

 printf("no.\n");

}

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多