重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
#includestdio.h
创新互联是一家专业提供铁东企业网站建设,专注与成都做网站、成都网站建设、H5高端网站建设、小程序制作等业务。10年已为铁东众多企业、政府机构等服务。创新互联专业的建站公司优惠进行中。
#define N 10
void showarr(int *a,int n) { int i; for ( i=0;in;i++ ) printf("%d ",a[i]); printf("\n"); }
void input(int *a,int n) { int i; for ( i=0;iN;i++ ) scanf("%d",a+i); }
void sort(int *a,int n)
{ int i,j,k,m;
for ( i=0;in-1;i++ )
{ k=a[i]; m=i; for ( j=i+1;jn;j++ ) if ( ka[j] ) { k=a[j]; m=j; }
if ( m!=i ) { a[m]=a[i]; a[i]=k; }
}
}
int search(int *a,int n,int x)
{ int i,j,k,ret;
i=0; j=n-1; ret=-1; if ( xa[i] || xa[j] ) i=j; if ( a[i]==x ) ret=i; else if ( a[j]==x ) ret=j;
while ( j-i1 ret0 )
{ k=i+j; k/=2; if ( a[k]x ) i=k; else j=k;
if ( a[i]==x ) ret=i; else if ( a[j]==x ) ret=j;
}
return ret;
}
void main()
{ int a[N],n,m;
printf("请输入%d个整数: ",N); input(a,N);
printf("原始数组: "); showarr(a,N);
sort(a,N);
printf("数组排序: "); showarr(a,N);
printf("\n折半查找\n请输入要查找的数字: "); scanf("%d",n);
m=search(a,N,n); if ( m=0 ) printf("%d是第%d个数。\n",n,m+1); else printf("%d不在数组中。\n",n);
}
通过数组或者指针把主函数main()中的数据传到函数中,程序改动如下,已经在win-tc和Dev-c++下调试通过。
#include "stdio.h"
void show (int s[] ,int n) /* x[]的地址这里已经传给了s[] */
{
int *p ;
p=s;/* s的地址给了p,p就指向了x[] */
for(p=s;ps+n;p++)/* 这里已经遍历了数组各元素 */
{if(*p%2==0)
*p=*p+*p;
else
*p=*p+*p+*p;
}
}
int main( )
{int num;
int x[]={11,12,13,14,15,16,17,18},*z;
num=sizeof(x)/sizeof(x[0]);/* 你的是8个数吧 */
show(x,num); /*把num改成8也可以,一个意思*/
for (z=x;zx+num;z++)
printf ("%d ",*z);
printf ("\n");
system("pause");
}
输出结果:
x=200,y=100↘
x=100,y=200↘
首先一个:main函数中的变量x,y和showvalue函数中x,y虽然是用同样的字母表示,但在不同的函数段内,是不同的变量,现在把showvalue中的x,y记为x1,y1以区别。
调用函数时,先作操作:x1=y;y1=x;然后执行showvalue函数中的内容,再返回main执行后面的内容。
所以,执行showvalue里面的printf("x=%d,y=%d\n",x,y)也即printf("x=%d,y=%d\n",x1,y1),输出x=200,y=100↘
而执行后面的x=400;y=800; 实际上是执行x1=400;y1=800; main里面的变x,y并不改变,所以后面还是输出x=100,y=200↘
还有问题吗?
这是一个静态局部变量,作用相当于全局变量,(但作用范围只限于原函数)第一次调用应该输出i值,但因未赋值,默认为0,但生存期应该为整个程序,所以我选a,c,多选选ac啦,关于赋值问题,看