大家好!我是一所民办二本计科专业的学生,目前大二,学了两个月c语言,前几天偶然在力扣上发现这个算法题,所以想和大家分享一下在写代码的时候可能碰到的一些bug,本来觉得发出来可能有些丢人,写的这么辣鸡,而且还没考虑时间复杂度的情况,大部分人来写都能写出来吧。虽然写这篇文章可能会受到一些人的谩骂,又或许根本不会有人关注,但我还是想把它给呈现出来给大家看,毕竟也是我自己的心血,但我同样希望它能帮助到跟我一样初入c语言,但是又只能靠自己学的小白。
代码如下代码运行如下#include<stdio.h> int N_element_1 = 0; //声明全局变量 int N_element_2 = 0; void string_compact(int arr1[], int n1, int arr2[], int n2) //声明形参的数据类型,arr1[]和arr2[]作函数形参,传入的是数组首元素地址,本质上是指针。 { int* p1 = arr1, * p2 = arr2; //*p1=arr1,表示指针变量p指向数组arr1,*p2同理。 int n = 0; p1 = p1 + n1; //指针从数组第一位指向最末位 while (n < n2) { //将数组2元素和数组1元素串联 *p1 = *p2; //*p1=*p2是指将p2此时指向的元素赋值给*p1指向的元素 p1++; //p1++是使指针从第0个元素指向下一个元素,直到不满足循环条件跳出循环。 p2++; n++; } } int main() { int num_1[100] = { 0 }; int num_2[100] = { 0 }; int tmp = 0; printf("请输入数组1的元素个数:\n"); scanf_s("%d ", &N_element_1); for (int i = 0; i < N_element_1; i++) { scanf_s("%d", &num_1[i]); //[i]是因为用for循环给数组每一个元素赋值 } printf("请输入数组2的元素个数:\n"); scanf_s("%d", &N_element_2); for (int i = 0; i < N_element_2; i++) { scanf_s("%d", &num_2[i]); } string_compact(num_1, N_element_1, num_2, N_element_2); //传入数组1、2和数组1、2的长度 N_element_1 = N_element_1 + N_element_2; //将数组串联后的长度赋值给数组1 for (int i = 0; i < N_element_1 - 1; i++) { //c语言入门的冒泡排序(为了让串联数组变得有序,有实力的观众可以用希尔排序或者归并排序),双层for循环是先外层一次,内层全部循环。 for (int j = 0; j < N_element_1 - 1 - i; j++) { //不用与自己排序所以循环少一次 if (num_1[j] > num_1[j + 1]) { tmp = num_1[j + 1]; num_1[j + 1] = num_1[j]; num_1[j] = tmp; } } } for (int i = 0; i < N_element_1; i++) printf(" %d ", num_1[i]); int x = N_element_1 / 2; if (N_element_1 % 2 == 0) { double middle = (num_1[x - 1] + num_1[x]) / 2.0; printf("该有序串联数组中位数是:%lf", middle); } else { double middle = num_1[x]; printf("该有序串联数组中位数是:%lf", middle); } return 0; }
还没有学到指针的朋友,可以用for循环实现数组的串联
#include<stdio.h>
int main()
{
int num_1[100] = { 0 };
int num_2[100] = { 0 };
int num_res[100] = {0};
int tmp = 0;
int N_element_1, N_element_2 = 0;
int length = 0;
printf("请输入数组1的元素个数:\n");
scanf_s("%d ", &N_element_1);
for (int i = 0; i < N_element_1; i++) {
scanf_s("%d", &num_1[i]);
}
printf("请输入数组2的元素个数:\n");
scanf_s("%d", &N_element_2);
for (int i = 0; i < N_element_2; i++) {
scanf_s("%d", &num_2[i]);
}
length = N_element_1 + N_element_2;
for (int i = 0, k=0; i < N_element_1; i++, k++) {
num_res[k] = num_1[i];
}
for ( int k = N_element_1,j=0;j< N_element_2; j++,k++) {
num_res[k] = num_2[j];
}
for (int k = 0; k < length; k++) {
printf(" %d ", num_res[k]);
}
return 0;
}
运行结果如下
以上就是该帖子的所有内容,内容均为原创。因为作者没什么实力,如果有错误,恳请大家指出。也欢迎大佬、小白来一起交流,谢谢!
目录