如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
上机习题CH7EX2:10000个随机整数(<100)的选择排序。CH7EX5:将有10个元素的一维数组逆置。CH7SUM:将两个3行4列二维数组a[3][4]和b[3][4]对应元素求和后存入数组c[3][4]。CH7EX13:不用strcat函数,连接两字符串。CH7EX15:复制字符串(’去除空白字符)。CH7COUNT:输入一个字符串,统计其中字母、数字、空格和其他字符各多少个。第7章数组数组下标总是从0开始数组定义方括号内的常量表达式不能含变量例:intn;scanf("%d",&n);inta[n];此定义是错误的!一维数组元素的引用例:a[0]=a[5]+a[7]-a[2*3];数组元素引用时要注意下标是否出界,因为出界可能会破坏其它数据,造成意外损失。例7.1数组元素的引用#include"stdio.h"voidmain(){inti,a[10];for(i=0;i<10;i++)/*循环10次*/a[i]=i;for(i=9;i>=0;i--)/*循环10次*/printf("%2d",a[i]);printf("\n");}一维数组的初始化例:inta[5]={1,3,5,7,9};或inta[]={1,3,5,7,9};数组初始化可以只对前面一部分元素赋值,后面剩余部分元素的值会自动置零。如:inta[5]={1,3,5};则默认a[3]=0;a[4]=0;若写成inta[]={1,3,5};则被认为a数组只有3个元素而非5个元素。例1找数组中的最大数voidmain(){inti,max,a[10];for(i=0;i<10;i++)scanf("%d",&a[i]);max=a[0];for(i=1;i<10;i++)/*循环9次*/if(a[i]>max)max=a[i];printf("max=%d\n",max);}例7.2用数组求前20个Fibonacci数。voidmain(){inti,f[20]={1,1};for(i=2;i<20;i++)/*循环18次*/f[i]=f[i-1]+f[i-2];for(i=0;i<20;i++){if(i%5==0)printf("\n");printf("%8d",f[i]);}}冒泡排序算法思想:1.将a[n-1]与a[n-2]比较交换;将a[n-2]与a[n-3]比较交换;……;将a[1]与a[0]比较交换2.将a[n-1]与a[n-2]比较交换;将a[n-2]与a[n-3]比较交换;……;将a[2]与a[1]比较交换……即:fori:1~n-1做forj:n-1~i做若a[j-1]>a[j]则交换a[j-1],a[j]冒泡排序程序段:for(i=1;i<n;i++)/*n-1次外循环*/for(j=n-1;j>=i;j--)if(a[j-1]>a[j]){t=a[j];a[j]=a[j-1];a[j-1]=t;}for(i=0;i<n;i++)printf("%8d",a[i]);例2选择排序(从小到大)算法思想:1.将a[0]与a[1]~a[n-1]中的最小者比较交换。2.将a[1]与a[2]~a[n-1]中的最小者比较交换。……即:fori:0~n-2做{k=i;forj:i+1~n-1做若a[k]>a[j]则k=j;交换a[k],a[i]}二维数组的定义格式:类型标识符数组名[常量表达式1][常量表达式2];例如:inta[3][4];表示定义了一个二维数组a,所包含的元素是:a[0][0]a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[1][2]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3]二维数组有行有列,在内存中是逐行存放的计算m×n二维数组某元素a[i][j]在数组中位置的公式为:k=i×n+j+1三维数组的定义与二维数组类似格式:类型标识符数组名[常量表达式1][常量表达式2][常量表达式3];例如:inta[2][3][2];上面定义了一个三维数组a,共有12个元素。第一下标为页、第二下标为行、第三下标为列二维数组的初始化分行赋初值(两层花括号)inta[2][3]={{1,2,3},{4,5,6}};一行赋初值(单层花括号)inta[2][3]={1,2,3,4,5,6};只对数组前面部分元素赋初值inta[2][3]={1,2,3,4};其效果与inta[2][3]={1,2,3,4,0,0};相同。可将inta[2][3]={1,2,3,4,5,6};写成inta[][3]={1,2,