实验一:数组内存布局
#include
#define SIZE1 4
#define SIZE2 2
void displayOneDArray() {
int arr[SIZE1] = {1, 9, 8, 4};
for(int i = 0; i < SIZE1; ++i)
printf("地址:%p 值:%d\n", (void*)&arr[i], arr[i]);
}
void displayTwoDArray() {
int matrix[SIZE2][SIZE1] = {{1, 9, 8, 4}, {2, 0, 4, 9}};
for(int i = 0; i < SIZE2; ++i)
for(int j = 0; j < SIZE1; ++j)
printf("地址:%p 值:%d\n", (void*)&matrix[i][j], matrix[i][j]);
}
问题1:一维数组在内存中连续存储,`&arr[0]`与`arr`相同。
问题2:二维数组按行优先存储,但每行之间不连续。
实验二:输入并计算平均值(去除最高最低分)
#include
#define MAX_SIZE 100
void readData(int data[], int length);
double calcAverageExcludingExtremes(int data[], int length);
int main() {
int scores[MAX_SIZE];
int numScores;
double result;
while(scanf("%d", &numScores) != EOF) {
readData(scores, numScores);
result = calcAverageExcludingExtremes(scores, numScores);
printf("调整后平均分=%.2f\n", result);
}
return 0;
}
实验三:初始化和打印二维数组
#include
#define ARRAY_SIZE 100
void printMatrix(int mat[][ARRAY_SIZE], int dim);
void initializeMatrix(int mat[][ARRAY_SIZE], int dim, int val);
int main() {
int matrix[ARRAY_SIZE][ARRAY_SIZE];
int dimension, value;
while(scanf("%d%d", &dimension, &value) != EOF) {
initializeMatrix(matrix, dimension, value);
printMatrix(matrix, dimension);
}
return 0;
}
实验四:计算中位数
#include
#define MAX_LEN 100
void inputNumbers(int nums[], int count);
double findMedian(int nums[], int count);
int main() {
int numbers[MAX_LEN];
int numberCount;
double medianValue;
while(scanf("%d", &numberCount) != EOF) {
inputNumbers(numbers, numberCount);
medianValue = findMedian(numbers, numberCount);
printf("中位数=%g\n", medianValue);
}
return 0;
}
实验五:右旋矩阵
#include
#define MATRIX_SIZE 100
void rotateRight(int mat[][MATRIX_SIZE], int size);
int main() {
int matrix[MATRIX_SIZE][MATRIX_SIZE];
int size;
scanf("%d", &size);
// 省略输入部分...
rotateRight(matrix, size);
return 0;
}
实验六:十进制转任意进制
#include
#define BUFFER_SIZE 100
void decimalToBase(int num, int base);
int main() {
int decimalNumber;
while(scanf("%d", &decimalNumber) != EOF) {
decimalToBase(decimalNumber, 2);
decimalToBase(decimalNumber, 8);
decimalToBase(decimalNumber, 16);
}
return 0;
}
实验七:判断是否为魔方矩阵
#include
#define MAX_DIM 100
int isMagicSquare(int square[][MAX_DIM], int dimension);
int main() {
int matrix[MAX_DIM][MAX_DIM];
int dim;
while(scanf("%d", &dim) != EOF) {
// 输入矩阵...
if(isMagicSquare(matrix, dim))
printf("是魔方矩阵\n");
else
printf("不是魔方矩阵\n");
}
return 0;
}