引例
写一个程序计算用户输入的数字的平均数,并输出所有大于平均数的数
定义数组
eg: int grades[100]; double weight[20];
注:元素数量必须是整数 C99之前:元素数量必须是编译时刻确定的字面量,在C99之后,元素数量可以是变量
- 其中所有元素具有相同的数据类型
- 一旦创建,不能改变大小
- 数组中的元素在内存中是连续依次排列的
eg: int a[10] 1个 int数组,10个单元 每个单元就是一个int类型的变量 可以出现在赋值的左边和右边 eg:a[2] = a[1] + 6 在赋值左边的叫左值(左值右值会在之后指针中了解)
数组的单元
- 数组的每个单元就是数组类型的一个变量
- 使用数组时放在[]中的数字叫做下标或索引,下标从0开始计数
eg:grades [0]、grades [99]、grades [5]
注: —编译器和运行环境都不会检查数组下标是否越界, 无论是对数组单元做读还是写 — —旦程予运行,越界的数组访问可能造成问题,导致程序崩溃(segmentation fault) —但是也可能运气好,没造成严重的后果 —所以这是程序员的责任来保证程序只使用有效的下标值:[0,数组的大小-1]
长度为0的数组 int [0] ,可以存在,但没有意义
用数组做散列计算
写一个程序,输入数量不确定的[0,9]范围内的整数,统计每一种数字出现的次数,输入-1表示结束
二位数组
- int a[3][5];
- 通常理解为a是一个3行5列的矩阵
二位数组的遍历
- 列数是必须给出的,行数可以由编译器来数
- 每行一个{},逗号分隔
- 最后的逗号可以存在,有古老的传统
- 如果省略,表示补零
- 也可以用定位( *C99 ONLY)
tic-tac-toc游戏(〇X游戏)
- 读入一个3×3的矩阵,矩阵中的数字为1表示该位置上有一个X,为0表示为〇
- 程序判断这个矩阵中是否有获胜的一方,输出表示获胜一方的字符X或O,或输出无人获胜
#include <stdio.h>
int main()
{
const int size = 3;
int board [size] [size] ;
int i,j;
int numOfX;
int numOf0;
int result = -1;
for ( i=0; i<size; i++ ) {
for ( j=0; j<size; j++ ) {
scanf( "%d", &board [i][j]);
}
}
for ( i=0; i<size && result == -l; i++ ) {
numOf0 = numOfX = 0;
for ( j=; j<size; j++ ) {
if ( board[i][j] == 1 ) {
numOfX ++;
}else {
num0f0 ++;
}
}
if ( num0f0 == size ) {
result = 0;
}else if (numOfx == size ) {
result = 1;
}
}
for ( j=0; j<size && result == -l; j++ ) {
numOf0 = numOfX = 0;
for ( i=; i<size; i++ ) {
if ( board[i][j] == 1 ) {
numOfX ++;
}else {
num0f0 ++;
}
}
if ( num0f0 == size ) {
result = 0;
}else if (numOfx == size ) {
result = 1;
}
}
numOf0 = numOfX = 0;
for ( i=0; i<size; i++ ) {
if ( board[i][i] == 1 ) {
num0fX ++;
}else {
num0f0 ++;
}
}
if ( numOf0 == size ) {
result = 0;
}else if (numOfX == size ) {
result = 1;
numOf0 = numOfX =0;
for ( i=0; i<size;i++ ) {
if ( board[i] [size-i-1] == 1 ) {
numOfX ++;
}else {
num0f0 ++;
}
}
if ( numOf0 == size ) {
result = 0;
}else if (numOfX == size ) {
result = 1;
return 0;
}
|