实验六 数 组

u    实验目的

1、掌握一维数组和多维数组的定义

2、掌握对数组的引用规则

3、理解多维数组的特殊性

4、掌握字符数组和字符串

u    预习内容

见教材第七章

u    实验重点

1、掌握一维数组和二维数组的定义、赋值和输入输出的方法。

2、数组和字符串函数的使用。

u    实验难点

掌握与数组有关的算法,特别是排序算法。

u    实验内容

编程序并上机调试运行:

1、用冒泡法对10个整数排序。10个整数用scanf函数输入。

2、将两个字符串连接起来,不要用strcat函数。

u    参考例题

【例】选择法排序

思想:对n个数据对象排序

1i置为0,表示当前操作对象的范围是[i,n-1]

2、数据范围[i,n-1]中确定最大值所在下标p

3、使最大值与当前操作范围的第一个数据交换

4i++,使i自增1,从而操作数据范围缩小1

5、如果i小于n-1,则转入第二步

main()

{

  int i,j,p,s,a[10];

  printf("\n input 10 numbers:\n");

  for(i=0;i<10;i++)

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

  for(i=0;i<10;i++)

{

      p=i;

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

  if(a[p]<a[j])  p=j;

      if(i!=p)

        {s=a[i];

         a[i]=a[p];

         a[p]=s; }

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

  }

}

【例】起泡法排序

起泡法的基本思想:通过相邻两个数之间的比较和交换,使排序码(数值)较小的数逐渐从底部移向顶部,排序码较大的数逐渐从顶部移向底部。就像水底的气泡一样逐渐向上冒,故而得名。

由A[n]~A[1]组成的n个数据,进行冒泡排序的过程可以描述为:

(1)首先将相邻的A[n]与A[n-1]进行比较,如果A[n]的值小于A[n-1]的值,则交换两者的位置,使较小的上浮,较大的下沉;接着比较A[n-1]与A[n-2],同样使小的上浮,大的下沉。依此类推,直到比较完A[2]和A[1]后,A[1]为具有最小排序码(数值)的元素,称第一趟排序结束。

(2)然后在A[n]~A[2]区间内,进行第二趟排序,使剩余元素中排序码最小的元素上浮到A[2];重复进行n-1趟后,整个排序过程结束。

/*功能:从键盘上任意输入n个整数,用起泡法按从小到大地排序,并在屏幕上显示出来。*/

#include "stdio.h"

#define NUM 10      /*定义符号常量数据个数N*/

main()

{ int data[NUM];        /*定义11维整型数组data*/

    int i,j,temp;        /*定义循环变量和临时变量*/

    clrscr();        /*库函数clrscr()清屏*/

    printf("Please input 10 numbers:\n");

    for(i=0; i<NUM; i++)

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

    /*起泡法排序*/

    for(i=0; i<NUM-1; i++)     /*外循环控制比较趟数*/

        for(j=NUM-1; j>i; j--)  /*内循环进行每趟比较*/

            if(data[j]<data[j-1])  /*如果data[j]大于data[j-1],交换两者的位置*/

               {temp=data[j];

                 data[j]=data[j-1];

                 data[j-1]=temp;

               };

    /*输出排序后的数据*/

    printf("\nthe  result of sort:\n");

    for(i=0; i<NUM; i++)

        printf("%d ",data[i]);

    getchar();       /*等待键盘输入任一字符,目的使程序暂停*/

}

【例】输入一行字符,统计其中有多少个单词,单词之间用空格隔开。

#include<stdio.h>

main()

{

char string[81];

int i,num=0,word=0;

char c;

gets (string);

for(i=0;(c=string[i])!=’\0’;i++)

if(c= =’  ‘)  word=0;

else  if (word= =0)

{

word=1;

num++;

}   

printf(“there are %d words in the line.\n”,num);

}

公告通知
教学日历
疑难留言
同学你好!对本课程有哪些建议?