㈠ c語言結構性數組
1、C語言結構體數組的定義:數組是有序的並且具有相同類型的數據的集合。
2、結構數組就是具有相同結構類型的變數集合。假如要用C語言,定義一個班級40個同學的姓名、性別、年齡和住址, 可以做成一個結構數組。
結構數組成員的訪問是以數組元素為結構變數的,它的形式為:
1、結構數組元素—成員名。
2、例如:student[0].name,student[30].age
3、實際上結構數組相當於一個二維構造, 第一維是結構數組元素, 每個元素是一個結構變數, 第二維是結構成員。
注意:結構數組的成員也可以是數組變數。
㈡ C語言中的數組是什麼意思
把具有相同數據類型的若干變數按有序的形式組織起來,
以便於程序處理,這些數據元素的集合就是數組,按照數組
元素的類型不同,可分為:數值數組、字元數組、指針數組
結構數組等各種類別。
數組說明的一般形式為:
類型說明符 數組名[常量表達式],......;
其中類型說明符可以是任一種基本數據類型或構造數據類型
數組名是定義的數組標識符。常量表達式表示數據元素的個
數,也就是數組的長度。
對數組類型的說明應注意:
1)數組的類型實際上是數組元素的取值類型。
2)數組名的書寫應符合標識符的書寫規范。
3)數組名不能與其他變數名相同。
4)常量表達式表示數組元素的個數,但是其下標從0開始計算
5)不能在方括弧中用變數來表示元素的個數,但是可以用符號
常數或常量表達式。
6)允許在同一個類型說明中,說明多個數組和多個變數。
數組元素的表示方法
一般比較簡單就是數組名[下標]來引用,先定義後用,如果
是小數的話,直接自動取整。
數組賦值分為:初始化賦值和動態賦值
初始化賦值一般形式為:
static 類型說明符 數組名[常量表達式]={值,值......};
static表示靜態存儲類型,c語言規定只有靜態存儲數組和外部數組
才可做初始化賦值。
c語言對數組的初始化賦值還有幾個規定:
1)可以只給部分元素賦值。
2)只能給元素逐個賦值,不能給數組整體賦值。
3)如不給可初始化的數組賦初值,在在數組說明中,可以不給出數組
元素的個數。
下面看一下多維數組
主要看一下二維數組,其他的就可以用二維數組類推得到
二維數組的類型說明的一般形式是:
類型說明符 數組名[常量表達式1][常量表達式2]...;
在c語言中二維數組是按行排列的
二維數組的表示方法:
數組名[下標][下標]
二維數組的初始化
二維數組初始化也是在類型說明時給各下標變數賦以初值。 二維數組可
按行分段賦值,也可按行連續賦值。
二維數組的初始化還應該注意:
1)可以只對部分元素賦初值,未賦初值的元素自動取為0。
2)如對全部元素賦初值,則第一維的長度可以不給出。
字元數組:
用來存放字元變數的數組稱為字元數組。
C語言允許用字元串的方式對數組作初始化賦值。例如:
static char c[]={'c', ' ','p','r','o','g','r','a','m'}; 可寫為:
static char c[]={"C program"}; 或去掉{}寫為:
sratic char c[]="C program";
用字元串方式賦值比用字元逐個賦值要多佔一個位元組, 用於存放字元串結
束標志'\0'。上面的數組c在內存中的實際存放情況為: C program\0`\0'是
由C編譯系統自動加上的。由於採用了`\0'標志,所以在用字元串賦初值時一
般無須指定數組的長度, 而由系統自行處理。在採用字元串方式後,字元數
組的輸入輸出將變得簡單方便。 除了上述用字元串賦初值的辦法外,還可用
printf函數和scanf函數一次性輸出輸入一個字元數組中的字元串, 而不必
使用循環語句逐個地輸入輸出每個字元。
void main()
{
static char c[]="BASIC\ndBASE";
printf("%s\n",c);
} printf("%s\n",c);
注意在本例的printf函數中,使用的格式字元串為"%s", 表示輸出的是一
個字元串。而在輸出表列中給出數組名則可。 不能寫為: printf("%s",c[]);
void main()
{
char st[15];
printf("input string:\n");
scanf("%s",st);
printf("%s\n",st);
} char st[15];
本例中由於定義數組長度為15, 因此輸入的字元串長度必須小於15,
以留出一個位元組用於存放字元串結束標志`\0`。 應該說明的是,對一個字
符數組,如果不作初始化賦值,則必須說明數組長度。還應該特別注意的是,
當用scanf函數輸入字元串時,字元串中不能含有空格,否則將以空格作為串
的結束符。例如運行例4.8,當輸入的字元串中含有空格時,運行情況為:
input string:this is a book this 從輸出結果可以看出空格以後的字元
都未能輸出。 為了避免這種情況, 可多設幾個字元數組分段存放含空格的
串。程序可改寫如下:
Lesson
void main()
{
char st1[6],st2[6],st3[6],st4[6];
printf("input string:\n");
scanf("%s%s%s%s",st1,st2,st3,st4);
printf("%s %s %s %s\n",st1,st2,st3,st4);
}
本程序分別設了四個數組, 輸入的一行字元的空格分段分別裝入四個數組。
然後分別輸出這四個數組中的字元串。在前面介紹過,scanf的各輸入項必須以
地址方式出現,如 &a,&b等。但在例4.8中卻是以數組名方式出現的,這是為
什麼呢?這是由於在C語言中規定,數組名就代表了該數組的首地址。 整個
數組是以首地址開頭的一塊連續的內存單元。如有字元數組char c[10],在
內存可表示如圖4.2。設數組c的首地址為2000,也就是說c[0]單元地址為2000。
則數組名c就代表這個首地址。因此在c前面不能再加地址運算符&。如寫作
scanf("%s",&c);則是錯誤的。 在執行函數printf("%s",c) 時,按數組名c
找到首地址,然後逐個輸出數組中各個字元直到遇到字元串終止標志'\0'為止。
字元串常用函數:
用於輸入輸出的字元串函數在使用前應包含頭文件"stdio.h",使用其他字元串
函數則應包含頭文件"string.h".下面介紹幾個常用的字元串函數:
1)字元串輸出函數 puts 格式:puts(字元數組名) 功能:把字元數組中的字元
串輸出到顯示器。
#include"stdio.h"
main()
{
static char c[]="BASIC\ndBASE";
puts(c);
}
2)字元串輸入函數gets 格式:gets(字元數組名) 功能:從標准輸入設備上
輸入一個字元串。
#include"stdio.h"
main()
{
char st[15];
printf("input string:\n");
gets;
puts;
}
tips:gets函數並不以空格作為字元串輸入結束的標志,而只是以回車作為輸入
結束,這是與scanf不同的部分
3)字元串連接函數strcat 格式:strcat(字元數組名1,字元數組名2)
功能:把字元數組2中的字元串連接到字元數組1中字元串後面,並刪去字元串
1後的串標志"\0",本函數返回字元數組1的首地址。
#include"string.h"
main()
{
static char st1[30]="My name is ";
int st2[10];
printf("input your name:\n");
gets(st2);
strcat(st1,st2);
puts(st1);
}
4)字元串拷貝函數strcpy 格式:strcpy(字元數組名1,字元數組名2)
功能:把字元數組2中的字元串拷貝到字元數組1中,串結束標志 "\0"也一同
拷貝,字元數組2也可以是一個字元常量,就相當於把一個字元串賦予一個字元數組
#include"string.h"
main()
{
static char st1[15],st2[]="C Language";
strcpy(st1,st2);
puts(st1);
printf("\n");
}
5)字元串比較函數strcmp格式:strcmp(字元數組1,字元數組2) 功能:
按照ASCII碼順序比較兩個數組中的字元串,並有函數返回值返回比較結果
#include"string.h"
main()
{
int k;
static char st1[15],st2[]="C Language";
printf("input a string:\n");
gets(st1);
k=strcmp(st1,st2);
if(k==0) printf("st1=st2\n");
if(k>0) printf("st1>st2\n");
if(k<0) printf("st1<st2\n");
}
6)測字元串長度的函數strlen 格式:strlen(字元數組名) 功能:
測字元串的實際長度(不含字元串結束標志"\0")並作為函數返回值
#include"string.h"
main()
{
int k;
static char st[]="C Language";
k=strlen;
printf("The lenth of the string is %d\n",k);
}
程序舉例:
例一:
main()
{
int i,j,p,q,s,n,a[11]={127,3,6,28,54,68,87,105,162,18};
for(i=0;i<10;i++)
{
p=i;q=a[i];
for(j=i+1;j<10;j++)
if(q<a[j]) {p=j;q=a[j];}
if(p!=i)
{
s=a[i];
a[i]=a[p];
a[p]=s;
}
printf("%d",a[i]);
}
printf("\ninput number:\n");
scanf("%d",&n);
for(i=0;i<10;i++)
if(n>a[i])
{for(s=9;s<=i;s--) a[s+1]=a[s];<br>break;}
a[i]=n;
for(i=0;i<10;i++)
printf("%d",a[i]);
printf("\n");
}
例二:
main()
{
static int a[][4]={3,16,87,65,4,32,11,108,10,25,12,27};
int b[3],i,j,l;
for(i=0;i<=2;i++)
{
l=a[i][0];
for(j=1;j<=3;j++)
if(a[i][j]>l) l=a[i][j];
b[i]=l;
}
printf("\narray a:\n");
for(i=0;i<=2;i++)
{
for(j=0;j<=3;j++)
printf("%5d",a[i][j]);
printf("\n");
}
printf("\narray b:\n");
for(i=0;i<3;i++)
printf("%5d",b[i]);
printf("\n");
}
例三:
void main()
{
char st[20],cs[5][20];
int i,j,p;
printf("input country's name:\n");
for(i=0;i<5;i++)
gets(cs[i]);
printf("\n");
for(i=0;i<5;i++)
{
p=i;strcpy(st,cs[i]);
for(j=i+1;j<5;j++)
if(strcmp(cs[j],st)<0) {p=j;strcpy(st,cs[j]);}
if(p!=i)
{strcpy(st,cs[i]);<br>strcpy(cs[i],cs[p]);<br>strcpy(cs[p],st);<br>}
puts(cs[i]);
printf("\n");
㈢ c語言數組的定義
C語言支持一維數組和多維數組。如果一個數組的所有元素都不是數組,那麼該數組稱為一維數組。
在C語言中使用數組必須先進行定義,一維數組的定義方式為:類型說明符; 數組名 ;[常量表達式]。
其中,類型說明符是任一種基本數據類型或構造數據類型。數組名是用戶定義的數組標識符,方括弧中的常量表達式表示數據元素的個數,也稱為數組的長度。例如:
int a[10]; /* 說明整型數組a,有10個元素 */
float b[10], c[20]; /* 說明實型數組b,有10個元素,實型數組c,有20個元素 */
char ch[20]; /* 說明字元數組ch,有20個元素 */
對於數組類型說明應注意以下幾點:
1、數組的類型實際上是指數組元素的取值類型。對於同一個數組,其所有元素的數據類型都是相同的。
2、數組名的書寫規則應符合標識符的書寫規定。
3、數組名不能與其它變數名相同。例如:
int a;
float a[10];
是錯誤的。
4、方括弧中常量表達式表示數組元素的個數,如a[5]表示數組a有5個元素。但是其下標從0開始計算。因此5個元素分別為a[0], a[1], a[2], a[3], a[4]。
5、不能在方括弧中用變數來表示元素的個數,但是可以是符號常數或常量表達式。例如:
#define FD 5
// ...
int a[3+2],b[7+FD];
是合法的。但是下述說明方式是錯誤的。
int n=5;
int a[n];
6、允許在同一個類型說明中,說明多個數組和多個變數。例如:
int a,b,c,d,k1[10],k2[20];
(3)什麼是有序數組c語言擴展閱讀:
C語言是一門通用計算機編程語言,廣泛應用於底層開發。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。
盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標准規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。
二十世紀八十年代,為了避免各開發廠商用的C語言語法產生差異,由美國國家標准局為C語言制定了一套完整的美國國家標准語法,稱為ANSI C,作為C語言最初的標准。[1]目前2011年12月8日,國際標准化組織(ISO)和國際電工委員會(IEC)發布的C11標準是C語言的第三個官方標准,也是C語言的最新標准,該標准更好的支持了漢字函數名和漢字標識符,一定程度上實現了漢字編程。
C語言是一門面向過程的計算機編程語言,與C++,Java等面向對象的編程語言有所不同。
其編譯器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。
㈣ 一維數組的有序插入,用C語言寫。
以下是一個可能的實現,包括insertX函數和主函數示例:
#include <stdio.h>
int insertX(int* pa, int n, int x) {
int i, j;
// 找到插入位置
for (i = 0; i < n; i++) {
if (pa[i] > x) {
break;
}
}
// 將老春插入位置後的元素後移
for (j = n; j > i; j--) {
pa[j] = pa[j - 1];
}
// 插入元素
pa[i] = x;
// 返回插入後數組的長度
return n + 1;
}
int main() {
int n, x;
printf("請輸入有序數列的長度n:");
scanf("%d", &n);
int a[n];
printf("請輸入%d個有序整數:
", n);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
printf("請輸入要插入的整數x:");
scanf("%d", &x);
n = insertX(a, n, x);
printf("插入後的有序整數為:
");
for (int i = 0; i < n; i++) {
printf("%d ", a[i]);
}
printf("
");
return 0;
}
在上述代碼中,我們定義了一個insertX函數來實現將一個整數x插入到一凱純個有序數組中的功能。該函數的參數包括一盯含咐個指向數組首地址的指針pa,數組的長度n,以及要插入的整數x。函數的具體實現過程如下:
遍歷數組,找到插入位置,即第一個大於x的元素的位置i;
將插入位置後的元素後移一位;
在插入位置處插入x;
返回插入後數組的長度n+1。
在主函數中,我們先輸入有序數列的長度n和n個有序整數,然後輸入要插入的整數x。接著調用insertX函數將x插入到數組中,並輸出插入後的有序整數序列。
需要注意的是,上述代碼並沒有對輸入的數據進行范圍檢查,如果輸入的數據不符合要求,程序可能會出現錯誤。因此,在實際使用中應該添加相應的數據檢查和錯誤處理機制。
㈤ c語言中什麼是數組
數組是計算機編程語言上,對於“Array”的中文稱呼。將相同數據類型的元素按一定順序排列的集合,把有限個類型相同的變數用一個名字命名,然後用編號區分他們的變數的集合,這個名字成為數組名,編號成為下標。組成數組的各個變數成為數組的分量,也稱為數組的元素,有時也稱為下標變數。數組是在程序設計中,為了處理方便, 把具有相同類型的若干變數按有序的形式組織起來的一種形式。這些按序排列的同類數據元素的集合稱為數組。
c語言數組
在C語言中, 數組屬於構造數據類型。一個數組可以分解為多個數組元素,這些數組元素可以是基本數據類型或是構造類型。因此按數組元素的類型不同,數組又可分為數值數組、字元數組、指針數組、結構數組等各種類別。
關於可變長數組(VLA)的問題:原來的C標准中是不允許可變長數組出現的,但是在C++中,加入了對VLA的支持,也有不少編譯器已經支持這個了,而且好像沒有太多的人用這個可變長數組。
如果有過用其它語言編程的經歷,那麼想必會熟悉數組的概念。由於有了數組,可以用相同名字引用一系列變數,並用數字(索引)來識別它們。在許多場合,使用數組可以縮短和簡化程序,因為可以利用索引值設計一個循環,高效處理多種情況。數組有上界和下界,數組的元素在上下界內是連續的。因為 Visual Basic對每一個索引值都分配空間,所以不要不切實際聲明一個太大的數組。
此處數組是程序中聲明的變數數組。它們不同於控制項數組,控制項數組是在設計時通過設置控制項的 Index 屬性規定的。變數數組總是連續的;與控制項數組不同的是,不能從一個數組的中部載入或卸載數組元素。
一個數組中的所有元素具有相同的數據類型(在C、C++、Java、pascal中都這樣。但也並非所有涉及數組的地方都這樣,比如在Visual Foxpro中的數組就並沒這樣的要求)。當然,當數據類型為 Variant 時,各個元素能夠包含不同種類的數據(對象、字元串、數值等等)。可以聲明任何基本數據類型的數組,包括用戶自定義類型和對象變數。
如果要用戶輸入的是一個數組,一般是用一個循環,但是在輸入前也需要固定數組的大小。
compact跟變長數組沒有太大的關系,也應該用不到變長數組。因為一般的傳數組到函數中就是傳數組的地址和元素的個數的,那隻是一個提示,不是要求。
原型可以這樣寫(假設數組的元素是type):
int compact(type *Array,int Count)
數組類型說明 在C語言中使用數組必須先進行類型說明。
數組說明的一般形式為:類型說明符 數組名 [常量表達式],……; 其中,類型說明符是任一種基本數據類型或構造數據類型。數組名是用戶定義的數組標識符。方括弧中的常量表達式表示數據元素的個數,也稱為數組的長度。