4.数组与排序

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>//标准的输入输出头文件
#include<stdlib.h>//system函数的头文件

//程序的入口main函数
int main()
{
/*
死循环:
   1、由于编程者考虑不周,造成的死循环,这种要尽量避免,边界敏感性
2、人为设定的死循环,这种一般用于特定的应用,这种应用需要一直执行,不能退出
 (通常设定条件通过break退出)
 while(1)
 {
 }
 for(;;)
 {
 }
*/
/*
输入5个同学的成绩,然后求出他们中的最大值
*/
/*
在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来
这些按序排列的同数据元素的集合,称之为数组
定义数组:类型说明符  数组名[常量表达式]
int iScore[5];
int 就是类型,表明数组中所有成员的数据类型
aiScore 数组名,命名规则同变量,命名规范,会加一个小写的a
5  常量表达式 表示数据元素的个数,也称之为数组的长度。但是计算机是从0开始计算,
  ,所以这里的数据成员:iScore[0],iScore[1],iScore[2],iScore[3],iScore[4]
  (个数是5,成员的下标最大只能到5-1,,下标到5就越界了)
*/
/*
初始化一个数组:
定义区:int aiScore[5] = {0,1,2,3,4};
       1、可以只给部分赋值:当{}的赋值个数少于数组长度的时候,没有赋值的成员,系统自动分配0
  常用,初始化数组成员全部为0,int aiScore[5] = {0};(定义数组一定要初始化,否则容易发生
        未初始化就引用的情况,可能造成程序出错)
   2、可以不给出数组的长度,系统会根据实际赋值的元素个数自动分配数组的长度
   int aiScore[] = { 0, 1, 2, 3, 4 };
引用区:只能一个一个的赋值,不能一次性赋值
*/
/*
一维数组的引用:数组名[下标]
     下标是从0开始递增的整数,最大为数组长度-1
*/
int i,j,aiScore[10] = { 1, 3, 5,6, 9,2,4,0,8,7 };
int iMax = 0,iMin = 0,t=0,iSum=0,iAvg=0,iCnt=0;

/*
aiScore[0] = 0;
aiScore[1] = 1;
aiScore[2] = 2;
aiScore[3] = 3;
aiScore[4] = 4;
for (i = 0; i < 10; i++)//i<数组长度,没有=
{
printf("请输入第%d个数:",i+1);
fflush(stdin);//清除标准输入缓存
scanf("%d", &aiScore[i]);
}*/

//遍历数组元素
iSum = 0;
for (i = 0; i < 10; i++)//i<数组长度,没有=
{
if (i == 0)//第一个值,直接获取
{
iMax = aiScore[i];
iMin = aiScore[i];
}
else
{
//遇到最值,就获取
if (iMax < aiScore[i])
{
iMax = aiScore[i];
}
if (iMin > aiScore[i])
{
iMin = aiScore[i];
}
}
iSum += aiScore[i];//累加
}
iAvg = iSum / 5;//累计值除以数组长度
printf("iMax=%d,iMin=%d,iAvg=%d \n", iMax, iMin,iAvg);

/*
求最值
平均值
排序
选择排序
冒泡排序
*/
printf("选择排序\n");//每次选择出第i轮最大的值放到第i个位置
iCnt = 0;
for (i = 0; i < 10; i++)
{
for (j = i; j < 10; j++)
{
if (aiScore[i] < aiScore[j])
{
iCnt++;
t = aiScore[i];
aiScore[i] = aiScore[j];
aiScore[j] = t;
}
}
}
for (i = 0; i < 10; i++)//i<数组长度,没有=
{
printf("%d ", aiScore[i]);
}
printf("iCnt=%d\n", iCnt);
printf("\n");
/*
printf("冒泡排序\n");//每次选择出第i轮最大的值放到第i个位置
iCnt = 0;
for (i = 0; i < 10-1; i++)//共需进行5-1轮相邻数比较
{
for (j = 0; j < 10 -i-1; j++)//每一轮里面需要比较的相邻组个数
{
//一看到[j-1]一定要验证,j不能小于1,数组有没有越界
//一看到[j+1]一定要验证一下j最大的时候,数组有没有越界
if (aiScore[j] < aiScore[j+1])
{
iCnt++;
t = aiScore[j];
aiScore[j] = aiScore[j+1];
aiScore[j+1] = t;
}
}
}
for (i = 0; i < 10; i++)//i<数组长度,没有=
{
printf("%d ", aiScore[i]);
}
printf("iCnt=%d\n", iCnt);*/

system("pause");

return 0;
}
//程序结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值