C語言回顧-整型變量修飾符和一維數組

1.整型變量修飾符數組

1)改變整型變量的存儲空間xcode

#include <stdio.h>

int main(int argc, const char * argv[]) { //改變整型變量佔用的存儲空間 //int4 short2 long8 (long long)8 //short int佔兩個字節
    short int a=1; short int a1=a<<15;//2字節最小的負數-32768
    a1=(a<<15)-1;//2字節最大的正數32767
    printf("%hd\n",a1); int b=1;//int 類型佔4字節
    int b1=b<<31;//4字節最小的負數
    b1=(b<<31)-1;//4字節最大的正數
    printf("%d\n",b1); long int c=1;//8字節
    long int c1=c<<63; c1=(c<<63)-1; printf("%ld\n",c1); return 0; }

2)改變整型變量的符號函數

    //計算機默認的是有符號數
    unsigned short d=0-1;//每位都變成1
    printf("%u\n",d); unsigned int e=0-1; printf("%u\n",e);

2.char類型常量的存儲問題優化

sizeof('a');//4,先找到‘a’d的ascii碼值97,把97的按照int類型進行存儲spa

ch a='a'; sizeof(a);//1,先找到‘a’d的ascii碼值97,把97的按照一個字節存儲code

一個字節範圍-128-127;0-127用來存儲特殊的符號blog

3.數組排序

把具備相同類型的若干變量按有序的形式組織起來,這些按序排列的同類數據元素的集合稱爲數組ci

一維數組:數組的每一個元素都不是一個數組io

定義格式:數組類型 數組名 [數組長度]

1)數組長度能夠是常量或者常量表達式

2)數組名不能和其餘變量同名

3)數組的長度不能夠爲一個變量,xcode已優化

4)能夠使用宏定義

5)定義數組的時候能夠同時定義普通變量 int x,y,a[4];

一維數組的初始化

1)定義的同時進行初始化,部分初始化

int a[4]={1,2,3,4};

int a[]={1,2,3,4};//數組的長度根據後面的值的個數決定

int a[4]={1,2};

int a[4]={[3]=4,[8]=34};//給下標是3和8的元素賦值

2)先定義後初始化

3)使用變量定義的數組不能夠定義數組的同時對數組進行初始化

 若是數組沒有進行初始化,這時候數組元素是隨機的垃圾值

若是進行了部分初始化,沒初始化的那部分元素也自動被系統初始化爲0了

對於字符是組來講,沒有初始化的那部分元素也被系統初始化爲0了

先定義後初始化的方式,若是部分元素被初始化了,系統不會對沒有初始化的那部分元素進行初始化

4.一維數組的引用(訪問)

a[0]...a[n-1]

5.一維數組的存儲方式

1)連續的存儲空間

2)數組名錶明數組的首地址

3)每一個元素的長度同樣

4)數組中元素之間的地址是連續的

5)數組名是一個常量,存儲的是數組的首地址

6.一維數組長度的計算方法

sizeof(數組名);//字節數

sizeof(數組名)/sizeof(數組元素類型);//數組長度

7.數組元素做爲函數參數,實參和形參指向一樣的地址空間,修改形參數組元素的值,實參的值也會改變

數組名做爲函數參數後,數組的長度信息會丟失,sizeof(arr)變成8,地址佔8個字節

8.冒泡排序:相鄰的數比較,大的數放後面,每趟取得最大的數放在最後

#include<stdio.h>
int main(int argc, const char * argv[]) { //定義一個字符數組
    int a[10]={22,34,5,45,51,62,66,44,32,31}; int temp; for(int i=0;i<10-1;i++){ for(int j=0;j<10-1-i;j++){ if(a[j]>a[j+1]){ temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } for (int i=0;i<10;i++){ printf("%d\t",a[i]); } return 0; }

9.選擇排序:每個數跟後面的數比較,小的放到當前位置

#include<stdio.h>
int main(int argc, const char * argv[]) { //定義一個字符數組
    int a[10]={22,34,5,45,51,62,66,44,32,31}; int temp; for(int i=0;i<10;i++){ for(int j=i+1;j<10;j++){ if(a[i]>a[j]){ temp=a[j]; a[j]=a[i]; a[i]=temp; } } } for (int i=0;i<10;i++){ printf("%d\t",a[i]); } return 0; }

第二種方式:

#include<stdio.h>
int main(int argc, const char * argv[]) { //定義一個字符數組
    int a[10]={22,34,5,45,51,62,66,44,32,31}; int min; int temp; for(int i=0;i<10;i++){ min=i;//假設每次最小元素的下標是i;
        for(int j=i+1;j<10;j++){ if(a[min]>a[j]){ min=j;//找到最小元素的下標
 } } if(i!=min){//若是i=min不用交換,不然交換
            temp=a[min]; a[min]=a[i]; a[i]=temp; } } for (int i=0;i<10;i++){ printf("%d\t",a[i]); } return 0; }

10.折半查找:在有序數組中查找一個值,思路:設置一個low=0;higt=length-1找中間的元素mid=(low+high)/2跟key值比較,若是key值>mid的值,high=mid-1,若是key值大於mid,那麼low=mid+1;繼續查找,直到相等

//折半查找
    int key=51; int low=0,high=10-1; int mid=0; while(low<=high){ mid=(low+high)/2; if(key<a[mid]){ high=mid-1; }else if(key>a[mid]){ low=mid+1; }else{ printf("找到了%d",mid); break; } }

若是要插入一個數到有序數組中,那個返回的下標應該是low(查找不到的話,low的值比high的值大)

相關文章
相關標籤/搜索