7.1 概 述
请考虑下面两个问题:
输入100个数并以与输入时相反的顺序输出这100个数。
输入100名学生的成绩,输出高于平均分的那些成绩。
7.2 一维数组
一、一维数组的定义
二、一维数组元素的引用
三、一维数组的初始化
练习
例7.2.1 用数组求Fibonacci数列前40项.
main( )
{ int i;
long int f[40]={1,1};
for(i=2;i<40;i++)
f[i]=f[i-2]+f[i-1];
for(i=0;i<40;i++)
{ if(i%5==0) printf("\n");
printf("%12ld",f[i]);
}
}
例7.2.2 从10个整数中把最小的数找出来,并与最前面的数对调, 指出最小的数原来的下标位置。(最小值唯一)。
上图是动态图,因此截图有偏差,可自己推理就知道具体了。
例7.2.3 用起泡排序法将n个数由小到大排序。
例7.2.4 用选择排序法将n个数由小到大排序。
例7.2.5 用random函数产生n个[0,70]之间的随机整数,并按逆序重放在数组中。(n<50)
例7.2.6 打印方阵
上图也是一个动态图。
例7.2.7 已知数组a中有8个互不相等的元素,数组b中有 5 个互不相等的元素,而数组c中包含那些在a中但不在b中的元素,编程产生数组c。
上图是一个动态图。
main( )
{ int i, j, k=0, a[8], b[5], c[8];
for(i=0;i<=7;i++) scanf("%d",&a[i]);
for(i=0;i<=4;i++) scanf("%d",&b[i]);
for(i=0;i<=7;i++)
{for(j=0;j<=4;j++)
if(a[i]= =b[ j]) break;
if(j>4) { c[k]=a[i];k++;}
}
for(i=0;i<k;i++) printf("%5d",c[i]);
printf("\n");
}
例7.2.8 输入n个数到数组中(n最多为100),选出所有大于n个数的平均值的那些数。
思路:
1. int x[100];
2. 输入n个数据并求这n个数据的累加和。
3. 求n个数据的平均值。
4. 选出所有大于平均值的那些数。
main( )
{ int x[100],sum=0,ave, i, n;
scanf("%d",&n);
for(i=0;i<=n-1;i++)
{ scanf("%d ",&x[i]);
sum=sum+x[i]; }
ave=sum/n;
printf("ave=%d\n",ave);
printf("geather than ave num:");
for(i=0;i<=n-1;i++)
if(x[i]>ave) printf("%d ",x[i]);
printf("\n"); }
7.3 二维数组
二、二维数组的引用
例7.3.1 矩阵转置。把矩阵的行变成相应的列,列变成相应的行。
main( )
{ int a[5][5], i , j, k;
for(i=0; i<5; i++)
for(j=0; j<5; j++)
scanf("%d",&a[i][j]);
for(i=0; i<5; i++)
{ for(j=0; j<5; j++)
printf("%5d",a[i][j]);
printf("\n");
}
for(i=0; i<5; i++)
for(j=i; j<5; j++)
{ k=a[i][j];
a[i][j]=a[j][i];
a[j][i]=k;
}
printf("\n");
for(i=0; i<5; i++)
{ for(j=0; j<5; j++)
printf("%5d",a[i][j]);
printf("\n");
}
}
例7.3.2 随机产生区间[21,100]上12个整数,放入3×4矩阵a中,并求其最大值及位置.
例7.3.3 求3×3矩阵各列和,并放入一个一维数组中。
main( )
{ int a[3][3], i, j, x[3];
for(i=0;i<3;i++)
for( j=0;j<3;j++)
scanf("%d",&a[i][j]);
for(i=0;i<3;i++)
{ x[i]=0;
for(j=0;j<3;j++)
x[i]=x[i]+a[j][i];
printf("%d\n",x[i]);
}
}
例7.3.4 找规律自动填充n×n方阵。(n=7)时如下图所示。
例7.3.5 打印杨辉三角形,输出形式如下所示。
例7.3.6 将5×6矩阵每一行按由大到小排序。
7.4 字符数组
例7.4.1 输出一个字符数组中的字符
例7.4.1:不使用strlen函数求字符串有效长度
例7.4.2 编一程序,将两个字符串连接起来,不使用strcat函数。
例7.4.3:不使用strcpy函数实现字符串复制
例7.4.4 编写程序,比较两个字符串的大小。不用strcmp函数实现其功能。
比较规则:逐个字符进行比较,直到有两个字符不等或有一个字符串结束为止。
例7.4.5 在一个字符串中删除一个指定的字符。
解题方法:在原串中,将不等于待删字符的元素放到原有数组中。
例7.4.6 有三个字符串(长度不超过20),要求找出其中最大者。(p151)
7.4.7输入一行字符,统计其中有多少个单词,单词之间用空格分隔。(p150)
#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 \n",num);
}