tft每日頭條

 > 圖文

 > 怎麼用c創建2個集合

怎麼用c創建2個集合

圖文 更新时间:2024-07-20 07:10:52

今天在頭條看到一位數學教師總結的高中數學公式,前5個都與集合相關,而集合在計算機算法中經常會用到,因此本文将實現集合的并集和交集功能,演示程序開發中使用到的一些基礎語句。

本實例使用簡單的C語言語法實現集合的求值運算,并未涉及到自定義函數等概念,因此代碼會存在冗餘,在介紹完函數功能之後就可以将一部分代碼進行模塊化,提高代碼的複用性,目前實現的代碼仍以功能為主。

首先實現的功能為提示菜單,即程序在啟動時,第一個顯示的界面,用戶可以執行的操作有3項:并集練習、交集練習和退出。通過選中菜單項前面的數字進入相應的操作流程

怎麼用c創建2個集合(.計算集合的并集和交集)1

圖1

這個界面的實現代碼比較簡單,通過調用4個printf函數即可實現,代碼如下圖所示

怎麼用c創建2個集合(.計算集合的并集和交集)2

圖2

需要說明的是:這塊代碼位于一個while循環語句塊内,此循環語句一直處于等待用戶輸入狀态,将用戶輸入的内容轉換為對應的命令值,并存放至整型變量cmd中,cmd變量值對應着三個菜單項前面的數字編号,數值0表示退出外層的while語句,終止整個程序。

怎麼用c創建2個集合(.計算集合的并集和交集)3

圖3

菜單項1和2進入對應的集合操作流程,命令1為集合并集操作,這項操作的流程需要輸入兩個集合a和b,這兩個集合在輸入元素的時候都可能存在相同的元素,但是合并完成之後的集合c各個元素不會出現重複的數值,下面我們介紹代碼的實現邏輯。

集合a的輸入。集合a允許輸入的數值個數最大為10,如果用戶需要輸入的數值個數小于10,直接輸入一個非數值字符就表示終止當前的集合元素輸入。

怎麼用c創建2個集合(.計算集合的并集和交集)4

圖4

圖4第34行代碼将表示集合a大小的變量sizeOfA賦值為0,在代碼第35行的while終止循環條件中設置sizeOfA的數值不超過10,之後通過第36行代碼讀入用戶的輸入,在這個輸入中我們使用了scanf函數的返回值result,通過這個返回值我們就可以判斷,用戶輸入的内容和我們期望的數值是否相符,比如:當前的實例中我們的期望數值為一個整數值,但是如果用戶輸入的内容為一個字符型或其他類型的數值,那麼就會導緻scanf函數的返回值為0,此時item變量的值也是非法的,因此我們通過第38-40行代碼來處理這個錯誤邏輯,第40行代碼表示終止了當前的輸入操作,即完成了集合a所有輸入的工作。而如果用戶輸入的内容合法,那麼将會執行第42-44行代碼,将用戶輸入的内容存放至數組a中。

第39行代碼有點莫名其妙,它的功能是當讀入整數失敗時,輸入緩沖區中的内容會被當做字符逐個地讀入至字符變量d中,直到遇到了換行符’\n’為止,這樣就保證了非法的字符可以被程序正常的讀取,程序的健壯性得以提高。

集合b的讀入操作與集合a的讀入操作類似,隻是将數值存放至集合b中,二者沒有大的不同,像這樣的代碼就是冗餘代碼,同樣的功能在代碼中存在于多個地方,當介紹了函數功能之後,我們就可以将這樣的代碼提取為一個獨立的函數,進行代碼複用。

集合的合并操作。當完成集合a和b的輸入之後,便可以進行集合的合并操作。集合合并要保證集合a和集合b合并為一個新的集合c後,集合c将含有集合a和b中的所有元素,但不能含有任何重複元素。為此我們在生成集合c時會對每一個元素項進行了重複性檢查,代碼如下圖所示

怎麼用c創建2個集合(.計算集合的并集和交集)5

圖5

圖5代碼中,将sizeOfC的值初始化為0,表示集合c中的元素個數為0,之後每增加一個元素便會對這個變量進行遞增操作。第65-76行代碼為檢查每次遍曆集合a時當前元素是否存在于集合c中,如果不存在,則會将其加入到集合c中,但是如果已經存在于這個集合c中,将不會執行任何操作,繼續處理下一個位置的字符。第66行代碼中循環終止條件i < sizeOfC會保證檢查當前集合中的每一個元素值是否與a[count]字符相同,這個sizeOfC變量是變化的,因此我們通過這個for循環語句來判斷元素a[count]是否已經存在于集合c中,如果在for循環中查找到對應的元素,則立刻将exists變量設置為1,之後添加元素時會使用這個變量作為條件進行判斷是否需要添加至集合c。

集合的交集操作。集合的交集操作是通過使用命令2進入相應的流程,在輸入集合a和b元素的過程中與上述集合的并集操作相同,按照代碼複用性原則可以将其抽取為獨立函數,本文不涉及到自定義函數,故依舊采用代碼複制的方式進行編寫。完成集合a和b的元素輸入之後,便是對這兩個集合計算交集操作,代碼如下:

怎麼用c創建2個集合(.計算集合的并集和交集)6

圖6

集合a和b的交集指的是:元素既存在于集合a中,又存在于集合b中。與上例中的限制相同,集合中不能出現重複的元素,故在進行生成交集的時候同樣進行了重複元素的校驗過程,代碼第139-145行使用同圖5中第65-71行的一行的代碼判斷元素是否已經存在與集合c中,如果沒有存在則執行第148-149行的集合元素插入操作,否則,繼續下一個元素的處理。

本例中的第一二層循環為:取出集合a中的每一個元素a[i]與集合b中的每一個元素b[j]進行比較,如果二者相等,則認為這個元素同時存在于集合a和集合b中,那麼會執行第139-152行代碼判斷是否重複添加元素,如果沒有這個元素,則執行第148和149行代碼,将元素加入至集合c中,至此完成了整個集合交集計算的操作。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved