久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

探討結(jié)構(gòu)化程序設(shè)計主要強調(diào)的是程序(精選五篇)

時間:2019-05-15 10:19:58下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《探討結(jié)構(gòu)化程序設(shè)計主要強調(diào)的是程序》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《探討結(jié)構(gòu)化程序設(shè)計主要強調(diào)的是程序》。

第一篇:探討結(jié)構(gòu)化程序設(shè)計主要強調(diào)的是程序

探討結(jié)構(gòu)化程序設(shè)計主要強調(diào)的是程序的論文由代寫論文網(wǎng)提供搜集整理,作者簡訴了程序的任何邏輯問題均可用順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)這3種基本結(jié)構(gòu)來描述。

結(jié)構(gòu)化程序設(shè)計(STRUCTURED PRO代寫計算機碩士論文GRAMING,簡稱SP)的概念是由荷蘭學(xué)者E·W.DUKSTRA等人在20世紀60年代后期提出的,是以模塊化設(shè)計為中心,將原來較為復(fù)雜的問題化簡為一系列簡單模塊的設(shè)計,也就是將—個大的計算任務(wù)劃分為一個個比較小的任務(wù),這些小任務(wù)均由函數(shù)來完成。而函數(shù)既可以是C的標(biāo)準(zhǔn)庫函數(shù)。也可以是自定義函數(shù)。在C中,一個具備一定規(guī)模的C程序往往是由多個函數(shù)組成,其中必有一個名為main的主函數(shù),由main來調(diào)用其他函數(shù),必要的話,其他函數(shù)還可以調(diào)用另外的函數(shù)。同一函數(shù)可以被一個或多個函數(shù)調(diào)用一次或多次。代寫計算機畢業(yè)論文模塊的獨立性還為擴充已有的系統(tǒng)、建立新系統(tǒng)帶來了不少的方便,因為我們可以充分利用現(xiàn)有的模塊作積木式的擴展。結(jié)構(gòu)化程序設(shè)計的思想是一個程序的任何邏輯問題,代寫論文 均可用順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)這3種基本結(jié)構(gòu)來描述。順序結(jié)構(gòu)的程序流程是按語句的書寫順序依次執(zhí)行;選擇結(jié)構(gòu)是對給定條件進行判斷,根據(jù)判斷結(jié)果決定執(zhí)行兩分支中的一個分支或多分支中的一個分支;循環(huán)結(jié)構(gòu)是在給定條件成立的情況下,反復(fù)執(zhí)行某個程序段。實現(xiàn)這些程序流程的語句都是流程控制語句。流程控制語句在程序設(shè)計中起著重要的作用,通過3種基本控制結(jié)構(gòu)使結(jié)構(gòu)化程序具有唯一的人口和出口,沒有死循環(huán),而且程序的靜態(tài)形式與動態(tài)執(zhí)行形式之間具有良好的對應(yīng)關(guān)系。在C語言中,有4種語句是順序執(zhí)行的:①空語句,光有一個分號“;”作為語句結(jié)束符,它表示什么也不做。②表達式語句,表達式后面加一個分號,表達式語句主要有賦值語句、自加減運算符構(gòu)成的語句和逗號表達式語句。③函數(shù)調(diào)用語句,它是由一個函數(shù)調(diào)用加上一個分號組成的。④復(fù)合語句,由“{”和“}”把一些變量說明和計算機專業(yè)畢業(yè)論文語句組合放在一起,又稱為語句塊。選擇語句有if語句和switch語句。循環(huán)語句有for,while和do-while語句以及一些輔助流程轉(zhuǎn)向語句如continue,break,goto等。順序結(jié)構(gòu),選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)共同作為各種復(fù)雜程序的基本構(gòu)造單元,由這3種結(jié)構(gòu)經(jīng)過反復(fù)嵌套構(gòu)成的程序稱為結(jié)構(gòu)化程序,也就是說,結(jié)構(gòu)化程序是由上述3種基本結(jié)構(gòu)組成的。但如果在編程過程中無限制地使用轉(zhuǎn)移語句(goto),會使程序的控制流程強制性地向前或向后跳轉(zhuǎn)而導(dǎo)計算機畢業(yè)論文范文致程序的流程無序可循,結(jié)構(gòu)雜亂無章。結(jié)構(gòu)化構(gòu)造減少了程序的復(fù)雜性,提高了可靠性、可測試性和可維護性,使用少數(shù)的基本結(jié)構(gòu),就可使程序邏輯結(jié)構(gòu)清晰,易讀易懂,并且容易驗證程序的正確性。對—個初學(xué)計算機語言的人來說。最重要的就是要有正確的程序流程概念,不僅要懂得而且要靈活應(yīng)用。由此可見,用結(jié)構(gòu)化方法設(shè)計的結(jié)構(gòu)是清晰的,有利于編寫出結(jié)構(gòu)良好的程序。因此。結(jié)構(gòu)化程序設(shè)計方法的主要原則可以概括為自頂向下,逐步求精,模塊化,限制使用goto語句。將程序設(shè)計針對的問題進行分解,直到分解到對應(yīng)于一個個功能更簡單,又獨立的模塊,每個模塊再分解到上述3種基本程序結(jié)構(gòu)。

第二篇:c語言程序設(shè)計實習(xí)報告程序

#include “stdio.h” /*定義學(xué)生結(jié)構(gòu)體*/ struct Student {

char ID[20];

char Name[20];

float Mark1;/*計算機*/

float Mark2;/*英語*/

float Mark3;/*數(shù)學(xué)*/

float Zongfen;/*總分*/

float Average;};/*平均分*/ /*聲明學(xué)生數(shù)組及學(xué)生數(shù)量*/ struct Student students[2000];int num=0;/*求總分*/ float Zong(struct Student stu){ return(stu.Mark1+stu.Mark2+stu.Mark3);} /*求平均值*/ float Avg(struct Student stu){return(stu.Mark1+stu.Mark2+stu.Mark3)/3;} /*通過學(xué)號返回數(shù)組下標(biāo)*/ int Student_SearchByIndex(char id[]){

int i;

for(i=0;i

int i;

for(i=0;i

{if(strcmp(students[i].Name,name)==0)

{return i;}}

return-1;}

/*通過學(xué)號返回數(shù)組下標(biāo)*/ int Student_SearchID(char id[]){

int i;

for(i=0;i

{if(strcmp(students[i].ID,id)==0)

{return i;}}

return-1;} /*顯示單條學(xué)生記錄*/ void Student_DisplaySingle(int index){printf(“%10s%10s%8s%8s%8s%8s%10sn”,“學(xué)號”,“姓名”,“計算機”,“英語”,“數(shù)學(xué)”,“總分”,“平均成績”);printf(“------------------------------n”);printf(“%10s%10s%8.0f%8.0f%8.0f%8.0f%10.2fn”,students[index].ID,students[index].Name, students[index].Mark1,students[index].Mark2,students[index].Mark3,students[index].Zongfen,students[index].Average);}void Student_DisplaySingle1(int index){printf(“------------------------------n”);printf(“%10s%10s%8.0f%8.0f%8.0f%8.0f%10.2fn”,students[index].ID,students[index].Name, students[index].Mark1,students[index].Mark2,students[index].Mark3,students[index].Zongfen,students[index].Average);} /*插入學(xué)生信息*/ void Student_Insert(){while(1){printf(“請輸入學(xué)號:”);scanf(“%s”,&students[num].ID);getchar();printf(“請輸入姓名:”);scanf(“%s”,&students[num].Name);getchar();printf(“請輸入計算機成績:”);scanf(“%f”,&students[num].Mark1);getchar();printf(“請輸入英語成績:”);scanf(“%f”,&students[num].Mark2);getchar();printf(“請輸入數(shù)學(xué)成績:”);scanf(“%f”,&students[num].Mark3);getchar();

students[num].Average=Avg(students[num]);

students[num].Zongfen=Zong(students[num]);

num++;

printf(“是否繼續(xù)?(y/n)”);

if(getchar()=='n'){break;} }} void exit();/*修改學(xué)生信息*/ void Student_Modify(){

float mark1,mark2,mark3;

while(1)

{

char id[20];

int index;

printf(“請輸入要修改的學(xué)生的學(xué)號:”);

scanf(“%s”,&id);

getchar();

index=Student_SearchByIndex(id);

if(index==-1)

{

printf(“學(xué)生不存在!n”);

}

else

{

printf(“你要修改的學(xué)生信息為:n”);

Student_DisplaySingle(index);

printf(“--請輸入新值--n”);

printf(“請輸入學(xué)號:”);

scanf(“%s”,&students[index].ID);

getchar();

printf(“請輸入姓名:”);

scanf(“%s”,&students[index].Name);

getchar();

printf(“請輸入成績:”);

scanf(“%f”,&students[index].Mark1);

getchar();

printf(“請輸入成績:”);

scanf(“%f”,&students[index].Mark2);

getchar();

printf(“請輸入成績:”);

scanf(“%f”,&students[index].Mark3);

getchar();

students[index].Zongfen=Zong(students[index]);

students[index].Average=Avg(students[index]);

printf(“是否繼續(xù)?(y/n)”);

if(getchar()=='n')

{

break;

}

} } /*刪除學(xué)生信息*/

void Student_Delete(){

int i;

while(1)

{

char id[20];

int index;

printf(“請輸入要刪除的學(xué)生的學(xué)號:”);

scanf(“%s”,&id);

}

getchar();

index=Student_SearchByIndex(id);

if(index==-1)

{

printf(“學(xué)生不存在!n”);

}

else

{

printf(“你要刪除的學(xué)生信息為:n”);

Student_DisplaySingle(index);

printf(“是否真的要刪除?(y/n)”);

if(getchar()=='y')

{

for(i=index;i

{

students[i]=students[i+1];

}

num--;

}

getchar();

}

printf(“是否繼續(xù)?(y/n)”);

if(getchar()=='n')

{

break;

}

} } /*按姓名或?qū)W號查詢*/ void Student_Select(){

int sel;

printf(“1--------------------按姓名查詢n”);

printf(“2--------------------按學(xué)號查詢n”);

scanf(“%d”,&sel);

if(sel==2){

while(1)

{

char id[20];

int index;

printf(“請輸入要查詢的學(xué)生的學(xué)號:”);

scanf(“%s”,&id);

getchar();

index=Student_SearchID(id);

if(index==-1)

{

printf(“學(xué)生不存在!n”);

}

else

{

printf(“你要查詢的學(xué)生信息為:n”);

Student_DisplaySingle(index);

}

printf(“是否繼續(xù)?(y/n)”);

if(getchar()=='n')

{

break;

}

}}else if(sel==1)

{while(1)

{

char name[20];

int index;

printf(“請輸入要查詢的學(xué)生的姓名:”);

scanf(“%s”,&name);

getchar();

index=Student_SearchByName(name);

if(index==-1)

{

printf(“學(xué)生不存在!n”);

}

else

{

printf(“你要查詢的學(xué)生信息為:n”);

Student_DisplaySingle(index);

}

printf(“是否繼續(xù)?(y/n)”);

if(getchar()=='n')

{

break;

}

}}

else printf(“信息錯誤!n”);} /*排序*/ void Student_SortByAverage(){

int a,sel;

printf(“1--------------------按學(xué)號排序n”);

printf(“2--------------------按姓名排序n”);

printf(“3--------------------按計算機排序n”);

printf(“4--------------------按英語排序n”);

printf(“5--------------------按數(shù)學(xué)排序n”);

printf(“6--------------------按總分排序n”);

printf(“7--------------------按平均分排序n”);

scanf(“%d”,&sel);

if(sel==1)

{int i,j;

struct Student tmp;

for(i=0;i

{

for(j=1;j

{

if(strcmp(students[j-1].ID,students[j].ID)>0)

{

tmp=students[j-1];

students[j-1]=students[j];

students[j]=tmp;

}

}

}}

else if(sel==2)

{int i,j;

struct Student tmp;

for(i=0;i

{

for(j=1;j

{

if(strcmp(students[j-1].Name,students[j].Name)>0)

{

tmp=students[j-1];

students[j-1]=students[j];

students[j]=tmp;

}

}

}}

else if(sel==3)

{int i,j;

struct Student tmp;

for(i=0;i

{

for(j=1;j

{

if(students[j-1].Mark1>students[j].Mark1)

{

tmp=students[j-1];

students[j-1]=students[j];

students[j]=tmp;

}

}

}}

else if(sel==4)

{int i,j;

struct Student tmp;

for(i=0;i

{

for(j=1;j

{

if(students[j-1].Mark2>students[j].Mark2)

{

tmp=students[j-1];

students[j-1]=students[j];

students[j]=tmp;

}

}

}}

else if(sel==5)

{int i,j;

struct Student tmp;

for(i=0;i

{

for(j=1;j

{

if(students[j-1].Mark3>students[j].Mark3)

{

tmp=students[j-1];

students[j-1]=students[j];

students[j]=tmp;

}

}

}}

else if(sel==6)

{int i,j;

struct Student tmp;

for(i=0;i

{

for(j=1;j

{

if(students[j-1].Zongfen>students[j].Zongfen)

{

tmp=students[j-1];

students[j-1]=students[j];

students[j]=tmp;

}

}

}}

else if(sel==7)

{int i,j;

struct Student tmp;

for(i=0;i

{

for(j=1;j

{

if(students[j-1].Average>students[j].Average)

{

tmp=students[j-1];

students[j-1]=students[j];

students[j]=tmp;

}

}

}}

else printf(“信息錯誤!n”);} /*顯示學(xué)生信息*/ void Student_Display(){

int i;

printf(“%10s%10s%8s%8s%8s%8s%10sn”,“學(xué)號”,“姓名”,“計算機”,“英語”,“數(shù)學(xué)”,“總分”,“平均成績”);

printf(“------------------------------n”);

for(i=0;i

{

printf(“%10s%10s%8.0f%8.0f%8.0f%8.0f%10.2fn”,students[i].ID,students[i].Name,students[i].Mark1,students[i].Mark2,students[i].Mark3,students[i].Zongfen,students[i].Average);

} } /*將學(xué)生信息從文件讀出*/ void IO_ReadInfo(){

FILE *fp;

int i;

if((fp=fopen(“Database.txt”,“rb”))==NULL)

{

printf(“不能打開文件!n”);

return;

}

if(fread(&num,sizeof(int),1,fp)!=1)

{

num=-1;

}

else

{

for(i=0;i

{

fread(&students[i],sizeof(struct Student),1,fp);

}

}

fclose(fp);} /*將學(xué)生信息寫入文件*/ void IO_WriteInfo(){

FILE *fp;

int i;

if((fp=fopen(“Database.txt”,“wb”))==NULL)

{

printf(“不能打開文件!n”);

return;

}

if(fwrite(&num,sizeof(int),1,fp)!=1)

{

printf(“寫入文件錯誤!n”);

}

for(i=0;i

{

if(fwrite(&students[i],sizeof(struct Student),1,fp)!=1)

{

printf(“寫入文件錯誤!n”);

}

}

fclose(fp);} /*統(tǒng)計不同分數(shù)段的學(xué)生*/ void Student_TJ(){

while(1)

{

int a,sel;

float m,n;

printf(“1--------------------按計算機統(tǒng)計不同分數(shù)段的學(xué)生n”);

printf(“2--------------------按英語統(tǒng)計不同分數(shù)段的學(xué)生n”);

printf(“3--------------------按數(shù)學(xué)統(tǒng)計不同分數(shù)段的學(xué)生n”);

printf(“4--------------------按總分統(tǒng)計不同分數(shù)段的學(xué)生n”);

printf(“5--------------------按平均分統(tǒng)計不同分數(shù)段的學(xué)生n”);

scanf(“%d”,&sel);

printf(“輸入所需查詢的分數(shù)段[m,n]”);

scanf(“%f%f”,&m,&n);

printf(“%10s%10s%8s%8s%8s%8s%10sn”,“學(xué)號”,“姓名”,“計算機”,“英語”,“數(shù)學(xué)”,“總分”,“平均成績”);

if(sel==1)

{int j;

for(j=0;j<=num;j++)

{

if(students[j].Mark1>=m&&students[j].Mark1<=n)

Student_DisplaySingle1(j);

}}

else if(sel==2)

{int j;

for(j=0;j<=num;j++)

{

if(students[j].Mark2>=m&&students[j].Mark2<=n)

Student_DisplaySingle1(j);

}}

else if(sel==3)

{int j;

for(j=0;j<=num;j++)

{

if(students[j].Mark3>=m&&students[j].Mark3<=n)

Student_DisplaySingle1(j);

}}else if(sel==4)

{int j;

for(j=0;j<=num;j++)

{

if(students[j].Zongfen>=m&&students[j].Zongfen<=n)

Student_DisplaySingle1(j);

}}else if(sel==5)

{int j;

for(j=0;j<=num;j++)

{

if(students[j].Average>=m&&students[j].Average<=n)

Student_DisplaySingle1(j);

}}

else printf(“信息錯誤!n”);

printf(“是否繼續(xù)?(y/n)”);

a=getchar();

if(getchar()=='n'){break;} } } /*主程序*/ main(){ int choice;

IO_ReadInfo();

fflush(stdin);while(1)

{ /*主菜單*/ printf(“

~~~~~~~~~~~~~~~~~~~~~&歡迎進入學(xué)生成績管理系統(tǒng)&~~~~~~~~~~~~~~~~~~~~~ n”);printf(“

*

1.輸入學(xué)生記錄

*n”);printf(“

*

2.添加學(xué)生記錄

*n”);printf(“

*

3.修改學(xué)生記錄

*n”);printf(“

*

4.刪除學(xué)生記錄

*n”);printf(“

*

5.按姓名或?qū)W號查詢學(xué)生記錄

*n”);printf(“

*

6.排序

*n”);printf(“

*

7.統(tǒng)計不同分數(shù)段的學(xué)生

*n”);printf(“

*

8.輸出學(xué)生記錄

*n”);printf(“

*

9.退出

*n”);printf(“

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ n”);printf(“

請選擇(1-9):”);scanf(“%d”,&choice);getchar();switch(choice){ case 1:Student_Insert();break;case 2:Student_Insert();break;case 3:Student_Modify();break;case 4:Student_Delete();break;case 5:Student_Select();break;case 6:Student_SortByAverage();Student_Display();break;case 7:Student_TJ();break;case 8:Student_Display();break;} IO_WriteInfo();

} }

第三篇:C程序設(shè)計教學(xué)改革之趣味程序教學(xué)法

摘 要:c語言是一門通用的計算機程序設(shè)計語言,具有豐富的功能,表達力強,目標(biāo)程序效果高,可移植性強的特點。許多中等職業(yè)學(xué)校和技工類學(xué)校的計算機類專業(yè)開設(shè)了c語言程序設(shè)計課程。但是近幾年來,這門課程的教學(xué)都沒有能取得良好的學(xué)習(xí)效果。本文重點介紹了如何通過采用趣味程序教學(xué)法,增加趣味實例的講解和編程設(shè)計,培養(yǎng)學(xué)生對c語言的學(xué)習(xí)興趣,以增強學(xué)生的學(xué)習(xí)效果。

關(guān)鍵詞:c語言 學(xué)習(xí)興趣 趣味程序 實例

一、教學(xué)過程中存在的問題及產(chǎn)生問題的原因

1.絕大部分學(xué)生文化基礎(chǔ)差,開始學(xué)習(xí)時經(jīng)常會產(chǎn)生厭倦感

c程序設(shè)計這門課程,一般在新生入學(xué)的第一個學(xué)期或第二學(xué)期就開設(shè)了,是學(xué)生接觸的計算機編程的入門課程。這門課程結(jié)合了語言、算法、數(shù)據(jù)結(jié)構(gòu)和程序設(shè)計方法等方面的知識。學(xué)生對著這些知識相當(dāng)陌生,而且很多內(nèi)容跟他們所熟悉的知識內(nèi)容不相同,使他們經(jīng)常感覺這些內(nèi)容很難理解,枯燥無味,從而產(chǎn)生厭倦感。

2.對編程語言的學(xué)習(xí)方法不能適應(yīng)

大部分學(xué)生在開始學(xué)習(xí)這門編程語言時,還是沿用了之前舊的學(xué)習(xí)方法,而這門新課程的內(nèi)容是需要很好去記憶和注意的,他們就沒能很好地掌握起來。

3.學(xué)生上課注意力不集中,上機實踐課缺乏積極主動性

在理論課教學(xué)中,學(xué)生面對著課本上大量抽象概念的理論內(nèi)容,就會出現(xiàn)注意力不集中的現(xiàn)象。而到上機操作環(huán)節(jié),教師要學(xué)生自己編寫一道程序,學(xué)生往往需要很久才會編出來,并且如果一個小程序由于錯誤運行不出,就馬上放棄編程。有的學(xué)生看到編程題,就提不起精神去編寫,一旦沒有動手解決問題的欲望,就經(jīng)常偷偷地玩游戲。

二、c語言設(shè)計課程教學(xué)建議

要解決上面所遇到的三種情況,教師在學(xué)生開始學(xué)習(xí)的時候就要指導(dǎo)他們這是一門新課程,在學(xué)習(xí)上要用新的學(xué)習(xí)方式來學(xué)習(xí)。在教學(xué)方式上,教師要盡量降低c語言的難度,在講解理論知識點的過程中,增加一些趣味性的程序,使學(xué)生能從中學(xué)到知識。

1.從教學(xué)語言上提高趣味性

在課堂教學(xué)上,教師要使用趣味幽默的語言,接近生活。這樣既激發(fā)學(xué)生的學(xué)習(xí)興趣,又能引發(fā)學(xué)生積極思考和制造輕松的氣氛,也能讓學(xué)生輕松地接受知識,增強學(xué)習(xí)的興趣和學(xué)習(xí)動機,從而也使學(xué)生接受這位老師。

2.增加趣味練習(xí),提高學(xué)生的學(xué)習(xí)興趣

興趣是一個人力求認識和趨向某種客體的積極態(tài)度的個性傾向。培養(yǎng)學(xué)生學(xué)習(xí)興趣,是提高課堂教學(xué)效果的重要途徑。怎么從枯燥的c語言中解脫出來,讓學(xué)生提高興趣去學(xué)習(xí)呢? 我們可通過編寫小游戲程序或與生活相關(guān)的程序來提高它的趣味性,這樣程序設(shè)計就像電腦游戲一樣充滿好奇,富有樂趣。

(2)隨著學(xué)習(xí)的深入,我們還可以編寫其他有趣的程序。傳統(tǒng)的講授型教學(xué)方法是灌輸式的,是能較好地保證所講授知識的系統(tǒng)性,但學(xué)生的學(xué)習(xí)思維和學(xué)習(xí)的積極性都處在被動狀態(tài),達不到理想的教學(xué)效果。

為了使學(xué)生能夠?qū)W習(xí)掌握課本中相關(guān)的知識,對編程產(chǎn)生的興趣,在教學(xué)過程中,教師要先從對學(xué)生有意義的問題出發(fā),然后在講解的過程中,把產(chǎn)生的問題與實際的例子結(jié)合起來,讓學(xué)生能夠發(fā)現(xiàn)并找到解決的方法。在這種方法中,我們可以將這些現(xiàn)實問題與計算機語言結(jié)合到一起,降低問題難度,使得學(xué)生對c語言有了印象,從而提高了學(xué)習(xí)的興趣,使處于被動狀態(tài)的學(xué)習(xí)轉(zhuǎn)為主動的學(xué)習(xí)。例如我們可以給學(xué)生演示一些簡單地用c語言編寫的圖形或讓學(xué)生利通scanf()和printf()這兩個標(biāo)準(zhǔn)輸入出函數(shù)編寫短小的程序。這樣可以增強程序的趣味性,同時可以提高學(xué)生的興趣,使學(xué)生覺得這種的編程比較有趣。從“簡單”開始,慢慢再加大學(xué)習(xí)難度。

每一個人對一些比較有趣的事情都是非常感興趣的。在教學(xué)講解實例的時候,我們可以適當(dāng)?shù)丶尤胍恍┥畹睦樱浞掷脤W(xué)生的好奇心,增強了他們學(xué)習(xí)程序語言的積極性。比如我們講解循環(huán)語句時可以利用這樣的例子。有三對情侶舉行婚禮,三個新郎為a,b,c,三個新娘為x,y,z。有人不知道他們誰和誰結(jié)婚,于是詢問了六位新人中的三位,但聽到的回答是這樣的:a說他將與x結(jié)婚;x說她的未婚夫是c;c說他將與z結(jié)婚。這人聽后知道他們在開玩笑,全是假話。這里面,他到底誰跟誰結(jié)婚呢?

對于這樣的問題,我們先把新郎a,b,c用1,2,3來表示。從題目的敘述中,我們可以得出下面的內(nèi)容,a不與x結(jié)婚,即x≠1;x的未婚夫不是c,即x≠3;c不與z結(jié)婚,即z≠3;同時題意還隱含著x,y,z三個新娘不能結(jié)為配偶,則有:x≠y且x≠z且y≠z。

我們把問題變成普通的判斷式,將式子寫出來以后,可以利用列舉法的推理運算列出所有可能出現(xiàn)的情況。

每一個循環(huán)表示每一個人都有三種可能性。在這所有的可能中,滿足全部條件的兩人即為情侶。這個例子既滿足學(xué)生對問題的好奇心,又貼近生活,還能充分地說明c程序中循環(huán)結(jié)構(gòu),特別是多重循環(huán)的使用。這樣既可以充分調(diào)動學(xué)生學(xué)習(xí)的積極性,將學(xué)生的從被動學(xué)習(xí)方式轉(zhuǎn)換為主動學(xué)習(xí)方式,同時提高教學(xué)的質(zhì)量,達到預(yù)期效果。這樣的現(xiàn)象也叫自我效能感,讓學(xué)生能夠意識到計算機的編程語言是可以解決很多生活上的實際問題,因此也激發(fā)他們聽課的興趣。當(dāng)然這樣的例子還有很多,教師們要充分利用多媒體的功能,從不同的角度,不同的方面來提高教學(xué)的效果。

3.設(shè)計不同層次的編程實踐環(huán)節(jié),培養(yǎng)學(xué)生的動手能力

對于學(xué)生,要讀懂一條程序并不是特別難,但是讓他們自己根據(jù)問題來編寫程序,很多學(xué)生就望而卻步了。這時,我們就要根本學(xué)生的情況,設(shè)計編寫一些適合他們的編程題目。比如說,我們在講解條件分支語句時,我們可以利用生活中用來判定閏年的問題,來讓學(xué)生自己分析判別的計算方法,找出判斷方法后,用相應(yīng)的語句來實現(xiàn)。分階段地實現(xiàn)編程的內(nèi)容,使得學(xué)生能品嘗到階段性的成功,增強學(xué)生攀登知識高峰的信心和勇氣。

同時根據(jù)對學(xué)生知識掌握情況的了解,將學(xué)生進行搭配分組。在編寫小規(guī)模程序時,學(xué)生自己可以通過相互間的討論,對程序的每個部分進行分工,通力合作,最后完成整個程序的編寫任務(wù)。這樣促進不同層次學(xué)生的全面提高,也能培養(yǎng)學(xué)生如何將所學(xué)知識來應(yīng)用到實際問題上,培養(yǎng)學(xué)生的互助互幫,團隊合作的精神和集體觀念。

教學(xué)方法是一門藝術(shù),每個人所用的方法都不盡相同。教師不僅要懂得專業(yè)的知識,更重要的是要懂得如何把自己的專業(yè)知識傳授給學(xué)生。c 語言的教學(xué)雖有一定難度,但要取得良好的教學(xué)效果,就要了解學(xué)生的心理,在各種不同教學(xué)方法的嘗試下,找到符合學(xué)生實際的教學(xué)方法,采用多種形式與方法去激發(fā)學(xué)生的學(xué)習(xí)興趣與學(xué)產(chǎn)動力,提高了教學(xué)的趣味性,這樣學(xué)生才能很好地掌握和運用所學(xué)到的知識,就能收到良好的教學(xué)效果。

第四篇:《c語言程序設(shè)計新視角》第三章 程序語句小結(jié)

《c語言程序設(shè)計新視角》第三章 程序語句 小結(jié) 各種語句格式規(guī)則要對應(yīng);

三選擇四循環(huán)語句記分明;

單、雙選擇用if;多路選擇switch靈。初值、條件與增量,循環(huán)要素三并行。

do while做了再說;while判后再執(zhí)行; for要擺明三要素,耍簡約風(fēng)格數(shù)它精。

continue和break,跳越不一般,遠近要分清。

第五篇:電力系統(tǒng)潮流計算的MATLAB輔助程序設(shè)計,潮流計算程序

電力系統(tǒng)潮流計算的MATLAB輔助程序設(shè)計

潮流計算,通常指負荷潮流,是電力系統(tǒng)分析和設(shè)計的主要組成部分,對系統(tǒng)規(guī)劃、安全運行、經(jīng)濟調(diào)度和電力公司的功率交換非常重要。此外,潮流計算還是其它電力系統(tǒng)分析的基礎(chǔ),比如暫態(tài)穩(wěn)定,突發(fā)事件處理等。現(xiàn)代電力系統(tǒng)潮流計算的方法主要:高斯法、牛頓法、快速解耦法和MATLAB的M語言編寫的MATPOWER4.1,這里主要介紹高斯法、牛頓法和快速解耦法。高斯法的程序是lfgauss,其與lfybus、busout和lineflow程序聯(lián)合使用求解潮流功率。lfybus、busout和lineflow程序也可與牛頓法的lfnewton程序和快速解耦法的decouple程序聯(lián)合使用。(讀者可以到MATPOWER主頁下載MATPOWER4.1,然后將其解壓到MATLAB目錄下,即可使用該軟件進行潮流計算)

一、高斯-賽德爾法潮流計算使用的程序:

高斯-賽德法的具體使用方法讀者可參考后面的實例,這里僅介紹各程序的編寫格式: lfgauss:該程序是用高斯法對實際電力系統(tǒng)進行潮流計算,需要用到busdata和linedata兩個文件。程序設(shè)計為輸入負荷和發(fā)電機的有功MW和無功Mvar,以及節(jié)點電壓標(biāo)幺值和相角的角度值。根據(jù)所選復(fù)功率為基準(zhǔn)值將負荷和發(fā)電機的功率轉(zhuǎn)換為標(biāo)幺值。對于PV節(jié)點,如發(fā)電機節(jié)點,要提供一個無功功率限定值。當(dāng)給定電壓過高或過低時,無功功率可能超出功率限定值。在幾次迭代之后(高斯-塞德爾迭代為10次),需要檢查一次發(fā)電機節(jié)點的無功出力,如果接近限定值,電壓幅值進行上下5%的調(diào)整,使得無功保持在限定值內(nèi)。

lfybus:這個程序需要輸入線路參數(shù)、變壓器參數(shù)以及變壓器分接頭參數(shù)。并將這些參數(shù)放在名為linedata的文件中。這個程序?qū)⒆杩罐D(zhuǎn)換為導(dǎo)納,并得到節(jié)點導(dǎo)納矩陣。

busout:該程序以表格形式輸出結(jié)果,節(jié)點輸出包括電壓幅值和相角,發(fā)電機和負荷的有功和無功功率,以及并聯(lián)電容器或電抗器的有功和無功功率。

lineflow:該程序輸出線路的相關(guān)數(shù)據(jù),程序設(shè)計輸出流入線路終端的有功和無功的功率、線損以及節(jié)點功率,還包含整個系統(tǒng)的有功和無功損耗。

lfnewton是牛頓-拉夫遜法對實際電力系統(tǒng)潮流計算開發(fā)的程序,數(shù)據(jù)準(zhǔn)備和程序格式和高斯-賽德爾法一樣,包括程序lfybus,busout和lineflow。

decouple是快速解耦法對實際電力系統(tǒng)潮流計算開發(fā)的程序,同高斯法和牛頓法一樣需要用到三個程序:lfybus、busout、lineflow。

二、數(shù)據(jù)準(zhǔn)備

為了在MATLAB環(huán)境下用高斯法進行潮流計算,必須定義下列變量:基準(zhǔn)功率,功率允許誤差,加速因子和最大迭代次數(shù)。上述變量命名(小寫字母)為:basemva、accuracy、accel和maxiter,一般規(guī)定為:basemva=100; accuracy=0.001;accel=1.6;maxiter=80;輸入文件準(zhǔn)備的第一步是給節(jié)點編號,節(jié)點號碼必須是連續(xù)的,但節(jié)點數(shù)據(jù)輸入不一定按順序來編寫。此外,還需要下列數(shù)據(jù)文件:

1.節(jié)點數(shù)據(jù)文件busdata:節(jié)點信息輸入格式為單行輸入,輸入的數(shù)據(jù)形成一個矩陣,叫做busdata矩陣。第一列為節(jié)點號;第二列為節(jié)點類型;第三列和第四列分別為節(jié)點電壓幅值(標(biāo)幺值)和相角(單位為度);第五列和第六列分別為負荷的有功功率和無功功率;第七列到十列分別為發(fā)電機的有功功率、無功功率、最小無功出力和最大無功出力;最后一列為并聯(lián)電容器注入無功功率。第二列的編碼用0、1、2來區(qū)分PQ節(jié)點、平衡節(jié)點和PV節(jié)點:

0表示PQ節(jié)點,輸入正的有功功率(MW)和無功功率(Mvar),并且要設(shè)定節(jié)點電壓初始估計值,一般幅值和相角分別設(shè)為1和0,若已經(jīng)給定初始值,則用其給定值來代替1和0。

1表示平衡節(jié)點,且已知該節(jié)點的電壓幅值和相角。

2表示PV節(jié)點,要設(shè)定該節(jié)點的節(jié)點電壓幅值和發(fā)電機的有功功率(MW),并設(shè)定發(fā)電機的無功最小出力和最大出力(Mvar)。

2.線路數(shù)據(jù)文件linedata線路數(shù)據(jù)用節(jié)點對的方法來確定,數(shù)據(jù)包含在稱為linedata的矩陣中。第一列和第二列為節(jié)點號碼,第三列到第五列為線路電阻、電抗及該線路電納值的一半,以標(biāo)幺值表示。最后一列為變壓器分接頭設(shè)定值,對線路來說,需要輸入1。線路輸入為無輸入順序,對變壓器來說,左側(cè)的節(jié)點號設(shè)為分接頭端。

3.zdata是線路數(shù)據(jù)輸入變量,包括四項,前兩項是節(jié)點編號,后兩項是線路電阻和電抗,均以標(biāo)幺值表示,函數(shù)返回節(jié)點導(dǎo)納矩陣。

三、潮流計算的MATLAB程序清單

1.lfgauss.m程序清單

% Power flow solution by Gauss-Seidel method Vm=0;delta=0;yload=0;deltad =0;nbus = length(busdata(:,1));kb=[];Vm=[];delta=[];Pd=[];Qd=[];Pg=[];Qg=[];Qmin=[];Qmax=[];Pk=[];P=[];Qk=[];Q=[];S=[];V=[];for k=1:nbus n=busdata(k,1);kb(n)=busdata(k,2);Vm(n)=busdata(k,3);delta(n)=busdata(k, 4);Pd(n)=busdata(k,5);Qd(n)=busdata(k,6);Pg(n)=busdata(k,7);Qg(n)= busdata(k,8);Qmin(n)=busdata(k, 9);Qmax(n)=busdata(k, 10);Qsh(n)=busdata(k, 11);if Vm(n)<= 0 Vm(n)= 1.0;V(n)= 1 + j*0;else delta(n)= pi/180*delta(n);V(n)= Vm(n)*(cos(delta(n))+ j*sin(delta(n)));P(n)=(Pg(n)-Pd(n))/basemva;Q(n)=(Qg(n)-Qd(n)+ Qsh(n))/basemva;S(n)= P(n)+ j*Q(n);end

DV(n)=0;end

num = 0;AcurBus = 0;converge = 1;Vc = zeros(nbus,1)+j*zeros(nbus,1);Sc = zeros(nbus,1)+j*zeros(nbus,1);

while exist('accel')~=1 accel = 1.3;end

while exist('accuracy')~=1 accuracy = 0.001;end

while exist('basemva')~=1 basemva= 100;end

while exist('maxiter')~=1 maxiter = 100;end

mline=ones(nbr,1);for k=1:nbr for m=k+1:nbr if((nl(k)==nl(m))&(nr(k)==nr(m)));mline(m)=2;elseif((nl(k)==nr(m))&(nr(k)==nl(m)));mline(m)=2;else, end end end

iter=0;maxerror=10;while maxerror >= accuracy & iter <= maxiter iter=iter+1;for n = 1:nbus;YV = 0+j*0;for L = 1:nbr;if(nl(L)== n & mline(L)== 1), k=nr(L);YV = YV + Ybus(n,k)*V(k);elseif(nr(L)== n & mline(L)==1), k=nl(L);YV = YV + Ybus(n,k)*V(k);end end

Sc = conj(V(n))*(Ybus(n,n)*V(n)+ YV);Sc = conj(Sc);DP(n)= P(n)imag(Sc);if kb(n)== 1 S(n)=Sc;P(n)= real(Sc);Q(n)= imag(Sc);DP(n)=0;DQ(n)=0;Vc(n)= V(n);elseif kb(n)== 2 Q(n)= imag(Sc);S(n)= P(n)+ j*Q(n);

if Qmax(n)~= 0 Qgc = Q(n)*basemva + Qd(n)0.005;DV(n)=DV(n)+.005;end else, end else,end else,end end

if kb(n)~= 1 Vc(n)=(conj(S(n))/conj(V(n))VcI^2);Vc(n)= VcR + j*VcI;V(n)= V(n)+ accel*(Vc(n)-V(n));end end

maxerror=max(max(abs(real(DP))), max(abs(imag(DQ))));if iter == maxiter & maxerror > accuracy fprintf('nWARNING: Iterative solution did not converged after ')fprintf('%g', iter), fprintf(' iterations.nn')fprintf('Press Enter to terminate the iterations and print the results n')converge = 0;pause, else, end

end

if converge ~= 1 tech=(' ITERATIVE SOLUTION DID NOT CONVERGE');else, tech=(' Power Flow Solution by Gauss-Seidel Method');end k=0;for n = 1:nbus Vm(n)= abs(V(n));deltad(n)= angle(V(n))*180/pi;if kb(n)== 1 S(n)=P(n)+j*Q(n);Pg(n)= P(n)*basemva + Pd(n);Qg(n)= Q(n)*basemva + Qd(n)Qsh(n);end

yload(n)=(Pd(n)-j*Qd(n)+j*Qsh(n))/(basemva*Vm(n)^2);end

Pgt = sum(Pg);Qgt = sum(Qg);Pdt = sum(Pd);Qdt = sum(Qd);Qsht = sum(Qsh);busdata(:,3)=Vm';busdata(:,4)=deltad';clear AcurBusDPDQDVLScVcVcIVcRYVconvergedelta

2.lfybus.m程序清單

% This program obtains the Bus Admittance Matrix for power flow solution j=sqrt(-1);i = sqrt(-1);nl = linedata(:,1);nr = linedata(:,2);R = linedata(:,3);X = linedata(:,4);Bc = j*linedata(:,5);a = linedata(:, 6);nbr=length(linedata(:,1));nbus = max(max(nl), max(nr));Z = R + j*X;y= ones(nbr,1)./Z;%支路導(dǎo)納 for n = 1:nbr if a(n)<= 0 a(n)= 1;elseend

Ybus=zeros(nbus,nbus);% 將Ybus初始化為0 %非對角元素的數(shù)值

Ybus(nl(k),nr(k))=Ybus(nl(k),nr(k))-y(k)/a(k);Ybus(nr(k),nl(k))=Ybus(nl(k),nr(k));end end

% 對角元素的數(shù)值 for n=1:nbus for k=1:nbr if nl(k)==n Ybus(n,n)= Ybus(n,n)+y(k)/(a(k)^2)+ Bc(k);elseif nr(k)==n Ybus(n,n)= Ybus(n,n)+y(k)+Bc(k);else, end end end

clear Pgg

3.busout.m程序清單

% This program prints the power flow solution in a tabulated form % on the screen.disp(tech)fprintf(' Maximum Power Mismatch = %g n', maxerror)fprintf(' No.of Iterations = %g nn', iter)head =[' Bus Voltage Angle------Load---------Generation---Injected' ' No.Mag.Degree MW Mvar MW Mvar Mvar ' ' '];disp(head)for n=1:nbus fprintf(' %5g', n), fprintf(' %7.3f', Vm(n)), fprintf(' %8.3f', deltad(n)), fprintf(' %9.3f', Pd(n)), fprintf(' %9.3f', Qd(n)), fprintf(' %9.3f', Pg(n)), fprintf(' %9.3f ', Qg(n)), fprintf(' %8.3fn', Qsh(n))end

fprintf(' n'), fprintf(' Total ')fprintf(' %9.3f', Pdt), fprintf(' %9.3f', Qdt), fprintf(' %9.3f', Pgt), fprintf(' %9.3f', Qgt), fprintf(' %9.3fnn', Qsht)

4.lineflow.m程序清單

% This program is used in conjunction with lfgauss or lfNewton % for the computation of line flow and line losses.SLT = 0;fprintf('n')fprintf(' Line Flow and Losses nn')fprintf('--Line--Power at bus & line flow--Line loss--Transformern')fprintf('from to MW Mvar MVA MW Mvar tapn')for n = 1:nbus busprt = 0;for L = 1:nbr;if busprt == 0 fprintf(' n'), fprintf('%6g', n), fprintf(' %9.3f', P(n)*basemva)fprintf('%9.3f', Q(n)*basemva), fprintf('%9.3fn', abs(S(n)*basemva))

busprt = 1;else, end

if nl(L)==n k = nr(L);In =(V(n)V(n)/a(L))*y(L)+ Bc(L)*V(k);Snk = V(n)*conj(In)*basemva;Skn = V(k)*conj(Ik)*basemva;SL = Snk + Skn;SLT = SLT + SL;elseif nr(L)==n k = nl(L);In =(V(n)a(L)*V(n))*y(L)/a(L)^2 + Bc(L)/a(L)^2*V(k);Snk = V(n)*conj(In)*basemva;Skn = V(k)*conj(Ik)*basemva;SL = Snk + Skn;SLT = SLT + SL;else, end

if nl(L)==n | nr(L)==n fprintf('%12g', k), fprintf('%9.3f', real(Snk)), fprintf('%9.3f', imag(Snk))fprintf('%9.3f', abs(Snk)), fprintf('%9.3f', real(SL)), if nl(L)==n & a(L)~= 1 fprintf('%9.3f', imag(SL)), fprintf('%9.3fn', a(L))else, fprintf('%9.3fn', imag(SL))end

else, end end end

SLT = SLT/2;fprintf(' n'), fprintf(' Total loss ')fprintf('%9.3f', real(SLT)), fprintf('%9.3fn', imag(SLT))clear IkInSLSLTSknSnk

5.lfnewton.m程序清單

%Power flow solution by Newton-Raphson method ns=0;ng=0;Vm=0;delta=0;yload=0;deltad=0;nbus = length(busdata(:,1));kb=[];Vm=[];delta=[];Pd=[];Qd=[];Pg=[];Qg=[];Qmin=[];Qmax=[];Pk=[];P=[];Qk=[];Q=[];S=[];V=[];for k=1:nbus n=busdata(k,1);kb(n)=busdata(k,2);Vm(n)=busdata(k,3);delta(n)=busdata(k, 4);Pd(n)=busdata(k,5);Qd(n)=busdata(k,6);Pg(n)=busdata(k,7);Qg(n)= busdata(k,8);Qmin(n)=busdata(k, 9);Qmax(n)=busdata(k, 10);Qsh(n)=busdata(k, 11);if Vm(n)<= 0 Vm(n)= 1.0;V(n)= 1 + j*0;else delta(n)= pi/180*delta(n);V(n)= Vm(n)*(cos(delta(n))+ j*sin(delta(n)));P(n)=(Pg(n)-Pd(n))/basemva;Q(n)=(Qg(n)-Qd(n)+ Qsh(n))/basemva;S(n)= P(n)+ j*Q(n);end end

for k=1:nbus if kb(k)== 1, ns = ns+1;else, end if kb(k)== 2 ng = ng+1;else, end ngs(k)= ng;nss(k)= ns;end

Ym=abs(Ybus);t = angle(Ybus);m=2*nbus-ng-2*ns;maxerror = 1;converge=1;iter = 0;

mline=ones(nbr,1);for k=1:nbr for m=k+1:nbr if((nl(k)==nl(m))&(nr(k)==nr(m)));mline(m)=2;elseif((nl(k)==nr(m))&(nr(k)==nl(m)));mline(m)=2;else, end end end

%雅可比矩陣 clear ADCJDX

while maxerror >= accuracy & iter <= maxiter for ii=1:m for k=1:m A(ii,k)=0;%初始化雅可比矩陣 end, end

iter = iter+1;for n=1:nbus nn=n-nss(n);lm=nbus+n-ngs(n)-nss(n)-ns;J11=0;J22=0;J33=0;J44=0;for ii=1:nbr if mline(ii)==1 if nl(ii)== n | nr(ii)== n if nl(ii)== n , l = nr(ii);end if nr(ii)== n , l = nl(ii);end

J11=J11+ Vm(n)*Vm(l)*Ym(n,l)*sin(t(n,l)-delta(n)+ delta(l));J33=J33+ Vm(n)*Vm(l)*Ym(n,l)*cos(t(n,l)-delta(n)+ delta(l));if kb(n)~=1 J22=J22+ Vm(l)*Ym(n,l)*cos(t(n,l)-delta(n)+ delta(l));J44=J44+ Vm(l)*Ym(n,l)*sin(t(n,l)-delta(n)+ delta(l));else, end

if kb(n)~= 1 & kb(l)~=1 lk = nbus+l-ngs(l)-nss(l)-ns;ll = l-nss(l);% J1的非對角元素

A(nn, ll)=-Vm(n)*Vm(l)*Ym(n,l)*sin(t(n,l)-delta(n)+ delta(l));if kb(l)== 0 % J2的非對角元素 A(nn, lk)=Vm(n)*Ym(n,l)*cos(t(n,l)-delta(n)+ delta(l));end if kb(n)== 0 % J3的非對角元素

A(lm, ll)=-Vm(n)*Vm(l)*Ym(n,l)*cos(t(n,l)-delta(n)+delta(l));end

if kb(n)== 0 & kb(l)== 0 % J4的非對角元素

A(lm, lk)=-Vm(n)*Ym(n,l)*sin(t(n,l)-delta(n)+ delta(l));end elseend else , end else, end end

Pk = Vm(n)^2*Ym(n,n)*cos(t(n,n))+J33;Qk =-Vm(n)^2*Ym(n,n)*sin(t(n,n))-J11;if kb(n)== 1 P(n)=Pk;Q(n)= Qk;end% Swing bus P if kb(n)== 2 Q(n)=Qk;if Qmax(n)~= 0 Qgc = Q(n)*basemva + Qd(n)0.01;end else, end else,end else,end end

if kb(n)~= 1 A(nn,nn)= J11;% J1對角元素 DC(nn)= P(n)-Pk;end

if kb(n)== 0 A(nn,lm)= 2*Vm(n)*Ym(n,n)*cos(t(n,n))+J22;% J2對角元素 A(lm,nn)= J33;% J3對角元素

A(lm,lm)=-2*Vm(n)*Ym(n,n)*sin(t(n,n))-J44;% J4對角元素 DC(lm)= Q(n)-Qk;end end

DX=ADC';for n=1:nbus nn=n-nss(n);lm=nbus+n-ngs(n)-nss(n)-ns;if kb(n)~= 1 delta(n)= delta(n)+DX(nn);end if kb(n)== 0 Vm(n)=Vm(n)+DX(lm);end end

maxerror=max(abs(DC));if iter == maxiter & maxerror > accuracy fprintf('nWARNING: Iterative solution did not converged after ')fprintf('%g', iter), fprintf(' iterations.nn')fprintf('Press Enter to terminate the iterations and print the results n')converge = 0;pause, else, end

end

if converge ~= 1 tech=(' ITERATIVE SOLUTION DID NOT CONVERGE');else, tech=(' Power Flow Solution by Newton-Raphson Method');end

V = Vm.*cos(delta)+j*Vm.*sin(delta);deltad=180/pi*delta;i=sqrt(-1);k=0;for n = 1:nbus if kb(n)== 1 k=k+1;S(n)= P(n)+j*Q(n);Pg(n)= P(n)*basemva + Pd(n);Qg(n)= Q(n)*basemva + Qd(n)Qsh(n);Pgg(k)=Pg(n);Qgg(k)=Qg(n);end

yload(n)=(Pd(n)-j*Qd(n)+j*Qsh(n))/(basemva*Vm(n)^2);end

busdata(:,3)=Vm';busdata(:,4)=deltad';Pgt = sum(Pg);Qgt = sum(Qg);Pdt = sum(Pd);Qdt = sum(Qd);Qsht = sum(Qsh);

6.decouple.m程序清單

% Fast Decoupled Power Flow Solution ns=0;Vm=0;delta=0;yload=0;deltad=0;nbus = length(busdata(:,1));kb=[];Vm=[];delta=[];Pd=[];Qd=[];Pg=[];Qg=[];Qmin=[];Qmax=[];Pk=[];P=[];Qk=[];Q=[];S=[];V=[];for k=1:nbus n=busdata(k,1);kb(n)=busdata(k,2);Vm(n)=busdata(k,3);delta(n)=busdata(k, 4);Pd(n)=busdata(k,5);Qd(n)=busdata(k,6);Pg(n)=busdata(k,7);Qg(n)= busdata(k,8);Qmin(n)=busdata(k, 9);Qmax(n)=busdata(k, 10);Qsh(n)=busdata(k, 11);if Vm(n)<= 0 Vm(n)= 1.0;V(n)= 1 + j*0;else delta(n)= pi/180*delta(n);V(n)= Vm(n)*(cos(delta(n))+ j*sin(delta(n)));P(n)=(Pg(n)-Pd(n))/basemva;Q(n)=(Qg(n)-Qd(n)+ Qsh(n))/basemva;S(n)= P(n)+ j*Q(n);end

if kb(n)== 1, ns = ns+1;else, end nss(n)= ns;end

Ym = abs(Ybus);t = angle(Ybus);ii=0;for ib=1:nbus if kb(ib)== 0 | kb(ib)== 2 ii = ii+1;jj=0;for jb=1:nbus if kb(jb)== 0 | kb(jb)== 2 jj = jj+1;B1(ii,jj)=imag(Ybus(ib,jb));else,end end

else, end end

ii=0;for ib=1:nbus if kb(ib)== 0 ii = ii+1;jj=0;for jb=1:nbus if kb(jb)== 0 jj = jj+1;B2(ii,jj)=imag(Ybus(ib,jb));else,end end

else, end end

B1inv=inv(B1);B2inv = inv(B2);

maxerror = 1;converge = 1;iter = 0;

mline=ones(nbr,1);for k=1:nbr for m=k+1:nbr if((nl(k)==nl(m))&(nr(k)==nr(m)));mline(m)=2;elseif((nl(k)==nr(m))&(nr(k)==nl(m)));mline(m)=2;else, end end end

% 開始迭代

while maxerror >= accuracy & iter <= maxiter % 檢驗不平衡功率 iter = iter+1;id=0;iv=0;for n=1:nbus nn=n-nss(n);J11=0;J33=0;for ii=1:nbr if mline(ii)==1 if nl(ii)== n | nr(ii)== n if nl(ii)== n, l = nr(ii);end if nr(ii)== n, l = nl(ii);end

J11=J11+ Vm(n)*Vm(l)*Ym(n,l)*sin(t(n,l)-delta(n)+ delta(l));J33=J33+ Vm(n)*Vm(l)*Ym(n,l)*cos(t(n,l)-delta(n)+ delta(l));else , end else, end end

Pk = Vm(n)^2*Ym(n,n)*cos(t(n,n))+J33;Qk =-Vm(n)^2*Ym(n,n)*sin(t(n,n))-J11;if kb(n)== 1 P(n)=Pk;Q(n)= Qk;end% Swing bus P if kb(n)== 2 Q(n)=Qk;Qgc = Q(n)*basemva + Qd(n)0.005;end% the specified limits.else, end else,end else,end end

if kb(n)~= 1 id = id+1;DP(id)= P(n)-Pk;DPV(id)=(P(n)-Pk)/Vm(n);end

if kb(n)== 0 iv=iv+1;DQ(iv)= Q(n)-Qk;DQV(iv)=(Q(n)-Qk)/Vm(n);end end

Dd=-B1DPV';DV=-B2DQV';id=0;iv=0;for n=1:nbus if kb(n)~= 1 id = id+1;delta(n)= delta(n)+Dd(id);end if kb(n)== 0 iv = iv+1;Vm(n)=Vm(n)+DV(iv);end end

maxerror=max(max(abs(DP)),max(abs(DQ)));if iter == maxiter & maxerror > accuracy fprintf('nWARNING: Iterative solution did not converged after ')fprintf('%g', iter), fprintf(' iterations.nn')fprintf('Press Enter to terminate the iterations and print the results n')converge = 0;pause, else, end

end

if converge ~= 1 tech=(' ITERATIVE SOLUTION DID NOT CONVERGE');else, tech=(' Power Flow Solution by Fast Decoupled Method');end k=0;V = Vm.*cos(delta)+j*Vm.*sin(delta);deltad=180/pi*delta;clear A;clear DC;clear DX i=sqrt(-1);for n = 1:nbus if kb(n)== 1 S(n)=P(n)+j*Q(n);Pg(n)= P(n)*basemva + Pd(n);Qg(n)= Q(n)*basemva + Qd(n)Qsh(n);k=k+1;Pgg(k)=Pg(n);end

yload(n)=(Pd(n)-j*Qd(n)+j*Qsh(n))/(basemva*Vm(n)^2);end

busdata(:,3)=Vm';busdata(:,4)=deltad';Pgt = sum(Pg);Qgt = sum(Qg);Pdt = sum(Pd);Qdt = sum(Qd);Qsht = sum(Qsh);clear PkQkDPDQJ11J33B1B1invB2B2invDPVDQVDddeltaibidiiivjbjj

四、30節(jié)點電力系統(tǒng)計算實例

潮流計算時,必須將前面的六個程序保存在MATLAB目錄下格式為.m的文件,然后在MATLAB的命令窗口輸入如下命令: clear basemva = 100;accuracy = 0.001;accel = 1.8;maxiter = 100;% 30節(jié)點電力系統(tǒng)

% 母線--母線 電壓 相角 負載 發(fā)電機 注入功率

% 編號節(jié)點 幅值 角度有功 無功有功 無功 無功最小值 無功最大值 無功 busdata=[1 1 1.06 0.0 0.0 0.0 0.0 0.0 0 0 0 2 2 1.043 0.0 21.70 12.7 40.0 0.0-40 50 0 3 0 1.0 0.0 2.4 1.2 0.0 0.0 0 0 0 4 0 1.06 0.0 7.6 1.6 0.0 0.0 0 0 0 5 2 1.01 0.0 94.2 19.0 0.0 0.0-40 40 0 6 0 1.0 0.0 0.0 0.0 0.0 0.0 0 0 0 7 0 1.0 0.0 22.8 10.9 0.0 0.0 0 0 0 8 2 1.01 0.0 30.0 30.0 0.0 0.0-30 40 0 9 0 1.0 0.0 0.0 0.0 0.0 0.0 0 0 0 10 0 1.0 0.0 5.8 2.0 0.0 0.0-6 24 19 11 2 1.082 0.0 0.0 0.0 0.0 0.0 0 0 0 12 0 1.0 0 11.2 7.5 0 0 0 0 0 13 2 1.071 0 0 0.0 0 0-6 24 0 14 0 1 0 6.2 1.6 0 0 0 0 0 15 0 1 0 8.2 2.5 0 0 0 0 0 16 0 1 0 3.5 1.8 0 0 0 0 0 17 0 1 0 9.0 5.8 0 0 0 0 0 18 0 1 0 3.2 0.9 0 0 0 0 0 19 0 1 0 9.5 3.4 0 0 0 0 0 20 0 1 0 2.2 0.7 0 0 0 0 0 21 0 1 0 17.5 11.2 0 0 0 0 0 22 0 1 0 0 0.0 0 0 0 0 0 23 0 1 0 3.2 1.6 0 0 0 0 0 24 0 1 0 8.7 6.7 0 0 0 0 4.3 25 0 1 0 0 0.0 0 0 0 0 0 26 0 1 0 3.5 2.3 0 0 0 0 0 27 0 1 0 0 0.0 0 0 0 0 0 28 0 1 0 0 0.0 0 0 0 0 0 29 0 1 0 2.4 0.9 0 0 0 0 0 30 0 1 0 10.6 1.9 0 0 0 0 0];% 線路數(shù)據(jù)

% bus bus R X 1/2 B 1 for lines linedata=[1 2 0.0192 0.0575 0.02640 1 1 3 0.0452 0.1852 0.02040 1 2 4 0.0570 0.1737 0.01840 1 3 4 0.0132 0.0379 0.00420 1 2 5 0.0472 0.1983 0.02090 1 2 6 0.0581 0.1763 0.01870 1 4 6 0.0119 0.0414 0.00450 1 5 7 0.0460 0.1160 0.01020 1 6 7 0.0267 0.0820 0.00850 1 6 8 0.0120 0.0420 0.00450 1 6 9 0.0 0.2080 0.0 0.978 6 10 0.5560 0 0.969 9 11 0.2080 0 1 9 10 0.1100 0 1 4 12 0.2560 0 0.932 12 13 0.1400 0 1 12 14.1231.2559 0 1 12 15.0662.1304 0 1 12 16.0945.1987 0 1 14 15.2210.1997 0 1 16 17.0824.1923 0 1 15 18.1073.2185 0 1 18 19.0639.1292 0 1 19 20.0340.0680 0 1 10 20.0936.2090 0 1 10 17.0324.0845 0 1 10 21.0348.0749 0 1 10 22.0727.1499 0 1 21 22.0116.0236 0 1 15 23.1000.2020 0 1 22 24.1150.1790 0 1 23 24.1320.2700 0 1 24 25.1885.3292 0 1 25 26.2544.3800 0 1 25 27.1093.2087 0 1 28 27 0.3960 0 0.968 27 29.2198.4153 0 1 27 30.3202.6027 0 1 29 30.2399.4533 0 1 8 28.0636.2000 0.0214 1 6 28.0169.0599 0.065 1];最后運行程序輸入以下命令: lfybus % 形成節(jié)點導(dǎo)納矩陣 lfgauss % 高斯-賽德爾法潮流計算 busout % 屏幕顯示潮流計算結(jié)果 lineflow % 計算并顯示線路潮流和損耗

將lfgauss變?yōu)閘fnewton/decouple,即可使用牛頓-拉夫遜法/快速解耦法進行潮流計算,輸入以上4個命令行后,即可得到潮流計算結(jié)果:

下載探討結(jié)構(gòu)化程序設(shè)計主要強調(diào)的是程序(精選五篇)word格式文檔
下載探討結(jié)構(gòu)化程序設(shè)計主要強調(diào)的是程序(精選五篇).doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進行舉報,并提供相關(guān)證據(jù),工作人員會在5個工作日內(nèi)聯(lián)系你,一經(jīng)查實,本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

相關(guān)范文推薦

    2013河南省公務(wù)員面試形式:結(jié)構(gòu)化面試(什么是結(jié)構(gòu)化面試)

    2013河南省公務(wù)員面試形式:結(jié)構(gòu)化面試(什么是結(jié)構(gòu)化面試) 什么是結(jié)構(gòu)化面試 結(jié)構(gòu)化面試是公務(wù)員面試中使用最早、采用頻率最高的面試形式。迄今為止,公務(wù)員面試所采用的形式主要......

    2018國家公務(wù)員面試備考:什么是結(jié)構(gòu)化面試(5篇)

    2018國家公務(wù)員面試備考:什么是結(jié)構(gòu)化面試 2018國家公務(wù)員考試成績即將公布,國考成績公布后,2018國家公務(wù)員面試也即將開始。進入公務(wù)員面試后如何有效備考?華圖面試班教學(xué)如何?......

    典型的“結(jié)構(gòu)化定增”是如何操作的?

    2014年6月20日,中國證監(jiān)會發(fā)布《關(guān)于上市公司實施員工持股計劃試點的指導(dǎo)意見》,該意見出臺的目的是使上市公司員工與股東形成利益共同體,提高上市公司的凝聚力和競爭力。 該《......

    什么是好的程序

    什么是好的程序員?是不是懂得很多技術(shù)細節(jié)?還是懂底層編程?還是編程速度比較快? 我覺得都不是。對于一些技術(shù)細節(jié)來說和底層的技術(shù),只要看幫助,查資料就能找到,對 于速度快,只要編得......

    《c語言程序設(shè)計新視角》第二章程序中的數(shù)據(jù)小結(jié)

    《c語言程序設(shè)計新視角》第二章程序中的數(shù)據(jù) 小結(jié) 數(shù)據(jù)類型自己選, 大小長度不一般; 數(shù)據(jù)可以混合算, 注意類型會改變; 常量直接拿來用, 遇到變量分單元。......

    《c語言程序設(shè)計新視角》第十章 程序調(diào)試及測試小結(jié)

    《c語言程序設(shè)計新視角》第十章 程序調(diào)試及測試 小結(jié) 調(diào)試前測試樣例設(shè)計要費思忖, 輸入是什么輸出有哪些,事前要確認, 正常、異常、邊界情形要想周全, 認真仔細達到要求才能完......

    商業(yè)承兌匯票結(jié)算程序是怎樣

    贏了網(wǎng)s.yingle.com 遇到保險糾紛問題?贏了網(wǎng)律師為你免費解惑!訪問>>http://s.yingle.com 商業(yè)承兌匯票結(jié)算程序是怎樣 商業(yè)匯票相關(guān)知識,你了解嗎?商業(yè)匯票有兩種,商業(yè)承兌匯......

    辦理結(jié)婚登記的程序是怎樣的

    贏了網(wǎng)s.yingle.com 遇到婚姻法問題?贏了網(wǎng)律師為你免費解惑!訪問>>http://s.yingle.com 辦理結(jié)婚登記的程序是怎樣的 辦理了結(jié)婚登記,兩人就成為法律上的夫妻,受到婚姻法的保......

主站蜘蛛池模板: 精品国产一区二区三区久久影院| 亚洲av熟妇高潮30p| 高h小月被几个老头调教| 亚洲中文久久精品无码浏不卡| 少妇被多人c夜夜爽爽| 中文字幕乱码人妻一区二区三区| 国产精品秘?久久久久久| av色蜜桃一区二区三区| 又大又粗又爽的少妇免费视频| 国产成人av无码精品| 国产亚洲精品a在线看| 久久久成人精品av四区| 苍井空浴缸大战猛男120分钟| 最新国产99热这里只有精品| 大伊香蕉精品视频在线| 日韩久久久久久中文人妻| 在线观看无码| 在教室伦流澡到高潮hnp视频| 四虎精品免费永久免费视频| 人人妻人人澡人人爽欧美精品| 熟女无套内射线观56| 国产精品区一区二区三在线播放| 亚洲日韩av无码美腿丝袜| 国内精品国产成人国产三级| 日韩人妻无码精品免费shipin| 破了亲妺妺的处免费视频国产| 动漫啪啪高清区一区二网站| 国产精品老热丝在线观看| 69精品丰满人妻无码视频a片| 亚洲精品久久久久久久久久久捆绑| 精品国产美女福到在线不卡| 国产成人亚洲精品青草天美| 人人澡人人澡人人看添| 亚洲一区二区三区高清av| 日韩中文亚洲欧美视频二| 久久精品人人做人人综合试看| 日韩精品一区二区午夜成人版| 亚洲日韩av无码一区二区三区| 欧美孕妇变态孕交粗暴| 精品国产偷窥一区二区| 波多野结衣av无码久久一区|