C语言学习笔记-数组

数组: 相同类型 数据的 有序 集合 ,在内存中连续存放。
 由数组名和下标惟一地确定每个 数组元素
 每个元素都属于同一类型
一批相同类型的变量使用同一个数组变量名,用下标来相互区分。
优点:表述简洁,可读性高;便于使用 循环 结构

这次我们先讲一维数组

类型名  数组名 [数组长度](这里数组长度为常量)

类型名:数组元素的类型

数组名:数组(变量)的名称,标识符

数组长度:常量表达式,给定数组的大小

比如说

int a[10];

 定义一个含有10个整型元素的数组 a

char c[200];

定义一个含有200个字符元素的数组 c

float f[5];

定义一个含有5个浮点型元素的数组 f

当然要记得先定义后使用,且在使用的过程中记得

只能引用单个的 数组元素 ,不能一次引用整个数组

int  a[10];

10个数组元素:a[0]、a[1]、…… a[9]

数组元素:数组名[下标]

下标:整型表达式

下标取值范围:[0,数组长度-1](不要越界!) 


接下来我们就来拿一维数组编程

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

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

}

数组下标作为循环变量,通过循环,逐个

处理数组元素

 还是斐波那契:用数组计算fibonacci数列的前10个数,并按每行打印5个数的格式输出。这些兔子课真会生

# include <stdio.h>
# define MAXN 46	 /* 符号常量 */
int main(void)
{   int i, n;
    int fib[MAXN] = {1, 1};   /* 数组初始化 */
    printf ("Enter n: ");  scanf ( "%d", &n );
    
    for ( i = 2; i < n; i++ ){   
        fib[i] = fib[i - 1] + fib[i - 2];
    }
    for ( i = 0; i < n; i++ ){ 
        printf ( "%11d", fib[i] );
        if ( (i + 1) % 5 == 0 ){      /* 5个数换行 */
            printf("\n");  }
     }
    if(n % 5 != 0) {  printf("\n"); } /* 总数不是5的倍数换行 */
    return 0;
}    

 这里穿插一下我对于数组的一个奇怪的用法

这样一道题,由于这两位傲娇的师傅非得扫同一段路(直接裁掉算了[doge]),我们将数组赋0,将扫过的地段赋1,相当于我们之前那个flag的那种感觉:

#include<stdio.h>
int main(void)
{
 int d, Q, m, n, leave;
 scanf("%d",&d);
 scanf("%d",&Q);
 int i,j,count=0,t;
 int a[d];
 for(i=0;i<d;i++)
 a[i]=0;
 for(i=1;i<=Q;i++)
 {
  scanf("%d %d", &m, &n);
  for(j=m;j<=n;j++)
  {
      a[j-1]=1; 
  }
 }
 for(t=0;t<d;t++)
  {
   if(a[t]==0)
   count++;
  }
 leave=count;
 printf("%d",leave);
}

这道题思路比较简单,但是几个for循环记住不要乱,我开始时头脑一热搞了嵌套的,整得花里胡哨的,把自己都弄傻了 

自降难度,来看道入门题,简单的进行插入排序:

就是输入了N个数,+1只有把X搞进去,然后进行排序

#include<stdio.h>
int main(void)
{
   int N,X,i,t,j;
   scanf("%d",&N);
   int a[N];
   for(i=0;i<N;i++)
   {
       scanf("%d",&a[i]);
   }
   scanf("%d",&X);
   N+=1;
   a[N-1]=X;
   for(i=0;i<N;i++)
   {
        for(j=0;j<N-i-1;j++)
        {
            if(a[j]>a[j+1])
            {
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            
			}
		} 
    }
    for(i=0;i<N;i++)
    printf("%d ",a[i]);
} 

 在这里我们又看见了熟悉的元素交换,其实就是最大小值的比较,再加上一个for循环,简单的排序就完成了

这道题呢

 

#include<stdio.h>
int main()
{   
   int n,m,count=0;
   int a[30],b[30],c[100];
   scanf("%d",&n); 
   for(int i=0;i<n;i++)
   scanf("%d",&a[i]);
   scanf("%d",&m);
   for(int i=0;i<m;i++)
   scanf("%d",&b[i]);
   for(int i=0;i<n;i++)
   {      //先判断a数组的每个元素是否与b数组的元素相等 
       int flag1=1;
       for(int k=0;k<m;k++)
       {
           if(a[i]==b[k])
           {
               flag1=0;
               break;
           }
        }
        if(flag1==1)
        {   //如果与b数组的每个元素都不相等 
            int flag2=1;
            for(int l=0;l<count;l++)
            {    //判断该数是不是已经在c数组中了 
                if(a[i]==c[l])
                {
                flag2=0;
                break;
                }
            }
            if(flag2==1) //如果不在c中则存进c数组中 
            c[count++]=a[i]; 
        }
    }
    for(int i=0;i<m;i++)
    {   //先判断b数组的每个元素是否与a数组的元素相等 
        int flag1=1;
        for(int k=0;k<n;k++)
        {
           if(b[i]==a[k])
           {
                flag1=0;
                break;
           }
        }
        if(flag1==1)
        {   //如果与a数组的每个元素都不相等 
            int flag2=1;
            for(int l=0;l<count;l++)
            {    //判断该数是不是已经在c数组中了 
                if(b[i]==c[l])
                {
                   flag2=0;
                   break;
                }
            }
            if(flag2==1)  //如果不在c中则存进c数组中 
            c[count++]=b[i]; 
        }
    }
    for(int i=0;i<count;i++)
    {   //输出c数组 
        if(i==0) 
        printf("%d",c[i]);
        else 
	    printf(" %d",c[i]);
    }
    return 0;
}


 要留意这个重复出现的数是否已经在同一个数组里了

 既然有比较的题,那我们来看看查找的:输入正整数n (1n10)和整数x,再输入n个整数并存入数组a中, 然后在数组中查找x,如果找到,输出所有满足条件的元素的下标,否则,输出“Not Found”。

# include <stdio.h>
# define MAXN 10
int main(void)
{   int i, flag, n, x; int a[MAXN];    
    printf ("Enter n, x: ");  
    scanf("%d%d", &n, &x);
    for ( i = 0; i < n; i++ ) 
    {
          scanf ( "%d", &a[i] );
    }
    flag = 0;
    for ( i = 0; i < n; i++ ) {
        if ( a[i] == x ){ 
            printf ( "Index is %d\n", i );
            flag = 1;
        }
    }
    if ( flag == 0 ) {    
         printf("Not Found\n");
    }
    return 0;
}   

今天刚好带了电脑(主要是上机课就写完了),就在电脑上敲了

下周见

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ryan-%

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值