當前位置:首頁 » 存儲配置 » 數組存儲數據

數組存儲數據

發布時間: 2022-11-30 13:07:32

❶ 數組存儲的內容是什麼

數組存儲的內容是整型數據;
整型數據包括:布爾量、字元及整數類型。

❷ char類型數組可以存儲整型數值嗎

回答是可以的,因為所有數據在計算機內都是以2進製表示的

第一種情況:

char字元佔用一個位元組,本身就是以整數表示; char可以表示-128-127, unsigned char 0-255;

第二種情況:

你想把int 類型存放到char 數組,這也是可以的,只要數組有足夠的內存;

比如一般int 占 4個位元組,要存儲它至少定義char num[4];

比如 int a = 500; char num[4];

可以通過memcpy(num, &a, sizeof(int)), 這樣就把整形變數寫入了char的num數組里。

❸ 數組底層如何存儲數據

sizeof 操作符是在編譯時確定的,比如
int a[5];
sizeof(a);
在求 sizeof(a) 的值時發生在編譯代碼階段,不是在運行階段。
這也就是為什麼 可以這樣定義而不出錯

int b[sizeof(a)] = {0};

編譯器編譯代碼時,它一定知道這個 a 是什麼類型的,這個數組 a 有多大的,所以就基本數據類型來說,數組沒有存儲額外的信息, sizeof 是在編譯時確定的。

不過, C++ 自定義類型不一樣, C++對象數組確實存儲了額外的信息, 對於C++對象數組來說,
數組 至少存儲了 析構函數信息,但是這個信息對程序員來說是不可見的,詳細的請看 侯捷翻譯的 深度探索C++面向對象模型 250 頁。

❹ C語言用數組存儲大型數據的演算法

樓主一定懂c++吧?c++標准庫裡面有一個模板類叫
bitset<>
專門用來做位操作的。
你的問題用這個可以高效的解決,建立一個足夠大的空間,比如8000個位
bitset<8000>
然後就簡單了,乘法函數把乘數轉化成bitset<32>類型的對象(用乘數直接初始化代表乘數的bitset<32>對象)然後用位運算符把被乘數(那個bitset<8000>類型的對象)按位右移,(一個10進制數右移一次相當於乘10,一個2進制數右移一次相當於乘2;乘數中,二進制位如果知道它是從右數第n位,那麼就把被乘數向右移動n-1位就完成了乘法,然後再做下一個二進制位的乘法,直到被乘數中所有的2進制位都被使用過為止)。做完了每32位2進制位轉化成一個unsigned
long,存儲在一個鏈表或者數組(懷疑空間不夠,內存里很有可能沒有這么大的連續空間)中,如果按順序逐個輸出就是問題的結果。
我覺得這個方法比2樓的高效。
如果你不想使用c++標准庫……那也可以考慮用c中的位域,也支持位操作。不過遠沒有前面的方便,很多操作都要自己做,比如最基本的你必須有一個適合乘法操作的動態增長的位域組成的鏈表。而且即使這樣還不一定高效。
……寫完了才看的3樓,3樓就做得很好了。

❺ 怎麼將數據存入到數組中

#include<stdio.h>
int i,a[100];
int main(){
FILE * fp1 = fopen("input.txt", "r");//打開輸入文件
FILE * fp2 = fopen("output.txt", "w");//打開輸出文件
if (fp1==NULL || fp2==NULL) {//若打開文件失敗則退出
puts("不能打開文件!");
rturn 0;
}
for(i=0;fscanf(fp1,"%d",a+i)!=EOF;i++);//從輸入文件連續讀取整數到數組a
for(;i--;)fscanf(fp2,"%d ",a[i]);//把數組a逆序寫入到輸出文件當中
fclose(fp1);//關閉輸入文件
fclose(fp2);//關閉輸出文件,相當於保存
return 0;
}

❻ C語言用數組存儲大型數據的演算法

/*
size_a,pa——指向數組a的有效末端
ma——a的最大容量,必須大於na
n=12——求n的階
p——求階乘時的當前乘數
*/
#include
#define
Ma
10000
int
pa;/*指向數組a的有效末端*/
int
p=2;
int
memory_over=0;
union
data
{
unsigned
long
int
b;
struct
{unsigned
l:16;
unsigned
h:16;
}m;
}a[Ma];
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
演算法說明1:考慮到result比較長,我用a[Ma].b來存儲n!的result,每一位a[pa].b能存儲4位10進制數字。
因為我定義的數組是靜態的,所以Ma應該足夠大。
ps:其實只用定義一個unsigned
long
int
b[Ma];就可以了(直接用b[pa]代替a[pa].b),但是我考慮到可能會訪問每一結點b[pa]的高16位(a[pa].m.h)和低16位(a[pa].m.l),但是的我考慮是多餘的!!不用像我這樣定義這么復雜的共用體!!
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
unsigned
int
cashe;
unsigned
int
carry;
void
main()
{
unsigned
int
n;/*求n的階*/
void
facto(unsigned
int
n);
printf("Input
n:");
scanf("%u",&n);
/*=================開始求階乘!=============*/
a[0].b=1;/*初始化*/
facto(n);
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
演算法說明2:上面這句直接調用facto(n)來求n!
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/*========================以下是顯示最後結果====================================*/
if(memory_over==0)
{printf("the
result
include
%dNO:\n",pa+1);
printf("%u",a[pa--].m.l);
for(;pa>=0;pa--)
printf("%04u",a[pa].m.l);
printf("\n");
}
getch();
}
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
演算法說明2:求階函數facto(n)說明:
這個函數會不斷地調用multiple(),它的作用是每被調用一次就使得a[pa].b與階數p相乘一次,直到乘完n為止!
{multiple();
p++;/*每一輪乘一個階數p*/
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void
facto(unsigned
int
n)
{void
multiple();
pa=0;
while(pa<Ma-1&&p<=n)/*容量限制*/
{multiple();
p++;/*每一輪乘一個階數p*/
}
if(p<=n)
{printf("memory
out!\n");memory_over=1;}/*如果當前的存儲結果的數組a[Ma]不夠用!應提高Ma*/
}
/*==============================================================================
演算法說明3:乘法函數multiple()說明:負責a[pa].b與階數p相乘。
a[pa].b有很多結點,a[0].b、a[1].b、a[2].b、a[3].b、a[4].b、。。。
當然是從低結點a[0].b開始不斷與p相乘,產生的「進位」加到高位a[1].b,直到a[pa].b*p為止!
隨著結果數值增大,pa個結點的a[].b可能容納不下結果,所以如果a[pa].b與p相乘後還有「進位」carry,就擴大pa,並把carry放入到新增加的結點:
if(carry>0)
a[++pa].b=carry;
===================================================================================*/
void
multiple()
{int
i=0;
carry=0;
while(i<=pa)/*i指向當前處理的元素a[i],每一輪用一個位與階數p相乘*/
{a[i].b=a[i].b*p+carry;/*計算結果,要考慮來自低位的進位*/
carry=a[i].b/10000;/*計算進位*/
a[i].b=a[i].b%10000;/*計算余數*/
i++;
}
if(carry>0)
a[++pa].b=carry;
}

❼ C語言用數組存儲大型數據的演算法

/*
size_a,pa——指向數組a的有效末端
ma——a的最大容量,必須大於na

n=12——求n的階
p——求階乘時的當前乘數
*/
#include<stdio.h>
#define Ma 10000
int pa;/*指向數組a的有效末端*/
int p=2;
int memory_over=0;
union data
{ unsigned long int b;
struct
{unsigned l:16;
unsigned h:16;
}m;
}a[Ma];
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
演算法說明1:考慮到result比較長,我用a[Ma].b來存儲n!的result,每一位a[pa].b能存儲4位10進制數字。
因為我定義的數組是靜態的,所以Ma應該足夠大。
ps:其實只用定義一個unsigned long int b[Ma];就可以了(直接用b[pa]代替a[pa].b),但是我考慮到可能會訪問每一結點b[pa]的高16位(a[pa].m.h)和低16位(a[pa].m.l),但是的我考慮是多餘的!!不用像我這樣定義這么復雜的共用體!!
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
unsigned int cashe;
unsigned int carry;

void main()
{
unsigned int n;/*求n的階*/
void facto(unsigned int n);
printf("Input n:");
scanf("%u",&n);
/*=================開始求階乘!=============*/
a[0].b=1;/*初始化*/
facto(n);
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
演算法說明2:上面這句直接調用facto(n)來求n!
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/*========================以下是顯示最後結果====================================*/
if(memory_over==0)
{printf("the result include %dNO:\n",pa+1);
printf("%u",a[pa--].m.l);
for(;pa>=0;pa--)
printf("%04u",a[pa].m.l);
printf("\n");
}
getch();
}

/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
演算法說明2:求階函數facto(n)說明:
這個函數會不斷地調用multiple(),它的作用是每被調用一次就使得a[pa].b與階數p相乘一次,直到乘完n為止!
{multiple();
p++;/*每一輪乘一個階數p*/
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void facto(unsigned int n)
{void multiple();
pa=0;
while(pa<Ma-1&&p<=n)/*容量限制*/
{multiple();
p++;/*每一輪乘一個階數p*/
}
if(p<=n)
{printf("memory out!\n");memory_over=1;}/*如果當前的存儲結果的數組a[Ma]不夠用!應提高Ma*/

}

/*==============================================================================
演算法說明3:乘法函數multiple()說明:負責a[pa].b與階數p相乘。
a[pa].b有很多結點,a[0].b、a[1].b、a[2].b、a[3].b、a[4].b、。。。
當然是從低結點a[0].b開始不斷與p相乘,產生的「進位」加到高位a[1].b,直到a[pa].b*p為止!

隨著結果數值增大,pa個結點的a[].b可能容納不下結果,所以如果a[pa].b與p相乘後還有「進位」carry,就擴大pa,並把carry放入到新增加的結點:
if(carry>0)
a[++pa].b=carry;
===================================================================================*/
void multiple()
{int i=0;
carry=0;
while(i<=pa)/*i指向當前處理的元素a[i],每一輪用一個位與階數p相乘*/
{a[i].b=a[i].b*p+carry;/*計算結果,要考慮來自低位的進位*/
carry=a[i].b/10000;/*計算進位*/
a[i].b=a[i].b%10000;/*計算余數*/
i++;
}
if(carry>0)
a[++pa].b=carry;
}

❽ 如何將一個數組存入資料庫

將一個數組存入資料庫和使用的語言有關系。

通常的做法是將數組的內容轉換後傳遞到和語言相關的數據處理方法中進行處理。
涉及到的數據轉換的方法:
1:可以轉換為json格式
[{key:1},{key:2}]
2:可以轉換為xml
<values>
<key>1</key><key>2</key>
</values>
數據處理方法解析轉換後的字元串,執行資料庫保存操作。

熱點內容
雙創基金配置了哪些股票 發布:2023-02-06 20:25:35 瀏覽:964
如何修改系統配置信息 發布:2023-02-06 20:20:19 瀏覽:834
把源碼 發布:2023-02-06 20:20:01 瀏覽:254
字元串的存儲長度 發布:2023-02-06 20:16:53 瀏覽:978
影視文學腳本格式範例 發布:2023-02-06 20:12:04 瀏覽:891
英短貓的食物怎麼配置 發布:2023-02-06 20:09:49 瀏覽:938
存儲接伺服器 發布:2023-02-06 20:09:42 瀏覽:975
sqlupdate數據 發布:2023-02-06 19:55:58 瀏覽:716
android項目手工編譯 發布:2023-02-06 19:51:46 瀏覽:898
手機怎麼看是什麼編譯器 發布:2023-02-06 19:48:33 瀏覽:612