1. 程式人生 > >C語言:計算兩個集合的並集

C語言:計算兩個集合的並集

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define NUMBER1 7
#define NUMBER2 5
void createCollect(int [],int);
void display(int [],int);
int main()
{
	int	collection1[NUMBER1];
	int collection2[NUMBER2];
	int collection3[NUMBER1+NUMBER2];
 	int i,j,label=0;
	createCollect(collection1,NUMBER1);   
	
	for(j = 0;j < NUMBER2;j++)
	{
		collection2[j]=j*2;
	}
	
	printf("集合1:"); 
	display(collection1,NUMBER1);
	
	printf("集合2:");    
	display(collection2,NUMBER2);
	
	for(i = 0; i < NUMBER1;i++)
	{
		//從集合1中取出元素,去遍歷集合2中的所有元素 
		for(j = 0;j < NUMBER2;j++)
		{
			//如果相同則跳出遍歷 
			if(collection1[i]==collection2[j])
				break;			
		}
		//判斷:此時存在兩種情況1) 當前集合1的元素與集合2的元素相同
		//2)遍歷完了集合2的陣列後不存在相同的元素 
		if(j == NUMBER2)
		{
			collection3[label]=collection1[i];
			label++;
		}
						
	}
	
	//把集合2的所有元素存進collection3中 
	for(j = 0;j < NUMBER2;j++)
	{
		collection3[label++]=collection2[j];
	}
	
	printf("集合1與集合2的並集為:\n");
	display(collection3,label);
			
	return 0;
}
//隨機生成一個不含重複元素的陣列 
void createCollect(int num[],int count)
{		
	//randValue:臨時隨機數存放變數 
	//condition:迴圈生成不重複的條件 
	int i,j,randValue,condition;
	srand(time(NULL));
	for(i=0;i<count;i++)
    {
    	condition=1;
        while(condition){
        	randValue=1+(int)rand()%10;
        	for(j = 0;j <= i;j++){
        		if(i==0){//第一個數不可能存在重複數,可以直接賦值 
        			condition=0;
					break;
		        }
	        	if(randValue==num[j])
	        		break;
        		if(randValue!=num[j]&&j==i-1)//當生成的隨機數與當前陣列最後一位不同並且下標相等時 
        		{	
		       		condition=0;
					break;	
		        }			
	        }
        }
        num[i]=randValue;
    }
}
//列印陣列 
void display(int num[],int count)
{
    int i;
    for(i=0;i<count;i++)
    {
         printf("%d\t",num[i]);
    }
    printf("\n");
}
並集的計算,在交集的基礎上修改兩處即可。有什麼不足之處請拍磚....

相關推薦

C語言計算集合

#include<stdio.h> #include<stdlib.h> #include<time.h> #define NUMBER1 7 #define NUMBER2 5 void createCollect(int [],int

C語言計算集合的交集

#include<stdio.h> #include<stdlib.h> #include<time.h> #define NUMBER1 7 #define NU

C語言給定整形變數的值,將值的內容進行交換

給定兩個整形變數的值,將兩個值的內容進行交換,有三種不同的方法。第一種:定義一個中間變數,使得兩個數值交換。第二種:利用兩個數值之間相互加減,使得兩個數值交換。第三種:利用異或運算,使得兩個數值交換。第一種方法程式碼如下: #include<stdio.h> int main() {

C語言比較字串是否相等

1) 使用strcmp進行比較 下面通過一個例子進行演示: #include <stdio.h> #include <string.h> int main(void) { char* str1 = "abc"; char* str2 = "a

c語言輸入正整數m和n,求其最大公約數和最小公倍數

輸入兩個正整數m和n,求其最大公約數和最小公倍數。解:程式:#include <stdio.h>int main(){int num1, num2, t,p;printf("請輸入兩個正整數

C語言函式,分別求最大公約數和最小公倍數

題目:寫兩個函式,分別求兩個整數的最大公約數和最小公倍數,用主函式呼叫這個兩個函式,並輸出結果。兩個整數由鍵盤輸入 分析:求最大公約數,需要用到輾轉相除法: 輾轉相除法:設兩數為a、b(a>b

我的第四C語言計算圓柱體的表面積和體積。

問題及程式碼: 問題:計算圓柱體的表面積和體積。 程式碼:#include <stdio.h> #include <stdlib.h> int main() { float r,h,S,V; printf("請輸入圓柱體的半徑\n"

C語言有5學生,每個學生有3門課的成績,從鍵盤輸入學生資料,計算平均成績

有5個學生,每個學生有3門課的成績,從鍵盤輸入學生資料(包括學生號、姓名、三門課成績),計算平均成績,將原有資料和計算出的平均分數存放在磁碟檔案“stud”中  對於平均成績的思路就是:把平均成績當做結構體的一項  在輸入3門課成績以獲得平均成績時,要注意在c語言中,三門成績

C語言計算輸出S=1+(1+2^0.5)+(1+2^0.5+3^0.5)...+(1+2^0.5+3^0.5+...+n^0.5)

輸出 nbsp clas return %d span file fprintf 計算 //計算並輸出S=1+(1+2^0.5)+(1+2^0.5+3^0.5)...+(1+2^0.5+3^0.5+...+n^0.5) 1 #include<math.h>

C語言計算輸出給定10個數的方差。

include pen printf style i++ double The span col //計算並輸出給定10個數的方差。 1 #include<math.h> 2 #include<stdio.h> 3 double fu

C語言解決多C檔案包含同一標頭檔案引起的檔案重複包含問題

解決多個C檔案包含同一標頭檔案引起的檔案重複包含問題,並給出全域性變數如何定義和宣告的方法. 解決方法: 1. 定義公共檔案: global.c 和global.h 其中, global.c檔案中: #include "global.h" //定義全域性變數 int g

C語言計算階乘和階乘的和

從鍵盤輸入一個數,用C語言計算該數的階乘 #include <stdio.h> #include<stdlib.h> int main() { int i,sum = 0, p = 1, n; scanf("%d",&n); if(

C語言分別求整數的最大公約數和最小公倍數

#include <stdlib.h> #include <math.h> #include <stdio.h> //遞迴演算法 //歐幾里得演算法 void GCD(int a, int b) {     int temp;

C語言,實現整數m和n的二進位制序列中有多少不同的位

新手學程式設計,大佬寫的太高深,看看本人小白寫的,一起學習一起交流 #include <stdio.h> int main() { int m = 0; int n = 0; int i = 0; int count = 0; scanf("%d%d", &

C語言C++語言)中##(井號)和#(一個井號)用法[轉]

C語言(C++語言)中的巨集(Macro)屬於編譯器預處理的範疇,屬於編譯期概念(而非執行期概念)。下面對常遇到的巨集的使用問題做了簡單總結。 關 於#和## 在C語言的巨集中,#的功能是將其後面的巨集引數進行字串化操作(Stringfication),簡單說就是在對它所引用的巨集變數通過替換後

C語言求10 整數中最大值

求10 個整數中最大值思路:求10 個整數中最大值,可以利用陣列來完成對10個數的儲存,再用迴圈語句和條件語句來判斷數的大小, 把最大值賦值給最大值變數max,然後輸出最大值。 程式碼如下: #include<stdio.h> int main() { int i,max;

C語言例項—輸入正整數m和n,求其最大公約數和最小公倍數(gcc 編譯)。

1.輾轉相除法 輾轉相除法是古希臘求兩個正整數的最大公約數的,也叫歐幾里德演算法,其方法是用較大的數除以較小的數,上面較小的除數和得出的餘數構成新的一對數,繼續做上面的除法,直到出現能夠整除的兩個數,其中較小的數(即除數)就是最大公約數。以求288和123的最大公約數為例,操作如下: 288÷1

C語言程式設計求複數的和

#include <stdio.h> #include <stdlib.h> /* 1.程式設計求兩個複數的和 結構體 函式 返回值是結構體 引數 兩個結構體 */ struct Complex { int x; int y; }; stru

C語言中交換陣列的值

  昨天我們做了交換兩個變數的值,今天我們來看看如何交換兩個陣列的值(陣列內數的個數相同)。   我們可以這樣考慮,陣列不過是數的集合,既然我們會交換兩個數的值,那麼陣列只不過是多次交換兩個數的值,而且陣列內素下標又是依次增大的,所以這裡可以使用一個for迴圈。

C語言字元中字串拼接(古月)

最忌學習了C語言的基礎,深刻的感受到了跨平臺語言是多麼的強大,我們都是站在了巨人的肩膀上.下面就是C語言將兩個字串拼接起來的程式碼 #include<stdio.h> int main(void) { char arr1[] = "hello"; // 定義兩個字元陣