黑马程序员技术交流社区
标题:
C语言的几个基本数组
[打印本页]
作者:
duzhong
时间:
2014-10-13 01:26
标题:
C语言的几个基本数组
自己总结的C语言几个基本数组的应用,和几道简单的例子,手都打麻了。 呵呵
(一).一维数组
1.一维数组的定义: 类型符 数组名[常量表达式]。数组名与变量名的定义规则一样,常量表达式表示数组中元素的个数。类型符指数组元素的类型。同一个数组元素的类型是相同的。 例: int a[20]; 表示以a为数组名的数组中有20各全为整形的数。
2.一维数组的使用
数组名[表达式] 表达式表示数组中元素的下标,下标是从0开始计算。
3.一维数组的初始化
1>全部元素的初始化 例:int a[5]={1,2,3,4,5};则表示 a[0]=1,a[1]=2,a[2]=3,a[3]=4,a[4]=5
2>部分元素的初始化 例:int a[5]={1,2,3};这只能保证前面给定的初始化数据是确定的,而没给定数据的数组是不确定数值的。
一维数组举例
例:选猴王,20各猴子编号0-19围成一圈,0号猴子从1开始报数,凡是报到3的倍数的猴子出列,直至剩下最后一只猴子,求猴王号数。
#include <stdio.h>
void main()
{
int a[20],i,k=0,n=20;
for(i=0;i<20;i++)
a[i]=1;
i=0;
while(n>1)
{
k+=a[i]; //a[i]赋值给k,k为1,然后i++所以k=2.....
if(k%3==0 && a[i]==1)
{a[i]=0; n--;}
i++;
if(i==20)
i=0;
}
for(i=0;i<20;i++)
if(a[i]==1)
printf("猴王的编号为%d\n",i);
}
(二). 二维数组
1.二维数组的定义 类型符 数组名[常量表达式][常量表达式] 例: int a[3][4];这二维数组中共有12各元素。
2.二维数组的使用 数组名[下标1][下标2] // 下标1称为行下标,下标2称为列下表。
二维数组存储时是按行存储
例: int a[3][4]
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]
3.二维数组的初始化
二维数组是按行初始化的。例: int a[2][3]={{1,2,3},{4,5,6}};
二维数组的整体初始化 int a[2][3]={1,2,3,4,5,6};
如果在二维数组中列下标的大小确定之后,行的数值可以省略。 例: int a[][3]={1,2,3,4,5,6};与int a[2][3]相同。
二维数组举例:
#include"stdio.h"
#define N 4
#define M 5
void main()
{
int i,j,k,a[N][M],max,maxj,flag;
printf("please input matrix:n");
for(i=0;i<N;i++)
for(j=0;j<M;j++)
scanf("%d",&a[i][j]);
for(i=0;i<N;i++)
{
max=a[i][0]; //开始时假设a[i][0]最大
maxj=0; //将列号0赋给maxj保存
for(j=0;j<M;j++) //找出第i行中的最大者(i定,j变,即从一行中横向比较)
if(a[i][j]>max)
{
max=a[i][j]; //将本行的最大数存放在max中
maxj=j; //将最大数所在的列号存放在maxj中
}
flag=1; //先假使是鞍点,以flag为1代表
for(k=0;k<N;k++)
if(max>a[k][maxj]) //将最大数和其同列元素比较
{
flag=0; //如果max不是同列最小,表示不是鞍点,令flag为0
break; //答案书上这里是continue,其实直接用break跳出这个“小”循环
}
if(flag) //如果flag为1表示是鞍点
{
printf("a[%d][%d]=%dn",i,maxj,max); //输出鞍点的值和所在的行,列号
break; //因为只有一个鞍点,找到一个后直接跳出整个“大”循环
}
}
if(!flag) //如果flag为0表示是鞍点不存在
printf("It is not exist! n");
}
(三). 字符数组
1.字符数组的定义 char 数组名[常量表达式]; //用于存放字符串。字符数组可与字符串不等长。字符串在存储时,系统会自动加结束标记\0
2.字符数组的初始化 1>逐个字符初始化 char s[10]={'a','b','c'};
2>字符串整体赋值 char s[10]={"book"};
3.字符数组的输入和输出 1>逐个字符输入与输出
2>输入字符串 scanf("%s",s); //s一定是数组名,数组名代表着地址。
3>字符串输出和输出函数 gets(数组名)代表从键盘输入一个字符串。puts代表输出一个字符
字符数组举例:
#include <stdio.h>
#include <string.h>
void main()
{
char str[100];
int i;
int sum = 0;
printf("input a string: \n");
gets(str);
for (i = 0; i < strlen(str); i++)
{
if (str[i] == 'A')
sum++;
}
printf("The string has %d [A]\n", sum);
}
作者:
duzhong
时间:
2014-10-13 23:46
这篇帖子看不到么??
作者:
微雨独行
时间:
2014-10-14 00:11
顶一个 楼主用心了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2