C语言高手来帮忙吧!!编写函数,求一个整型数组的第一个偶数的下标和最后一个偶数的下标。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言高手来帮忙吧!!编写函数,求一个整型数组的第一个偶数的下标和最后一个偶数的下标。相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
void xb(int arr[],int *p1,int *p2,int n)

int i,no1,no2;
p1=arr;p2=&arr[n-1];
for(i=0;i<n;i++,p1++)
if(*p1%2==0)
no1=i;break;
for(i=n-1;i>=0;i--,p2--)
if(*p2%2==0)
no2=i;break;
*p1=no1;
*p2=no2;

main()

int n1,n2;
int array[]=1,2,3,4,5,6,7,8;
xb(array,&n1,&n2,8);
printf("第一个偶数为%d\n最后一个偶数为%d\n",*(array+n1),*(array+n2));

调试不出来,请问问题出在哪里?

#include<stdio.h>
void xb(int arr[],int *p1,int *p2,int n)

int i,no1,no2;
for(i=0;i<n;i++,p1++)
if(arr[i]%2==0)
no1=i;break;
for(i=n-1;i>=0;i--,p2--)
if(arr[i]%2==0)
no2=i;break;
*p1=no1;
*p2=no2;

main()

int n1,n2;
int array[]=1,2,3,4,5,6,7,8;
xb(array,&n1,&n2,8);
printf("第一个偶数为%d\\n最后一个偶数为%d\\n",*(array+n1),*(array+n2));
参考技术A #include<stdio.h>
void xb(int arr[],int *p1,int *p2,int n)

int i,no1,no2;
for(i=0;i<n;i++)
if(arr[i]%2==0)
no1=i;break;
for(i=n-1;i>=0;i--)
if(arr[i]%2==0)
no2=i;break;
*p1=no1;
*p2=no2;

void main()

int n1,n2;
int array[]=1,2,3,4,5,6,7,8;
xb(array,&n1,&n2,8);
printf("第一个偶数为%d\n最后一个偶数为%d\n",*(array+n1),*(array+n2));
本回答被提问者采纳
参考技术B #include <stdio.h>
#include <string.h>

void fun(int arr[], int num)

int i = 0, j = num - 1;

while(arr[i] != '\0')

if(arr[i] % 2 != 0)
i++;
else

printf("第一个偶数下标为%d\n", i);
break;




while(arr[j] != '\0')

if(arr[j] % 2 != 0)
j--;
else

printf("最后一个偶数下标为%d\n", j);
break;






int main()

int array[]=1,2,3,4,5,6,7,8;
fun(array, 8);

return 0;


大块了一个

你程序错误出来,开始是将n1n2的地址给了p1p2,可是又用p1p2指向array的地址,再改变其值,可这于n1n2无关了。追问

用指针来代替下标的方法处理的话,怎么编写呢

追答

很简单,printf放在子函数去,没必要传来传去的。

参考技术C *(array+n1),*(array+n2));
有错。
举个例子:a[n]等价于*(a+d*n)(d表示字节长度)
参考技术D 你要求的是下标输出n1 和n2

求 高手 C语言 数组和数组之间能直接赋值吗

比如 char a[100]="asdsadsa",b[100];
可以把数组a中的字符串直接赋值给数组b吗

楼主,你好

数组之间是不可以直接赋值的,要直接赋值的话,也只能是利用循环,一个一个的赋值,不过你所要实现的可以通过其他方法来实现,比如取地址运算,把数组a的首地址赋给B数组,不过这要通过指针来实现,还有一种简单点的方法就是拷贝运算,你可以利用c语言库里面已经定义好的函数直接实现你所要实现的功能,实现方法如下:

#include <string.h>
#include <stdio.h>
void main()

char a[100]="asdsadsa",b[100];
strcpy(b,a);
printf("%s\n",b);


希望可以帮到你
参考技术A 不能直接把数组a中的字符串赋值给数组b,要用循环在定义后,一个一个元素赋值。
在C/C++中,普通数组只是分配在连续地址上的一段相同类型的变量组成的,而不是一个变量。像a[n]并不是一个变量,而是通过指向第一个值的指针来操作的。数组和指针有着很密切的联系。可以认为数组操作是指针操作的另一种写法。因此像数组整体赋值这类操作是没有意义的,因为它们不是一个整体。
参考技术B 不能。但是用个函数直接拷贝下就可以了

strcpy(b,a)
就搞定了。

测试结果“
a=asdsadsa
b=asdsadsa
请按任意键继续. . .

代码:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
main()

char a[100]="asdsadsa",b[100];
printf("a=%s\n",a);
strcpy(b,a);
printf("b=%s\n",b);
system("pause");
参考技术C 你难道是想 a=b??
首先你要明白:
数组名a,b代表指针常量,所以说赋值号左边必须是一个变量
a=b;
根本就是错误的
你可以通过以下两种方法赋值:
1.循环赋值
for(i=0;i<strlen(a);++i)//还可以用for(i=0;a[i]!='\0';++i) 但是如果你在初始化时强制的把'\0'去掉就 b[i]=a[i]; //不能用这种方法,另 unsigned int strlen(char * str) 统计字符串中有效字符

//的个数(不包括'\0') 如上例: strlen(a)=8
2.通过strcpy(字符串拷贝)函数
strcpy(b,a);
/*
函数原型:char * strcpy(char *str1,char *str2)
函数作用:把str2指向的字符串复制到str1中去
返回值为str1(str1指向的字符串的起始地址)

strlen与strcpy函数使用时都需要头文件#include<string.h>

*/
参考技术D 您好,在c语言和c++语言中数组名就是一个指针地址,所以如果要赋值的话,如将b赋值给a,就要将b的指针地址赋值给a这个指针变量上:
```
void test4()

int a[2][2] = 1,2,3,4 ;
int *b = a;
printf("out:%d", *b);

```

以上是关于C语言高手来帮忙吧!!编写函数,求一个整型数组的第一个偶数的下标和最后一个偶数的下标。的主要内容,如果未能解决你的问题,请参考以下文章

求C语言高手帮忙。

c语言怎么求当前电脑能表示的最大整型数?

c语言如何将字符串转为二进制的整型然后保存到整型数组里?

用C语言写一个程序实现以下功能

请C语言版数据结构高手帮帮忙!

c语言编程题 利用指针编写函数用选择法对整数数组排序(降序)。 求大神帮忙啊!!!谢谢