C语言之数组

一、数组之一维数组

  1、一维数组的定义 

    int array[3]; //定义了一个一维数组,名字叫array,一共有三个元素,每个元素都是int类型。
    array[0] = 10;
    array[1] = 20;
    array[2] = 30;
    array[3] = 40; //错误,,没有array[3]这个元素,切记
    printf("%d",array[0]); // 10

  2、数组在内存的存储方式
    数组在内存中就是一段连续的空间,每个元素的类型都是一样的。

  3、一维数组初始化
    int array[3] = {1,2,3,};//定义的同时为数组成员赋值
    int array[5] = {1,3,4}; //未赋值的元素自动补0。
    int array[5] = {0};//所有元素均为0。
    循环遍历赋值
    for(i=0;i<10;i++)
    {
      printf("array[%d]=%d\n",i,array[i]);
    }

    for(i=0;i<10;i++)
    {
      scanf("%d",&array[i]); //循环输入来赋值

    }

  4、实例:

    1、求数组中最大元素的值  

     
#include<stdio.h>
int main(void)
{
    int
array[6] = {2,3,-1,4,1513,5}; int max=array[0]; int i; for(i=1;i<7;i++) { if (max<array[i]) { max = array[i]; } } printf("最大值:%d",max);

return 0;
}

    2、求数组中最小元素的值和其下标

#include<stdio.h>
int main(void)
{

    int array[6] = {2,3,-1,4,1513,5};
    int max=array[0];
    int index = 0;
    int i;
    for(i=1;i<7;i++)
  {
        if (max>array[i])
    {
    max = array[i];
    index = i;
     }    
   }
    printf("最大值:%d,下标:%d",max,index);
        return 0;
}       
View Code

     3、将数组元素逆置

#include<stdio.h>
int main(void)
{
  // for循环版
    int array[6] = {2,3,-1,4,1513,5};
    int temp;
    int i;
    for(i=0;i<=2;i++)
    {
        temp = array[i]; //中间变量实现两者的互换
        array[5-i] = array[i];
        array[i] = temp;
            
    }
    for(i=0;i<6;i++)
    {
        printf("array[%d] = %d\n",i,array[i]);
    }
 
    return 0 ;
}

    while循环版

#include<stdio.h>
int main(void)
{
  //  while循环版
    int array[6] = {2,3,-1,4,1513,5};
    int temp;
    int max = 5;
    int min = 0;
    while(min<max)
    {
        temp = array[min];
        array[min] = array[max];
        array[max] = temp;
        max--;
        min++;

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

      return 0 ;          
}
View Code

    4、水仙花数:一个n位数,它的每个位上的n次幂的和,等于这个数本身。

      如:153、370

      实例:求100到999之间的所有水仙花数。     

#include<stdio.h>
#include<math.h>
int main(void)
{
    int i,g,s,b;
    int sum = 0;
    for(i=100;i<1000;i++)
    {
        g = i%10; // 个位 
        s = i/10%10; // 十位 
        b = i/100; // 百位 
        //sum = g*g*g+s*s*s+b*b*b;
        sum = pow(g,3)+pow(s,3)+pow(b,3); // pow(a,b) a为底数,b为 指数 
    
        if(sum==i)
        {
            printf("水仙花数:%d\n",i);
        }
    
    }
    return 0;
}

      答案在这里:

水仙花数:153
水仙花数:370
水仙花数:371
水仙花数:407
View Code   

    5、求3到100的素数(素数是除了1和自己以外,不能被其他整数整除的整数。)

#include<stdio.h> 
int main(void)
{
    int i,j;
    
    for(i=3;i<100;i++)
    {
        int flag = 0; //标志位 
        for(j=2;j<i;j++)
        {
            if(i%j==0)
            {
                flag = 1;  // 不为素数 
                break;  // 跳出循环 
            }
        }
        if (flag==0)
        {
            printf("%d是素数!\n",i);
        }
    }
    return 0;
}

    答案:

3是素数!
5是素数!
7是素数!
11是素数!
13是素数!
17是素数!
19是素数!
23是素数!
29是素数!
31是素数!
37是素数!
41是素数!
43是素数!
47是素数!
53是素数!
59是素数!
61是素数!
67是素数!
71是素数!
73是素数!
79是素数!
83是素数!
89是素数!
97是素数!
View Code

 

二、数组之二维数组

  1、二维数组的定义  

    int array[2][3];//定义了一个二维数组,有两个array[3],即2行3列,更像一个表格
    printf("%d\t%d\n",sizeof(array),sizeof(array[0])); // 24个字节 12个字节
    array[0][0] = 0; //给第1行第1列赋值
    array[0][1] = 1; //给第1行第2列赋值
    array[1][2] = 2; //给第2行第3列赋值 

  2、二维数组的初始化 

    int b[2][3] = {{1,2,3},{5,6,7}}; //定义了一个二维数组同时初始化成员
    int b[2][3] = {0}; //定义了一个二维数组同时初始化成员都为0  

#include<stdio.h> 
int main(void)
{    
    int b[2][3];
    int i,j;
    for(i=0;i<2;i++) 
    {
      for(j=0;j<3;j++)
      {
        printf("b[%d][%d]=%d\n",i,j,b[i][j]);
      }
    }
    return 0 ;      
}
   //输出
    /*
        b[0][0]=1
        b[0][1]=2
        b[0][2]=3
        b[1][0]=5
        b[1][1]=6
        b[1][2]=7
    */

  3、实例:

    1、分别求二维数组行、列的和   

#include<stdio.h>

int main(void)
{
    int a[2][3] = {{1,2,3},{6,7,8}};
    int i,j;
    for(j=0;j<3;j++) 
    {
    int sum1= 0;
    for(i=0;i<2;i++)
    {
        sum1+=a[i][j];//每一列的值的和
             
    }
    printf("%d\n",sum1); // 7 
    }
    for(i=0;i<2;i++)
    {
        int sum2 = 0;
        for(j=0;j<3;j++)
        {
        sum2+=a[i][j];//每一行的值的和
        }
        printf("%d\n",sum2); // 6 
    }
   return 0;
}
View Code

    2、冒泡排序

#include<stdio.h> 
int main(void)
{
    int a[10] = {1,4,2,5,6,21,7,0,32,3};
    int i,j,temp;
    for(i=0;i<10;i++)
    {
        for(j=1;j<10-i;j++)
        {
            if(a[j-1]>a[j])
            {
                temp = a[j-1];
                a[j-1] = a[j];
                a[j] = temp;
            }
        }
    }
    for(i=0;i<10;i++)
    {
        printf("a[%d]=%d\n",i,a[i]);
    }
    return 0;
}

  答案:

a[0]=0
a[1]=1
a[2]=2
a[3]=3
a[4]=4
a[5]=5
a[6]=6
a[7]=7
a[8]=21
a[9]=32
View Code

 

  

posted @ 2018-03-11 17:20  暮光微凉  阅读(532)  评论(0编辑  收藏  举报