实验六 数 组 |
u 实验目的1、掌握一维数组和多维数组的定义 2、掌握对数组的引用规则 3、理解多维数组的特殊性 4、掌握字符数组和字符串 u 预习内容 见教材第七章 u 实验重点 1、掌握一维数组和二维数组的定义、赋值和输入输出的方法。 2、数组和字符串函数的使用。 u 实验难点 掌握与数组有关的算法,特别是排序算法。 u 实验内容 编程序并上机调试运行: 1、用冒泡法对10个整数排序。10个整数用scanf函数输入。 2、将两个字符串连接起来,不要用strcat函数。 u 参考例题 【例】选择法排序 思想:对n个数据对象排序 1、i置为0,表示当前操作对象的范围是[i,n-1] 2、数据范围[i,n-1]中确定最大值所在下标p 3、使最大值与当前操作范围的第一个数据交换 4、i++,使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]; /*定义1个1维整型数组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); } |
|