C语言 数组

来源:互联网 发布:数据库规范化理论 编辑:程序博客网 时间:2024/06/11 03:48

#include <stdio.h>

#include <stdlib.h>

#include <string.h>


//函数的声明

void changeScalar(int x);


void changArray(int arr[5]);


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

   

   int sum = 0;

   for (int i =1; i<= 100; i++)

    {

        sum += i;

    }

    

   /*

     C语言的数组

     1.数组的概念及定义

     

     2.访问数组

     

     3.操作数组

     

     4.字符数组 字符串数组

     

     5.数组作为函数参数

     

     6.二维数组

     

     7.结构体的定义及使用

     

     */

    

   /*

     数组的概念

        数组是一个集合,它在计算机内存空间中是一串连续的地址空间,它可以存储多个 同类型的 变量

     

     数组是一个存储多个同类型 变量连续的 集合

     

     数组的定义:

        

        数组的类型  数组名[长度] = {元素1,元素2,...};

     

     */

   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 str[] = {'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};

    

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

  

    //求数组里面元素的和

   int sum2 = 0;

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

        sum2 += array[i] ;

    }

    

//    printf("%d\n",sum2);

    

    //将数组倒序排序

   int tmp ;

    

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

    {

        tmp = array[i];

        array[i] = array[count-1 - i];

        array[count -1-i] = tmp ;

    }

    

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

    {

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

    }

    

   /*

     数组的定义必须要有大小

     数组只能存放同一类型的变量

     数组的元素是用下标访问,且下标从0开始

     数组的长度为 sizeof(数组变量名) / sizeof(数组的类型)

     */

    

   /*

     随机产生20个在[1,100]的数,且此20个数不相同,存放到一个数组中,求和,求最大值,求最小值,求平均数

    

     arc4random()

     #include<stdlib.h>

     

     */

   int arrayNum[20];

   int i = 0;

   do {

       int num = arc4random() %100 +1;

       if (i == 0)

        {

            arrayNum[0] = num;

            i++;

        }

       int j = 0;

       for (; j < i; j++)

        {

           if (arrayNum[j] == num)

            {

               break;

            }

        }

        

       if (j == i)

        {

            arrayNum[i] = num;

            i++;

        }

    }while (i < 20);

    

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

    {

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

    }

    

   //求和

    //求最大值

    //求最小值

    

    //冒泡排序算法

    

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

    

    printf("排序前的顺序:");

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

    {

       printf("%d ",arrayNum[i]);

    }

   printf("\n");

    

    //排序开始,外层循环为趟数,比数组元素个数少一

   for (int i =0; i < count -1; i++)

    {

        //每趟排序所用循环

       for (int j =0; j < count -1 -i; j++)

        {

            

           if (arrayNum[j] > arrayNum[j+1])

            {

               int temp = arrayNum[j];

                arrayNum[j] = arrayNum[j+1];

                arrayNum[j+1] = temp;

            }

        }

//        printf("%d趟循环排序的结果为: ",i+1);

//        

//        for (int k = 0; k< count; k++)

//        {

//            printf("%d ",arrayNum[k]);

//        }

//        printf("\n");

    }

    

    printf("冒泡排序后的值为:\n");

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

    {

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

    }

    

    //最小值就是排序后数组的第一个元素

    //最大值就是排序后数组的最后一个元素(count -1)

    //求平均求和/个数


    //字符数组 字符串数组

   char c1[10] = {'i','b','k','a','n'};

   char c2[] = {'w','i','s','d','o','m'};

    

   /*

     字符数组:

     如果花括号提供的字符个数大于数组长度,按语法错误处理;

     如果小于数组长度,则只将这些字符数组中前面那些元素算上,其余的元素自动定位空字符('\0')

     */

    

    //字符数组初始化的另一种方式--即可以用字符串常量来初始化字符数组

   char newC1[] = "ibokan";

    

   /*

     什么是字符串?

     字符串是一组字符的组合,可以用来描述文本信息。但是,在C语言中,无法将一个字符串作为一个整体存储到一个变量中。所以。将字符串拆分为多个字符,然后存储到一个字符数组中。

     

     注意:

     1.C语言中,使用双引号引起来的字符序列为字符串。字符串也为字符常量,在存储字符串的时候,结尾加上一个末端字符'\0'作为结束标志。

     2.上述这种字符数组的整体赋值只能在字符数组初始化时 使用,不能用于字符数组的赋值,字符数组的赋值只能对其元素一一赋值,

     

     char newC1[] ;

     newC1 = "ibokan";

     */

    

   char st1[13] ="Hello world!";

    //等价于

    char st2[13] = {'H','e','l','l','o',' ','w','o','r','l','d','!','\0'};

    

    //注意:数组名就是我们的数组元素首地址,所以在scanf()函数中,只需要使用数组名即可

   int ii ;

   scanf("%d",&ii);

    

   char st3[10];

//    scanf("%s",st3);

//    printf("%s\n",st3);

    

    //gets puts函数(P142)

   gets(st3);

   puts(st3);

    

   /*

     字符串的一些函数,包含在 #include<string.h>头文件中

     strcpy(str1,str2);

     strcat(str1,str2);

     strlen(str1);

     */

    

   char st5[100] ="ibokan";

   char st6[] = "wisdom";

   strcpy(st5, st6);

   puts(st5);

    

   strcat(st5, st6);

   puts(st5);

    

    //strlen返回的是无符号整型,所以需要强制转换

   int length =(int)strlen(st5);

    printf("length = %d\n",length);

    

    //数组作为函数参数与基本数据类型作为函数参数的区别

    //基本数据类型作为函数参数时

   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 count1 = sizeof(myArray) /sizeof(int);

    

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

    {

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

    }

    

    //函数的调用

   changArray(myArray);

    

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

    {

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

    }

    

   /*

     注意:C语言中将数组作为参数进行数据传递时,无论数据量大小,不将数组进行复制,而是将该数组本身传入函数内部。而函数内部所操作的数据就是函数外部所定义的那个数组。

     */

    

    //数组里面的元素能否是数组?

    

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

   int theArray2[] = {4,5,6};

    

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

    

   /*

     对于 int float  double

     int 数组名[][n] = {{},{},...};

     

     */

   int arr1[][3] = {1,4,5,1,5,7};

    //等价于

    //int arr1[2][3] = {{1,4,5},{1,5,7}};

    

   int arr2[][3] = {1};

    

    //访问二维数组的所有元素

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

    {

       for (int j =0; j<3; j++)

        {

           int r = arr1[i][j];

           printf("%d ",r);

        }

    }

   printf("\n");

    

   char R[][2] = {{'s','s'},{'x','x'}};

   for (int q =0; q <2; q++) {

       for (int w =0; w <2; w++) {

           char t = R[q][w];

           printf("%c ",t);

        }

    }

    

   printf("\n");

   int LucyNum = arc4random() %19 +1;

   printf("luckNum = %d",LucyNum);

    

   return 0;

}


void changeScalar(int x)

{

    //实现函数

    x =1000;

}


void changArray(int arr[5])

{

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

    {

        arr[i] +=10;

    }

}


0 0
原创粉丝点击