一、一维数组

①、定义方式

类型说明符 数组名 [常量表达式];

如:int array[10];

注意:

1) 数组的类型实际上是指数组元素的类型。对于同一个数组,其所有元素的数据类型都是相同的。

2) 数组名的书写规则应符合标识符的书写规定。

3) 数组名不能与其它变量名相同。

4) 方括号中常量表达式表示数组元素的个数,如a[5]表示数组a有5个元素。但是其下标从0开始计算。因此5个元素分别为a[0], a[1], a[2], a[3], a[4]。

5) 不能在方括号中用变量来表示元素的个数,但是可以是符号常数或常量表达式。

②、引用

一般形式为:数组名[下标]

练习:使用for循环为一个数组赋值,并将数组倒叙输出。

  1. #include <stdio.h>
  2. int main(void){
  3. int i,a[10];
  4. for(i=0;i<=9;i++){
  5. a[i]=i;
  6. //sacnf("%d",&a[i]);   自己输入数据
  7. }
  8. for(i=9;i>=0;i--){
  9. printf("%d ",a[i]);
  10. }
  11. return 0;
  12. }

③、初始化

1) 可以只给部分元素赋初值。当{ }中值的个数少于元素个数时,只 给前面部分元素赋值。

2) 只能给元素逐个赋值,不能给数组整体赋值。

3) 如给全部元素赋值,则在数组说明中,可以不给出数组元素的个数。

如:int a[3] = {1,2,3};  可以写为:  int a[] = {1,2,3};

二、二维数组

①、定义

类型说明符 数组名[常量表达式1][常量表达式2];

②、引用

数组名[下标][下标]

如 a[1][3] 表示第一行第三列的元素

练习:一个学习小组有5个人,每个人有三门课的考试成绩。求全组分科的平均成绩和各科总平均成绩。

--
Math 80 61 59 85 76
C 75 65 63 87 77
Foxpro 92 71 70 90 85

思路:可设一个二维数组a[5][3]存放五个人三门课的成绩。再设一个一维数组v[3]存放所求得各分科平均成绩,设变量average 为全组各科总平均成绩。

#include <stdio.h>

int main(void){

  int i,j,s=0,average,v[3],a[5][3];

  printf("input score:\n");

  for(i=0;i<3;i++){

    for(j=0;j<5;j++){

      scanf("%d",&a[j][i]);

      s=s+a[j][i];

    }

  v[i]=s/5;

  s=0;

}

  average =(v[0]+v[1]+v[2])/3;

  printf("Math:%d\nC:%d\nFoxpro:%d\n",v[0],v[1],v[2]);

  printf("average = :%d\n", average );

  return 0;

}

③、初始化

二维数组初始化也是在类型说明时给各下标变量赋以初值。二维数组可按行分段赋值,也可按行连续赋值。

例如对数组a[5][3]:

  • 按行分段赋值可写为:

    int a[5][3]={ {80,75,92}, {61,65,71}, {59,63,70}, {85,87,90}, {76,77,85} };
  • 按行连续赋值可写为:
    int a[5][3]={ 80,75,92,61,65,71,59,63,70,85,87,90,76,77,85};

这两种赋初值的结果是完全相同的。

说明:

1) 可以只对部分元素赋初值,未赋初值的元素自动取0值。

2) 如对全部元素赋初值,则第一维的长度可以不给出。

3) 数组是一种构造类型的数据。二维数组可以看作是由一维数组的嵌套而构成的。设一维数组的每个元素都又是一个数组,就组成了二维数组。当然,前提是各元素类型必须相同。根据这样的分析,一个二维数组也可以分解为多个一维数组。C语言允许这种分解。

三、字符数组

形式与前面介绍的数值数组相同。
 例如:   char c[10];
由于字符型和整型通用,也可以定义为 int c[10]

字符数组也允许在定义时作初始化赋值。

char c[10]={'h', 'e', 'l', 'l', 'o'};

结束标志:\0

C语言允许用字符串的方式对数组作初始化赋值。

上面可以写成: char c[10] = {"hello"}

或去掉{}写为:
    char c[10]="C program";

用字符串方式赋值比用字符逐个赋值要多占一个字节, 用于存放字符串结束标志'\0'。

输入输出:%s

特别注意:当用scanf函数输入字符串时,字符串中不能含有空格,否则将以空格作为串的结束符。

四、最常用的字符串处理函数

输出: puts(字符数组名)

输入: gets(字符数组名)

字符串连接: strcat(字符数组名1,字符数组名2)   返回字符数组1的首地址

字符串拷贝:strcpy(字符数组名1,字符数组名2)  要求字符数组1要有足够的长度 连同\0一起拷贝

字符串比较: strcmp(字符数组名1,字符数组名2)

  按照ASCII码顺序比较两个数组中的字符串,并由函数返回值返回比较结果。
      字符串1=字符串2,返回值=0;
      字符串1〉字符串2,返回值〉0;
      字符串1〈字符串2,返回值〈0。

测字符串长度: strlen(字符数组名)    实际长度 不含字符串结束标志‘\0’)

练习1:把一个整数按大小顺序插入已排好序的数组中。

思路:为了把一个数按大小插入已排好序的数组中,应首先确定排序是从大到小还是从小到大进行的。设排序是从大到小进序的,则可把欲插入的数与数组中各数逐个比较,当找到第一个比插入数小的元素i时,该元素之前即为插入位置。然后从数组最后一个元素开始到该元素为止,逐个后移一个单元。最后把插入数赋予元素i即可。如果被插入数比所有的元素值都小则插入最后位置。

代码:

#include <stdio.h>
int main(void){
int i,j,p,q,n,a[10]={127,3,6,28,54,68,87,105,162,18};
for(i=0;i<10;i++){
p=i;
     q=a[i];//把数组元素依次赋值给变量q
for(j=i+1;j<10;j++)
if(q<a[j]) {
         p=j;
         q=a[j];
       }
if(p!=i){//交换
int s=a[i];
a[i]=a[p];
a[p]=s;
}
printf("%d ",a[i]);
}
printf("\ninput number:\n");
scanf("%d",&n);
for(i=0;i<10;i++)
if(n>a[i]){
for(s=9;s>=i;s--){
         a[s+1]=a[s];//元素后移
       }
break;
}
a[i]=n;//把n插入到a[i]处
for(i=0;i<=10;i++)
printf("%d ",a[i]);
return 0;
}

练习2:在二维数组a中选出各行最大的元素组成一个一维数组b。

思路:在数组a的每一行中寻找最大的元素,找到之后把该值赋予数组b相应的元素即可

代码:

#include <stdio.h>
int main(void){
int a[][4]={3,16,87,65,4,32,11,108,10,25,12,27};//定义一个数组a
int b[3],i,j,n;
for(i=0;i<=2;i++){
n=a[i][0];//每一行第一个元素
for(j=1;j<=3;j++)
if(a[i][j]>n){
        n=a[i][j];
       }
b[i]=n;//把每一行最大的数赋值给数组b
}
printf("array a:\n");
for(i=0;i<=2;i++){
for(j=0;j<=3;j++)
printf("%5d",a[i][j]);
printf("\n");
}
printf("\narray b:\n");
for(i=0;i<=2;i++)
printf("%5d",b[i]);
printf("\n");
return 0;
}

【C-数组】的更多相关文章

  1. javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈

    Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...

  2. 探究javascript对象和数组的异同,及函数变量缓存技巧

    javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...

  3. 编写高质量代码:改善Java程序的151个建议(第5章:数组和集合___建议75~78)

    建议75:集合中的元素必须做到compareTo和equals同步 实现了Comparable接口的元素就可以排序,compareTo方法是Comparable接口要求必须实现的,它与equals方法 ...

  4. 了解PHP中的Array数组和foreach

    1. 了解数组 PHP 中的数组实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型.详细的解释可参见:PHP.net中的Array数组    . 2.例子:一般的数组 这里,我 ...

  5. JavaScript权威指南 - 数组

    JavaScript数组是一种特殊类型的对象. JavaScript数组元素可以为任意类型,最大容纳232-1个元素. JavaScript数组是动态的,有新元素添加时,自动更新length属性. J ...

  6. JavaScript常见的五种数组去重的方式

    ▓▓▓▓▓▓ 大致介绍 JavaScript的数组去重问题在许多面试中都会遇到,现在做个总结 先来建立一个数组 var arr = [1,2,3,3,2,'我','我',34,'我的',NaN,NaN ...

  7. js:给定两个数组,如何判断他们的相对应下标的元素类型是一样的

    题目: 给Array对象原型上添加一个sameStructureAs方法,该方法接收一个任意类型的参数,要求返回当前数组与传入参数数组(假定是)相对应下标的元素类型是否一致. 假设已经写好了Array ...

  8. javascript数组查重方法总结

    文章参考地址:http://blog.csdn.net/chengxuyuan20100425/article/details/8497277 题目 对下列数组去重: var arr = ['aa', ...

  9. 掌握javascript中的最基础数据结构-----数组

    这是一篇<数据结构与算法javascript描述>的读书笔记.主要梳理了关于数组的知识.部分内容及源码来自原作. 书中第一章介绍了如何配置javascript运行环境:javascript ...

  10. 小兔JS教程(四)-- 彻底攻略JS数组

    在开始本章之前,先给出上一节的答案,参考答案地址: http://www.xiaotublog.com/demo.html?path=homework/03/index2 1.JS数组的三大特性 在J ...

随机推荐

  1. MySql密码忘记解决方法

    1.先杀掉mysqld-nt.exe 进程,有很多种方法,最简单是在CMD里输入net stop mysql 2.CMD路径切换到MySQL的安装目录下的bin里 输入mysqld-nt.exe  - ...

  2. SpringMVC集成缓存框架Ehcache

    在互联网应用中,应用并发比传统企业及应用会高出很多.解决并发的根本在于系统的响应时间与单位时间的吞吐量.思路可分为:一减少系统的不必要开支(如缓存),二是提高系统单位时间内的运算效率(如集群). 在硬 ...

  3. 【随笔】Photoshop简单切图

    一.首先准备一张需要切割的图: 二.打开Photoshop,在ps里打开这张图片: 三.在界面的左边选择切片工具: 四.根据需要,鼠标点住上方和左边的标尺拖动,给图片加上分割辅助线: 五.用切片工具点 ...

  4. TCP/IP详解系列 --- 概念总结02

    TCP复位报文段(RST)的用途: 1.当客户端程序访问不存在的端口时,目标主机将给它发送一个复位报文段:收到复位报文段的一端应该关闭连接或者重新连接,而不能回应这个复位报文段. 2.当客户端程序向服 ...

  5. rdlc报表大小设置

    参考:http://stackoverflow.com/questions/427730/how-to-limit-rdlc-report-for-one-page-in-a-pdf 主要设置为:报表 ...

  6. [python] 创建临时文件-tempfile模块

    This module generates temporary files and directories. It works on all supported platforms.In versio ...

  7. keepalived健康检查方式

    keepalived对后端realserver的健康检查方式主要有以下几种: TCP_CHECK:工作在第4层,keepalived向后端服务器发起一个tcp连接请求,如果后端服务器没有响应或超时,那 ...

  8. [05]APUE:标准 I/O 库

    [a] setvbuf / setbuf #include <stdio.h> int setvbuf(FILE *restrict fp, char *restrict buf, int ...

  9. ASP.NET c# textbox 正则表达式 文本框只允许输入数字(验证控件RegularExpressionValidator )

    <input type="text" name="test" onKeyUp="test1.value=(this.value=this.val ...

  10. DbExpressionBinding requires an input expression with a collection ResultType. 参数名: input

    使用linq多表连接遇到的问题: 解决方案:注释为出错代码,更改使用GroupBy解决问题 context.ERG_TipOffsInfo.GroupBy(x => x.Data,(Data,C ...