[C语言]使用数组

-----------------------------------------------------------------------------

//  main.c 例
//  Created by weichen on 15/1/9.
//  Copyright (c) 2015年 weichen. All rights reserved.
#include <stdio.h>

int main() {
    // 求输入的平均数

    int x = 0;      //输入的数
    double num = 0; //总和(这个定义为double, 因为计算结果可能出现浮点数)
    int count = 0;  //个数
    double per;     //平均数(结果也定义double)

    printf("请输入一些数:");

    scanf("%d", &x);

    //大于0时执行累计;输入小于等于0的值 回车确定 来终止循环,并执行后面的代码
    while(x > 0)
    {
        num += x;
        count++;
        scanf("%d", &x);
    }

    if(count > 0)
    {
        per = num / count;
        printf("%f \n", per);
    }

    return 0;
}
//  main.c 例
//  Created by weichen on 15/1/14.
//  Copyright (c) 2015年 weichen. All rights reserved.
#include <stdio.h>

int main() {

    //输入一个数,并输出平均值和大于平均值的数
    //要点:需要存放输入的这些数

    int x = 0;
    int n = 0;
    double total = 0;
    double per = 0;
    int number[100]; //1. 定义数组

    printf("请输入一些数:");
    scanf("%d", &x);

    while(x != 0)
    {
        number[n] = x;    //2. 数组元素赋值
        total += x;
        n++;
    }

    if(n > 0)
    {
        per = total/n;

        printf("平均数为:%f\n", per);

        printf("大于平均数的数为:");

        for(int i = 0; i <= n; i++)
        {
            if(number[n] > per)   //3. 使用数组元素
            {
                printf("%d\t", number[i]); //4. 遍历数组
            }
        }
    }

    return 0;
}

注:Xcode里编译后输入数字回车,number[n]=x 行报错 Thread1:EXC_BAD_ACCESS(code=2,address=0x7fff5fc00000),有人知道原因吗?
// main.c 例
// Created by weichen on 15/1/19
// Copyright (c) 2015年 weichen. All rights reserved.
#include <stdio.h>

int main() {
    //输入0-9范围内的数字,求输入每个输入的数字的次数
    const int number = 9;//1. 数组大小
    int x;
    int count[number];  //2. 定义数组
    int i;

    for(i=0; i<=number; i++)
    {
        count[i] = 0;   //3. 初始化数组
    }

    printf("请输入:");
    scanf("%d", &x);

    while(x != -1)
    {
        if(x>=0 && x<=9)
        {
            count[x]++; //4. 数组参与运算
        }
        scanf("%d", &x);
    }

    for(i=0; i <= number; i++)
    {
        printf("%d:%d\n", i, count[i]);
    }  

    return 0;
}
//  main.c 一维数组
//  Created by weichen on 15/1/28.
//  Copyright (c) 2015年 weichen. All rights reserved.
#include <stdio.h>

int main() {
    /* 一. 数组的集成初始化
      int a[] = {1, 2, 6, 7, 9};

      for ( int i = 0; i < 5; i++)
      {
          printf("%d\t", a[i]);
      }
  */
    /* 1. 声明一个长度12的数组,第一个元素赋值为1,其余为0
      int a[12] = {1};
      for ( int i = 0; i < 12; i++)
      {
          printf("%d\t", a[i]);
      }
    */

    /* 2. 不使用循环,初始化数组
      int a[12] = {0};
    */

    /* 二. 集成初始化时的定位
      int a[12] = {[1]=2, 3, [4]=9};
      用[x]在初始化数据时给出定位
      没有定位的数据跟在前一个后面
      其它位置的值补0
      也可以不给出数组的大小,让编译器运算
      适合初始化稀疏的数组

      {
          for(int i = 0; i < 12; i++) {
              printf("%d\t", a[i]);   //0    2    3    0    9    0 ....
          }     }
    */

   /* 三. 数组赋值 */
    int a[] = {1, 3};
    int length = sizeof(a)/sizeof(a[0]);
    int b[length];
    //1. 数组变量本身不能被赋值,如:int b[] = a;错误
    //2. 要把一个数组的值交给另一个数组,必须使用遍历,如下:
    for(int i = 0; i < length; i++) {
        b[i] = a[i];
    }
    {
        for(int i = 0; i < length; i++) {
            printf("%d\t", a[i]);   //0    2    3    0    9    0 ....
        }
    }
    //遍历数组作用:
    //3. 赋值、初始化、判断值是否存在,计数
    //4. 离开循环后,i不能再作为下标访问数组元素

    return 0;
}
/**
 * 思考题:查找某值是否存在数组中
 * @weiChen
 */

#include <stdio.h>

int main()
{
    int a[] = {1, 3, 4, 8, 0, 34};

    int key;

    int length = sizeof(a)/sizeof(a[0]);

    printf("请输入一个数:");

    scanf("%d", &key);

    int location = search(key, a, length);

    if(location != -1)
    {
        printf("key:%d存在于数组a[]中。\n", key);
    }
    else
    {
        printf("数组a[]中不存在key:%d。\n", key);
    }

    return 0;
}

/**
 * 函数:找出key在数组中的位置
 * @param key 位置
 * @param a 数组
 * @param length 数组长度
 * @return 存在则返回数组的位置,否则返回-1
 *
 * int search(int key, int a[]; int length);
 */

int search(int key, int a[], int length)
{
    for(int i = 0; i < length; i++)
    {
        if(a[i] == key)
        {
            return i;
            break;
        }
    }

    return -1;}
//  main.c 多维数组
//  Created by weichen on 15/1/30.
//  Copyright (c) 2015年 weichen. All rights reserved.
#include <stdio.h>

int main(int argc, const char * argv[]) {

    //二维数组,三行五列矩阵
    int a[3][5];

    for(int i = 0; i < 3; i++) {
        for(int j = 0; j < 3; j++) {
            a[i][j] = i * j;
        }
    }

    //二维数组的初始化
    int b[][5] = {
        {1, 2, 3, 4, 5},
        {3, 4, 5, 6, 8},
    };

    //1.列数是必须给出的,行数可以由编译器来数。
    //2.每一行一个{},逗号分隔
    //3.最后的逗号可以存在,有古老的传统
    //4.如果省略,表示补零
    //5.也可以用定位(C99 ONLY)

    //int c[][3] = {{0}, {1}, {2}};   //三行三列,每列自动补零
    //printf("%d", c[1][2]);

    int d[][3] = {1, 2, 4, 5, 6, 7, 8, 9, 3,};//初始化为3列,自动分为三行
    int i, j, k = 2;
    for(i = 0; i < 3; i++) {
        printf("%d", d[k][i]);//循环输出d[2][i]
    }
     
    return 0;
}

Link: http://www.cnblogs.com/farwish/p/4212336.html

@黑眼诗人 <www.chenwei.ws>

时间: 2024-10-14 08:21:29

[C语言]使用数组的相关文章

C语言关于数组与指针内容小结

数组的基本概念 什么是数组:数组就是:数组是相同类型的元素的一个集合       类型说明符 数组名 [常量表达式]: 其中,类型说明符是任一种基本数据类型或构造数据类型.数组名是用户定义的数组标识符.方括号中的常量表达式表示数据元素的个数,也称为数组的长度.例如: int a[10]; /* 说明整型数组a,有10个元素 */ float b[10], c[20]; /* 说明实型数组b,有10个元素,实型数组c,有20个元素 */ char ch[20]; /* 说明字符数组ch,有20个元

C语言——字符数组

在C语言编程中,我们一般用一个字符数组来存放一个字符串.例如,我们想存储这个字符串“http://i.cnblogs.com”,这个字符串一共有20个字符,要存放下这个字符串,我们需要一个长度为21的字符数组.为什么是21个而不是20个呢?在C语言中,字符串数组默认以'\0'结尾,所以我们一共需要一个长度为21的字符数组来存储这个变量. unsigned char text[21] = “http://i.cnblogs.com”; 既然我们已经知道了如何存放一个字符串,那下面我们来讨论另外几个

C语言之数组名的含义

一:一维数组 int a[5]; a:就是数组名.a做左值时表示整个数组的所有空间(10×4=40字节),又因为C语言规定数组操作时要独立单个操作,不能整体操作数组,所以a不能做左值:a做右值表示数组首元素(数组的第0个元素,也就是a[0])的首地址(首地址就是起始地址,就是4个字节中最开始第一个字节的地址).a做右值等同于&a[0]; a[0]:表示数组的首元素,也就是数组的第0个元素.做左值时表示数组第0个元素对应的内存空间(连续4字节):做右值时表示数组第0个元素的值(也就是数组第0个元素

【Go语言】【6】GO语言的数组

在<[4]GO语言类型和为类型增加方法>里说过GO语言除了基础类型(如int.float64.complex128等)之外,还有复合类型,其中就包含本文的数组.对于数组大家都不陌生,在C语言中可以这样声明一个一维数组:int arr[10],那么GO语言是怎么定义的呢? 一.数组的声明 1.数组的声明格式为var arrName [num]type,比如: var strArr [10]string     // 声明一个由10个字符串组成的一维字符串数组 var byteArr [32]by

C语言去除数组中重复的字符简单例子

#include <stdio.h> int main(void){ int a[10]={1,2,3,3,4,5,1,3,5,6}; int i,j; int zieo=0; for(i=0;i<10;i++) for(j=i+1;j<10;j++) { if(a[i]==a[j]) { a[j]=0; } } for(i=0;i<10;i++) { if(a[i]!=zieo) { printf("%d\t",a[i]); } } printf(&qu

线性表之顺序存储结构(C语言动态数组实现)

线性表的定义:N个数据元素的有限序列 线性表从存储结构上分为:顺序存储结构(数组)和 链式存储结构(链表) 顺序存储结构:是用一段连续的内存空间存储表中的数据 L=(a1,a2,a3....an) 链式存储结构:是用一段一段连续的内存空间存储表中每一行的数据,段与段之间通过一个引用(指针)相互连接来,形成一个链式的存储结构 看到顺序存储结构的图示,我们可能会马上联想到C语言的数组.是的,数组就是一种典型的顺序存储数据结构.下面我通过一个实例,来实现对顺序存储结构中的数据增.删.改.查的操作. 首

java、C语言实现数组模拟栈

java: public class ArrayStack { private int[] data; private int top; private int size; public ArrayStack(int size) { this.data = new int[size]; this.size = size; this.top = -1; } public boolean isEmpty() { if (this.top == -1) { return true; } return

C语言之数组中你所不在意的重要知识

#include<stdio.h> void simpleArray(); void main() { simpleArray(); } //数组的简单操作 void simpleArray() { //数组的声明并赋值 int c[5] = { 1, 2, 3, 4, 5 }; printf("\nC数组内存中占%d个字节",sizeof(c));// /0在内存中会占一个字节,但是只针对于字符串 printf("\nC数组中有%d个元素",sizeo

C语言 对数组名取地址

作者 : 卿笃军 你有没有想过,对一个一维数组名取地址,然后用这个地址进行加减运算.这会出现什么样的结果呢? 示例: int a[5] = {1,2,3,4,5}; int *p = (int *)(&a+1); printf("%d\n",*(p-1)); 这个输出会是多少呢? 咦?为什么第二行需要强制转化类型呢? 答:a是一个一维数组的名字,&a相当于一个指向一维数组的指针.怎么感觉这么熟悉?指向数组的指针,那不就是行指针吗?int (*p)[]. 行指针+1,就是

C语言一维数组、二维数组、结构体的初始化

C语言数组的初始化表示方法 一.C语言一维数组初始化: (1)在定义数组时对数组元素赋以初值.如: static int a[10]={0,1,2,3,4,5,6,7,8,9}; 经过上面的定义和初始化后,a[0]=0,a[1]=1,… ,a[9]=9. (2)初始化时可以只对一部分元素赋初值.例如: static int a[10]={0,1,2,3,4}; 定义的数组有10个元素,但只对其中前5个元素赋了初值,后5个元素初值为0. (3)将数组的元素值全部为0,可以用下面的方法:(方法一)