C语言填空

C语言填空,第1张

#include <stdioh>

int search(int d[],int n,int x)

{

int i,low=0,high=n-1,mid;

int find =0;

while(low<=high && !find){

mid =(low+high)/2;

if(x< d[mid])high = mid-1;

else if(x> d[mid])low = mid+1;

else {i=mid;

find=1;

}

}

if(find==0)return(-1);

else return(i);

}

main()

{

int a[10],x,i,m;

printf("input array a:");

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

scanf("%d",&a[i]);

printf("\ninput x:");

scanf("%d",&x);

m=search(a,10,x);

if(m==-1) printf("N0");

else printf("the index is :%d",m);

}

看你纠结得,C语言中,一个指针代表一个数据块。

无论是元数据(int ,float char ),还是复杂数据(数组,结构体,链表),都可以用指针指向它们。只需区别它们的引用规则即可。

函数也只是一块数据块,所以也可以使用指针指向它,然后引用它。

float search(float (pointer)[4],int n), p;定义了两个指针,类型float。

pointer是指向一块数组数据的指针,但是它是函数的行参名,当调用search时就指向score了。就是这一句:

p=search(score,m);

search返回了一块float数据,p存储了这块数据的指针(数据块起始位置,C语言中,一个指针代表一个数据块)。

随后打印p,printf按float的长度按格式说明(%52)宽度打印结果。

search函数返回某位同学的分数存储位置,p存储了它,然后打印p指向的每门分数,但是第四位同学的成绩肯定是错的了,看看“score[3][4]",只有3个的。

search其实可以这样声明(古老的C编译器可能不行),不要行参名了:

float search(float , int ), p;

想象一下,都市里大楼小屋林立,每栋屋子都有一个名字,我们可以按名字找到它,也可以按坐标找到它。我们可以从某处取物,也可以把孩子送入幼儿园,可以把伤员送入医院。我们也可以建一个啥的,然后它有了名字,坐标,甚至功能。比如XX娱乐中心,坐标(X,Y),可打球,喝酒,XXOO啥的,别人要找它,告诉的哥它名字或坐标即可。

#include <stdioh>

int max(int a,int b,int c)

{

int m=a;

if(b>m)m=b;

if(c>m)m=c;

return m;

}

int main()

{

printf("max=%d\n",max(1,2,3));

return 0;

}

#include<stdioh>

#include<stringh>

int strSearch(char str[], char a)

{

int find=0,i;

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

   if(strcmp(str[i],a)==0)

   {find=1;break;}

return find;

}

int main()

{

char str[]={"search","abc"};

printf("%d\n",strSearch(str, "abc"));

return 0;

}

#include <stdioh>

#define MAXN 10

int search( int list[], int n, int x );

int main()

{

int i, index, n, x;

int a[MAXN];

printf("输入个数:\n");

scanf("%d",&n);

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

scanf("%d", &a[i]);

printf("输入x:\n");

scanf("%d", &x);

index = search( a, n, x );

if( index != -1 )

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

else

printf("Not found\n");  

return 0;

}

int search( int list[], int n, int x ){

int i;

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

if(x==list[i])

return i;

}

return -1;

}

扩展资料:

数组使用规则:

1可以只给部分元素赋初值。当{ }中值的个数少于元素个数时,只给前面部分元素赋值。例如:static int a[10]={0,1,2,3,4};表示只给a[0]~a[4]5个元素赋值,而后5个元素自动赋0值。

2只能给元素逐个赋值,不能给数组整体赋值。例如给十个元素全部赋1值,只能写为:static int a[10]={1,1,1,1,1,1,1,1,1,1};而不能写为:static int a[10]=1;请注意:在C、C#语言中是这样,但并非在所有涉及数组的地方都这样,数据库是从1开始。

3如不给可初始化的数组赋初值,则全部元素均为0值。

4如给全部元素赋值,则在数组说明中, 可以不给出数组元素的个数。例如:static int a[5]={1,2,3,4,5};可写为:static int a[]={1,2,3,4,5};动态赋值可以在程序执行过程中,对数组作动态赋值。这时可用循环语句配合scanf函数逐个对数组元素赋值。

参考资料:

-数组

#include <stdioh>

#include<stdlibh>

int search(int a, int n){

int i,j,k;

int mv,mi,nv,ni;

for (i=0;i<n-1;i++) for (j=i+1;j<n;j++)

if (a[j] < a[i]){k=a[i];a[i]=a[j];a[j]=k;}; //从小到大排队

mv=a[0]; mi=1;

nv=mv,ni=mi;

for (i=0;i<n-1;i++){

if (a[i+1] ==nv) {ni++; } else {

if (ni>=mi){ mi=ni;mv=nv; nv=a[i+1];ni=1;}

}

}

if (ni>=mi){ mi=ni;mv=nv;}

// printf("value=%d times=%d\n",mv,mi); //打印检查

return mv;

}

main (){

int a[]={1,9,8,8,5,1,7,5,1,5};

int n;

int mv;

n = sizeof(a) / sizeof(int);

mv= search(a,n);

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

return 0;

}

为何要用head二重指针?传给search的是主函数中指针head的地址&head,那么search函数中search = head;就使这里的search得到了主函数中head指针的地址,是这种意图吗?是的话接着的search=search->next不就不可理解了?看了代码觉得应该在search中声明一级指针形参,主函数中调用时把head传过去就可以了……另,主函数中的head是为NULL的,传给函数后又在作右值,没有理解这里的意图。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/13492008.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-09-01
下一篇2025-09-01

发表评论

登录后才能评论

评论列表(0条)

    保存