C语言_数组

//
//  main.c
//  C_04
//
//  Created by ibokan on 15/11/30.
//  Copyright © 2015年 aishuo. All rights reserved.
//

#include <stdio.h>
#include <stdlib.h>
#include<string.h>

void changeScalar(int x);
void changeArray(int arr[5]);

int main(int argc, const char * argv[]) {
    /*
     C语言的数组
     1.数组的概念
     2.访问数组
     3.操作数组
     4.字符数组和字符串数组
     5.数组作为函数参数
     6.二维数组
     7.结构体的定义及使用
     */
    /*
     数组的概念
     数组是一个集合,他在计算机内存空间中是一串连续的地址空间,是可以存储多个同类型的变量
     数组是一个存储多个 同类型 变量连续的集合
     */
    /*
     数组的定义
     数组的类型 数组名[长度]={元素1,元素2,元素3,....};
     
     */
    int array1[4]={1,4,5,7};
    int array2[]={1,5};
    int array3[10]={1,3,6,7};
    float array4[]={3.9,45};
    float array5[]={3.4,4,5};
    
    //字符数组
    char strp[]={'b','o','k','a','n'};
    //字符串数组
    char str1[]="bokan";
    /*访问数组的元素,下标访问
          在C语言中,下标是从0开始的,因为数组的元素是顺序存储,所有后面的元素下标依次累加一
           ,数组最后一个元素的下标为数组个数减一。
     
     */
    int element=array1[0];
    printf("element=%d\n",element);
    
    //求数组元素的个数 sizeof
    int count=sizeof(array1)/sizeof(int);
    printf("count=%d\n",count);
    
    for (int i=0; i<count; i++)
    {
        printf("array1[%d]=%d\n",i,array1[i]);
    }
    //操作数组
    int array[]={1,5,6,8,9,10};
    //求数组里面元素的和
    
    int sum2=0;
    for (int i=0;i<count; i++) {
        sum2+=array1[i];
    }
    printf("sum2=%d\n",sum2);
    int tmp;
    for (int i=0; i<count/2; i++)
    {
        tmp=array1[i];
        array1[i]=array1[count-1-i];
        array1[count-1-i]=tmp;
    }
    
    for (int i=0; i<count; i++)
    {
        printf("array1[%d]=%d\n",i,array1[i]);
    }
    /*
     数组定义必须要有大小
     数组只能存放同类型的变量
     数组的元素是用下标访问,而且下标从0开始
     数组的长度为 sizeof(数组变量名)/sizeof(数组类型)
     */
    /*
     函数产生20个在【1,100】的数,而且此20个数不相同,存放到一个数组中,求和,最大值,求最小值,求平均值。
     随机数:
     arc4random()
     #include <stdlib.h>
     */
    printf("\n==============================\n");
    int num[20],max,min;
    float sum=0.0;
    for (int i=0; i<20; )
    {
        int x=0;
        num[i]=arc4random()%100+1;
        x=i;
        if(i>0)
        {
           for (int j=0; j<=x-1; j++)
          {
              if(num[j]==num[i])
              {
                i--;
                break;
              }
              if(num[j]!=num[i]  && j==x-1)
              {
                  i++;
              }
          }
        }
        else
        {
            i++;
        }
    }
    
    min=num[0];
    max=num[0];
    for (int i=0; i<20; i++) {
        printf("%d ",num[i]);
        if(max<num[i])
        {
            max=num[i];
        }
        
        if(min>num[i])
        {
            min=num[i];
        }
        sum+=num[i];
    }
    printf("\n");
    //求和,最大值,求最小值,求平均值
    printf("最大值:%d 最小值:%d 平均值:%f\n",max,min,sum/(sizeof(num)/sizeof(int)));
    
    char c1[]={'i','b','k','a','n'};
    char c2[]={'w','i','s','d','o','m'};
    /*
     字符数组
     如果花括号提供的字符个数大于数组长度,按语法错误处理
     如果小于数组长度,则只将这些字符数组中前面那些元素算上,其余的自动定位空字符‘\0’;
     */
    //字符数组初始化的另一种方式==即可以用字符串常量来初始化字符数组
    char newC1[]="ibokan";
    /*
     什么是字符串?
     字符串是一组字符的组合,可以用来描述文本信息。但是,在C语言中,无法将一个字符串作为一个整体存储到一个变量
     中。所有将字符串拆分为多个字符。然后存储到一个字符数组中。
     
     注意:
     1.在C语言中,使用双引号引起来的字符序列为字符串。字符串也为字符常量。在存储在付出的时候。结尾加上
     一个末端字符'\0'作为结束标志。
     2.上述这种字符数组的整体赋值只能在字符数组。初始化时使用 ,不能用字符数组的赋值,字符串数组的赋值只能
     对其元素--赋值。
     
     char a[];
     a="ii";
     
     上面这个是错误的
     
     */
    char st1[13]="Hello world!";
    char st2[13]={'H','e','l','l','o',' ','w','o','r','l','d','!'};
    //st1和st2是等价的
    //注意:数组名就是我们的数组元素的地址,所以在scanf()函数中,只需要用数组名即可
    int i;
    scanf("%d",&i);
    char st3[10];
//    scanf("%s",st3);
//    printf("%s\n",st3);
  //上面这个先输入空格不显示
    gets(st3);
    puts(st3);
    //输入是在前面输入空格,空格显示
    /*
        字符串的一些函数,包含#include<string.h>
        strcpy(str1,str2);//复制
     strcat(str1,str2);//饼接
     strlen(str1);
     */
    char st5[]="ibokan";
    char st6[]="wisdom";
    strcpy(st5,st6);//st5的长度要比st6要大不然在复制过程中覆盖到其他存储区域
    puts(st5);
    
    strcat(st5, st6);//st6已经复制给st5
    puts(st5);
    //返回的是无符号整形,所以需要强制转换
    int length=(int)strlen(st5);//不算上末端字符'\0'
    
//    count=sizeof(st5)/sizeof(char);
    
    //数组作为函数参数与基本数据类型作为函数参数的区别
    
    //基本数据类型作为函数参数时
    int  x=10;
    printf("调用函数前x的值为 %d\n",x);
    changeScalar(x);
    printf("调用函数后x的值是 %d\n",x);

    //数组作为函数参数
    int myArray[]={1,2,3,4,5};
    printf("调用函数之前myArray 数组中各个元素的值为:\n");
    int const1=sizeof(myArray)/sizeof(int);
    for (int i=0; i<const1; i++)
    {
        printf("myArray[%d]=%d\n",i,myArray[i]);
    }
    //函数的调用
    changeArray(myArray);
    for (int i=0; i<const1; i++)
    {
        printf("myArray[%d]=%d\n",i,myArray[i]);
    }
    /*
     注意:
     C语言中将数组作为参数进行数据传递,无论数据量大小,不将数组进行复制,而是将该数组本身传入函数内部。而函数内部所操作的数据就是函数外部所定义的那个数组。
     */
    return 0;
}
void changeScalar(int x)
{
    x=1000;
}
void changArray(int arr[5])
{
    for (int i=0; i<5; i++)
    {
        arr[i]+=10;
    }

}

练习:

/*
     函数产生20个在【1,100】的数,而且此20个数不相同,存放到一个数组中,求和,最大值,求最小值,求平均值。
     随机数:
     arc4random()
     #include <stdlib.h>
     */

代码:

#include <stdio.h>
#include <stdlib.h>
void main()
{
    printf("\n==============================\n");
    int num[20],max,min;
    float sum=0.0;
    for (int i=0; i<20; )
    {
        int x=0;
        num[i]=arc4random()%100+1;
        x=i;
        if(i>0)
        {
           for (int j=0; j<=x-1; j++)
          {
              if(num[j]==num[i])
              {
                i--;
                break;
              }
              if(num[j]!=num[i]  && j==x-1)
              {
                  i++;
              }
          }
        }
        else
        {
            i++;
        }
    }
    
    min=num[0];
    max=num[0];
    for (int i=0; i<20; i++) {
        printf("%d ",num[i]);
        if(max<num[i])
        {
            max=num[i];
        }
        
        if(min>num[i])
        {
            min=num[i];
        }
        sum+=num[i];
    }
    printf("\n");
    //求和,最大值,求最小值,求平均值
    printf("最大值:%d 最小值:%d 平均值:%f\n",max,min,sum/(sizeof(num)/sizeof(int)));
}

二维组:

    /*
     二维数组定义
      数据类型 数组名[][] ={{},{},......}
     */
    int  arr1[][3]={1,4,5,1,5,7};
    //等价于
    //int arr1[][3]={{1,4,5},{2,5,7}};
    int arr2[][3]={1};
    //等价于 int arr2[][3]={{1,0,0}};
    
    for (int i=0; i<2; i++)
    {
        for (int j=0; j<3; j++)
        {
            int r=arr1[i][j];
            printf("%d ",r);
        }
    }
    char R[][2]={{'s','s'},{'x','x'}};
    //对于二维数组列是一定要写的




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值