写一个循环从数组的第一个元素开始比较,一直比到想要找到的数字找到后把他的下标输出,如果一直到最后的元素都没有找就输出“找不到”,很明显这里可以用一个for循环加一个if判断语句就可以实现。
#include<stdio.h>
int main()
{
int a[]={1,2,3,4,5,6,7,8};
int n;
scanf("%d",&n);
int ge=sizeof(a)/sizeof(a[0]);//数组的第一个元素下标是0,这样可以求出数组中有多少个元素
int i=0;
printf("数组a内的元素有%d个\n",ge);
for (i=0;i<ge;i++)//i从0开始,所以就让i代表数组的下标
{
if(n==a[i])
{
printf("找到了,%d的下标是%d\n",n,i);
break;
}
}
if(i>ge-1)//i从0开始,其实在这个程序中数组中最后一个元素的下标是ge-1
{
printf("找不到\n");
}
return 0;
}
运行结果是:
运行结果正确,但是我们也能看出来,这种方法仅仅适用于数组中元素较少的情况,因为这个for循环是要从第一个元素一直找到n,如果n是最后一个元素,那么就需要循环到最后,效率太低了,是要我们就要找一种更好一点的方法,接下来介绍另一种方法
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
int a[10];
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
// 冒泡排序
for (int i = 0; i < n-1; i++) {
for (int j = 0; j < n-i-1; j++) {
if (a[j] > a[j+1]) {
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
// 输出排序后的结果
for (int i = 0; i < n; i++) {
printf("%d ", a[i]);
}
return 0;
}
《C语言程序设计第四版》第197页的例8-5是一个用冒泡排序排序一维数组的例子,确实缺少了返回值。在例子中,排序后的结果直接打印输出而不需要通过返回值来表达,在实际项目中不会存在类似的问题。如果需要通过函数返回值来传输数据,可以将需要返回的数据作为函数的返回值,或者将需要传递的数据设为函数参数的指针类型,函数修改指针所指向的内存区域,从而达到传递数据的目的。如果以上两种方式都无法使用,可以将需要传递的数据写入共享内存中,在不同进程之间共享数据。
书上印刷有错误,修改如下,供参考: