課程設計基礎
❶ 計算機軟體技術基礎課程設計
一.選擇排序
1. 基本思想:
每一趟從待排序的數據元素中選出最小(或最大)的一個元素,順序放在已排好序的數列的最後,直到全部待排序的數據元素排完。
2. 排序過程:
【示例】:
初始關鍵字 [49 38 65 97 76 13 27 49]
第一趟排序後 13 〔38 65 97 76 49 27 49]
第二趟排序後 13 27 〔65 97 76 49 38 49]
第三趟排序後 13 27 38 [97 76 49 65 49]
第四趟排序後 13 27 38 49 [49 97 65 76]
第五趟排序後 13 27 38 49 49 [97 97 76]
第六趟排序後 13 27 38 49 49 76 [76 97]
第七趟排序後 13 27 38 49 49 76 76 [ 97]
最後排序結果 13 27 38 49 49 76 76 97
3.
void selectionSort(Type* arr,long len)
{
long i=0,j=0;/*iterator value*/
long maxPos;
assertF(arr!=NULL,"In InsertSort sort,arr is NULL\n");
for(i=len-1;i>=1;i--)
{
maxPos=i;
for(j=0;j<i;j++)
if(arr[maxPos]<arr[j])maxPos=j;
if(maxPos!=i)swapArrData(arr,maxPos,i);
}
}
選擇排序法的第一層循環從起始元素開始選到倒數第二個元素,主要是在每次進入的第二層循環之前,將外層循環的下標賦值給臨時變數,接下來的第二層循環中,如果發現有比這個最小位置處的元素更小的元素,則將那個更小的元素的下標賦給臨時變數,最後,在二層循環退出後,如果臨時變數改變,則說明,有比當前外層循環位置更小的元素,需要將這兩個元素交換.
二.直接插入排序
插入排序(Insertion Sort)的基本思想是:每次將一個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子文件中的適當位置,直到全部記錄插入完成為止。
直接插入排序
直接插入排序(Straight Insertion Sort):將一個記錄插入到排好序的有序表中,從而得到一個新的、記錄數增1的有序表。
直接插入排序演算法
哨兵(監視哨)有兩個作用:一是作為臨變數存放R[i](當前要進行比較的關鍵字)的副本;二是在查找循環中用來監視下標變數j是否越界。
當文件的初始狀態不同時,直接插入排序所耗費的時間是有很大差異的。最好情況是文件初態為正序,此時演算法的時間復雜度為O(n),最壞情況是文件初態為反序,相應的時間復雜度為O(n2),演算法的平均時間復雜度是O(n2)。演算法的輔助空間復雜度是O(1),是一個就地排序。
直接插入排序是穩定的排序方法。
三. 冒泡排序
[演算法思想]:將被排序的記錄數組R[1..n]垂直排列,每個記錄R[i]看作是重量為R[i].key的氣泡。根據輕氣泡不能在重氣泡之下的原則,從下往上掃描數組R:凡掃描到違反本原則的輕氣泡,就使其向上"飄浮"。如此反復進行,直到最後任何兩個氣泡都是輕者在上,重者在下為止。
[演算法]:
void BubbleSort(SeqList R) {
//R(l..n)是待排序的文件,採用自下向上掃描,對R做冒泡排序
int i,j;
Boolean exchange; //交換標志
for(i=1;i<n;i++){ //最多做n-1趟排序
exchange=FALSE; //本趟排序開始前,交換標志應為假
for(j=n-1;j>=i;j--) //對當前無序區R[i..n]自下向上掃描
if(R[j+1].key<R[j].key){//交換記錄
R[0]=R[j+1]; //R[0]不是哨兵,僅做暫存單元
R[j+1]=R[j];
R[j]=R[0];
exchange=TRUE; //發生了交換,故將交換標志置為真
}
if(!exchange) return;//本趟排序未發生交換,提前終止演算法
} //endfor(外循環)
} //BubbleSort
詳細內容,附圖:
http://hi..com/_%E2d_%B7%B3_%DE%B2%C2%D2/blog/item/2177742ea4a265544ec22621.html
❷ 200分 求<<C++課程設計基礎>>課程設計任務書 !!!!!
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#define MUNMAX 5
struct studentInfo{ //結構類型定義
int num;
float basic;
float spe;
float choose;
float peop;
float lib;
};
struct stuType{
studentInfo stu[MUNMAX];
int num;
};
void DisplayMenu();
int choiceItem();
int f(int);
void putone(struct stuType* as,int num);
void sum(struct stuType *p);
void Init(struct stuType*);
void PrintInfo(struct stuType);
void Print_aInfo(struct stuType,int);
void Input_aInfo(struct studentInfo*);
void Input_allInfo(struct stuType*,int num);
int Search(struct stuType);
void modify(struct stuType*);
void main()
{
struct stuType student;
int choice,index,a;
system(\"color 4e\");
Init(&student);
do{
choice=choiceItem();
switch (choice){
case 0:printf(\"\\n再見!\");break;
case 1:Input_allInfo(&student,MUNMAX);break;
case 2:putone(&student,f(a)); break;
case 3rintInfo(student);break;
case 4:modify(&student);break;
case 5:if ((index=Search(student))!=-1)
Print_aInfo(student,index);
else printf(\"\\n不存在這個學生.\");
break;
case 6:Init(&student);break;
case 7:sum(&student);break;
}
}while(choice);
}
void DisplayMenu() //顯示菜單
{
COORD coordScreen = { 25, 3 };
HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hCon, coordScreen);
printf(\"========= MENU =========\\n\");
printf(\"\\n (1) 通過鍵盤輸入全部學生的學分;\");
printf(\"\\n (2) 通過鍵盤修改某位學生的學分;\");
printf(\"\\n (3) 顯示該班所有學生學分完成情況;\");
printf(\"\\n (4) 全部課程的學分高低進行排序;\");
printf(\"\\n (5) 給定學號,顯示該學生學分完成情況;\");
printf(\"\\n (6) 初始化程序;\");
printf(\"\\n (7) 一些統計信息;\");
printf(\"\\n (0) 退出系統;\");
printf(\"\\nchoice,please:\");
}
int choiceItem() //菜單選擇
{
int choice;
do{
DisplayMenu();
scanf(\"%d\",&choice);
}while(choice<0||choice>7);
return choice;
}
int f(int a)
{
do
{
printf("請輸入要修改學生的學號(1-5):");
scanf("%d",&a);
}while(a-1<0||a-1>4);
return a-1;
}
void Init(struct stuType* s) //初始化
{
s->num=0;
}
void Print_aInfo(struct stuType s,int index) //輸出一個學生的信息
{
printf("\n學號:%d\n基礎課學分:%-6.1f\n專業課學分:%-6.1f\n選修課學分:%-6.1f\n人文類課程學分:%-6.1f\n實驗性課程學分:%-6.1f\n ",s.stu[index].num,s.stu[index].basic,s.stu[index].spe,s.stu[index].choose,s.stu[index].peop,s.stu[index].lib);
}
void PrintInfo(struct stuType s) //輸出所有學生的信息
{
if (s.num==0) {
printf("\n無學生信息.");
return;
}
for (int i=0;i<s.num;i++){
printf("\n學號:%d\n基礎課學分:%-6.1f\n專業課學分:%-6.1f\n選修課學分:%-6.1f\n人文類課程學分:%-6.1f\n實驗性課程學分:%-6.1f\n ",s.stu[i].num,s.stu[i].basic,s.stu[i].spe,s.stu[i].choose,s.stu[i].peop,s.stu[i].lib);
}
}
void putone(struct stuType* as,int num)//修改一個學生信息
{
Input_aInfo(&as->stu[num]);
}
void Input_aInfo(struct studentInfo* as) //輸入一個學生的信息
{
do
{
printf("請輸入學生的學號:");
scanf("%d",&as->num);
}while(as->num<1||as->num>5);
printf("請輸入學生的基礎課成績:");
scanf("%f",&as->basic);
printf("請輸入學生的專業課成績:");
scanf("%f",&as->spe);
printf("請輸入學生的選修課成績:");
scanf("%f",&as->choose);
printf("請輸入學生的人文課成績:");
scanf("%f",&as->peop);
printf("請輸入學生的實驗課成績:");
scanf("%f",&as->lib);
printf("\n");
}
void Input_allInfo(struct stuType* s,int num) //輸入多個學生的信息
{
printf("\n請輸入 %d 組信息.\n",num);
for (int i=0;i<num;i++){
if (s->num==MUNMAX){
printf("\n已經輸入過成績,不能重復輸入,只能按2更改原始數據!");
break;
}
Input_aInfo(&s->stu[s->num++]);
}
}
int Search(struct stuType stu) //查找
{
int num;
do
{
printf("\n輸入學生學號(1-5):");
scanf("%d",&num);
}while(num<1||num>5);
for (int i=0;i<stu.num;i++)
if (stu.stu[i].num==num)
return i;
return -1;
}
void modify(struct stuType *p) //排序
{int i,j;float temp;
for(i=0;i<4;i++)
for(j=0;j<4-i;j++)
{if(p->stu[j].basic>p->stu[j+1].basic){
temp=p->stu[j].basic;
p->stu[j].basic=p->stu[j+1].basic;
p->stu[j+1].basic=temp;}
if(p->stu[j].spe>p->stu[j+1].spe){
temp=p->stu[j].spe;
p->stu[j].spe=p->stu[j+1].spe;
p->stu[j+1].spe=temp;}
if(p->stu[j].choose>p->stu[j+1].choose){
temp=p->stu[j].choose;
p->stu[j].choose=p->stu[j+1].choose;
p->stu[j+1].choose=temp;}
if(p->stu[j].peop>p->stu[j+1].peop){
temp=p->stu[j].peop;
p->stu[j].peop=p->stu[j+1].peop;
p->stu[j+1].peop=temp;}
if(p->stu[j].lib>p->stu[j+1].lib){
temp=p->stu[j].lib;
p->stu[j].lib=p->stu[j+1].lib;
p->stu[j+1].lib=temp;}
}
printf("全部課程成績的排序結果為:\n基礎課:");
for(i=0;i<5;i++)
printf("%-6.1f",p->stu[i].basic);
printf("\n專業課:");
for(i=0;i<5;i++)
printf("%-6.1f",p->stu[i].spe);
printf("\n選修課:");
for(i=0;i<5;i++)
printf("%-6.1f",p->stu[i].choose);
printf("\n人文課:");
for(i=0;i<5;i++)
printf("%-6.1f",p->stu[i].peop);
printf("\n實驗課:");
for(i=0;i<5;i++)
printf("%-6.1f",p->stu[i].lib);
}
void sum(struct stuType *p)
{int i,b1=0,b2=0,s1=0,s2=0,c1=0,c2=0,p1=0,p2=0,l1=0,l2=0;
for(i=0;i<4;i++)
{if(p->stu[i].basic>=90.0)
b1++;
if(p->stu[i].basic<50.0)
b2++;
if(p->stu[i].spe>=90.0)
s1++;
if(p->stu[i].spe<50.0)
s2++;
if(p->stu[i].choose>=90.0)
c1++;
if(p->stu[i].choose<24.0)
c2++;
if(p->stu[i].peop>=90.0)
p1++;
if(p->stu[i].peop<8.0)
p2++;
if(p->stu[i].lib>=90.0)
l1++;
if(p->stu[i].lib<20.0)
l2++;
}
printf("\n基礎課程90學分以上的有%d個,不及格的有%d個",b1,b2);
printf("\n專業課程90學分以上的有%d個,不及格的有%d個",s1,s2);
printf("\n選修課程90學分以上的有%d個,不及格的有%d個",c1,c2);
printf("\n人文課程90學分以上的有%d個,不及格的有%d個",p1,p2);
printf("\n實驗課程90學分以上的有%d個,不及格的有%d個",l1,l2);
❸ 機械設計製造基礎課程設計應該包含哪些內容
主幹學科:力學、機械工程。
主要課程:工程力學、機械設計基礎、電工與電子技術、微型計算機原理及應用、機械工程材料、製造技術基礎。
編輯本段機械製造與自動化就業領域
(1)機械製造工藝與設備;
(2)數控編程與加工;
(3)機械設計與製造;
(4)機械電子工程;
(5)機械設備與管理;
(6)金屬材料與熱處理。
專業培養目標
本專業培養具備機械製造基礎知識與應用能力,能在工業生產第一線從事機械製造領域內的設計製造、科技開發、應用研究、運行管理和經營銷售等方面工作的高級工程技術人才。
專業培養要求
本專業學生主要學習機械製造的基礎理論,學習微電子技術、計算機技術和信息處理技術的基本知識,受到現代機械工程師的基本訓練,具有進行機械產品設計、製造及設備控制、生產組織管理的基本能力。
常識
畢業生應具備的知識和能力
1. 具有較扎實的自然科學基礎、較好的人文、藝術和社會科學基礎及正確運用本國語言、文字的表達能力;
2.較系統地掌握本專業領域寬廣的技術理論基礎知識,主要包括力學、機械學、電工與電子技術、機械工程材料、機械設計工程學、機械製造基礎、自動化基礎、市場經濟及企業管理等基礎知識;
3.具有本專業必需的制圖、計算、實驗、測試、文獻檢索和基本工藝操作等基本技能;
4.具有本專業領域內某個專業方向所必要的專業知識,了解其科學前沿及發展趨勢;
5.具有初步的科學研究、科技開發及組織管理能力;
6.具有較強的自學能力和創新意識。