zoukankan      html  css  js  c++  java
  • C语言入门-数组

    今天十月一日,上午看阅兵激情澎湃,但是下午还是要继续写C语言,前面的这块很简单

    int number[100];
    
    scanf("%d" , &number[i]);
    
    

    一、定义数组

    1. <类型> 变量名称[元素数量]
    2. 元素数量必须是整数

    数组特点

    1. 所有的元素具有相同的数据类型
    2. 一旦创建,就不能改变大小
    3. (数组中的元素在内存中是连续以此排序的)

    二、数组例子

    写一个程序,输入数量不确定的[0,9]范围内的整数,统计每一种数字出现的次数,输入-1表示结束

    通常用到数组都是下面的步骤:

    #include <stdio.h>
    
    int main(void)
    {
    
    	// 数组的大小
    	const int number = 10;
    	int x;
    	// 定义数组
    	int count[number];
    	int i;
    
    	// 初始化数组
    	for (i = 0; i < number; i++)
    	{
    		count[i] = 0;
    	}
    
    	scanf("%d" , &x);
    	while( x != -1){
    		if(x >= 0 && x <= 9){
    			// 数组参与运算
    			count[x] ++;
    		}
    		scanf("%d" , &x);
    	}
    
    	// 遍历数组输出
    	for (i = 0; i < number; i++)
    	{
    		printf("%d:%d
    ", i , count[i]);
    	}
    
    	return 0;
    }
    

    三、数组运算

    数组的集成初始化

    int a[] = {2,4,6,7,1,3,5,9,11,13,23,14,32};
    

    集成初始化时定位

    	int a[10] = {[0] = 2 , [2] = 3,6};
    
    	int i;
    	for (i = 0; i < 10; ++i)
    	{
    		printf("%d	", a[i]);
    	}
    	// 2       0       3       6       0       0       0       0       0       0
    
    1. 用[n]在初始化数据中给出定位
    2. 没有定位的数据接在前面的位置后面
    3. 其他位置的值补零
    4. 也可以不给出数组大小,让编译器算
    5. 特别适合初始数据稀疏的数组

    数组大小

    1. sizeof给出整个数组所占据的内容的大小,单位是字节
    sizeof(a)/sizeof(a[0]);
    
    1. sizeof(a[0])给出数组中单个元素的大小,于是相除就得到了数组的单元个数
    2. 这样的代码,一旦修改数组中的初始的数据,不需要修改遍历的代码

    数组的赋值

    1. 数组变量本身不能被赋值
    2. 要把一个数组的所有元素交给另一个数组,必须采用遍历

    四、数组中查找元素

    数组作为函数参数时,往往必须再用另一个参数来传入数组的大小

    数组作为函数的参数时:

    1. 不能在[]中给出数组的大小
    2. 不能再利用sizeof来计算数组的元素个数
    #include <stdio.h>
    
    int main(void)
    {
    	int a[] = {2,4,6,7,1,3,5,9,11,13,23,14,32,};
    	int x;
    	int loc;
    	printf("请输入一个数字:
    ");
    	scanf("%d" , &x);
    
    
    	loc = search(x, a, sizeof(a)/sizeof(a[0]));
    	if (loc != -1)
    	{
    		printf("%d在第%d个位置上
    ", x , loc);
    	}else{
    		printf("%d不存在
    ", x);
    	}
    	return 0;
    }
    
    int search(int key , int a[] , int length)
    {
    	int ret = -1;
    	int i;
    	for (i = 0; i < length; i++)
    	{
    		if (a[i] == key)
    		{
    			ret = i;
    			break;
    		}
    	}
    	return ret;
    }
    

    五、素数

    判断是否能被已知的且<x的素数整除

    #include <stdio.h>
    
    int main(void)
    {
    	const int number = 10;
    	int prime[10] = {2};
    	int count = 1;
    	int i = 3;
    	while(count < number){
    		if (isPrime(i,prime,count))
    		{
    			prime[count++] = i;
    		}
    
    		// 进行调试
    		{
    			printf("i=%d 	cnt=%d	", i , count );
    			int i;
    			for (i = 0; i < number; i++)
    			{
    				printf("%d	", prime[i]);
    			}
    			printf("
    ");
    		}
    		i++;
    	}
    
    	for ( i = 0; i < number; i++)
    	{
    		printf("%d", prime[i]);
    		if ( (i+1)%5)
    		{
    			printf("	");
    		}else{
    			printf("
    ");
    		}
    	}
    	return 0;
    }
    
    
    int isPrime(int x, int knownPrimes[], int numberofKnowPrimes)
    {
    	int ret = 1;
    	int i;
    	for (i = 0; i <numberofKnowPrimes ; i++)
    	{
    		if ( x % knownPrimes[i] == 0)
    		{
    			ret = 0;
    			break;
    		}
    	}
    	return ret;
    }
    
    

    六、二维数组

    int a[3][5]
    // 通常可以理解为a是一个3行5列的矩阵
    

    二维数组的遍历

    for(i = 0; i<3; i++){
        for(j = 0; j<5; j++){
            a[i][j] = i * j;
        }
    }
    
    // a[i][j]是一个int,表示第i行第j列上的单元
    

    二维数组的初始化

    int a[][5] = {
        {0,1,2,3,4,},
        {2,3,4,5,6,},
    };
    
    1. 列数是必须给出的,行数可以有编译器来定
    2. 每行一个{},逗号分隔
    3. 最后的逗号可以存在
    4. 如果省略,表示补零
  • 相关阅读:
    在JS和.NET中使用JSON (以及使用Linq to JSON定制JSON数据)
    转载JSON格式化工具
    bzoj3771 Triple
    hdu 2082 找单词
    bzoj 3143: [Hnoi2013]游走
    Wannafly挑战赛17 B
    基尔霍夫矩阵
    矩阵&行列式
    luogu P2421 [NOI2002]荒岛野人
    bzoj 2818: Gcd
  • 原文地址:https://www.cnblogs.com/mengd/p/11615667.html
Copyright © 2011-2022 走看看