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的值大)