设为首页 加入收藏

TOP

C语言数组类型、定义、初始化、遍历讲解
2017-12-07 14:22:19 】 浏览:49
Tags:语言 类型 定义 初始 讲解

一、数组基础

1、数组的类型:

元素类型名[元素个数]

2、数组的定义:

元素类型名 数组名[元素个数] 定义一个包含十个int型元素的数组,数组名为arr:

int arr[10];//int为元素的类型,不是数组的类型,数组是int[10]类型的。

3、数组的初始化

数组的初始化分为完全初始化和部分初始化。

int arr[5] = {1, 2, 3, 4, 5};//完全初始化。
//完全初始化即为给数组的每个元素都赋值。
int arr2[5] = {1, 2};        //部分初始化。
//部分初始化为给数组的部分元素赋值,其余元素为随机值。
int arr3[5] = {};            //数组置零,即全部元素的值都为零。

4、数组遍历

编译器不会检查数组是否越界,可提高编译效率

数组遍历输入

void scfarr(int arr[], int len)
{
    int i = 0;
    for(i=0; i
  
   


数组遍历输出
   
void prtarr(int arr[], int len)
{
    int i = 0;
    for(i=0; i
    
     

5、数组名作为左值和右值

右值: 数组名arr作为右值代表第一个元素的首地址。 &arr代表数组的首地址,与arr数值相等,代表含义不同,(&arr+1)代表整个数组的后一项。 左值: 左值代表的是变量所对应的内存空间,数组作为一个整体,没有匹配的数值与其空间对应。 故数组不能作为左值,只能被初始化。

6、传值调用

数组名作为参数,要加上元素个数。 数组名作为参数传递的是数组首元素首地址。 数组名作为参数时,丢失了数组本身的大小,退化成了一个指针 。 子函数对数组的操作会改变元素的值,但不会改变元素的地址,在子函数内改变的地址作为形参在子函数结束时被销毁。

二、数组的应用

1、冒泡排序

void mppx(int arr[], int len)
//arr为被排序的数组名,len为数组长度。
{
    int i = 0, j = 0, tem = 0;
    for(i=0; i
      
       arr[j+1])
            {
                tem = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = tem;
            }
        }
    }
    return;
}
      

2、选择排序

void xzpx(int arr[], int len)
//arr为被排序的数组名,len为数组长度。
{
    int i = 0, j = 0, tem = 0;
    for(i=0; i
      
       arr[j])
            {
                tem = arr[j];
                arr[j] = arr[i];
                arr[i] = tem;
            }
        }
    }
    return;
}
      

3、进制转换

int fun(void) 
{ 
    char arr[100]={0}, i = 0; 
    int a = 0, b = 0; 
    printf("输个数!\n"); 
    scanf("%d",&a); 
    printf("几进制?\n"); 
    scanf("%d",&b); 
    do 
    {
        arr[i] = a % b;
        a = a / b; 
        i++; 
    }while(a > 0); 
    for(i=i-1; i>=0;i--) 
    { 
        if(arr[i] < 10) 
        printf("%d",arr[i]);
        else 
        printf("%c",arr[i]-10+'A');
    } 
} 

4、二分法查找数据的角标

#include 
      
       


int search_arr_element(int arr[], int left, int right, int data);


void main(void)
{
    int arr[5] = {1, 2, 3, 4, 5};
    printf("%d\n",find_data(arr, arr[0], arr[4], 5));
    return;
}



int find_data(int arr[], int left, int right, int data)
{
    int mid = 0;
    while (left <= right)
    {   
        mid = (left+right) / 2;
        if(data > arr[mid])
        {
            left = mid + 1;
        }
        else if(data < arr[mid])
        {
            right = mid - 1;
        }
        else
        {   
            return mid;
        }
    }
    return -1;
}
      

5、循环右移

#include 
      
       
#include 
       
         void right(char arr[], int wei); void main(void) { char arr[] = "qaujetg"; int a = 0; printf("几位?\n"); scanf("%d", &a); right(arr, a); printf("%s\n", arr); return; } void right(char arr[], int wei) { int i = 0, j = 0, tem = 0, len = strlen(arr); for(i=0; i
        
         0; j--) arr[j] = arr[j-1]; arr[0] = tem; } return; }
        
       
      
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C语言面试三道题分享 下一篇C语言指针传递参数讲解(代码实例..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

最新文章

热门文章

C 语言

C++基础

windows编程基础

linux编程基础

C/C++面试题目