C語言一維數組聲明、引用和調用(C89)


基礎知識

1.數組聲明:儲存類型 類型說明符 數組名[整型常量表達式];聲明時必須指定數組大小,其占用的空間是確定的。

2.數組名代表連續儲存區域的起始地址,是個地址常量。因此數組名不能作為左值使用,只能逐個引用數組元素。

3.一維數組的初始化有四種形式,初值不能含有變量或函數調用形式。動態局部數組全部元素初值不確定,不應直接使用。

int a[5]={1,2,3,4,5};   //初始化所有元素
int b[5]={1,2};       //其余元素為0
int c[5]={0};        //全部元素為0
int d[]={1,2,3,4,5};    //大小由初值個數決定

4.引用一維數組:“ 數組名[下標] ”與“ *(數組名+下標) ”含義相同,下表是浮點數則簡單地把小數部分去掉。

5.使用指針間接引用一維數組

  • 以下三種寫法等價。
int a[10];
int *p=&a[0];
int a[10];
int *p=a;
int a[10];
{
    int *p;
    p=&a[0];
}
  • p+k和a+k都指第k號元素的地址;
  • *(p+k)=*(a+k)=a[k],指第k號元素;
  • 地址變量p可以進行++和--運算;數組名a是地址常量,不能進行++或--運算;
  • 指針變量做減法運算獲取兩個數組元素之間的元素個數;
  • *p++指先取*p的值,再將p指向下一個元素;

6.一維數組作函數參數

  • 函數定義中以下寫法完全等價;
void f(int a[10],int n);
void f(int a[],int n);
void f(int *a,int n);
  • 指定數組大小是無效的,函數僅接收數組的起始地址,分配一個地址量長度的儲存空間;
  • 需要另設一個形參指出處理數組的大小;
//將數組a中的n個整數按相反順序存放
void invert(int x[],int n)
{
    int t,i=0,j=n-1;
    while(i<=j){
        t=x[i];
        x[i]=x[j];
        x[j]=t;
        i++;
        j--;
    }
}

一維數組應用

  1.埃拉托色尼篩法:①挖去1;②用下一個未挖去的數除后面的數,把該數的倍數挖去;③檢查是否小於sqrt(n),若否,結束;④剩下的數是素數。

#include<stdio.h>
#include<math.h>

int main()
{
    int a[50]={0},n,k,p=2;
    scanf("%d",&n);
    for(k=2;k<=n;k++)
        a[k]=k;
    for(p=2;p<=(int)sqrt(n);p++)
        if(a[p]!=0)
            for(k=p+1;k<=n;k++)
                if(a[k]&&k%p==0)
                    a[k]=0;
    for(k=2;k<=n;k++)
        if(a[k])
            printf("%d",a[k]);
    return 0;
}

  2.有12個人圍成一圈;按1~3報數,報到3的人離開;直到圈中只剩一人。

  • 用數組元素a[1]~a[12]表示十二個位置,初值非0;
  • 使用內循環,當該位置元素非0時增1,直到3將該元素歸0;
  • 對賦值0的元素計數,當計數11時,非0值得位置即所求。
#include<stdio.h>

int main()
{
    int a[13]={0},i,m,count;
    for(i=1;i<13;i++)
        a[i]=1;
    for(i=0,count=1;count<12;count++){
        for(m=0;m<3;){
            i=i%12+1;
            if(a[i]!=0)
                m++;
        }
        a[i]=0;
    }
    for(i=1;i<13;i++)
        if(a[i])
            printf("%d",i);
    return 0;
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM