第一篇:java教學(xué)計(jì)劃編制的全部代碼
package curriculumProject;
//非連通圖的深度優(yōu)先搜索遍歷和廣度優(yōu)先搜索遍歷
import linearList.Queue.SeqQueue;
//順序循環(huán)隊(duì)列類(lèi)
public abstract class AbstractGraph
{
public abstract int vertexCount();
//返回頂點(diǎn)數(shù),方法由子類(lèi)實(shí)現(xiàn)
public abstract E get(int i);
//返回頂點(diǎn)vi的數(shù)據(jù)域
public abstract int getFirstNeighbor(int i);
//返回頂點(diǎn)vi的第一個(gè)鄰接頂點(diǎn)的序號(hào)
public abstract int getNextNeighbor(int i, int j);
//返回vi在vj后的下一個(gè)鄰接頂點(diǎn)的序號(hào)
//
public abstract AbstractGraph prim();
public void DFSTraverse(int v)
//從頂點(diǎn)v出發(fā)對(duì)非連通圖的一次深度優(yōu)先搜索遍歷
{
boolean[] visited = new boolean[vertexCount()];
//訪(fǎng)問(wèn)標(biāo)記數(shù)組,元素初值為false,表示未被訪(fǎng)問(wèn)
int i=v;
do
{
if(!visited[i])
點(diǎn)vi未被訪(fǎng)問(wèn)
{
System.out.print(“{ ”);
depthfs(i, visited);
點(diǎn)vi出發(fā)的一次深度優(yōu)先搜索遍歷
System.out.print(“} ”);
}
i =(i+1)% vertexCount();
他連通分量中尋找未被訪(fǎng)問(wèn)頂點(diǎn)
} while(i!=v);
System.out.println();
}
private void depthfs(int v, boolean[] visited)
//若頂
//從頂
//在其//從頂點(diǎn)v開(kāi)
始發(fā)的一次深度優(yōu)先搜索遍歷
{
//遍歷一個(gè)連通分量
System.out.print(this.get(v)+“ ”);
//訪(fǎng)問(wèn)該頂點(diǎn)
visited[v] = true;
已訪(fǎng)問(wèn)標(biāo)記
int w = getFirstNeighbor(v);
第一個(gè)鄰接頂點(diǎn)
while(w!=-1)
若存在鄰接頂點(diǎn)
{
if(!visited[w])
鄰接頂點(diǎn)w未被訪(fǎng)問(wèn)
depthfs(w, visited);
w出發(fā)的深度優(yōu)先搜索遍歷,遞歸調(diào)用
w = getNextNeighbor(v, w);
回v在w后的下一個(gè)鄰接頂點(diǎn)的序號(hào)
}
}
//置
//獲得
//
//若
//從
//返
public void BFSTraverse(int v)
//從頂點(diǎn)v出發(fā)對(duì)非連通圖進(jìn)行一次廣度優(yōu)先搜索遍歷
{
boolean[] visited = new boolean[vertexCount()];
//訪(fǎng)問(wèn)標(biāo)記數(shù)組
int i=v;
do
{
if(!visited[i])
點(diǎn)vi未被訪(fǎng)問(wèn)
{
System.out.print(“{ ”);
breadthfs(i, visited);
點(diǎn)vi出發(fā)的廣度優(yōu)先搜索遍歷
System.out.print(“} ”);
}
i =(i+1)% vertexCount();
他連通分量中尋找未被訪(fǎng)問(wèn)頂點(diǎn)
} while(i!=v);
System.out.println();
}
//若頂//從頂//在其
private void breadthfs(int v, boolean[] visited)
//從頂點(diǎn)v出發(fā)的廣度優(yōu)先搜索遍歷
{
//遍歷一個(gè)連通分量
System.out.print(this.get(v)+“ ”);
visited[v] = true;
SeqQueue
que
= SeqQueue
//創(chuàng)建順序隊(duì)列
que.enqueue(new Integer(v));
問(wèn)過(guò)的頂點(diǎn)v的序號(hào)入隊(duì)
while(!que.isEmpty())
隊(duì)列不空時(shí)循環(huán)
{
v = que.dequeue().intValue();
int w = getFirstNeighbor(v);
頂點(diǎn)v的第一個(gè)鄰接頂點(diǎn)序號(hào)
while(w!=-1)
當(dāng)鄰接頂點(diǎn)存在時(shí)循環(huán)
{
if(!visited[w])
該頂點(diǎn)未訪(fǎng)問(wèn)過(guò)
new
//訪(fǎng)
//當(dāng)//出隊(duì) //獲得
//
//若
{
System.out.print(this.get(w)+“ ”);
//訪(fǎng)問(wèn)頂點(diǎn)
visited[w] = true;
que.enqueue(new Integer(w));
//訪(fǎng)問(wèn)過(guò)的頂點(diǎn)w的序號(hào)入隊(duì)
}
w = getNextNeighbor(v, w);
回v在w后的下一個(gè)鄰接頂點(diǎn)的序號(hào)
}
}
}
}
//返 package curriculumProject;
//圖的鄰接表
import dataStructure.linearList.SeqList;
//順序表類(lèi) import linearList.linkedList.SortedHSLinkedList;
//排序的帶頭結(jié)點(diǎn)的單鏈表類(lèi)
//public class AdjListGraph
//鄰接表表示的圖類(lèi)
public class AdjListGraph
{
protected SeqList
//頂點(diǎn)表
public AdjListGraph(int n)
//構(gòu)造方法,n指定頂點(diǎn)數(shù)
{
this.vertexlist = new SeqList
}
public AdjListGraph(E[] vertices, Edge[] edges)
//以頂點(diǎn)集合和邊集合構(gòu)造一個(gè)圖
{
this(vertices.length);
for(int i=0;i insertVertex(vertices[i]); //插入一個(gè)頂點(diǎn) for(int j=0;j insertEdge(edges[j]); 邊 } public int vertexCount() 數(shù) { return this.vertexlist.length(); } public E get(int i) vi的數(shù)據(jù)元素 { return this.vertexlist.get(i).data; } //插入一條 //返回頂點(diǎn) //返回頂點(diǎn) public boolean insertVertex(E vertex) //插入一個(gè)頂點(diǎn),若插入成功,返回true { return this.vertexlist.add(new Vertex } public boolean insertEdge(int i, int j) //插入一條權(quán)值為weight的邊〈vi,vj〉 { if(i>=0 && i { //SortedHSLinkedList SortedHSLinkedList slink = this.vertexlist.get(i).adjlink;// slink = this.vertexlist.get(i).adjlink;// System.out.println(this.vertexlist.get(i)); return slink.add(new Edge(i,j));//在第i條單鏈表最后增加邊結(jié)點(diǎn) } slink = new return false; } public boolean insertEdge(Edge edge) //插入一條邊 { if(edge!=null) return insertEdge(edge.start, edge.dest); return false; } public String toString() //獲得圖的頂點(diǎn)集合和鄰接表 { String str= “頂點(diǎn)集合:”+vertexlist.toString()+“n”; str += “出邊表:n ”; //+edgeCount+“條邊 n”; for(int i=0;i str += this.vertexlist.get(i).adjlink.toString()+“n”; //遍歷第i條單鏈表 return str; } public boolean removeEdge(int i, int j) //刪除邊〈vi,vj〉,i、j指定頂點(diǎn)序號(hào) { if(i>=0 && i { SortedHSLinkedList slink = this.vertexlist.get(i).adjlink;//獲得第i條邊單鏈表 return slink.remove(new Edge(i,j)); } return false; } public boolean removeVertex(int v) //刪除序號(hào)為v的頂點(diǎn)及其關(guān)聯(lián)的邊 { //若刪除成功,返回true int n=vertexCount(); //刪除之前的頂點(diǎn)數(shù) if(v>=0 && v { SortedHSLinkedList slink = this.vertexlist.get(v).adjlink;//獲得欲刪除的第v條邊單鏈表 int i=0; Edge edge = slink.get(i); while(edge!=null) { this.removeEdge(edge.dest, edge.start); //刪除對(duì)稱(chēng)的邊 i++; edge = slink.get(i); } this.vertexlist.remove(v); //刪除順序表的第i個(gè)元素,頂點(diǎn)數(shù)已減一 for(i=0;i //未刪除的邊結(jié)點(diǎn)更改某些頂點(diǎn)序號(hào) { slink = this.vertexlist.get(i).adjlink; //獲得第i條邊單鏈表 int j=0; edge = slink.get(j); while(edge!=null) { if(edge.start>v) edge.start--; //頂點(diǎn)序號(hào)減一 if(edge.dest>v) edge.dest--; j++; edge = slink.get(j); } } return true; } return false; } public int getFirstNeighbor(int v) 第一個(gè)鄰接頂點(diǎn)的序號(hào) { 存在第一個(gè)鄰接頂點(diǎn),則返回-1 return getNextNeighbor(v,-1); } //返回頂點(diǎn)v的 //若不 public int getNextNeighbor(int v, int w) //返回v在w后的下一個(gè)鄰接頂點(diǎn)的序號(hào) { //若不存在下一個(gè)鄰接頂點(diǎn),則返回-1 if(v>=0 && v { SortedHSLinkedList slink = this.vertexlist.get(v).adjlink;//獲得第v條邊單鏈表 Edge edge = slink.get(0); //返回單鏈表的第一個(gè)結(jié)點(diǎn)表示的邊 int i=0; while(edge!=null) //尋找下一個(gè)鄰接頂點(diǎn) { if(edge.dest>w) return edge.dest; //返回下一個(gè)鄰接頂點(diǎn)的序號(hào) i++; edge = slink.get(i); //返回單鏈表的第一個(gè)結(jié)點(diǎn)表示的邊 } } return-1; } } package curriculumProject; //帶權(quán)圖的邊類(lèi) public class Edge implements Comparable //帶權(quán)值的邊類(lèi) public int start; //邊的起點(diǎn)序號(hào) public int dest; //邊的終點(diǎn)序號(hào) //public int weight; //邊的權(quán)值 public Edge(int start, int dest) { this.start = start; this.dest = dest; //this.weight = weight; } public String toString() { return “(”+start+“,”+dest+“)”; } public int compareTo(Edge e) 較大小的規(guī)則 { if(this.start!=e.start) return this.starte.dest; } } package curriculumProject;//圖接口 public interface GGraph //圖接口 { int vertexCount(); //返回頂點(diǎn)數(shù) E get(int i); //返回頂點(diǎn)vi的數(shù)據(jù)元素 boolean insertVertex(E vertex);頂點(diǎn) boolean insertEdge(int i, int j); 〈vi,vj〉 boolean removeVertex(int v); 為v的頂點(diǎn)及其關(guān)聯(lián)的邊 boolean removeEdge(int i, int j); int getFirstNeighbor(int v); 的第一個(gè)鄰接頂點(diǎn)的序號(hào) int getNextNeighbor(int v, int w);后的下一個(gè)鄰接頂點(diǎn)的序號(hào) } //插入一個(gè)//插入一條權(quán)值為weight的邊 //刪除序號(hào) //刪除邊〈vi,vj〉 //返回頂點(diǎn)v //返回v在w package curriculumProject; import java.util.*; import linearList.Queue.SeqQueue;; public class Graph_Main2 { /** * @param args */ int bian;// 定義邊數(shù) HashSet array = new HashSet();// 定義一個(gè)集合保存頂點(diǎn)的值 ArrayList list2 = new ArrayList();// 保存優(yōu)先關(guān)系頂點(diǎn)的值 ArrayList listrudu = new ArrayList();// 保存頂點(diǎn)的入度 ArrayList result = new ArrayList();// 保存拓?fù)渑判虻慕Y(jié)果 ArrayList credit2 = new ArrayList();// 保存學(xué)分信息 ArrayList credit3 = new ArrayList();// 保存學(xué)分信息 int[][] relation;// 保存輸入優(yōu)先關(guān)系的所有值 int[][] c_relation;Scanner scanner = new Scanner(System.in); public void input(){ System.out.println(“請(qǐng)輸入課程總數(shù),按回車(chē)確認(rèn)”);Scanner reader=new Scanner(System.in);int Input=reader.nextInt();System.out.println(“請(qǐng)依次輸入各個(gè)課程的學(xué)分:”);int[] credit = new int[Input];for(int i = 0;i < Input;i++){ } String[] vertices = new String[Input];for(int n = 0;n < Input;n++){ } Scanner reader2=new Scanner(System.in);System.out.println(“請(qǐng)輸入課程之間的關(guān)系總和,即有多少條if(n < 9){ vertices[n] = ”C0“ +(n + 1);credit[i] = reader.nextInt();credit2.add(credit[i]);} else { } vertices[n] = ”C“ +(n + 1);邊?,按回車(chē)確認(rèn)”); bian = reader2.nextInt();relation = new int[bian][2];List } Edge[] edges = list.toArray(new Edge[0]); AdjListGraph graph = new System.out.print(“請(qǐng)輸入第” +(i + 1)+ “條邊的優(yōu)先關(guān)系”);for(int j = 0;j < 2;j++){ } list.add(new Edge(relation[i][0],relation[i][1]));relation[i][j] = reader.nextInt();AdjListGraph System.out.println(“帶權(quán)有向圖,”+graph.toString());System.out.println(“深度優(yōu)先搜索遍歷”);for(int i=0;i System.out.println(“廣度優(yōu)先搜索遍歷”); for(int i=0;i graph.BFSTraverse(i); } } public void sort(){ for(int i = 0;i < bian;i++){ for(int j = 0;j < 2;j++){ array.add(relation[i][j]); } } Iterator iter = array.iterator(); while(iter.hasNext()){ Object s = iter.next();list2.add(s);// 將各頂點(diǎn)的值保存在list里,方便后面查找入度時(shí)使用 } int count = 0;// 定義一個(gè)記入度的計(jì)數(shù)器 for(int i = 0;i < list2.size();i++){ } for(int j = 0;j < bian;j++){ } listrudu.add(list2.get(i));listrudu.add(count);count = 0;if(list2.get(i).equals(relation[j][1])){ } count++;System.out.println();boolean flag = true;while(flag){ int check = 0;// 檢查有沒(méi)有入度為0 for(int i = 0;i < listrudu.size();i = i + 2){ if(listrudu.get((i + 1)).equals(0)){ result.add(listrudu.get(i)); for(int j=0;j credit3.add(credit2.get(j));// // // //credit3.add(credit2.get(i));for(int j = 0;j < list2.size();j++){ if(listrudu.get(i).equals(list2.get(j))){ for(int j2 = 0;j2 < bian;j2++){ if(list2.get(j).equals(relation[j2][0])){ relation[j2][1] =-9999;// 如果這個(gè)前驅(qū)是要被刪除的話(huà),那么把他的后繼改值 “); } flag = false; } if(check == listrudu.size()/2){ System.out.println(”課程關(guān)系輸入錯(cuò)誤,有環(huán),無(wú)法排序 } } } list2.remove(j);} } else { } check++; int count1 = 0;// 定義一個(gè)記入度的計(jì)數(shù)器 for(int i = 0;i < list2.size();i++){ } if(list2.size()== 0){ } System.out.println(“存在拓?fù)渑判颉?;flag = false;for(int j = 0;j < bian;j++){ } listrudu.add(list2.get(i));listrudu.add(count1);count1 = 0;if(list2.get(i).equals(relation[j][1])){ } count1++;}// while循環(huán)結(jié)束 } public void print(){ /* * 這個(gè)for循環(huán)的作用是:因?yàn)槲疑厦孀龅氖歉鶕?jù)listrudu來(lái)找的,* 所以它每進(jìn)行一次循環(huán)就把前面的入度為0的值再保存了一遍,其實(shí)最后的結(jié)果是最后一次循環(huán)所得的值,打印的時(shí)候要把前面重復(fù)的去掉 */ for(int i = result.size()-1;i >= 0;i--){ } for(int i = 0;i < result.size();i++){ for(int j = 0;j < i;j++){ } if(result.get(j).equals(result.get(i))){ } result.remove(j); System.out.print(result.get(i)+ “-->”); } System.out.println();System.out.println();System.out.println(“請(qǐng)輸入你的總學(xué)期數(shù)”);Scanner reader3=new Scanner(System.in); 為:“); int term = reader3.nextInt();System.out.println(”請(qǐng)輸入學(xué)期學(xué)分上線(xiàn)“);int sum_credit = reader3.nextInt();System.out.println(”如果要使課程均勻分布在各個(gè)學(xué)期,則int sum=0;int sum2=0;for(int i = 0;i < result.size();i++){ for(int j=0;j Object res2 = result.get(j); Integer r2 = Integer.parseInt(res2.toString()); Object obj = credit2.get(r2-1);Integer a = Integer.parseInt(obj.toString());sum += a;j=j+2;break;} double value =(double)credit2.size()/(double)term;int value2=0;if(value<=1.0) value=1.0; if((int)value==value)value2=(int)value;else value2 =(int)value+1;if((i+1)%(value2)==0){ System.out.print(result.get(i)+ “-->”);System.out.println();}else{ if(sum<=sum_credit){ for(int j3=0;j3 Integer r = Integer.parseInt(res.toString());Object obj2 = credit2.get(r-1); Integer a2 = Integer.parseInt(obj2.toString());sum += a2;break;} if(sum<=sum_credit) System.out.print(result.get(i)+ “-->”);//System.out.print(result.get(i)+ “-->”);else{ sum = 0; “); } } } System.out.print(result.get(i)+ ”-->“);}else{ } System.out.println();sum = 0; System.out.print(result.get(i)+ ”-->“);System.out.println();System.out.println();System.out.println(”如果要使課程分布在前幾個(gè)學(xué)期,則為: int j_=0;int j=0; for(int i = 0;i < result.size();i++){ //for(int j=0;j Object res4 = result.get(j);Integer r4 = Integer.parseInt(res4.toString()); // // Object obj4 = credit2.get(r4-1);Integer a4 = Integer.parseInt(obj4.toString());sum += a4;j=j+1;//break;//} if(sum<=sum_credit){ //for(int j=0;j System.out.print(result.get(i)+ “-->”);if(sum<=sum_credit&&) System.out.print(result.get(i)+ “-->”);else{ sum = 0; System.out.print(result.get(i)+ “-->”); } } }else{ } if(sum<=sum_credit){ System.out.print(result.get(i)+ “-->”);System.out.print(result.get(i)+ “-->”);System.out.println();sum = 0;// // // // // // // } }else{ } System.out.println();sum = 0; System.out.print(result.get(i)+ “-->”);public static void main(String[] args){ // TODO Auto-generated method stub Graph_Main2 s = new Graph_Main2();s.input(); s.sort();s.print(); } } package curriculumProject; import linearList.linkedList.SortedHSLinkedList;單鏈表類(lèi) public class Vertex //排序的帶頭結(jié)點(diǎn)的//頂點(diǎn)表 元素 { public E data; //頂點(diǎn)數(shù)據(jù)域 public SortedHSLinkedList //該頂點(diǎn)的邊單鏈表 public Vertex(E data, SortedHSLinkedList { this.data = data; this.adjlink = adjlink; } public Vertex(E data) { this(data, new SortedHSLinkedList //構(gòu)造結(jié)點(diǎn)時(shí)創(chuàng)建空單鏈表 } public String toString() { return this.data.toString(); } } JAVA代碼注釋規(guī)范 一、規(guī)范存在的意義 1.好的注釋規(guī)范可以讓人一眼看明白這是干什么的,特別是對(duì)于我們這種行業(yè);共同合作完成一個(gè)項(xiàng)目需要分工明確,所以也需要有明了的注釋規(guī)范。 2.正確的應(yīng)用注釋規(guī)范可以增加代碼的可讀性、理解性。3.好的代碼規(guī)范可以提高團(tuán)隊(duì)的開(kāi)發(fā)效率,從而節(jié)省時(shí)間。4.長(zhǎng)期的堅(jiān)持代碼規(guī)范可以讓程序員養(yǎng)成一個(gè)良好的習(xí)慣,甚至鍛煉出思維。 二、命名規(guī)范 1.一般概念 1)盡量使用完整的英文描述。2)采用相對(duì)好理解的術(shù)語(yǔ)。 3)采用駱駝命名的規(guī)范使名字增加可讀性。4)盡量少用縮寫(xiě)提高可讀性。5)避免名字過(guò)長(zhǎng)。 6)避免使用類(lèi)似的名字。7)避免使用特殊符號(hào)。2.主要的運(yùn)用 1)類(lèi)(class)的命名 2)接口(interface)的命名 +方法(method)的命名 3)參數(shù)(param)的命名 三、注釋規(guī)范 1.一般概念 1)注釋?xiě)?yīng)該增加代碼的清晰度 2)保持代碼的整潔 3)在寫(xiě)代碼之前或同時(shí)注意寫(xiě)上注釋 4)注釋出為什么做這件事,做這件事的結(jié)果 2.注釋那些部分 1)java文件:版權(quán)信息、創(chuàng)建時(shí)間、創(chuàng)建人 2)類(lèi):目的、所完成功能、版權(quán)信息、創(chuàng)建人 3)方法:參數(shù)含義、返回值 4)屬性:字段描述 5)接口:目的、創(chuàng)建人、版本號(hào)、創(chuàng)建時(shí)間 四、代碼格式規(guī)范 1.單行注釋://注釋內(nèi)容,一般與代碼后空4-8格,注釋必須對(duì)齊 2.塊狀注釋?zhuān)?*注釋內(nèi)容*/,一般是注釋從以/*開(kāi)始,以*/結(jié)束中的所有內(nèi)容。3.文檔注釋?zhuān)?**......*/所以注釋文 檔必須書(shū)寫(xiě)在類(lèi)、域、構(gòu)造函數(shù)、方法,以及字段(field)定義之前.注釋文檔由兩部分組成——描述、塊標(biāo)記。4.javadoc注釋標(biāo)簽 @author 對(duì)類(lèi)的說(shuō)明 標(biāo)明開(kāi)發(fā)該類(lèi)模塊的作者 @version 對(duì)類(lèi)的說(shuō)明 標(biāo)明該類(lèi)模塊的版本 @see 對(duì)類(lèi)、屬性、方法的說(shuō)明 參考轉(zhuǎn)向,也就是相關(guān)主題 @param 對(duì)方法的說(shuō)明 對(duì)方法中某參數(shù)的說(shuō)明 @return 對(duì)方法的說(shuō)明 對(duì)方法返回值的說(shuō)明 @exception 對(duì)方法的說(shuō)明 對(duì)方法可能拋出的異常進(jìn)行說(shuō)明 五、java注釋具體實(shí)現(xiàn) 1.源文件注釋 /** *文件名 *創(chuàng)建人 *創(chuàng)建時(shí)間 *修改人 *描述 *版本號(hào) */ 2.類(lèi)注釋 /** *對(duì)此類(lèi)的描述信息 *創(chuàng)建人 *版本號(hào) *創(chuàng)建時(shí)間 */ 3.方法的注釋 /** *方法的用處 *該方法的參數(shù)列 *該方法返回的值 */ 4.屬性的注釋 /** *字段的描述 */ 5.接口注釋 /** *對(duì)此接口的描述 *創(chuàng)建人 *創(chuàng)建時(shí)間 *版本號(hào) */ 6.構(gòu)造方法注釋 /** *描述該構(gòu)造方法的用處 *該構(gòu)造方法的參數(shù)列 *參數(shù)的類(lèi)型 */ 六、Jsp代碼格式規(guī)范 1.多行注釋:,一般是注釋從以結(jié)束中的所有內(nèi)容。 2.文本注釋:<%--內(nèi)容--%>,主要是對(duì)該頁(yè)面的一些描述,目的、創(chuàng)建人、創(chuàng)建時(shí)間、版本號(hào)、文件名、備注、修改人等.例如: <%---創(chuàng)建人-創(chuàng)建時(shí)間-版本號(hào)-文件名-備注-修改人--%> 3.偽劣標(biāo)簽注釋:<% java語(yǔ)句塊 %> 例如: <% JAVA代碼塊 %> 4.單行注釋?zhuān)?/注釋內(nèi)容,一般與代碼后空4-8格,注釋必須對(duì)齊 七、JS代碼格式規(guī)范 1.文本注釋:/** 注釋內(nèi)容 **/,主要是對(duì)該頁(yè)面的一些描述,目的、創(chuàng)建人、創(chuàng)建時(shí)間、版本號(hào)、文件名、備注、修改人等.也可以用于注釋代碼塊。例如: /** *創(chuàng)建人 *創(chuàng)建時(shí)間 *版本號(hào) *文件名 *備注 *修改人 **/ 2.文本注釋:/** 內(nèi)容 */ ,主要是對(duì)該頁(yè)面的一些描述,目的、創(chuàng)建人、創(chuàng)建時(shí)間、版本號(hào)、文件名、備注、修改人等.也可以用于注釋代碼塊。例如: /** *創(chuàng)建人 *創(chuàng)建時(shí)間 *版本號(hào) *文件名 *備注 *修改人 */ 3.單行注釋: //注釋內(nèi)容,一般與代碼后空4-8格,注釋必須對(duì)齊 4.多行注釋: /* 注釋內(nèi)容 */,一般是注釋從以/* 開(kāi)始,以*/結(jié)束中的所有內(nèi)容。 八、JS注釋具體實(shí)現(xiàn) 1.文件注釋 /** *對(duì)此文件的描述信息 *創(chuàng)建人 *版本號(hào) *創(chuàng)建時(shí)間 */ 2.方法的注釋 /** *方法的用處 *該方法的參數(shù)列 *該方法返回的值 */ 3.模塊的注釋 /** *模塊名稱(chēng) *模塊的用處 */ 實(shí)驗(yàn)7 流(2學(xué)時(shí)) 一、實(shí)驗(yàn)?zāi)康?.熟悉流類(lèi)庫(kù)中各種常用流的使用方法。 2.能夠使用流類(lèi)實(shí)現(xiàn)基本的文件讀寫(xiě)。 二、實(shí)驗(yàn)內(nèi)容 1.編寫(xiě)程序,在控制臺(tái)窗口提示輸入兩個(gè)整數(shù),然后接收這兩個(gè)整數(shù),并輸出它們的和。(要求:鍵盤(pán)輸入通過(guò)流封裝System.in獲取,不要使用Scanner類(lèi)) import java.io.*;System.out.println(x);System.out.println(“y”);public class Num1 {n=in.readLine();public static void main(String []args)y=Integer.parseInt(n);{System.out.println(y);int x=0,y=0;}catch(IOException e)BufferedReader in=new BufferedReader({ newSystem.out.println(“error”);InputStreamReader(System.in));} String n;int s=x+y; try{System.out.println(s);System.out.println(“x”);} n=in.readLine();} x=Integer.parseInt(n); 2.設(shè)計(jì)學(xué)生類(lèi)Student,屬性:編號(hào)(整型);姓名(字符串),成績(jī)(整型)。編寫(xiě)一個(gè)程序:要求:(1)輸入3個(gè)學(xué)生的姓名和成績(jī),將其姓名和成績(jī)保存到data.txt中;(2)然后從該文件中讀取數(shù)據(jù),求得這三個(gè)學(xué)生的平均成績(jī)。 import java.io.*;DataOutputStream dout = newDataOutputStream(public class num2 {newpublic static void main(String[]args)FileOutputStream(“D:data.txt”));{String n; BufferedReader in=new BufferedReader(for(int i=0;i<5;i++)new{ InputStreamReader(System.in));n=in.readLine(); int num=Integer.parseInt(n);try{String name=in.readLine(); n=in.readLine();int grade=Integer.parseInt(n);dout.writeBytes(num+“rn”);dout.writeBytes(name+“rn”);dout.writeBytes(grade+“rn”);}dout.close();}catch(IOException e1){int num=Integer.parseInt(n); n=din.readLine();String name=n;n=din.readLine();int grade=Integer.parseInt(n);ave+=grade;}System.out.println(“平均成績(jī)”+ave*1.0/5);System.out.println(“文件寫(xiě)入失敗”);}try{DataInputStream din =new DataInputStream(new FileInputStream(“D:data.txt”));int ave=0;String n;for(int i=0;i<5;i++){n=din.readLine(); 三、實(shí)驗(yàn)要求 完成程序設(shè)計(jì)并提交實(shí)驗(yàn)報(bào)告。 在“);失敗”);} } }catch(FileNotFoundException e){System.out.println(“文件不存}catch(IOException e2){System.out.println(”文件讀取} 目 錄 課題需求描述..........................................2 1.1 教學(xué)計(jì)劃編制問(wèn)題..................................2 1.2 進(jìn)制轉(zhuǎn)換..........................................2 2 總體功能與數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì).................................3 2.1 總體功能結(jié)構(gòu)......................................3 2.2 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)......................................4 3 算法設(shè)計(jì)和程序設(shè)計(jì)....................................6 3.1 教學(xué)計(jì)劃編制問(wèn)題..................................6 3.2 進(jìn)制轉(zhuǎn)換問(wèn)題......................................9 4 調(diào)試與測(cè)試...........................................23 4.1 教學(xué)計(jì)劃編制問(wèn)題調(diào)試結(jié)果.........................23 4.2 進(jìn)制轉(zhuǎn)換問(wèn)題調(diào)試結(jié)果.............................25 5 設(shè)計(jì)總結(jié).............................................27 6 程序代碼.............................................29 課題需求描述 1.1 教學(xué)計(jì)劃編制問(wèn)題 大學(xué)的每個(gè)專(zhuān)業(yè)都要制訂教學(xué)計(jì)劃。假設(shè)任何專(zhuān)業(yè)都有固定的學(xué)習(xí)年限,每學(xué)年含兩學(xué)期,每學(xué)期的時(shí)間長(zhǎng)度和學(xué)分上限均相等。每個(gè)專(zhuān)業(yè)開(kāi)設(shè)的課程都是確定的,而且課程在開(kāi)設(shè)時(shí)間的安排必須滿(mǎn)足先修關(guān)系。每門(mén)課程有哪些先修課程是確定的,可以有任意多門(mén),也可以沒(méi)有。每門(mén)課恰好占一個(gè)學(xué)期。在這樣的前提下設(shè)計(jì)一個(gè)教學(xué)計(jì)劃編制程序。通過(guò)輸入實(shí)際的課程及先后關(guān)系。結(jié)合每學(xué)期的學(xué)分及課程數(shù),制定好學(xué)習(xí)計(jì)劃。在輸入相關(guān)數(shù)據(jù)后,程序會(huì)安排好每學(xué)期的課程。 1.2 進(jìn)制轉(zhuǎn)換 進(jìn)制數(shù)制是人們利用符號(hào)進(jìn)行計(jì)數(shù)的科學(xué)方法。數(shù)制有很多種,在計(jì)算機(jī)中常用的數(shù)制有:十進(jìn)制,二進(jìn)制,八進(jìn)制和十六進(jìn)制。十六進(jìn)制數(shù)有兩個(gè)基本特點(diǎn):它由十六個(gè)字符0~9以及A,B,C,D,E,F組成(它們分別表示十進(jìn)制0~15),十六進(jìn)制數(shù)運(yùn)算規(guī)律逢十六進(jìn)一。 要求:(1)輸入一個(gè)十進(jìn)制數(shù)N,將它轉(zhuǎn)換成R進(jìn)制數(shù)輸出,并可以進(jìn)行你轉(zhuǎn)換。 (2)輸入數(shù)據(jù)包含多個(gè)測(cè)試實(shí)例,每個(gè)測(cè)試實(shí)例包含兩個(gè)整數(shù)N(32位整數(shù))和R(2<=R<=16)。 (3)為每個(gè)測(cè)試實(shí)例輸出轉(zhuǎn)換后的數(shù),每個(gè)輸出占一行。如果R大于10,則對(duì)應(yīng)的數(shù)字規(guī)則參考16進(jìn)制(比如,10用A表示,等等)??傮w功能與數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì) 1.教學(xué)計(jì)劃編制問(wèn)題 根據(jù)問(wèn)題描述及要求,可知設(shè)計(jì)中需要定義先修關(guān)系的AOV網(wǎng)圖中的頂點(diǎn)及弧邊的結(jié)構(gòu)體,在運(yùn)行結(jié)果中將圖的信息顯示出來(lái),利用先修關(guān)系將課程排序,最后解決問(wèn)題——輸出每學(xué)期的課程。 2.進(jìn)制轉(zhuǎn)換問(wèn)題 由于計(jì)算機(jī)只能識(shí)別二進(jìn)制,所以當(dāng)我們從鍵盤(pán)輸入其他進(jìn)制數(shù)的時(shí)候,計(jì)算機(jī)內(nèi)部的系統(tǒng)會(huì)利用自帶的程序代碼自動(dòng)轉(zhuǎn)換成二進(jìn)制,我們是學(xué)計(jì)算機(jī)的,所以我們需要弄懂這種機(jī)制轉(zhuǎn)換的原理并且能計(jì)算出來(lái)。 2.1 總體功能結(jié)構(gòu) 2.1.1 教學(xué)計(jì)劃編制問(wèn)題 教學(xué)計(jì)劃是學(xué)校保證教學(xué)質(zhì)量和人才培養(yǎng)的關(guān)鍵,也是組織教學(xué)過(guò)程、安排教學(xué)過(guò)程、安排教學(xué)任務(wù)、確定教學(xué)編制的基本依據(jù)和課程安排的具體形式。是穩(wěn)定教學(xué)秩序、提高教學(xué)質(zhì)量的重要保證。從教學(xué)計(jì)劃的設(shè)計(jì)、實(shí)施等方面,闡明了如何搞好教學(xué)管理,從而為提高教學(xué)質(zhì)量提供保證。隨著教育改革的不斷深入和社會(huì)發(fā)展的需要,原舊的教學(xué)計(jì)劃在定位上的方向性偏差,已經(jīng)不再適應(yīng)社會(huì)的需求。因此,應(yīng)重視教學(xué)計(jì)劃的改革和修訂工作,以確保教育教學(xué)質(zhì)量,提高教育教學(xué)水平。教學(xué)計(jì)劃編制中的思路:一是明確培養(yǎng)目標(biāo);二是注重學(xué)科設(shè)置的整體性、統(tǒng)一性和靈活性、全面性;三是與學(xué)分制改革有機(jī)結(jié)合.教學(xué)計(jì)劃是高校實(shí)施常規(guī)教學(xué)活動(dòng)的基本管理文檔,由于傳統(tǒng)的手工編制方式存在諸多弊端,開(kāi)發(fā)基于Web應(yīng)用程序形式的教學(xué)計(jì)劃編制系統(tǒng)具有很好的應(yīng)用價(jià)值。使用C程序設(shè)計(jì)語(yǔ)言,研究開(kāi)發(fā)教學(xué)計(jì)劃編制系統(tǒng)Web應(yīng)用系統(tǒng)。 2.1.2 進(jìn)制轉(zhuǎn)換問(wèn)題 1.十進(jìn)制數(shù)與非十進(jìn)制數(shù)之間的轉(zhuǎn)換 (1)十進(jìn)制數(shù)轉(zhuǎn)換成非十進(jìn)制數(shù) 把一個(gè)十進(jìn)制數(shù)轉(zhuǎn)換成非十進(jìn)制數(shù)(基數(shù)記作R)分成兩步.整數(shù)部分轉(zhuǎn)換時(shí)采用“除R取余法”;小數(shù)部分轉(zhuǎn)換時(shí)采用“乘R取整法”。 (2)非十進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù) 非十進(jìn)制數(shù)(基數(shù)記作R,第j個(gè)數(shù)位的位權(quán)記作Rj)轉(zhuǎn)換成十進(jìn)制數(shù)的方法:按權(quán)展開(kāi)求其和。 2.非十進(jìn)制數(shù)之間的轉(zhuǎn)換 (1)二進(jìn)制數(shù)與八進(jìn)制數(shù)之間的轉(zhuǎn)換 ①二進(jìn)制數(shù)轉(zhuǎn)換成八進(jìn)制數(shù)的方法.以小數(shù)點(diǎn)分界,整數(shù)部分自右向左、小數(shù)部分自左向右,每三位一組,不足三位時(shí),整數(shù)部分在高位左邊補(bǔ)0,小數(shù)部分在低位右邊補(bǔ)0,然后寫(xiě)出對(duì)應(yīng)的八進(jìn)制數(shù)碼。②八進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù)的方法:用八進(jìn)制數(shù)碼對(duì)應(yīng)的三位二進(jìn)制數(shù)代替八進(jìn)制數(shù)碼本身即可。 (2)二進(jìn)制數(shù)與十六進(jìn)制數(shù)之間的轉(zhuǎn)換 ①二進(jìn)制數(shù)轉(zhuǎn)換成十六進(jìn)制數(shù)的方法:以小數(shù)點(diǎn)分界,整數(shù)部分自右向左、小數(shù)部分自左向右,每四位一組,不足四位時(shí),整數(shù)部分在高位左邊補(bǔ)0,小數(shù)部分在低位右邊補(bǔ)0,然后寫(xiě)出對(duì)應(yīng)的十六進(jìn)制數(shù)碼。②十六進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù)的方法:用十六進(jìn)制數(shù)碼對(duì)應(yīng)的四位二進(jìn)制數(shù)代替十六進(jìn)制數(shù)碼本身即可。 2.2 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì) 2.2.1 教學(xué)計(jì)劃編制問(wèn)題 LocateVex():圖的鄰接表存儲(chǔ)的基本操作 CreateGraph():構(gòu)造生成樹(shù) Display():輸出圖的鄰接矩陣 FindInDegree():求頂點(diǎn)的入度 InitStack():構(gòu)造一個(gè)空棧 ClearStack():清空棧 StackEmpty():判斷是否為空棧 Pop():出棧 Push():入棧 TopologicalSort():輸出G頂點(diǎn)的拓?fù)渑判蚪Y(jié)果 2.2.2 進(jìn)制轉(zhuǎn)換問(wèn)題 void D_B(): 十進(jìn)制轉(zhuǎn)換為二進(jìn)制 void D_O(): 十進(jìn)制轉(zhuǎn)換為八進(jìn)制 void D_X(): 十進(jìn)制轉(zhuǎn)換為十六進(jìn)制 void B_D(): 二進(jìn)制轉(zhuǎn)換為十進(jìn)制 void B_O(): 二進(jìn)制轉(zhuǎn)換為八進(jìn)制 void B_X(): 二進(jìn)制轉(zhuǎn)換為十六進(jìn)制 void O_B(): 八進(jìn)制轉(zhuǎn)換為二進(jìn)制 void O_D(): 八進(jìn)制轉(zhuǎn)換為十進(jìn)制 void O_X(): 八進(jìn)制轉(zhuǎn)換為十六進(jìn)制 void X_B(): 十六進(jìn)制轉(zhuǎn)換為二進(jìn)制 void X_D(): 十六進(jìn)制轉(zhuǎn)換為十進(jìn)制 void X_O(): 十六進(jìn)制轉(zhuǎn)換為八進(jìn)制 算法設(shè)計(jì)和程序設(shè)計(jì) 3.1 教學(xué)計(jì)劃編制問(wèn)題 3.1.1采用C語(yǔ)言定義相關(guān)的數(shù)據(jù)類(lèi)型。 其中包括字符常量,整型,字符型,字符串型,typedef 定義的類(lèi)型,結(jié)構(gòu)體型,單鏈表節(jié)點(diǎn)類(lèi)型,結(jié)構(gòu)體數(shù)組。 3.1.2主要函數(shù)的流程圖 1.LocateVex():圖的鄰接表存儲(chǔ)的基本操作。由初始條件G存在,u和G中頂點(diǎn)有相同特征轉(zhuǎn)而進(jìn)行判斷,若G中存在頂點(diǎn)u,則返回該頂點(diǎn)在圖中位置;否則返回-1。 2.CreateGraph():構(gòu)造生成圖。采用鄰接表存儲(chǔ)結(jié)構(gòu),構(gòu)造沒(méi)有相關(guān)信息的圖G(用一個(gè)函數(shù)構(gòu)造種圖)。 3.Display():輸出圖的鄰接矩陣。采用循環(huán)設(shè)置輸出圖的鄰接矩陣。4.FindInDegree():求頂點(diǎn)的入度。 5.InitStack():構(gòu)造一個(gè)空棧。6.ClearStack():清空棧。 7.StackEmpty():判斷棧是否為空。若棧S為空棧,則返回TRUE,否則返回FALSE。 8.Pop():出棧。若棧不空,則刪除S的棧頂元素,用e返回其值,并返回OK;否則返回ERROR。 9.Push():入棧。插入元素e為新的棧頂元素。 10.TopologicalSort():輸出G頂點(diǎn)的拓?fù)渑判蚪Y(jié)果。有向圖G采用鄰接表存儲(chǔ)結(jié)構(gòu)。若G無(wú)回路,則輸出G的頂點(diǎn)的一個(gè)拓?fù)湫蛄胁⒎祷豋K, 否則返回ERROR。 3.2 進(jìn)制轉(zhuǎn)換問(wèn)題 主要流程圖: 進(jìn)制轉(zhuǎn)換菜單: 1.void D_B(): 十進(jìn)制轉(zhuǎn)換為二進(jìn)制 for(j=0;a!=0;j++){ p[j]=a%2;a=a/2;} printf(“n轉(zhuǎn)換后的數(shù)為:”);for(k=j-1;k>=0;k--){printf(“%d”,p[k]);} printf(“n”); 2.void D_O(): 十進(jìn)制轉(zhuǎn)換為八進(jìn)制 for(j=0;a!=0;j++){ p[j]=a%8;a=a/8;} printf(“n轉(zhuǎn)換后的數(shù)為:”);for(k=j-1;k>=0;k--){printf(“%d”,p[k]);} printf(“n”); 3.void D_X(): 十進(jìn)制轉(zhuǎn)換為十六進(jìn)制 for(j=0;a!=0;j++){p[j]=a%16;a=a/16;if(p[j]<10)p[j]+=48;else { switch(p[j]){ case 10: p[j]='A';break;case 11: p[j]='B';break;case 12: p[j]='C';break;case 13: p[j]='D';break;case 14: p[j]='E';break;case 15: p[j]='F';break;} } 十進(jìn)制轉(zhuǎn)換為任意進(jìn)制: 4.void B_D(): 二進(jìn)制轉(zhuǎn)換為十進(jìn)制 for(i=1;a!=0;i*=2){ if(a%10>1) {s=1;break;} else {result+=(a%10)*i;a=a/10;} } if(s==1) printf(“您的輸入有誤!請(qǐng)重新輸入n”);else printf(“n轉(zhuǎn)換后的數(shù)為:%dn”,result);5.void O_D(): 八進(jìn)制轉(zhuǎn)換為十進(jìn)制 for(i=1;a!=0;i*=8){ if(a%10>7){ s=1;break;} else {result+=(a%10)*i;a=a/10;} } if(s==1)printf(“您的輸入有誤!請(qǐng)重新輸入n”);else { printf(“n轉(zhuǎn)換后的數(shù)為:%dn”,result);} 任意進(jìn)制轉(zhuǎn)換為十進(jìn)制: 6.void B_O(): 二進(jìn)制轉(zhuǎn)換為八進(jìn)制 for(i=1;a!=0;i*=2){if(a%10>1){s=1;break;} else{result+=(a%10)*i;a=a/10;} } for(j=0;result!=0;j++){p[j]=result%8;result=result/8;} if(s==1) printf(“您的輸入有誤!請(qǐng)重新輸入n”);else {printf(“n轉(zhuǎn)換后的數(shù)為:”); for(k=j-1;k>=0;k--) {printf(“%d”,p[k]);} printf(“n”);} 7.void B_X(): 二進(jìn)制轉(zhuǎn)換為十六進(jìn)制 for(i=1;a!=0;i*=2){if(a%10>1){s=1;break;} else{result+=(a%10)*i;a=a/10;} } for(j=0;result!=0;j++){p[j]=result%16;result=result/16;if(p[j]>10){switch(p[j]){ case 10: p[j]='A';break;case 11: p[j]='B';break;case 12: p[j]='C';break; case 13: p[j]='D';break;case 14: p[j]='E';break;case 15: p[j]='F';break;} } else p[j]+=48;} if(s==1)printf(“您的輸入有誤!請(qǐng)重新輸入n”);else { printf(“n轉(zhuǎn)換后的數(shù)為:”);for(k=j-1;k>=0;k--){printf(“%c”,p[k]);} printf(“n”);} 8.void O_B(): 八進(jìn)制轉(zhuǎn)換為二進(jìn)制 for(i=1;a!=0;i*=8){if(a%10>7){ s=1;break;} else {result+=(a%10)*i;a=a/10;} } for(j=0;result!=0;j++){p[j]=result%2;result=result/2;} if(s==1)printf(“您的輸入有誤!請(qǐng)重新輸入n”); else {printf(“n轉(zhuǎn)換后的數(shù)為:”);for(k=j-1;k>=0;k--){printf(“%d”,p[k]);} printf(“n”);} 9.void O_D(): 八進(jìn)制轉(zhuǎn)換為十進(jìn)制 for(i=1;a!=0;i*=8){ if(a%10>7){ s=1;break;} else {result+=(a%10)*i;a=a/10;} } if(s==1)printf(“您的輸入有誤!請(qǐng)重新輸入n”);else { printf(“n轉(zhuǎn)換后的數(shù)為:%dn”,result);} 10.void X_D(): 十六進(jìn)制轉(zhuǎn)換為十進(jìn)制 for(i=0;i case 'A': b[i]=10;break;case 'B': b[i]=11;break;case 'C': b[i]=12;break;case 'D': b[i]=13;break;case 'E': b[i]=14;break;case 'F': b[i]=15;break;case 'a': b[i]=10;break;case 'b': b[i]=11;break;case 'c': b[i]=12;break;case 'd': b[i]=13;break;case 'e': b[i]=14;break;case 'f': b[i]=15;break;default: s=1;} } 11.void O_X(): 八進(jìn)制轉(zhuǎn)換為十六進(jìn)制 for(i=1;a!=0;i*=8){if(a%10>7){s=1;break;} else{result+=(a%10)*i;a=a/10;} } for(j=0;result!=0;j++){p[j]=result%16;result=result/16;if(p[j]<10)p[j]+=48;else { switch(p[j]){ case 10: p[j]='A';break;case 11: p[j]='B';break;case 12: p[j]='C';break;case 13: p[j]='D';break;case 14: p[j]='E';break;case 15: p[j]='F';break;} } 12.void X_B(): 十六進(jìn)制轉(zhuǎn)換為二進(jìn)制 for(i=0;i default: s=1;} } 13.void X_D(): 十六進(jìn)制轉(zhuǎn)換為十進(jìn)制 for(i=0;i 14.void X_O(): 十六進(jìn)制轉(zhuǎn)換為八進(jìn)制 for(i=0;i 其他進(jìn)制間的轉(zhuǎn)換: 調(diào)試與測(cè)試 4.1 教學(xué)計(jì)劃編制問(wèn)題調(diào)試結(jié)果 輸入學(xué)期總數(shù),輸入學(xué)期學(xué)分的上限,輸入教學(xué)計(jì)劃的課程數(shù),輸入先修關(guān)系的邊數(shù),輸入課程的代表值,輸入課程的學(xué)分值(如圖) 輸入每條弧的弧尾和弧頭(如圖): 顯示的課程計(jì)劃如下: 4.2 進(jìn)制轉(zhuǎn)換問(wèn)題調(diào)試結(jié)果 進(jìn)入系統(tǒng)時(shí)的界面: 二進(jìn)制轉(zhuǎn)換為八進(jìn)制: 十進(jìn)制轉(zhuǎn)換為十六進(jìn)制: 十六進(jìn)制轉(zhuǎn)換為十進(jìn)制: 設(shè)計(jì)總結(jié) 我的收獲 雖然在高中我們已經(jīng)學(xué)了C語(yǔ)言,大一我們已經(jīng)學(xué)習(xí)了C++語(yǔ)言,但是,直到本期我們才開(kāi)設(shè)了數(shù)據(jù)結(jié)構(gòu)這一門(mén)課程。這門(mén)課程讓我們對(duì)程序的原理有了系統(tǒng)的認(rèn)識(shí)。對(duì)以往模糊的經(jīng)驗(yàn),起了總結(jié)提升的作用。在學(xué)習(xí)了這門(mén)課程后,我們進(jìn)行了一個(gè)星期的課程設(shè)計(jì),以實(shí)踐我們的學(xué)習(xí)內(nèi)容。 在這次課程設(shè)計(jì)中,我被分配到了教學(xué)計(jì)劃課程編制問(wèn)題,開(kāi)始感覺(jué)很難,因?yàn)槲覐奈淳帉?xiě)過(guò)如此復(fù)雜的程序。在多方查找資料并參考類(lèi)似程序后,我大體將程序的構(gòu)架描繪好了。一邊對(duì)照著網(wǎng)上的資料,一邊對(duì)程序進(jìn)行修改補(bǔ)充,然后根據(jù)擬好的大綱進(jìn)行編制。期間,我與其它同學(xué)進(jìn)行了討論和探究,對(duì)程序的細(xì)節(jié)問(wèn)題和應(yīng)用方面進(jìn)行了探索,并解決了主要的問(wèn)題,于是便著手寫(xiě)具體的程序。 由于老師要求我們編寫(xiě)600多行的代碼,但是教學(xué)計(jì)劃課程編制問(wèn)題的代碼不足,所以我又選擇了一個(gè)課題——進(jìn)制轉(zhuǎn)換問(wèn)題,我會(huì)選擇這個(gè)課題是因?yàn)槲矣X(jué)得作為學(xué)計(jì)算機(jī)的我,應(yīng)該要能更好的了解關(guān)于計(jì)算機(jī)方面的知識(shí)。 這次實(shí)驗(yàn),我進(jìn)行了大量的資料查閱,對(duì)所學(xué)知識(shí)進(jìn)行復(fù)習(xí)。通過(guò)這些努力,我對(duì)算法有了更深入的理解,對(duì)編程的步驟,有了具體的體會(huì)。通過(guò)和同學(xué)的廣泛交流,我體會(huì)到了合作的必要性及合作的優(yōu)勢(shì)。更重要的是,這個(gè)課題完全脫胎于實(shí)際問(wèn)題,讓我對(duì)計(jì)算機(jī)行業(yè),充滿(mǎn)了信心和自豪。 以往我們學(xué)的計(jì)算機(jī)知識(shí)一般停留在理論上,這讓我們不太理解計(jì)算機(jī)的應(yīng)用和前景,而較少注重我們對(duì)算法的實(shí)踐鍛煉。而這一次的實(shí)習(xí)既需要我們?nèi)ヂ?lián)系理論,又需要我們?nèi)?shí)踐方法,很多東西看上去都學(xué)過(guò),但是和實(shí)際聯(lián)系才知道變通的艱難。紙上得來(lái)終覺(jué)淺,這是我這次實(shí)習(xí)的最大收獲。這次的實(shí)驗(yàn)讓我們知道該如何跨過(guò)實(shí)際和理論之間的鴻溝。 存在的問(wèn)題 由于程序十分的復(fù)雜,遇到了很多常見(jiàn)的語(yǔ)法錯(cuò)誤,及邏輯錯(cuò)誤。這需要我們不斷的調(diào)試分析。符號(hào)的格式之類(lèi),指針的用法,判斷輸入輸出的條件都是十分容易出錯(cuò)的地方。在逐條排除,程序終于得以完成。這讓我明白了,解決問(wèn)題,要細(xì)心認(rèn)真,集思廣益,這樣才能把問(wèn)題解決。 雖然程序變出來(lái)了,但是我大量借鑒了別人的程序,中間有很多的程序段都是一知半解,雖然查閱了資料,但是畢竟不是自己思考出來(lái)的程序,又無(wú)法當(dāng)面詢(xún)問(wèn)寫(xiě)出編程的人,所以對(duì)部分程序還存在問(wèn)題,我會(huì)繼續(xù)查詢(xún)資料將目前不懂的內(nèi)容弄清楚。 參考資料:數(shù)據(jù)結(jié)構(gòu)(C++語(yǔ)言描述)吉根林 陳波主編 C++語(yǔ)言教材 程序代碼 教學(xué)計(jì)劃編制問(wèn)題: #include // exit()#include #define MAX_VERTEX_NUM 100 typedef enum{DG}GraphKind;/* {有向圖,有向網(wǎng),無(wú)向圖,無(wú)向網(wǎng)} */ typedef struct ArcNode { int adjvex;/* 該弧所指向的頂點(diǎn)的位置*/ struct ArcNode *nextarc;/* 指向下一條弧的指針*/ InfoType *info;/* 網(wǎng)的權(quán)值指針)*/ }ArcNode;/* 表結(jié)點(diǎn)*/ typedef struct { VertexType data;/* 頂點(diǎn)信息*/ ArcNode *firstarc;/* 第一個(gè)表結(jié)點(diǎn)的地址,指向第一條依附該頂點(diǎn)的弧的指針*/ }VNode,AdjList[MAX_VERTEX_NUM];/* 頭結(jié)點(diǎn)*/ typedef struct { AdjList vertices,verticestwo;int vexnum,arcnum;/* 圖的當(dāng)前頂點(diǎn)數(shù)和弧數(shù)*/ int kind;/* 圖的種類(lèi)標(biāo)志*/ }ALGraph;/* 圖的鄰接表存儲(chǔ)的基本操作*/ int LocateVex(ALGraph G,VertexType u){ /* 初始條件: 圖G存在,u和G中頂點(diǎn)有相同特征*/ /* 操作結(jié)果: 若G中存在頂點(diǎn)u,則返回該頂點(diǎn)在圖中位置;否則返回-1 */ int i;for(i=0;i { /* 采用鄰接表存儲(chǔ)結(jié)構(gòu),構(gòu)造沒(méi)有相關(guān)信息的圖G(用一個(gè)函數(shù)構(gòu)造種圖)*/ int i,j,k;VertexType va,vb;ArcNode *p;printf(“請(qǐng)輸入教學(xué)計(jì)劃的課程數(shù): ”);scanf(“%d”,&(*G).vexnum);printf(“請(qǐng)輸入拓?fù)渑判蛩纬傻恼n程先修關(guān)系的邊數(shù): ”);scanf(“%d”,&(*G).arcnum);printf(“請(qǐng)輸入%d個(gè)課程的代表值(<%d個(gè)字符):n”,(*G).vexnum,MAX_NAME);for(i=0;i<(*G).vexnum;++i)/* 構(gòu)造頂點(diǎn)向量*/ { } printf(“請(qǐng)輸入%d個(gè)課程的學(xué)分值(<%d個(gè)字符):n”,(*G).vexnum,MAX_NAME);for(i=0;i<(*G).vexnum;++i)/* 構(gòu)造頂點(diǎn)向量*/ { } printf(“請(qǐng)順序輸入每條弧(邊)的弧尾和弧頭(以空格作為間隔):n”);for(k=0;k<(*G).arcnum;++k)/* 構(gòu)造表結(jié)點(diǎn)鏈表*/ { } scanf(“%s”,(*G).vertices[i].data);(*G).vertices[i].firstarc=NULL;scanf(“%s”,(*G).verticestwo[i].data);scanf(“%s%s”,va,vb);i=LocateVex(*G,va);/* 弧尾*/ j=LocateVex(*G,vb);/* 弧頭*/ p=(ArcNode*)malloc(sizeof(ArcNode));p->adjvex=j;p->info=NULL;/* 圖*/ p->nextarc=(*G).vertices[i].firstarc;/* 插在表頭*/(*G).vertices[i].firstarc=p; return OK;} void Display(ALGraph G){ /* 輸出圖的鄰接矩陣G */ int i;ArcNode *p;switch(G.kind){ case DG: printf(“有向圖n”);} printf(“%d個(gè)頂點(diǎn):n”,G.vexnum);for(i=0;i } printf(“n”);} } void FindInDegree(ALGraph G,int indegree[]){ /* 求頂點(diǎn)的入度,算法調(diào)用*/ int i;ArcNode *p;for(i=0;i printf(“%s→%s ”,G.vertices[i].data,G.vertices[p->adjvex].data);p=p->nextarc; indegree[i]=0;/* 賦初值*/ for(i=0;i } } } typedef int SElemType;/* 棧類(lèi)型*/ /*棧的順序存儲(chǔ)表示*/ #define STACK_INIT_SIZE 10 /* 存儲(chǔ)空間初始分配量*/ #define STACKINCREMENT 2 /* 存儲(chǔ)空間分配增量*/ typedef struct SqStack { SElemType *base;/* 在棧構(gòu)造之前和銷(xiāo)毀之后,base的值為NULL */ SElemType *top;/* 棧頂指針*/ int stacksize;/* 當(dāng)前已分配的存儲(chǔ)空間,以元素為單位*/ }SqStack;/* 順序棧*/ /* 順序棧的基本操作*/ Status InitStack(SqStack *S){ /* 構(gòu)造一個(gè)空棧S */(*S).base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));if(!(*S).base)exit(OVERFLOW);/* 存儲(chǔ)分配失敗*/(*S).top=(*S).base;(*S).stacksize=STACK_INIT_SIZE; indegree[p->adjvex]++;p=p->nextarc; return OK;} void ClearStack(SqStack *S)//清空棧的操作 { S->top=S->base;} Status StackEmpty(SqStack S){ /* 若棧S為空棧,則返回TRUE,否則返回FALSE */ } Status Pop(SqStack *S,SElemType *e){ /* 若棧不空,則刪除S的棧頂元素,用e返回其值,并返回OK;否則返回ERROR */ if((*S).top==(*S).base)return ERROR;if(S.top==S.base)else return FALSE;return TRUE;*e=*--(*S).top;return OK;} Status Push(SqStack *S,SElemType e){ /* 插入元素e為新的棧頂元素*/ if((*S).top-(*S).base>=(*S).stacksize)/* 棧滿(mǎn),追加存儲(chǔ)空間*/ {(*S).base=(SElemType*)realloc((*S).base,((*S).stacksize+STACKINCREMENT)*sizeof(SElemType));if(!(*S).base)exit(OVERFLOW);/* 存儲(chǔ)分配失敗*/(*S).top=(*S).base+(*S).stacksize;(*S).stacksize+=STACKINCREMENT; } *((*S).top)++=e;return OK;} typedef int pathone[MAXCLASS];typedef int pathtwo[MAXCLASS];Status TopologicalSort(ALGraph G){ /* 有向圖G采用鄰接表存儲(chǔ)結(jié)構(gòu)。若G無(wú)回路,則輸出G的頂點(diǎn)的一個(gè)拓?fù)湫蛄胁⒎祷豋K, */ /* 否則返回ERROR。*/ int i,k,j=0,count,indegree[MAX_VERTEX_NUM];bool has=false;SqStack S;pathone a;pathtwo b;ArcNode *p;FindInDegree(G,indegree);/* 對(duì)各頂點(diǎn)求入度indegree[0..vernum-1] */ InitStack(&S);/* 初始化棧*/ for(i=0;i Pop(&S,&i);a[i]=*G.vertices[i].data; b[i]=*G.verticestwo[i].data;printf(“課程%s→學(xué)分%s ”,G.vertices[i].data,G.verticestwo[i].data);/* 輸出i號(hào)頂點(diǎn)并計(jì)數(shù)*/ ++count;for(p=G.vertices[i].firstarc;p;p=p->nextarc){ /* 對(duì)i號(hào)頂點(diǎn)的每個(gè)鄰接點(diǎn)的入度減*/ k=p->adjvex;if(!(--indegree[k]))/* 若入度減為,則入棧*/ { Push(&S,k);//cout<<*G.vertices[i].data< 課 程 計(jì) 劃===============================”< 如 下 while(qq<=xqzs){ int result[20];int rtop=0;int nn=0;//int ccount=0;// 學(xué)期學(xué)分計(jì)算 xxf=0;for(i=0;i } if(0==indegree[i]){ } Push(&S,i);while(!StackEmpty(S)){ int bb;Pop(&S,&i);bb=atoi(G.verticestwo[i].data);xxf=xxf+bb;if(xxf>xfsx){ } indegree[i]--;for(p=G.vertices[i].firstarc;p;p=p->nextarc){ /* 對(duì)i號(hào)頂點(diǎn)的每個(gè)鄰接點(diǎn)的入度減*/ k=p->adjvex;indegree[k]--; break; /* if(!(--indegree[k]))若入度減為,則入棧 { Push(&S,k);}*/ } result[rtop]=i;rtop++;} cout<<“第”< } cout<<“課程”< ALGraph f;printf(“以下為教學(xué)計(jì)劃編制問(wèn)題的求解過(guò)程:n”);printf(“請(qǐng)輸入學(xué)期總數(shù):”);scanf(“%d”,&xqzs);printf(“請(qǐng)輸入學(xué)期的學(xué)分上限:”);scanf(“%d”,&xfsx);CreateGraph(&f);Display(f);TopologicalSort(f); 進(jìn)制轉(zhuǎn)換問(wèn)題: #include printf(“+===============+n”);printf(“| 歡 迎 使 用 進(jìn) 制 轉(zhuǎn) 換 程 序 |n”); printf(“+===============+n”); printf(“ 本 版 本 只 做 正 整 數(shù) 的 進(jìn) 制 轉(zhuǎn) 換!”);do { q=0;//fflush(stdin);printf(“n請(qǐng)選擇需要被轉(zhuǎn)換的進(jìn)制:n1、二進(jìn)制n2、八進(jìn)制n3、十進(jìn)制n4、十六進(jìn)制n0、退出n”);printf(“請(qǐng)輸入0~4:”);scanf(“%d”,&i);switch(i){ case 1: printf(“n請(qǐng)選擇轉(zhuǎn)換后的進(jìn)制:n1、二進(jìn)制n2、八進(jìn)制n3、十進(jìn)制n4、十六進(jìn)制n0、退出n”);printf(“請(qǐng)輸入0~4:”);scanf(“%d”,&j);switch(j){ case 1: printf(“n同進(jìn)制之間不用轉(zhuǎn)化!n”);q=1;break;case 2: printf(“n請(qǐng)輸入您想要轉(zhuǎn)化的數(shù):”);scanf(“%d”,&k);B_O(k);q=1;break;case 3: printf(“n請(qǐng)輸入您想要轉(zhuǎn)化的數(shù):”);scanf(“%d”,&k);B_D(k);q=1;break;case 4: printf(“n請(qǐng)輸入您想要轉(zhuǎn)化的數(shù):”);scanf(“%d”,&k);B_X(k);q=1;break;case 0: printf(“謝謝使用!”);} break;case 2: printf(“n請(qǐng)選擇轉(zhuǎn)換后的進(jìn)制:n1、二進(jìn)制n2、八進(jìn)制n3、十進(jìn)制n4、十六進(jìn)制n0、退出n”);printf(“請(qǐng)輸入0~4:”);scanf(“%d”,&j);switch(j){ case 2: printf(“n同進(jìn)制之間不用轉(zhuǎn)化!n”);q=1;break;case 1: printf(“n請(qǐng)輸入您想要轉(zhuǎn)化的數(shù):”);scanf(“%d”,&k);O_B(k);q=1;break;case 3: printf(“n請(qǐng)輸入您想要轉(zhuǎn)化的數(shù):”);scanf(“%d”,&k);O_D(k);q=1;break;case 4: printf(“n請(qǐng)輸入您想要轉(zhuǎn)化的數(shù):”);scanf(“%d”,&k);O_X(k);q=1;break;case 0: printf(“謝謝使用!”);} break;case 3: printf(“n請(qǐng)選擇轉(zhuǎn)換后的進(jìn)制:n1、二進(jìn)制n2、八進(jìn)制n3、十進(jìn)制n4、十六進(jìn)制n0、退出n”);printf(“請(qǐng)輸入0~4:”);scanf(“%d”,&j);switch(j){ case 3: printf(“n同進(jìn)制之間不用轉(zhuǎn)化!n”);q=1;break;case 1: printf(“n請(qǐng)輸入您想要轉(zhuǎn)化的數(shù):”);scanf(“%d”,&k);D_B(k);q=1;break; case 2: printf(“n請(qǐng)輸入您想要轉(zhuǎn)化的數(shù):”);scanf(“%d”,&k);D_O(k);q=1;break;case 4: printf(“n請(qǐng)輸入您想要轉(zhuǎn)化的數(shù):”);scanf(“%d”,&k);D_X(k);q=1;break;case 0: printf(“謝謝使用!”);} break;case 4: printf(“n請(qǐng)選擇轉(zhuǎn)換后的進(jìn)制:n1、二進(jìn)制n2、八進(jìn)制n3、十進(jìn)制n4、十六進(jìn)制n0、退出n”);printf(“請(qǐng)輸入0~4:”);scanf(“%d”,&j);switch(j){ case 4: printf(“n同進(jìn)制之間不用轉(zhuǎn)化!n”);q=1;break;case 1: printf(“n請(qǐng)輸入您想要轉(zhuǎn)化的數(shù):”);fflush(stdin);gets(r);for(k=0;;k++){if(r[k]=='
第二篇:JAVA代碼注釋規(guī)范
第三篇:java流實(shí)驗(yàn)內(nèi)容及代碼
第四篇:教學(xué)計(jì)劃編制問(wèn)題