互联网之光博览会参展企业,seo营销推广平台,无锡软件网站开发公司,wordpress招商模板下载实验1#xff1a;在主函数中输入num个字符串#xff0c;写一个函数#xff0c;从传入的num个字符串中找出最长的一个字符串#xff0c;并通过形参指针max传回该串地址#xff0c;在主函数中输出。#xff08;注意#xff1a;用****作为结束输入的标志。#xff09;
#i…实验1在主函数中输入num个字符串写一个函数从传入的num个字符串中找出最长的一个字符串并通过形参指针max传回该串地址在主函数中输出。注意用****作为结束输入的标志。
#includestdio.h
#includestdlib.h
#includestring.h // 定义一个函数该函数接受一个二维字符数组、
//一个整数表示数组中的字符串数量和一个指向字符的指针。
// 函数的目的是找到数组中最长的字符串并将其地址赋值给指针。
char* fun(char(*a)[81], int num, char* max)
{int i;max a[0]; // 将max初始化为数组中的第一个字符串。 for (i 0; i num; i) // 遍历数组中的每一个字符串。 {if (strlen(max) strlen(a[i])) // 如果当前最长的字符串长度小于当前遍历到的字符串长度 { // 则更新max为当前字符串。 max a[i];}}return max; // 返回最长的字符串的地址。
}int main()
{char ss[10][81], * ps NULL; // 定义一个二维字符数组和一个指向字符的指针。 char s[3][81], * p NULL; // 定义另一个二维字符数组和一个指向字符的指针。 int i 0, n;// 使用gets_s函数从用户那里获取字符串直到输入****为止。
//gets_s是一个非标准的函数通常不建议使用因为它可能导致缓冲区溢出。建议使用fgets代替。 gets_s(ss[i]); // 读取第一个字符串。 while (!strcmp(ss[i], ****) 0) // 当输入的不是****时继续读取下一个字符串。 {i;gets_s(ss[i]); // 读取下一个字符串。 }n i; // 记录已输入的字符串数量。 ps fun(ss, n, ps); // 调用fun函数找到最长的字符串。 printf(\n最长字符串%s\n, ps); // 打印最长的字符串。
} 使用gets_s如注释所述gets_s是一个非标准的函数并且在很多实现中都不推荐使用因为它可能导致缓冲区溢出。建议使用fgets代替。例如可以用fgets(ss[i], sizeof(ss[i]), stdin)代替gets_s(ss[i])。未检查数组越界在调用fun函数之前没有检查是否有可能访问到超出数组边界的内存。虽然在这个特定的例子中可能不会出现问题但这是一个不好的编程习惯可能会导致未定义的行为。代码可读性变量命名和注释可以更加清晰和详细以帮助其他开发者更好地理解代码的功能和目的。 实验2n个人围成一圈顺序排号从第1个人开始报数从1到3报数凡是报到3的人退出圈子问最后留下的人的序号和名字。主程序中输入n和每个人的序号名字输出最后结果。处理过程用子函数实现。 #include stdio.h
#include stdlib.h //定义一个结构体存储人的序号和名字
typedef struct {int number;char name[50];
} Person;int main() {int n;printf(请输入人数);scanf(%d, n); //从控制台读取用户输入的人数并存储在n中Person* people (Person*)malloc(n * sizeof(Person)); //动态分配内存用于存储n个Person结构体。for (int i 0; i n; i) {printf(请输入第%d个人的序号和名字, i 1);scanf(%d %s, people[i].number, people[i].name);}int count 0; //定义一个计数器变量count初始化为0。int index 0; //定义一个索引变量index初始化为0。while (count n -1) {index index % n; //通过取模运算更新index的值count;}printf(最后留下的人序号%d\n, people[index].number);printf(最后留下的人名字%s\n, people[index].name);free(people);return 0;
} 实验3定义一个5*5的矩阵二维数组赋上初值通过调用函数实现将数组中的最大值放在中心4个角分别放4个最小的元素顺序为从左到右从上到下依次从小到大存放在主函数中输出变换后的数组。
#include stdio.h// 函数声明
void findMinMax(int arr[5][5], int* min, int* max);
void swap(int* a, int* b);int main() {// 定义并初始化二维数组int matrix[5][5] { {1, 2, 3, 4, 5},{6, 7, 8, 9, 10},{11, 12, 13, 14, 15},{16, 17, 18, 19, 20},{21, 22, 23, 24, 25} };// 调用函数找到最小值和最大值int min, max;findMinMax(matrix, min, max);// 将最大值放在中心位置matrix[2][2] max;// 将最小值放置在四个角落matrix[0][0] min;matrix[0][4] min;matrix[4][0] min;matrix[4][4] min;// 输出变换后的数组for (int i 0; i 5; i) {for (int j 0; j 5; j) {printf(%d\t, matrix[i][j]);}printf(\n);}return 0;
}// 找到二维数组中的最小值和最大值
void findMinMax(int arr[5][5], int* min, int* max) {*min arr[0][0];*max arr[0][0];for (int i 0; i 5; i) {for (int j 0; j 5; j) {if (arr[i][j] *min) {*min arr[i][j];}if (arr[i][j] *max) {*max arr[i][j];}}}
}思路解析 初始化与输入首先我们定义并初始化了一个5x5的二维数组。然后我们调用findMinMax函数来找到这个数组中的最小值和最大值。寻找最小值和最大值在findMinMax函数中我们使用两个指针min和max来分别存储找到的最小值和最大值。我们遍历整个数组并使用条件语句来更新这两个指针的值。这样当我们遍历完整个数组后min和max就分别指向了数组中的最小值和最大值。放置最小值和最大值在主函数中我们首先将最大值放在了二维数组的中心位置。然后我们将最小值放在了四个角落。这样做的目的是使整个二维数组在视觉上看起来更有趣和更有组织性。输出最后我们通过双重循环遍历整个二维数组并使用printf函数将每个元素打印到控制台上。这样用户就可以看到变换后的二维数组了。