Ⅰ 怎麼用用c語言編寫"有N個人需要分班,其中K個人分為一個班,剩下的同學編成一個班
生成k個不重復的0-N-1的隨機數,放入同一個數組,其餘的放在另一個數組
Ⅱ 用C語言編寫:輸入百分製成績.統計全班各等級的人數.等級劃分標准位:90分以上為A等;80-89為B等;70-79為C等
#include
"iostream.h"
main()
{
int
a=0,b=0,c=0;
int
n=0;
int
i;
int
score=0;
printf("請輸入人數:\n");
scanf("%d",&n);
printf("請輸入所有人成績\n",n);
for(i=0;i
{
scanf("%d",&score);
if(score>=70)
if(score<=79)
c++;
else
if(score<=89)
b++;
else
if(score<=99)
a++;
}
printf("統計後的成績是:\n");
printf("得a的同學有:%d名\n",a);
printf("得b的同學有:%d名\n",b);
printf("得c的同學有:%d名\n",c);
}
好久不弄c語言了,演算法可能不太好,但執行好像還可以。另外,對於低於70分的統計我沒寫,要想寫就可以在if語句中在加條,或修改一下。
Ⅲ 如何用c語言解決分班問題
你的程序正如sidpx所說的錯誤。除此之外,if()啟衡模里的比較要用「==」,"="是賦值運算。這樣你的程序就沒有問題了。
#include<stdio.h>
#include<math.h>
#include<conio.h>
main()
{
int i,count1=0,count2=0,count3=0;
int a[13];//這樣好點吧
printf("請輸入待分類各專業班數悄緩:\n");
for(i=0;i<13;i++)
{ scanf("%lf",&a[i]);
if(a[i]==6)
count3=count3+2;
else if(a[i]==5)
{
count2=count2+1;//你寫錯了
count3=count3+1;//你寫錯了
}
else if(a[i]==4)
count2=count2+2;
//下攔搏面也你寫錯了
else if(a[i]==3)
count3++;
else if(a[i]==2)
count2++;
else if(a[i]==1)
count1++;
}
printf("sumcount1=%d,sumcount2=%d,sumcount3=%d\n",count1,count2,count3);
getch();
}
Ⅳ C語言編程,兩個班,輸入每個班成績,求每個班平均成績,並求每個班低於80分的人數(人數分數自己設)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#defineCOUNT50//每班人數上限設定
//定義一個班級人數及成績的結構體類型
typedefstructcl
{
intnumbers;//班級人數
intscores[COUNT];//每人分數
}CLASS;
//設置班級的人數
voidset_number(CLASS*cls,intnumber);
//設置班級人員的成績
voidset_scores(CLASS*cls,int*scores);
//獲取班級的平均成績
floatget_average(constCLASS*cls);
//隨機生成班級的成績信息
voidget_score(int*scores,intn);
//列印成績信息
voidprint_scores(constint*scores,intn);
//獲取班級低於80分的人數
intget_numbers_under80(constCLASS*cls);
intmain()
{
CLASScls1,cls2;//創建兩個班級對象
intscores[COUNT]={0};//定義存儲成績的數組
intnums1=0,nums2=0;//定義班級人數變數
//接收並校驗班級的人數信息
printf("請輸入班級1的人數(50以內):");
scanf("%d",&nums1);
while(nums1>COUNT)
{
printf("人數輸入錯誤,請重新輸入:");
scanf("%d",&nums1);
}
printf("請輸入班級2的人數(50以內):");
scanf("%d",&nums2);
while(nums2>COUNT)
{
printf("人數輸入錯誤,請重新輸入:");
scanf("%d",&nums2);
}
//設置班級1的相關信息
get_score(scores,nums1);
printf("班級1的成績信息: ");
print_scores(scores,nums1);
set_number(&cls1,nums1);
set_scores(&cls1,scores);
//設置班級2的相關信息
get_score(scores,nums2);
printf("班級2的成績信息: ");
print_scores(scores,nums2);
set_number(&cls2,nums2);
set_scores(&cls2,scores);
printf("班級1的平均成績[%.2f] ",get_average(&cls1));
printf("班級2的平均成績[%.2f] ",get_average(&cls2));
printf("班級1中低於80分的人數[%d] ",get_numbers_under80(&cls1));
printf("班級2中低於80分的人數[%d] ",get_numbers_under80(&cls2));
return0;
}
voidset_number(CLASS*cls,intnumber)
{
cls->numbers=number;
}
voidset_scores(CLASS*cls,int*scores)
{
inti=0;
for(;i<cls->numbers;i++)
{
cls->scores[i]=scores[i];
}
}
floatget_average(constCLASS*cls)
{
inti=0;
floatsum=0.0;
for(;i<cls->numbers;i++)
{
sum+=cls->scores[i];
}
returnsum/cls->numbers;
}
//為了方便,使用隨機數據代表成績
voidget_score(int*scores,intn)
{
inti=0;
srand(time(NULL));
for(;i<n;i++)
{
scores[i]=rand()%100+1;
}
}
voidprint_scores(constint*scores,intn)
{
inti=0;
for(;i<n;i++)
{
if(0!=i&&0==i%10)
printf(" ");
printf("%d",scores[i]);
}
printf(" ");
}
intget_numbers_under80(constCLASS*cls)
{
inti=0,nums=0;
for(;i<cls->numbers;i++)
{
if(80>cls->scores[i])
nums++;
}
returnnums;
}
Ⅳ 排班系統的c語言程序
考勤排班規則班次在考勤,班次定義,就是員工上下班的標准,就是考勤的標准,其重要性不言而喻。企業中存在著各色各樣的班次,而且不同的企業對班次的定義及習慣說法也不一樣,理清班次的定義及其相關聯的術語含義就非常有意義。下面分幾個方面來描述班次及其在企業中的常見表現。一、基本班次的組成:班次定義了員工一天的上下班時間及規則,班次是由多個班段組成的,了解班次之前先了解班段。下面先說明一下相關的術語,這些術語可以輔助我們更好地交流。就類似於我們談軟體的「設計模式」一樣。1、固定班段指上下班時間固定的班段。例:指定上下班時間為8:00-12:00.2、自由班段是指上下班時間是由員工自由掌握的。例:允許員工7:00-9:00之間的任一時刻上班,11:00-13:00的任一時刻下班,但要保障上滿4小時。這類型的班段可稱為自由班段。3、休息時段在一個班段內部,允許存在多個休息時段。4、用餐時段同休息時段類似。用餐時段可分為兩類:固定用餐和自由用餐,舉例說:規定中午用餐11:30-12:30,叫固定用餐,允許中午11:00-13:00之間用餐,但規定用餐時間只能是1個小時,叫自由用餐。如果規定了員工可以自由選擇11:00-12:0011:15-12:1511:30-12:30之間的一個時段用餐,則可稱為浮動用餐。由上面4個基本元素組合而成的班次,稱為基本班次,其中休息時段或用餐時段是從屬於某個班段的,這樣組成的班次,能夠適應大部分的情況。班次除了規定上下班時間規則外,還要定義該班次中,怎樣才算遲到早退,怎樣才算缺席曠工,還有其它什麼異常等等,如含用餐時段的班次,就有用餐超時的異常。(每個班次都定義遲到早退缺席曠工等設定,會比較啰嗦,可做個全局默認值,如果班次中沒有設定就使用默認值)二、特殊班次1、休息:休息作為一個特殊的班次指明了當天不用上班。注意指定休息並非指定當天是周日或節假日,這由其它地方定義。指定休息僅僅是指定當天不用上班。2、自由上下班:例:規定員工當天7:00-19:00可自由上下班(多個班段),只要保障上足8小時即可,或者上了多少小時班算多少。周六周日自由加班就是屬於這種情況。3、互斥班組:將多個互斥的基本班次組合在一起,構成一個互斥班組。所謂互斥的,是指各個班次其上下班時間相互不交叉。計算考勤時由系統自動識別匹配是哪個基本班次。這對於兩班倒或三班倒的情況下可以有效地減少排班的工作量。不建議使用互斥班組來進行排班,因為在員工多打卡或少打卡的情況下,同時加班,請假會讓班次是的刷卡點改變,這都使得智能匹配過程容易產生錯誤。明確排班則沒有這類錯誤。考勤應是非常嚴肅的,哪怕是0.0001%的錯誤,都會給你的考勤軟體蒙上污點。4、動態班次這是一種非常特殊的班次。正常情況下,班次的定義是預先定義的,而動態班次的班次定義是由程序動態生成的。好像這不好理解,舉例說,學校老師按課程表上下班,上課前30分鍾要簽到,下課後即可下班,沒課可以不來。此時可依據課程表動態生成一個基本班次來參與考勤計算。如果不使用動態班次,則需要預定義很多個基本班次,而且也加大了排班的難度。很明顯,這種班次需要二次開發定製才能使用。三、「工作天」在班次中的重要性班次解決了員工當天該如何上下班,排班指定了員工當天上哪個班次。這個天並非我們時常說的24小時的一天,而是「工作天」。一個工作天可能不止24小時。班次中定義工作天的起止時間點,加班可能會改變該時間點,從而使得一個工作天實際上不止24小時。「休息」作為一個特殊的班次,其不用指定工作天起止點。班次中如果不定義工作天,那麼對於跨天加班及連續上班36小時的現象就不好處理。這里說一下員工連續工作36小時的現象(變態吧),例如:兩班倒時,1號上夜班,一直加班到2號,然後接著上白班,2號下班後又加班。好像說,這不可能吧!我說說我知道的比較合理的解析。一種情況是下班後安排幾個員工到醫院守護病人,然後第二天繼續上班,自然得付給員工加班費了。其實並不是那名員工強壯得變態,他們可以睡覺的。另一種情況是,安排員工24小時待命,機器一好就開始生產,自然這也是得給員工加班費的。所以,面對異常現象時,不要盲目下結論,調查分析後更有發言權。對於該異常,應該將加班時間分配到相應的工作天去,這也需要工作天定義。定義了工作天,考勤體系更為完整。四、用面向對象的類來因應企業班次的發展以上所說的班次,能對應企業中的普遍情況,但就能適應企業中的全部情況了嗎?那肯定是不行的,隨著企業的發展與需求的變化,班次也將隨著變化,但無論如何變化,總要規定員工是如何上下班的,如何打卡的,怎樣才算是異常等等信息,對於考勤計算來說,這個班次又是如何匹配刷卡的,如何匹配工作天的,等等信息總要在班次中定義,排班也一樣,無論採用何種排班方法,總得給出當天排的是什麼班次。用寫SQL過程來計算考勤過程的方法,因為其對模塊化及面向對象均不支持,在需求發生變更時,改動代碼或看別人的代碼都將變得無比艱難。用面向對象的軟體方法可以在企業有新的班次類型出現時,輕松面對,而無須對軟體大動干戈。用面向對象的方法則需要建立一個正確的考勤模型體系,只要考勤模型不變,變化就盡在掌握中。四公休作息日作息是每個人所必需的,五調休考勤排班班次及排班對於考勤有著重要的意義,是計算考勤的基準。考勤軟體是否好用,排班是否好用就佔了很大的比重。1、群組排班與個人排班的關系。不同的軟體其排班實現不大一樣,一般分為群組排班及個人排班,排班邏輯是個人排班優先於群組排班。對於群組的概念,有些軟體直接用部門替代有些則有專門的考勤班組概念,無論如何做,都是一個員工集合也就是Group這個概念,個人排班作為特殊情況對待。其當天排班過程則是這樣:如果當天有做個人排班,則以個人排班為准,否則以群組排班作為當天班次,如果群組排班也沒排,那麼就依全局設定來處理這個異常,沒排班的可以設定一個默認班次,或者設一個部門默認班次或者直接發出異常,總之在考勤計算前要確認當天所上班次,我是反對智能匹配班次這個概念的,因為考勤是個很嚴肅的話題,就算你做到了99.99%成功匹配,但就是出現一個錯誤,就需要人工來做全部檢查。2、異動與歷史記錄對排班的影響。一個例子就是:員工從排班組A調入排班組B,那麼其班次也會跟著改變,計算時得考慮這些因素。類似這樣的例子有:員工部門調動對於統計部門每天人數的影響,薪資異動對於每月薪資計算的影響。3、數據的來攏去脈能夠展示出來給用戶看,回答為什麼員工當天上的是這個班次,打了這些卡後,為什麼得到如此計算結果。4、個人月排班查詢:數據來源是群組排班與、個人排班、加班、請假及異動記錄,依據預定的規則計算出員工當天排班然後展示出來給用戶看,"加"表示當天有安排加班,"假"表示當天有請假,"離"表示當天已離職,"未"表示當天尚未入職,並提供快捷的方式查找到相應的記錄,以做到有理可依有據可查。個人排班與群組排班具有類似的界面及批量排班功能,目的是減少排班工作量,讓軟體更人性化一些。5、個人考勤明細:考勤計算結果與相關考勤數據展示出來,讓用戶明白刷了什麼卡,得到什麼樣的結果,力求做到數據透明化。解決幾個問題:1)當天該員工是否應上班?這由排班系統來排定。2)應該什麼時候上下班?這由班次定義指定。3)打了什麼卡?這通過自動採集考勤機數據得到。4)計算結果是什麼樣的?為什麼是這樣?將計算結果顯示出來,並支持相應的分組統計。能方便地過濾出每一天的異常人員,並提供方便的途徑回答員工的考勤疑問。排班系統與考勤計算的關系排班系統與考勤計算其實關系不大,也就是考勤計算只需要排班系統告訴員工當天排的是哪個班次就行了,具體如何排班,如何倒班則與考勤計算無關。理解這一點就可以將排班系統與考勤計算獨立開來。排班系統的目標是更好地真實地反映企業中排班的實際情況,企業中排班的主要對象是:1、人。2、班次。3、倒班規則。下面分開來說:1、人,要解決多人同時排班的問題。最簡單方法是手工進行每人每天的排班,加一個批量處理功能來解決多人同時排班的問題。這里說另一種方法:將人歸入群組,然後對群組進行每天排班,特殊的人員進行個人每天排班。也就有群組排班與個人排班同時存在,匹配邏輯是個人排班優先於群組排班。同時群組排班及個人排班都應該有批量處理功能。對人分群組進行群組排班的方法比較貼近千人以上的企業的實際情況,能清楚地反映當前群組的班次。其帶來的問題是員工歸屬群組的歷史記錄問題,這個問題要處理。2、班次,班次的種類及具體班次的定義請看另一個文章,這里只是提出排班時,要對所排班次的合理性做出檢測並警告,主要是相鄰天的上下班時間交叉問題,特別是1號上夜班,2號上白班這種情況。當班次很多時,一般會對班次進行分類,常有以下分類:1、按部門分。2、按使用性質分:常用班次,臨時班次,一次性班次等。分類後能很容易就能找到相應的班次,不用記住班次的名稱或編號。3、倒班規則,如果做好了群組排班與個人排班,就算沒做倒班規則,對千人左右的廠也夠用了。但要應付的員工時,倒班規則可以幫助HR人員很快地生成當月排班表。常見的倒班規則有:兩班倒,三班倒,倒班時間則有:按月倒及按周倒,或者自定義倒班日期。倒班規則掛在員工考勤群組中,不同的考勤群組指定不同的倒班規則,這樣就可以快速生成群組排班表。快速生成一個群組排班表,再由HR人員手工做少少修改或不用修改就可以完成排班,這可以減輕排班難度。4、員工排班表的生成。排班表決定員工最終排定班次,注意:該表不一定存在於資料庫中,至少在我的設計里,該表沒有存在於資料庫表中。它是排班系統動態依據「群組排班表」「個人排班表」「個人歷史記錄」計算而得出的。目前我設計中「倒班規則」則是用來快速生成群組排班表,減輕排班工作量的,與排班表生成邏輯無關。如果要做得更復雜一些,也可以在將「倒班規則」考慮到排班表的生成中去,那樣的排班表生成邏輯就復雜很多了。我認為:將「倒班規則」只用作快速生成群組排班表,不計入排班表生成邏輯中是一個足夠好用的方案,系統不需要再復雜化。5、關於自動偵測員工當天班次。自動偵測員工當天班次,作為一個功能存在,做成「偵測可能的排班錯誤」,並提供對應的可能班次。用以方便檢測排班錯誤。還是不贊成用自動檢測到的班次來替代排班的方案。因為那不能回答:當天員工是否應該出勤?(不用出勤也就沒有曠工缺席了。)關於考勤有很多很多的話題與規則,因為其復雜與易變,考勤軟體走的是螺旋上升的發展道路,程序員的每一次努力都讓軟體更強壯易用,所以最好用面向對象的方法來開發考勤軟體。至於資料庫表設計及具體程序對象介面代碼,我沒准備這方面的內容,至於用戶操作界面如何才易用,那又是另一個話題了。思想與解決方案說出,代碼就是次要的了。
Ⅵ 用C語言編程序:有若干個班級,每個班的學生人數不等,每個學生含姓名、分數數據。編寫一個程序,輸入各
你好!
程序要求也不少,什麼時間交作業,可以嘗試幫你完成,有個類似的,你看看
Ⅶ C語言程序設計: 某幼兒園入園分班規定如下:
#include main(){ int a=0; printf("請輸入年齡:"); scanf("%d",&a); switch(a) { case 1: printf("Lower class"); break; case 2: printf("Lower class"); break; case 3: printf("Lower class"); break; case 4: printf("Middle class"); break; case 5: printf("Can't enter"); break; case 6: printf("Can't enter"); break; default: printf("no handl!"); break; } }