專業(yè)做網(wǎng)站公司哪家好一句簡短走心文案
一維數(shù)組:
C語言中的數(shù)組是一種基本的數(shù)據(jù)結(jié)構(gòu),用于在計(jì)算機(jī)內(nèi)存中連續(xù)存儲相同類型的數(shù)據(jù)。
數(shù)組中的每個元素可以通過索引(或下標(biāo))來訪問,索引通常是從0開始的。
數(shù)組的大小在聲明時(shí)確定,并且之后不能改變(除非使用動態(tài)內(nèi)存分配技術(shù),如指針和malloc/free等)。如果初始化時(shí)省略數(shù)組的大小,編譯器會自動根據(jù)初始化列表中元素的數(shù)量確定數(shù)組的大小。
數(shù)組索引越界是C語言中常見的錯誤。如果嘗試訪問數(shù)組邊界之外的元素,程序會崩潰或產(chǎn)生不可預(yù)測的行為。
數(shù)組的大小在編譯時(shí)確定,且固定不變。如果需要動態(tài)改變數(shù)組大小,應(yīng)考慮使用指針和動態(tài)內(nèi)存分配。
數(shù)組名在表達(dá)式中通常被當(dāng)作指向數(shù)組首元素的指針。但是,數(shù)組名本身并不是一個指針變量,而是一個常量表達(dá)式,其值為數(shù)組首元素的地址。
測試代碼1:
#include <stdio.h>
int main() { // 定義并初始化一個整型數(shù)組 int numbers[5] = {1, 2, 3, 4, 5}; // 訪問并打印數(shù)組中的每個元素// 數(shù)組下標(biāo)從0開始 for(int i = 0; i < 5; i++) { printf("numbers[%d] = %d\n", i, numbers[i]); } // 修改數(shù)組中的某個元素 numbers[2] = 10; // 將索引為2的元素(即第三個元素)修改為10 // 再次訪問并打印修改后的數(shù)組元素 printf("After modification:\n"); for(int i = 0; i < 5; i++) { printf("numbers[%d] = %d\n", i, numbers[i]); } // 部分初始化和自動初始化為0 int partialInit[5] = {1, 2}; // 只初始化了前兩個元素,其余自動初始化為0 printf("Partially initialized array:\n"); for(int i = 0; i < 5; i++) { printf("partialInit[%d] = %d\n", i, partialInit[i]); } // 使用變量大小,變長數(shù)組(VLA) int size = 3; int vla[size]; // 變長數(shù)組 for(int i = 0; i < size; i++) { vla[i] = i * 2; // 初始化 } printf("Variable Length Array:\n"); for(int i = 0; i < size; i++) { printf("vla[%d] = %d\n", i, vla[i]); } return 0;
}
運(yùn)行結(jié)果如下:
?
測試代碼2:
#include <stdio.h>
// 冒泡排序
void bubbleSort(int arr[], int n) { int i, j, temp; for (i = 0; i < n-1; i++) { for (j = 0; j < n-i-1; j++) { if (arr[j] > arr[j+1]) { temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } }
} // 選擇排序
void selectionSort(int arr[], int n) { int i, j, minIndex, temp; for (i = 0; i < n-1; i++) { minIndex = i; for (j = i+1; j < n; j++) { if (arr[j] < arr[minIndex]) { minIndex = j; } } temp = arr[minIndex]; arr[minIndex] = arr[i]; arr[i] = temp; }
} int main() { //戶輸入整數(shù)以及整數(shù)個數(shù) int n, choice, i; printf("請輸入整數(shù)的個數(shù): "); scanf("%d", &n); int arr[n]; printf("請輸入%d個整數(shù):\n", n); for(i = 0; i < n; i++) { scanf("%d", &arr[i]); } printf("選擇排序算法(1: 冒泡排序, 2: 選擇排序): "); scanf("%d", &choice); //選擇排序方式 switch(choice) { case 1: bubbleSort(arr, n); printf("冒泡排序后的數(shù)組:\n"); break; case 2: selectionSort(arr, n); printf("選擇排序后的數(shù)組:\n"); break; default: printf("無效的選擇,請重新運(yùn)行程序。\n"); return 1; } //打印排序后的數(shù)組 for (i = 0; i < n; i++) printf("%d ", arr[i]); printf("\n"); return 0;
}
運(yùn)行結(jié)果如下:
?
測試代碼3:
#include <stdio.h>
#include <stdlib.h>
#include <time.h> // 函數(shù)聲明
void generateRandomNumbers(int arr[], int n);
void sortDescending(int arr[], int n);
void insertNumber(int arr[], int *n, int number);
void deleteNumber(int arr[], int *n, int m);
void printArray(int arr[], int n); int main() { int n, number, m; int *arr; // 初始化隨機(jī)數(shù)生成器 srand(time(NULL)); printf("Enter the number of two-digit integers: "); scanf("%d", &n); // 動態(tài)分配數(shù)組 arr = (int *)malloc(n * sizeof(int)); if (arr == NULL) { printf("Memory allocation failed!\n"); return 1; } // 生成隨機(jī)數(shù) generateRandomNumbers(arr, n); printf("Original array:\n"); printArray(arr, n); // 排序 sortDescending(arr, n); printf("Sorted array (descending):\n"); printArray(arr, n); // 插入數(shù)字 printf("Enter a number to insert: "); scanf("%d", &number); insertNumber(arr, &n, number); printf("Array after insertion:\n"); printArray(arr, n); // 刪除數(shù)字 printf("Enter the index (0-%d) to delete: ", n - 1); scanf("%d", &m); if (m >= 0 && m < n) { deleteNumber(arr, &n, m); printf("Array after deletion:\n"); printArray(arr, n); } else { printf("Invalid index!\n"); } // 釋放內(nèi)存 free(arr); return 0;
} // 實(shí)現(xiàn)函數(shù)
void generateRandomNumbers(int arr[], int n) { for (int i = 0; i < n; i++) { arr[i] = rand() % 90 + 10; // 生成10到99之間的隨機(jī)數(shù) }
} //冒泡排序,按降序排列數(shù)組
void sortDescending(int arr[], int n) { for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - i - 1; j++) { if (arr[j] < arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } }
}
//在數(shù)組中插入一個數(shù),并保持?jǐn)?shù)組的有序性。
void insertNumber(int arr[], int *n, int number) { int i; for (i = *n - 1; (i >= 0 && arr[i] < number); i--) { arr[i + 1] = arr[i]; } arr[i + 1] = number; (*n)++;
}
//根據(jù)索引刪除數(shù)組中的一個元素,并調(diào)整數(shù)組大小。
void deleteNumber(int arr[], int *n, int m) { for (int i = m; i < *n - 1; i++) { arr[i] = arr[i + 1]; } (*n)--;
}
// 打印數(shù)組
void printArray(int arr[], int n) { for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n");
}
運(yùn)行結(jié)果如下:
?
測試代碼4:
#include <stdio.h>
//一維數(shù)組轉(zhuǎn)換為二維數(shù)組
//"轉(zhuǎn)換"只是邏輯上的,物理上仍然是一個一維數(shù)組。
//確保不要超出數(shù)組的實(shí)際邊界,即index必須在0到total-1之間。
//這種方法在需要動態(tài)確定數(shù)組大小或數(shù)組大小較大時(shí)特別有用,
//可以避免使用二維數(shù)組可能帶來的內(nèi)存分配問題。
int main() { int i, j; int rows = 3; // 3行 int cols = 4; // 4列 int total = rows * cols; // 總元素?cái)?shù)量 // 初始化一維數(shù)組 int array[total]; for (i = 0; i < total; i++) { array[i] = i + 1; //將數(shù)組元素初始化為1到total的整數(shù) printf("%d ", array[i]); } printf("\n");// 使用二維數(shù)組的索引方式訪問一維數(shù)組 // 通過計(jì)算索引(index = i * cols + j)訪問一個二維數(shù)組。// i代表行索引,j代表列索引,cols是每行的列數(shù)。for (i = 0; i < rows; i++) { for (j = 0; j < cols; j++) { // 計(jì)算一維數(shù)組中的索引 int index = i * cols + j; printf("%d ", array[index]); } printf("\n"); // 每完成一行的打印后換行 } return 0;
}
運(yùn)行結(jié)果如下:
?
測試代碼5:
#include <stdio.h>
int main() { // 定義一個5x3的二維數(shù)組 int twoDArray[5][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}, {13, 14, 15} }; // 定義一個足夠大的一維數(shù)組以存儲二維數(shù)組的元素 int oneDArray[5 * 3]; // 因?yàn)槭?x3的二維數(shù)組,所以一維數(shù)組需要15個元素的空間 // 遍歷二維數(shù)組,并將元素復(fù)制到一維數(shù)組中 int index = 0; // 用于一維數(shù)組的索引 for (int i = 0; i < 5; i++) { // 遍歷二維數(shù)組的行 for (int j = 0; j < 3; j++) { // 遍歷二維數(shù)組的列 oneDArray[index++] = twoDArray[i][j]; // 將二維數(shù)組的元素復(fù)制到一維數(shù)組中,并更新索引 } } // 打印一維數(shù)組的元素for (int i = 0; i < 5 * 3; i++) { printf("%d ", oneDArray[i]); } return 0;
}
運(yùn)行結(jié)果如下:
?
?
?
?
?
?