C语言指针与数组编程实验解析
数组极值查找
实现数组最小值和最大值的双指针返回机制:
#include <stdio.h>
#define SIZE 5
void readArray(int arr[], int count);
void printArray(int arr[], int count);
void determineMinMax(int arr[], int count, int *minPtr, int *maxPtr);
int main() {
int nums[SIZE];
int minimum, maximum;
printf("请输入%d个整数:\n", SIZE);
readArray(nums, SIZE);
printf("原始数据:\n");
printArray(nums, SIZE);
determineMinMax(nums, SIZE, &minimum, &maximum);
printf("极值结果:\n");
printf("最小值 = %d, 最大值 = %d\n", minimum, maximum);
return 0;
}
void readArray(int arr[], int count) {
for(int i=0; i *maxPtr) *maxPtr = arr[i];
}
}
最大值定位器
返回数组最大值元素地址的实现:
#include <stdio.h>
#define SIZE 5
void readArray(int arr[], int count);
void printArray(int arr[], int count);
int* locateMax(int arr[], int count);
int main() {
int nums[SIZE];
int *maxAddr;
printf("请输入%d个整数:\n", SIZE);
readArray(nums, SIZE);
printf("数据列表:\n");
printArray(nums, SIZE);
maxAddr = locateMax(nums, SIZE);
printf("最大值地址: %p\n", (void*)maxAddr);
printf("最大值内容: %d\n", *maxAddr);
return 0;
}
int* locateMax(int arr[], int count) {
int *maxAddr = &arr[0];
for(int i=1; i *maxAddr)
maxAddr = &arr[i];
}
return maxAddr;
}
字符串交换机制
对比字符数组与指针变量的交换特性:
#include <stdio.h>
#include <string.h>
#define BUF_SIZE 80
int main() {
// 数组版本
char str1[BUF_SIZE] = "Hello World";
char str2[BUF_SIZE] = "C Programming";
char temp[BUF_SIZE];
printf("数组交换前:\n");
printf("str1 = %s\nstr2 = %s\n", str1, str2);
strcpy(temp, str1);
strcpy(str1, str2);
strcpy(str2, temp);
printf("数组交换后:\n");
printf("str1 = %s\nstr2 = %s\n", str1, str2);
// 指针版本
char *p1 = "Hello World";
char *p2 = "C Programming";
char *pTemp;
printf("\n指针交换前:\n");
printf("p1 = %s\np2 = %s\n", p1, p2);
pTemp = p1;
p1 = p2;
p2 = pTemp;
printf("指针交换后:\n");
printf("p1 = %s\np2 = %s\n", p1, p2);
return 0;
}
字符串处理函数
实现字符串截断与字符替换功能:
#include <stdio.h>
#define BUF_SIZE 80
char* truncateString(char *str, char delimiter);
void replaceChar(char *str, char oldChar, char newChar);
int main() {
char buffer[BUF_SIZE];
char input[] = "This is a test string for replacement";
strcpy(buffer, input);
printf("原始字符串: %s\n", buffer);
replaceChar(buffer, 't', '#');
printf("替换后字符串: %s\n", buffer);
printf("\n输入截断测试字符串: ");
gets(buffer);
printf("输入截断字符: ");
char delim = getchar();
truncateString(buffer, delim);
printf("截断后字符串: %s\n", buffer);
return 0;
}
void replaceChar(char *str, char oldChar, char newChar) {
while(*str) {
if(*str == oldChar) *str = newChar;
str++;
}
}
char* truncateString(char *str, char delimiter) {
char *pos = str;
while(*pos && *pos != delimiter) pos++;
*pos = '\0';
return str;
}
身份证校验模块
实现18位身份证号码有效性验证:
#include <stdio.h>
#include <string.h>
#define ID_COUNT 5
int validateID(const char *idStr);
int main() {
const char *ids[ID_COUNT] = {
"110101199003072316",
"1101011990030723X5",
"11010119900307231X",
"11010119900307231",
"11010119900307231A"
};
for(int i=0; i '9')
return 0;
}
char lastChar = idStr[17];
if((lastChar < '0' || lastChar > '9') && lastChar != 'X')
return 0;
return 1;
}