大连理工大学C语言题目(三)

116 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

1.编写一个函数,对一个数组进行处理,使其中的元素不重复,并在主函数中进行测试。例如,对于数组a[12] = {1,1,2,7,3,2,3,4,5,8,7,4},处理完之后元素为7个不重复的数据。 想法是: 找一个不在数组中的数(k),如果出现重复就把重复的元素改成k,最后输出所有非k的数。 确实有一点缺陷,但大部分情况下不需要改k,如果出现了,自己改一下也不耽误事。

#include <stdio.h>
void omit(int a[],int l){
	int i,j,k=10000000;
	for(i=0;i<l;i++){
		if(a[i]!=k){
			for(j=0;j<l;j++){
			if(i!=j&&a[i]==a[j])
			a[i]=k;
			}
		}else printf("改一下k!");
	}
	for(i=0;i<l;i++){
			if(a[i]!=k)
			printf("%d ",a[i]);
			}
}
void main(){
	int a[]={1,1,2,7,3,2,3,4,5,8,7,4},l=sizeof(a)/sizeof(a[0]);
	omit(a,l);
}

2.编写一个函数,实现两个整型数组的合并(将两个整型数组a和b合并成一个从小到大有序排列的整形数组c,并在主函数中测试)。

#include <stdio.h>
void bubblesort(int*p,int l){
	int i,j,k;
	for(i=0;i<l-1;i++){
		for(j=0;j<l-i-1;j++){
			if(p[j]>p[j+1]){
				k=p[j];
				p[j]=p[j+1];
				p[j+1]=k;
			}
		}
	}
}
void combine(int a[],int b[],int la,int lb){
	int*p=a,*q=b,i;
	for(i=0;i<lb;i++)
		*(p+la+i)=*(q+i);
	bubblesort(p,la+lb);
	for(i=0;i<la+lb;i++)
		printf("%d ",p[i]);
}
void main(){
	int a[]={1,3,5,7,9},b[]={2,4,6,8},la=sizeof(a)/sizeof(a[0]),lb=sizeof(b)/sizeof(b[0]);
	combine(a,b,la,lb);
}

3.编写一个函数实现插入排序算法,并在主函数中测试。

#include <stdio.h>
void insertionsort(int a[],int n){
	int i,j,k,p=0;
	for(i=0;i<n-1;i++){
		for(j=0;j<=i;j++){
			if(a[i+1]<=a[j]){
				p=a[i+1];
				for(k=i;k>=j;k--)
				a[k+1]=a[k];
				a[j]=p;
			}
		}
	}
}

void main(){
	int arr[]={9,1,7,5,3,1},n=sizeof(arr)/sizeof(arr[0]),i;
	insertionsort(arr,n);
	for(i=0;i<n;i++)
	printf("%d ",arr[i]);
}