首页 理论教育 C语言程序设计示例-一维数组

C语言程序设计示例-一维数组

时间:2023-10-29 理论教育 版权反馈
【摘要】:找出一组整数中的最大数。程序内容如下:1#include<stdio.h>2int main()3{4int n,i,x[100],max;5printf;6scanf;7for8{9printf;10scanf;11}12max=x[1];13for14if15max=x[i];16printf;17return 0;18}程序结果如图5.4所示:图5.4例5.4程序结果图用变量n表示数据个数,用一维数组x[i](i=1,2,…

C语言程序设计示例-一维数组

【例5.4】找出一组整数中的最大数。

程序内容如下:

1 #include<stdio.h>

2 int main()

3 {

4  int n,i,x[100],max;

5  printf("n=");

6  scanf("%d",&n);

7  for(i=1;i<=n;i++)

8  {

9   printf("No.%d:",i);

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

11  }

12  max=x[1];

13  for(i=2;i<=n;i++)

14   if(max<x[i])

15    max=x[i];

16  printf("max=%d\n",max);

17  return 0;

18 }

程序结果如图5.4所示:

图5.4 例5.4程序结果图

【例题中关键问题说明】

变量n表示数据个数,用一维数组x[i](i=1,2,…,n)表示这一组数,用max表示最大数。传统流程图如图5.5所示。

程序中,在输入数据时应尽可能地多给出一些提示。根据本例程序,请读者考虑下列问题的程序设计:

(1)找出一组整数中的最大数及其位置。

(2)找出一组整数中的最大数、最小数及其位置。

图5.5 例5.4的传统流程图

【例5.5】采用“冒泡法”对10个整数按由小到大的顺序排序。

程序内容如下:

1 #include<stdio.h>

2 #define N 10

3 int main()

4 {

5  int a[N+1],i,j,t;

6  for(i=1;i<=N;i++)

7  {

8   printf("No.%d:",i);

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

10  }

11  for(i=1;i<=N-1;i++)

12   for(j=1;j<=N-i;j++)

13    if(a[j]>a[j+1])

14    {

15     t=a[j];a[j]=a[j+1];a[j+1]=t;

16    }

17  for(i=1;i<=N;i++)

18  printf("%d",a[i]);

19  return 0;

20 }

程序结果如图5.6所示:

图5.6 例5.5程序结果图(www.xing528.com)

【例题中关键问题说明】

(1)用数组a[i](i=0,1,…,9)表示这10个数,i、j、t作中间变量。

(2)排序过程:①比较第一个数与第二个数,若a[0]>a[1],则交换;然后比较第二个数与第三个数;以此类推,直至第n-1个数和第n个数比较完成为止——第一趟冒泡排序,结果最大的数被安置在最后一个元素位置上。②对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置在第n-1个元素位置上。③重复上述过程,共经过n-1趟冒泡排序后,排序结束。

【例5.6】采用“选择法”对10个整数按由小到大的顺序排序。

程序内容如下:

1 #define N 10

2 #include<stdio.h>

3 int main()

4 {

5  int a[N+1],i,j,min,l;

6  for(i=1;i<=N;i++)

7  {

8   printf("No.%d:",i);

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

10  }

11  for(i=1;i<=N-1;i++)

12  {

13   min=a[i];l=i;

14   for(j=i+1;j<=N;j++)

15    if(min>a[j])

16    {

17     min=a[j];

18     l=j;

19    }

20   a[l]=a[i];

21   a[i]=min;

22  }

23  for(i=1;i<=N;i++)

24  printf("No.%d:%d\n",i,a[i]);

25  return 0;

26 }

程序结果如图5.7所示:

图5.7 例5.6程序结果图

【例题中关键问题说明】

(1)排序过程:①从第1个数开始到第10个数找出最小数min,然后与第1个数交换;②从第2个数开始到第10个数找出最小数min,然后与第2个数交换;以此类推,直到从第9个数开始到第10个数找出最小数min,然后与第9个数交换;共查找(10-1)次最小数并交换,排序结束。

(2)程序中第二个for循环语句是一个双重循环结构,它是该程序的核心,该程序段较难理解,请仔细阅读。

另外,程序中的

for(j=i+1;j<=N;j++)

 if(min>a[j])

 {

min=a[j];

l=j;

 }

可改为:

for(j=i+1;j<=N;j++)

 min>a[j]?min=a[l=j]:1;

这里用条件表达式代替了语句,请仔细分析、思考。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈