1、编一C程序,它能读入两组整数(每组整数都以 -9999为结束标记,个数都不大于1000),并以从小到大的次序输出这两组整数都包含的所有整数(同一个整数不能输出两次)。输入时,两个相邻的整数用空格隔开。
答案:
#include<stdio.h>
void main(){
void sort(int x[], int n);
void output(int x[], int y[], int lx, int ly);
void output_use_pointer(int *x, int *y);
int a[1000],b[1000],i,len_a,len_b;
int *p1,*p2;
p1=a;
p2=b;
printf("enter numbers(end with -9999):\n");
for(i=0;i<1000;i++,p1++){
scanf("%d",p1);
if(*p1==-9999){
len_a = i;
break;
}
}
len_a = i;
printf("length of a:%d\n",len_a);
sort(a, len_a);
printf("enter other numbers(end with -9999):\n");
for(i=0;i<1000;i++,p2++){
scanf("%d",p2);
if(*p2 ==-9999){
len_a = i;
break;
}
}
len_b = i;
printf("length of b:%d\n",len_b);
sort(b,len_b);
//output(a,b,len_a,len_b);
output_use_pointer(a,b);
}
void sort(int x[], int n){
int i,j,k,tmp;
for(i=0;i<n-1;i++){
k=i;
for(j=i+1;j<n;j++){
if(x[k] > x[j]) k=j;
}
if(k != i){
tmp = x[k];
x[k] = x[i];
x[i] = tmp;
}
}
}
void output(int x[], int y[], int lx, int ly){
printf("the final array is :\n");
int z[lx+ly],i=0,j=0,k=0;
if(x[0]<=y[0]){
z[0] = x[0];
i=1;
}else{
z[0] = y[0];
j=1;
}
while(i<lx && j<ly){
if(x[i]<=y[j]){
if(x[i] != z[k]){
k++;
z[k] = x[i];
}
i++;
}else{
if(y[j] != z[k]){
k++;
z[k] = y[j];
}
j++;
}
}
while(i<lx){
if(x[i] != z[k]){
k++;
z[k] = x[i];
}
i++;
}
while(j<ly){
if(y[j] != z[k]){
k++;
z[k] = y[j];
}
j++;
}
for(i=0;i<=k;i++){
printf("%d\t",z[i]);
}
}
void output_use_pointer(int *x, int *y){
int *p,*t;
p = t = x+1000;
if(*x <= *y){
*p = *x;
x++;
}else{
*p = *y;
y++;
}
while(*x != -9999 && *y != -9999){
if(*x<=*y){
if(*p != *x){
p++;
*p = *x;
}
x++;
}else{
if(*p != *y){
p++;
*p = *y;
}
y++;
}
}
while(*x != -9999){
if(*p != *x){
p++;
*p = *x;
}
x++;
}
while(*y != -9999){
if(*p != *y){
p++;
*p = *y;
}
y++;
}
p++;
*p = -9999;
for(p = t; *p != -9999; p++){
printf("%d\t", *p);
}
}
大致思路:
1)分别用两个整型数组保存输入的整数
2)对两个数组分别排序(从小到大)。答案中使用了选择排序,也可以使用冒泡、插入等基本排序方法。
3)对两个已经排好序的数组进行归并排序。排序结果放在第三个数组中。(答案中使用了两种方法output 和 output_use_pointer。 output函数使用了数组方式,output_use_pointer使用指针方式。任意一种都可以得到想要的效果。不过在数据量比较大时,使用指针相对会快一些,但是没有数组直观,且容易出错。)
4)输出结果。