******************* 数组————一维数组 *******************

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


1 数组的基本概念

 同一数据类型的变量的集合,其中每一个数据按照一定顺序排列

 

 int num1,num2,num3,....;

 intnum[3];

 

 分为:

 

 数值数组

 字符数组

 指针数组

 结构数组

 

 一维数组

 二维数组

 多维数组

 

 1 一维数组:

 数组中得每一个元素都不是数组

 

 一维数组的定义

 

 先定义,再初始化

 

 int num[10];//开辟了10int长度的内存空间

 

 说明:

 数据类型决定数组中每一个元素的数据类型

 

 

 一维数组的定义和初始化

 

 类型 名字[长度];

 

 定义存储10int数字的数组

 

 int nums[10];

 

 定义存储7char数据的数组

 

 int chs[7];

 

 所谓初始化,就是赋初值

 

 1 全部初始化

 1> 定义的时候初始化:

 int nums1[5] = { 1, 2, 3, 4, 6};

 可以省略数字后面方括号的数字,编译器会自动根据初始化的

 数据来确定这个数字

 

 int nums2[] = {1,2,3,4,6};

 

 2> 定义完成后初始化,

 

 int nums[3];

 

 nums[0] = 1;

 nums[1] = 2;

 nums[2] = 3;

 

 2 部分初始化

 

 int nums[5] = {1,2,3};

 

 会按照数据的顺序进行初始化数据,然后没有数据的地方补零

 

 int nums[10] = {[3]= 1,2,3};从指定位置开始初始化

 

 int nums[10] = {0};

 

 

 

 遍历数组

就是从数组的第0个元素,一次访问数组的每一个元素,

 直到访问完所有的数组元素.

 

 每一个数组元素使用数组名+下标就可以进行访问

 int nums[10] = {1,2,3,4,5,6,7,8,5,6};

 

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

    printf("%d\n",nums[i]);

 }

 

 */

#include <stdio.h>


//宏名要全大写

//宏定义  宏名  替换量

#define LEN 256


int main(int argc,constchar * argv[]) {

    //定义数组的使用,常常使用的是宏来设置数组的长度

   int nums [LEN];

    //代码中使用了宏,在编译的时候,会执行宏替换

    // -->> int nums[256];

    

   return 0;

}



//  遍历-按顺序查看数组的每一个元素

//

//  Created by 李佳乐 on 15-3-13.

//  Copyright (c) 2015 gongsimingzi. All rights reserved.

//


 

 

#include <stdio.h>


#define LEN 256

/*

int main() {

   

    int ages[5] = {19,29,31,22,19};

    

    for(int i = 0;i < 5;i++){

        printf("ages[%d]=%d\n",i,ages[i]);

    }

    return 0;

}


*/

/*

 //计算元素的个数


 */

int main(){

int ages [] = {10,11,12,78};


int count =sizeof(ages) /sizeof(int);


for(int i = 0;i < count;i++){

   printf("ages[%d] = %d\n",i,ages[i]);

}

   return 0;

}



//  输入5个学生的成绩求平均

//

//  Created by 李佳乐 on 15-3-13.

//  Copyright (c) 2015 gongsimingzi. All rights reserved.

//

/*

#include <stdio.h>


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

   //定义一个数组来存储成绩

    int scores [5];

    //定义一个变量存储总分

    int sum = 0;

    //提示输入成绩

    for(int i = 0;i < 5;i++)

    {//提示输入某个学生的成绩

        printf("请输入第%d个学生的成绩:\n",i+1);

        //接收输入

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

        //累加成绩

        sum += scores[i];

    }

    //计算平均分,并且暑促

    

    printf("平均分是%.4f\n",sum / 5.0);

    

    return 0;

}


*/


#include <stdio.h>

#define LEN 256

int main()

{

   int ages[3] = {10,19,18};

    

   printf("%p\n",ages);

    

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

       printf("ages[%d]的地址是%p\n",i,&ages[i]);

    }

    

   return 0;

}




//  找出整型数组的最大值

//

//  Created by 李佳乐 on 15-3-13.

//  Copyright (c) 2015 gongsimingzi. All rights reserved.

//

// 数组当做函数参数传递时,会当做指针变量来使用,指针变量在64bit编译器环境下,占据8个字节

#include <stdio.h>


#define LEN 256


int maxA(int array[],int length)

{

   int max = array[0];

   for(int i = 1;i < length;i++){

       if(array[i] > max){

            max = array[i];

        }

    }

   return max;

}


int main()

{

   int ages[] = {11,90,67,126,23};

    

    

   int max =maxA(ages,sizeof(ages) /sizeof(int));

    

   printf("%d\n",max);

   return 0;

}



//  找出整型数组元素的最小值

//

//  Created by 李佳乐 on 15-3-13.

//  Copyright (c) 2015 gongsimingzi. All rights reserved.

//


#include <stdio.h>

#define LEN 256

int minA(int ages[],int length){

    //定义变量存储数组的最小值

   int min = ages[0];

    

   for(int i = 1;i < length;i++){

       if(ages[i] < min){

            min = ages[i];

        }

    }

    

   return min;

}

int main(int argc,constchar * argv[]) {

  int ages2[] = {22,33,44,66,55};

    

   int min =minA(ages2,sizeof(ages2) /sizeof(int));

   printf("%d\n",min);

   return 0;

}



//  输入数组进行统计

//

//  Created by 李佳乐 on 15-3-13.

//  Copyright (c) 2015 gongsimingzi. All rights reserved.

//


#include <stdio.h>

#define LEN 256


int main(int argc,constchar * argv[]) {

    //输入数组

   int nums[LEN];

   int input;

   int i = 0;

   char ch;

   double sum = 0, avg, max, min;

    

   do{

      scanf("%d",&input);

       

      scanf("%c",&ch);

       

      if(ch != 'q')

       {

           nums[i++] = input;

       }

    }while(ch !='q');

    

    

    min = max = nums[0];

   

   for(int index = 0; index < i; index++){

        sum += nums[index];

        

       if(nums[index] > max){

            max = nums[index];

        }

       if(nums[index] < min){

            min = nums[index];

        }

    }

    

    avg = sum / i;

    

    printf("sum = %.4f\n",sum);

    printf("avg = %.4f\n",avg);

    printf("max = %.4f\n",max);

    printf("min = %.4f\n",min);

   return 0;

}




//  数组内元素逆序存放

//

//  Created by 李佳乐 on 15-3-13.

//  Copyright (c) 2015 gongsimingzi. All rights reserved.

//


#include <stdio.h>


int main(int argc,constchar * argv[]) {

  //定义变量

   int num[4];

   int temp;

    //逐个输入数组元素

    printf("请输入 : \n");

   for(int i = 0;i < 4 ;i++)

    {

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

    }printf("\n");

    //将数组的元素逐个输出

   for(int i = 0;i < 4 ;i++)

    {

       printf("num[%d] = %d\n",i,num[i]);

    }

    printf("--分割线--\n");

    //将元素中得前后元素的位置互换

   for(int i = 0;i < 2;i++)

    {

        temp = num[i];

        num[i] = num[3 - i];

        num[3 - i] = temp;

    }

   for(int i = 0;i< 4;i++)

    {

        printf("num[%d] = %d\n",i,num[i]);

    }

    

   return 0;

}



//  数组元素作为元素参数

//

//  Created by 李佳乐 on 15-3-14.

//  Copyright (c) 2015 gongsimingzi. All rights reserved.

//

/*

数组元素,单独拿出来就与普通变量一样

 

 int nums[] = {1,,2,3};

 nums[0];

 

 1> 赋值: nums[0] = 123;

 2> 取值: int res = nums[0];

 3> 运算: nums[0]++;

 

 函数参数传递的方式

 

 如果函数的参数是如例一样有基本类型定义(int,long,float,char))

 那么函数的调用就为值传递,实际调用时使用的参数是实参

 在调用中,将实参的数值(内存中存储的值)复制一份,传递给函数的形参

 

 */



//打印两个操作数字的和

#include <stdio.h>


void printSum(int num1,int num2){

   printf("%d\n",num1+num2);

}


void change(int num){

   printf("%d\n",num);

    num  = 0;

   printf("%d\n",num);

}


int main(int argc,constchar * argv[]) {

    

  /*

    1 直接传递常量

    printsum(10,12);

    

    2 直接传递变量

    int n1 = 11,n2 = 12;

    printSum(n1, n2);

    

    3 直接传递数组元素

    数组的元素就相当于一个变量,因此函数的声明与定义与使用变量作为参数的函数定义

    语法一样

    

    int nums[] = {11,22,33};

    printSum(nums[0],nums[1]);

    */

   int nums[]={1,2,3,4,5,6,7,8,9};

   printf("%d\n",nums[8]);

   change(nums[8]);

    printf("Hello, World!\n");

   return 0;

}




将数组名作为函数参数

调用语法:

int nums[] = {....};


func(nums);


需要注意,函数的声明语法为


返回类型 函数名(数据类型形参变量名[]);


    void func(int arr[])


补充说明:


1>数组名作为函数参数,此时传递的是数组的首地址

2>传递的是地址,那么成为引用传递

3>如果传入的是地址,那么在函数中数组与在函数外的数组是用一个数组

4>函数传参的过程中,只是将数组的地址传过去了,数组的长度会丢失

5>一般数组名作为函数参数的时候,函数会带有第二个参数,用于表示数组的长度


void func(int arr[],int length);


将数组作为函数参数的函数定义为


void func(int arr[3],int length);


如果是传递的地址,就称为引用传递,引用传递函数内对数据的修改会再函数结束后保持下来


void func(int num){

    num = 10;

}


void func(int num[]){

    num[0] = 10

}


*/


#include <stdio.h>


void func(int arr[],int length){

    //定义了一个数组名为函数参数的函数

    //打印arr的地址

    printf("arr的地址%p,长度为%lu\n",arr,sizeof(arr));

   for(int i = 0;i < length;i++){

       printf("%d\n",arr[i]);

    }

}


int main(int argc,constchar * argv[]) {

   int nums[] = {1,2,3};

   func(nums, 3);

   return 0;

}



// 1、判断一个数组中元素的值,如果值大于0,则打印该值,如果小于0,则输出0

// 2、写一个程序,初始化一个数组。要求数组长度为10,里面的值为0-9的随机数,并且每一个数字出现一次。

#include <stdio.h>


//准备一个函数

//int translate(int num);

//如果是大于0的就不变,如果小于0就变为0


int translate(int num){

   return num > 0 ? num : 0;

}


//为什么要返回,二不是在函数中打印

//使用函数的原则是尽量的短小,尽量的控制在单个任务中



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

   

   int nums[] = {0,-1,-20,3,21,5,4,-1,-4,10},temp;

    

   for(int i = 0;i <sizeof(nums) / sizeof(int);i++){

        temp =translate(nums[i]);

   printf("%d\n",temp);

    }

    

   

   return 0;

}


//  数组练习2

//

//  Created by 李佳乐 on 15-3-14.

//  Copyright (c) 2015 gongsimingzi. All rights reserved.

//



// 写一个程序,初始化一个数组。要求数组长度为10,里面的值为0-9的随机数,并且每一个数字出现一次。#include <stdio.h>

/*

1 创建数组

2 创建随机数

3 存到数组中 nums[i++] = ..

4 使用循环创建数据,并加入到数组中,while(i < 10)

5 创建数字,判断数组中是否有该数字,如果没有就加入,如果有就重新创建

6 如何判断一个数字在数组中或不在数组中

int nums[] = {1,2,3};

遍历一下,直到遍历结束,如果没有个数字,就表示不在.有的话 跳出


*/


#include <stdio.h>

#include <stdlib.h>

#define LEN 256


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

    

    //创建数组与必要的变量

   int nums[LEN],i = 0,temp,index;

   while(i < 10){

        temp =arc4random_uniform(10);//0-9的随机数

        //判断temp是否在数组中

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

           if(temp == nums[index]){//表示找到相同的了,即数组中存在

               break;

            }

        }

       if(index == i){

            //for循环正常结束,即表示没有相同的

            nums[i++] = temp;

        }

    }

    //将随机数打印出来

   for(int j = 0;j < 10;j++){

       printf("%d个数是%d\n",j+1,nums[j]);

    }

    

   return 0;

}


//  对数组初始化求数组的最大最小和与平均

//

//  Created by 李佳乐 on 15-3-14.

//  Copyright (c) 2015 gongsimingzi. All rights reserved.

//


#include <stdio.h>

//写一个可以对数组初始化的函数


void initArray(int nums[],int length)

{

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

    for(int i = 0;i < length;i++){

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

    }

}


//写出函数,求数组的最大最小

int max(int nums[],int length){

    int maxnum = nums[0];

    for(int i = 1;i < length;i++){

        if(nums[i] > maxnum)maxnum = nums[i];

    }

    return maxnum;

}


int min(int nums[],int length)

{

    int minnum = nums[0];

    for(int i = 1;i < length;i++){

        if(nums[i] < minnum)minnum = nums[i];

    }

    return minnum;

}


//写函数求数组的和与平均


int sum(int nums[],int length){

    int sum = 0;

    for(int i = 0;i < length;i++){

        sum += nums[i];

    }

    return sum;

}


double avg(int nums[],int length){

    return sum(nums,length) * 1.0 / length;

}

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

  

    int nums[10];

    

    initArray(nums, 10);

    

    printf("最大值为%d\n", max(nums, 10));

    printf("最小值为%d\n", min(nums, 10));

    printf("平均值为%lf\n", avg(nums, 10));

    printf("和为%d\n", sum(nums, 10));


    

    

    return 0;

}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值