本文目录一览:
c语言怎么输出数组第一个数,和由大到小排序,并输出最大的数
别光顾着在学校玩,要搞点学习啊
最好理解的方法:冒泡法排序
从第一个数开始依次对相邻两数进行比较,如次序对则不做任何操作;如次序不对则使这两个数交换位置。第一遍的比较后,最大的数已
放在最后,第二遍只需考虑(N-1-i)个数,以此类推直到第(N-1)遍比较后就可以完成排序。
源程序如下:
#define N 5 //定义要排序的个数N为5个
#include"stdio.h"
========================主程序部分=================================
main() //主程序开始
{
int a[N],i,j,temp; //定义数组a,变量i,j和中间存储变量temp
printf("please input %d numbers\n",N); //输出文本,"请输入N个数字(此处N=5)"
====================输入并接收要排序的数===========================
for(i=0;iN;i++) //循环语句,利用i循环将N个数存入数组a[i]
scanf("%d",a[i]);
=============================排序===================================
for(i=0;iN-1;i++)
//关键语句,要将5个数排序,只需要每轮从数组第一个数开始和相邻的数比较大小,较大的数放在后面,每轮结束后,大的数都会排最后,相互比较4轮,所以要循环N-1次
for(j=0;jN-1-i;j++) //第一轮比较结束后,最大的数已经排在最后,相当于可以少比较一次,所以只需循环N-1-i次,加快运行速度,避免冗余比较
{
if(a[j]a[j+1]) //如果前一个数a[j]大于后一个数a[j+1],则2个数互换位置,否则不作任何操作
{
temp=a[j]; //互换位置:将a[j]的值赋给中间变量temp,此时a[j]还是原来的值
a[j]=a[j+1]; //将较小的数a[j+1]的值赋给a[j],a[j]的值此时为较小的那个数,a[j+1]的值未变,仍然是较大的值
a[j+1]=temp; //将之前中间变量temp存的较大的值赋给a[j+1],位置互换结束
}
}
=======================输出排序结果================================
printf("the array after sort:\n"); //输出文本,"排序后的数组为:"
for(i=0;iN;i++) //循环N次
printf("%5d",a[i]); //输出数组a[i]的值
}
附每轮比较结果:
原始数据为: 5 4 3 2 1
第一轮比较: 4 3 2 1 5
第二轮比较: 3 2 1 4 5
第三轮比较: 2 1 3 4 5
第四轮比较: 1 2 3 4 5
C语言中数组首地址和数组第一个元素的地址有什么区别呢
C语言中数组首地址和数组第一个元素的地址关系如下:
1、它们的地址值是相等的。
2、第1个元素的地址如果是p,则p+1就是第2个元素的地址。
3、数组的首地址如果是p,则p+1就跳过这个数数组而指向这个数组最后一个元素最后一个字节的下一字节。
扩展资料:
数组的创建:在创建数组时,我们必须定义数组的类型和大小,数组的大小不能为0,数组中的元素类型都是相同的。
数组的初始化:在数组创建时,我们也要必须为数组初始化。
一个数组,可以保存一些数据,但是每一个数据不一定有用。或者说,有些时候的数组的数据不一定要输出,所以我们可以再来开一个相同的数组,来标记模拟是否输出数组中的某个元素。
参考资料来源:百度百科-数组
参考资料来源:百度百科-c语言
C语言数组首地址相关问题!!
若a是一维数组名,我们知道*a就是a[0],就是*(arr+0)。因为a是数组的首地址,*a就是取首地址所指元素,就是数组的第一个元素。
同样的道理,a是二维数组名时,*a也是取a的第一个元素,但是此时a所指的元素是一个一维数组,所以,实际上a所指元素是一维数组的首地址。
二维数组a,a是数组地址,指向行;有一个等价关系 a[i]=*(a+i)
a[i]指向列,a[i]又指向行。
你可以将*和理解为相反的操作:
a指向行,*(a+i)指向列,*(*(a+i)+j)等价于a[i][j];
就按a[3][4]这个例子来看:3行4列数组a可以理解为a[0],a[1],a[2]这三个一维数组
a[0][0] a[0][1] a[0][2] a[0][3]//第一行a[0][]
a[1][0] a[1][1] a[1][2] a[1][3]//第二行a[1][]
a[2][0] a[2][1] a[2][2] a[2][3]//第三行a[2][]
(数组含有4个元素)构成的二维数组,*a就是a[0],而a[0]就是第0行的首地址,也就是第一个数组的首地址。*(a+i)就是a[i],就是第i行的首地址。
如果现在定义a是字符型数组,输出*a(也就是第一行的首地址)为0000,再输出*(a+1)就是0004,而不是0001,就可以说明a是指向一维数组的指针。