#include #include #include #include #define ESC 27#define ENTER 20#define YES 'Y'#define NO 'N'/*********全局變量區(qū)********/ int volatile key=0,low=0; //用于鍵盤識(shí)別 char volatile search_name[5],search_flag=0; //用于尋找字符串 char volatile R=0,All=0,Error=0; //用于識(shí)別是否計(jì)算線路電阻,All用于識(shí)別是否一次計(jì)算完所有的短路點(diǎn),尋找錯(cuò)誤次數(shù) char volatile Short[2]={0}; //用于記錄電路點(diǎn)名稱,如K1 char volatile Line_flag=0; //尋找線路位置標(biāo)志 char volatile table1[20]={0}; //用于記錄串聯(lián)的位置數(shù) char volatile table2[20]={0}; //用于記錄并聯(lián)的位置數(shù) char volatile record[2]={0} ; //用于記錄短路點(diǎn)的元件存儲(chǔ)號(hào) char volatile found=0; //記錄已經(jīng)找到的串聯(lián),為下一個(gè)首端做標(biāo)記 float volatile Kim[5]={0}; //沖擊電流系數(shù) char volatile kim1=0; //用于沖擊電流系數(shù)數(shù)組 float volatile VH=121; //變壓器高壓側(cè)平均電壓 struct para //結(jié)構(gòu)體數(shù)組,用于存儲(chǔ)元件參數(shù) {char Class; // 元件類型,0-表示線路,1表示電源,2表示電抗,3表示變壓器 char name[5]; // 元件所在名稱 float paras[4]; // 元件參數(shù) };/**************************//*******函數(shù)聲明********/ char Data_process(void); char input(char number1,char number2,struct para *data,char type); void Data_Dir(char num1,char num2,struct para *temp,char type2); float find_short(char *pp,unsigned int sum,char dir0,struct para *data1); void Line_ID(char *string1,char *string2,char dir); char find_fun(char sum2,char dir2,char or,char head[] ,struct para *data);/**********************//*函數(shù):input(數(shù)目,參數(shù),類型) 功能;完成電力系統(tǒng)元件參數(shù)的輸入 返回:是否修改值 問(wèn)題:結(jié)構(gòu)體不能應(yīng)用浮點(diǎn)型數(shù)據(jù)!!輸入輸出出錯(cuò),原來(lái)是編譯器的問(wèn)題!!改變內(nèi)核即可*/ char input(char number1,char number2,struct para *data,char type) {char i=0,answer=0; switch(type) {case 0: //第一次輸入線路參數(shù) { for(i=number1;i<number2;i++) { data[i].Class=0; scanf("%f,%f,%f,%f,%s",&data[i].paras[0],&data[i].paras[1],&data[i].paras[2],&data[i].paras[3],data[i].name); printf("\n"); } if(number1!=number2) { printf("The Line parameters are:\n"); printf("[Name Class Legth Rate, Res,Un(KV)]\n "); for(i=number1;i<number2;i++) {printf("%s,%4d,%9.2f,%6.2f,%3.2f,%6.2f\n",data[i].name,data[i].Class,data[i].paras[0],data[i].paras[1],data[i].paras[2],data[i].paras[3]); printf(" "); } } } break; case 1: //輸入電源參數(shù) {for(i=number1;i<number2;i++) { data[i].Class=1; scanf("%f,%f,%f,%f,%s",&data[i].paras[0],&data[i].paras[1],&data[i].paras[2],&data[i].paras[3],data[i].name); printf("\n"); } if(number1!=number2) { printf("\nThe Power parameters are:\n"); printf("[Name Class Capability Xd' E'' Style]\n "); for(i=number1;i<number2;i++) {printf("%s,%4d,%8.2f,%6.2f,%7.2f\n",data[i].name,data[i].Class,data[i].paras[0],data[i].paras[1],data[i].paras[2],data[i].paras[3]); printf(" "); } } } break; case 2: //輸入電抗器參數(shù) { for(i=number1;i<number2;i++) {data[i].Class=2; scanf("%f,%f,%f,%f,%s",&data[i].paras[0],&data[i].paras[1],&data[i].paras[2],&data[i].paras[3],data[i].name); printf("\n"); } if(number1!=number2) { printf("\nThe Reactance parameters are:\n"); printf("[Name Class VR(KV) IR(KA) XR Un(KV)]\n ");//(名稱,位置,額定電壓,額定電流,所在平均電壓) for(i=number1;i<number2;i++) {printf("%s,%2d,%10.2f,%6.2f,%6.2f,%6.2f\n",data[i].name,data[i].Class,data[i].paras[0],data[i].paras[1],data[i].paras[2],data[i].paras[3]); printf(" "); } } } break; case 3: //第一次輸入變壓器參數(shù) { for(i=number1;i<number2;i++) {data[i].Class=3; scanf("%f,%f,%f,%f,%s",&data[i].paras[0],&data[i].paras[1],&data[i].paras[2],&data[i].paras[3],data[i].name); printf("\n"); } if(number1!=number2) { printf("\nThe Transformer parameters are:\n"); printf("[Name Class Capability UH(KV) UL(KV) Uk(%)]\n "); for(i=number1;i<number2;i++) {printf("%s,%2d,%12.2f,%8.2f,%8.2f,%6.2f\n",data[i].name,data[i].Class,data[i].paras[0],data[i].paras[1],data[i].paras[2],data[i].paras[3]); printf(" "); } } answer=1; //完成元件的輸入 } break; default:break; } printf("\nDo you sure all the parameters are right?\n"); AAA: printf("\nEnter (Y) to continue,(N) to modify,(ESC) to exit.\n"); while(bioskey(1)==0); /*檢測(cè)鍵盤是否有擊健*/ key=bioskey(0); /*讀取鍵盤輸入的掃描碼*/ low=key & 0x00ff; /*提取低8位*/ if(low==NO) {answer=0; printf("\nPlease input the name of the data\n"); FIND: scanf("%s",search_name); for(i=number1;i<number2;i++) /*尋找需要修改的線路*/ {if(strcmp(search_name,data[i].name)==0) {search_flag=i;break;} /*找到就強(qiáng)制跳出循環(huán)*/ else {search_flag=127;} } if(search_flag==127) /*沒有找到*/ {printf("\nInput Error! Please Check and Input again!\n"); printf("Warning:。
數(shù)據(jù)結(jié)構(gòu) 簡(jiǎn)言之 就是計(jì)算機(jī)的各種存儲(chǔ)結(jié)構(gòu)
例如你出行的方式 可以步行 可以騎車 可以開車 可以坐火車 可以坐飛機(jī)等等
我們并不能說(shuō)步行不好 也不能說(shuō)飛機(jī)很好 這必須要根據(jù)情況去考慮選擇哪種
數(shù)據(jù)結(jié)構(gòu)就類似這樣 每種結(jié)構(gòu)都有自己的好處
順序存儲(chǔ)結(jié)構(gòu) 和 鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu) 就相當(dāng)于 是自己出行 還是找人幫忙比如 自己騎車、開車 和 雇人開車帶你出行 這樣的區(qū)別數(shù)據(jù)結(jié)構(gòu)有很多種 例如:棧 隊(duì)列 樹 圖 等等(我對(duì)棧、隊(duì)列、樹 了解偏多)
順序存儲(chǔ)結(jié)構(gòu) 和 鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu) 是兩種基本的存儲(chǔ)結(jié)構(gòu)
棧、隊(duì)列、樹都有順序存儲(chǔ)結(jié)構(gòu) 和 鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)
棧:是先進(jìn)后出 你可以想象是一個(gè)容器 你不斷的像這個(gè)容器中放餅干 并編號(hào) 第一塊放進(jìn)去 然后放第二塊 一共放了10塊 這時(shí)你想拿出來(lái) 必須要先拿第十塊 然后拿第九塊 最后拿第一塊。
隊(duì)列:是先進(jìn)先出 類似排隊(duì) 比如買票 第一個(gè)排隊(duì)的人站在隊(duì)頭 第一個(gè)人先拿到票 先走 (火車也是這種)
樹:就是類似現(xiàn)實(shí)中的樹 有很多分叉。。。。(需要再追我把 打字很辛苦的哦)
簡(jiǎn)言之 做實(shí)現(xiàn)火車進(jìn)出隧道的過(guò)程 用的數(shù)據(jù)結(jié)構(gòu)是隊(duì)列
不只有C語(yǔ)言有數(shù)據(jù)結(jié)構(gòu) 每種語(yǔ)言都有的哦 但是都類似
(C語(yǔ)言的數(shù)據(jù)結(jié)構(gòu)本身都沒有定義 需要自己寫的 需要也可以追)
比如火車進(jìn)隧道 第一節(jié)車廂進(jìn)去 第一節(jié)車廂先出去 用循環(huán)實(shí)現(xiàn) 知道最后一節(jié)車廂也出去之后 就可以銷毀這個(gè)隊(duì)列了
1、順序結(jié)構(gòu)設(shè)圓半徑r=2,圓柱高h(yuǎn)=3,求圓周長(zhǎng),圓柱底面積,用scanf輸入數(shù)據(jù),用printf輸出結(jié)果,輸出時(shí)要有文字說(shuō)明,取小數(shù)點(diǎn)后兩位數(shù)。
.#includevoid main(){int r,h;float s,v;printf("請(qǐng)輸入圓的半徑:\n");scanf("%d",&r);printf("請(qǐng)輸入圓的高:\n");scanf("%d",&h);printf("圓的面積是:\n");s=3.14*r*r;printf("%3.2f\n",s);printf("圓柱的體積:\n");v=s*h;printf("%3.2f\n",v);}2、選擇結(jié)構(gòu)main(){int a=5,b=4,c=3,d;d=(a>b>c);printf("%d\n",d);}d值為0。
順序結(jié)構(gòu):順序結(jié)構(gòu)的程序設(shè)計(jì)是最簡(jiǎn)單的,只要按照解決問(wèn)題的順序?qū)懗鱿鄳?yīng)的語(yǔ)句就行,它的執(zhí)行順序是自上而下,依次執(zhí)行。選擇結(jié)構(gòu):選擇程序結(jié)構(gòu)用于判斷給定的條件,根據(jù)判斷的結(jié)果判斷某些條件,根據(jù)判斷的結(jié)果來(lái)控制程序的流程。使用選擇結(jié)構(gòu)語(yǔ)句時(shí),要用條件表達(dá)式來(lái)描述條件。循環(huán)結(jié)構(gòu) :循環(huán)結(jié)構(gòu)可以減少源程序重復(fù)書寫的工作量,用來(lái)描述重復(fù)執(zhí)行某段算法的問(wèn)題,這是程序設(shè)計(jì)中最能發(fā)揮計(jì)算機(jī)特長(zhǎng)的程序結(jié)構(gòu) 。循環(huán)結(jié)構(gòu)可以看成是一個(gè)條件判斷語(yǔ)句和一個(gè)向回轉(zhuǎn)向語(yǔ)句的組合。另外,循環(huán)結(jié)構(gòu)的三個(gè)要素:循環(huán)變量、循環(huán)體和循環(huán)終止條件. ,循環(huán)結(jié)構(gòu)在程序框圖中是利用判斷框來(lái)表示,判斷框內(nèi)寫上條件,兩個(gè)出口分別對(duì)應(yīng)著條件成立和條件不成立時(shí)所執(zhí)行的不同指令,其中一個(gè)要指向循環(huán)體,然后再?gòu)难h(huán)體回到判斷框的入口處
三種基本結(jié)構(gòu)的流程圖、N-S圖以及PAD圖可以參看本書第1章1.4節(jié)“算法”相關(guān)內(nèi)容。
去百度文庫(kù),查看完整內(nèi)容>
內(nèi)容來(lái)自用戶:暗香飛度
C語(yǔ)言考試必備基礎(chǔ)知識(shí)點(diǎn)整理
【考點(diǎn)1】C程序
C語(yǔ)言程序結(jié)構(gòu)有三種:順序結(jié)構(gòu),循環(huán)結(jié)構(gòu)(三個(gè)循環(huán)結(jié)構(gòu)),選擇結(jié)構(gòu)(if和switch)
【考點(diǎn)2】main函數(shù)
每個(gè)C語(yǔ)言程序中main函數(shù)是有且只有一個(gè)。讀程序都要從main()入口,然后從最上面順序往下讀(碰到循環(huán)做循環(huán),碰到選擇做選擇)。
【考點(diǎn)3】存儲(chǔ)形式
計(jì)算機(jī)的數(shù)據(jù)在電腦中是以二進(jìn)制的形式保存。最低的存儲(chǔ)單元是bit(位),位是由為0或者1構(gòu)成。byte是指字節(jié),一個(gè)字節(jié)=八個(gè)位。數(shù)據(jù)存放的位置就是它的地址。
【考點(diǎn)4】注釋
是對(duì)程序的說(shuō)明,可出現(xiàn)在程序中任意合適的地方,注釋從“/*”開始到最近一個(gè)“*/”結(jié)束,其間任何內(nèi)容都不會(huì)被計(jì)算機(jī)執(zhí)行,注釋不可以嵌套。
【考點(diǎn)5】書寫格式
每條語(yǔ)句的后面必須有一個(gè)分號(hào),分號(hào)是語(yǔ)句的一部分。一行內(nèi)可寫多條語(yǔ)句,一個(gè)語(yǔ)句可寫在多行上。
【考點(diǎn)6】標(biāo)識(shí)符
合法的用戶標(biāo)識(shí)符考查:
合法的要求是由字母,數(shù)字,下劃線組成。有其它元素就錯(cuò)了。
并且第一個(gè)必須為字母或則是下劃線。第一個(gè)為數(shù)字就錯(cuò)了。
C語(yǔ)言標(biāo)識(shí)符分如下3類
(1)關(guān)鍵字。它們?cè)诔绦蛑杏泄潭ǖ暮x,不能另作他用。如int、for、switch等。
(2)預(yù)定義標(biāo)識(shí)符。預(yù)先定義并具有特定含義的標(biāo)識(shí)符。如 【考點(diǎn) 注意
如何學(xué)好c語(yǔ)言 教了多年《C程序設(shè)計(jì)》課程,大多學(xué)生覺的這門課程難學(xué)。
其實(shí),按照我們現(xiàn)在的教學(xué)大綱和教學(xué)要求,只要同學(xué)們掌握一些方法,克服心理上畏難、不輕言放棄,是完全可以學(xué)好的。 《C程序設(shè)計(jì)》的內(nèi)容很豐富,按照我們現(xiàn)在的教學(xué)大綱,教學(xué)的主要內(nèi)容是基礎(chǔ)知識(shí)、四種結(jié)構(gòu)的的程序設(shè)計(jì)、函數(shù)與數(shù)組的應(yīng)用和一些簡(jiǎn)單的算法。
在學(xué)習(xí)時(shí),同學(xué)們應(yīng)該把主要精力放在這些部分,通過(guò)實(shí)踐(練習(xí)和上機(jī)調(diào)試等熟練掌握。當(dāng)然,在初學(xué)C語(yǔ)言時(shí),可能會(huì)遇到有些問(wèn)題理解不透,或者表達(dá)方式與以往數(shù)學(xué)學(xué)習(xí)中不同(如運(yùn)算符等),這就要求不氣餒,不明白的地方多問(wèn)多想,鼓足勇氣進(jìn)行學(xué)習(xí),待學(xué)完后面的章節(jié)知識(shí),前面的問(wèn)題也就迎刃而解了,這一方面我感覺是我們同學(xué)最欠缺,大多學(xué)不好的就是因?yàn)橐婚_始遇到困難就放棄,曾經(jīng)和好多同學(xué)談他的問(wèn)題,回答是聽不懂、不想聽、放棄這樣三個(gè)過(guò)程,我反問(wèn),這節(jié)課你聽過(guò)課嗎?回答又是沒有,根本就沒聽過(guò)課,怎么說(shuō)自己聽不懂呢?相應(yīng)的根本就沒學(xué)習(xí),又談何學(xué)的好? 學(xué)習(xí)C語(yǔ)言始終要記住“曙光在前頭”和“千金難買回頭看”,“千金難買回頭看”是學(xué)習(xí)知識(shí)的重要方法,就是說(shuō),學(xué)習(xí)后面的知識(shí),不要忘了回頭弄清遺留下的問(wèn)題和加深理解前面的知識(shí),這是我們學(xué)生最不易做到的,然而卻又是最重要的。
比如:在C語(yǔ)言中最典型的是關(guān)于結(jié)構(gòu)化程序設(shè)計(jì)構(gòu)思,不管是那種教材,一開始就強(qiáng)調(diào)這種方法,這時(shí)也許你不能充分體會(huì),但是學(xué)到函數(shù)時(shí),再回頭來(lái)仔細(xì)體會(huì),溫故知新,理解它就沒有那么難了。學(xué)習(xí)C語(yǔ)言就是要經(jīng)過(guò)幾個(gè)反復(fù),才能前后貫穿,積累應(yīng)該掌握的C知識(shí)。
那么,我們?nèi)绾螌W(xué)好《C程序設(shè)計(jì)》呢? 一.學(xué)好C語(yǔ)言的運(yùn)算符和運(yùn)算順序 這是學(xué)好《C程序設(shè)計(jì)》的基礎(chǔ),C語(yǔ)言的運(yùn)算非常靈活,功能十分豐富,運(yùn)算種類遠(yuǎn)多于其它程序設(shè)計(jì)語(yǔ)言。在表達(dá)式方面較其它程序語(yǔ)言更為簡(jiǎn)潔,如自加、自減、逗號(hào)運(yùn)算和三目運(yùn)算使表達(dá)式更為簡(jiǎn)單,但初學(xué)者往往會(huì)覺的這種表達(dá)式難讀,關(guān)鍵原因就是對(duì)運(yùn)算符和運(yùn)算順序理解不透不全。
當(dāng)多種不同運(yùn)算組成一個(gè)運(yùn)算表達(dá)式,即一個(gè)運(yùn)算式中出現(xiàn)多種運(yùn)算符時(shí),運(yùn)算的優(yōu)先順序和結(jié)合規(guī)則顯得十分重要。在學(xué)習(xí)中,只要我們對(duì)此合理進(jìn)行分類,找出它們與我們?cè)跀?shù)學(xué)中所學(xué)到運(yùn)算之間的不同點(diǎn)之后,記住這些運(yùn)算也就不困難了,有些運(yùn)算符在理解后更會(huì)牢記心中,將來(lái)用起來(lái)得心應(yīng)手,而有些可暫時(shí)放棄不記,等用到時(shí)再記不遲。
先要明確運(yùn)算符按優(yōu)先級(jí)不同分類,《C程序設(shè)計(jì)》運(yùn)算符可分為15種優(yōu)先級(jí),從高到低,優(yōu)先級(jí)為1 ~ 15,除第2、3級(jí)和第14級(jí)為從右至左結(jié)合外,其它都是從左至右結(jié)合,它決定同級(jí)運(yùn)算符的運(yùn)算順序。下面我們通過(guò)幾個(gè)例子來(lái)說(shuō)明: (1) 5*8/4%10 這個(gè)表達(dá)式中出現(xiàn)3種運(yùn)算符,是同級(jí)運(yùn)算符,運(yùn)算順序按從左至右結(jié)合,因此先計(jì)算5 *8=40,然后被4除,結(jié)果為10,最后是%(求余數(shù))運(yùn)算,所以表達(dá)式的最終結(jié)果為10%10 = 0; (2)a = 3;b = 5;c =++ a* b ;d =a + +* b; 對(duì)于c=++a*b來(lái)說(shuō),按表中所列順序,+ +先執(zhí)行,*后執(zhí)行,所以+ + a執(zhí)行后,a的值為4,由于+ +為前置運(yùn)算,所以a的值4參與運(yùn)算,C的值計(jì)算式為4*5=20而不是3*5=15了;而對(duì)于d=a++*b來(lái)說(shuō),由于a + +為后置運(yùn)算,所以a值為4參與運(yùn)算,使得d的值仍為20,而a參與運(yùn)算后其值加1,值為5。
這個(gè)例子執(zhí)行后,a的值為5,b的值為5,c的值為20,d的值也是20; (3)(a = 3,b = 5,b+ = a,c = b* 5) 例子中的“,”是逗號(hào)結(jié)合運(yùn)算,上式稱為逗號(hào)表達(dá)式,自左向右結(jié)合,最后一個(gè)表達(dá)式的結(jié)果值就是逗號(hào)表達(dá)式的結(jié)果,所以上面的逗號(hào)表達(dá)式結(jié)果為40,a的值為3,b的值為8,c的值為40。 (4)a=5;b=6;c=a>b?a:b; 例中的a>b?a:b是一個(gè)三目運(yùn)算,它的功能是先做關(guān)系運(yùn)算a>b部分,若結(jié)果為真,則取問(wèn)號(hào)后a的值,否則取冒號(hào)后b的值,因此c的值應(yīng)該為6,這個(gè)運(yùn)算可以用來(lái)代替if…else…語(yǔ)句的簡(jiǎn)單應(yīng)用。
二.學(xué)好C語(yǔ)言的四種程序結(jié)構(gòu) (1)順序結(jié)構(gòu) 順序結(jié)構(gòu)的程序設(shè)計(jì)是最簡(jiǎn)單的,只要按照解決問(wèn)題的順序?qū)懗鱿鄳?yīng)的語(yǔ)句就行,它的執(zhí)行順序是自上而下,依次執(zhí)行。 例如;a = 3,b = 5,現(xiàn)交換a,b的值,這個(gè)問(wèn)題就好象交換兩個(gè)杯子水,這當(dāng)然要用到第三個(gè)杯子,假如第三個(gè)杯子是c,那么正確的程序?yàn)椋?c = a; a = b; b = c; 執(zhí)行結(jié)果是a = 5,b = c = 3如果改變其順序,寫成:a = b; c = a; b = c; 則執(zhí)行結(jié)果就變成a = b = c = 5,不能達(dá)到預(yù)期的目的,初學(xué)者最容易犯這種錯(cuò)誤。
順序結(jié)構(gòu)可以獨(dú)立使用構(gòu)成一個(gè)簡(jiǎn)單的完整程序,常見的輸入、計(jì)算,輸出三步曲的程序就是順序結(jié)構(gòu),例如計(jì)算圓的面積,其程序的語(yǔ)句順序就是輸入圓的半徑r,計(jì)算s = 3.14159*r*r,輸出圓的面積s。不過(guò)大多數(shù)情況下順序結(jié)構(gòu)都是作為程序的一部分,與其它結(jié)構(gòu)一起構(gòu)成一個(gè)復(fù)雜的程序,例如分支結(jié)構(gòu)中的復(fù)合語(yǔ)句、循環(huán)結(jié)構(gòu)中的循環(huán)體等。
(2) 分支結(jié)構(gòu) 順序結(jié)構(gòu)的程序雖然能解決計(jì)算、輸出等問(wèn)題,但不能做判斷再選擇。對(duì)于要先做判斷再選擇的問(wèn)題就要使用分支結(jié)構(gòu)。
分支結(jié)構(gòu)的執(zhí)行是依據(jù)一定的條件選擇執(zhí)行路徑,而不是嚴(yán)格按照語(yǔ)句出現(xiàn)的物理順序。分支結(jié)構(gòu)。
聲明:本網(wǎng)站尊重并保護(hù)知識(shí)產(chǎn)權(quán),根據(jù)《信息網(wǎng)絡(luò)傳播權(quán)保護(hù)條例》,如果我們轉(zhuǎn)載的作品侵犯了您的權(quán)利,請(qǐng)?jiān)谝粋€(gè)月內(nèi)通知我們,我們會(huì)及時(shí)刪除。
蜀ICP備2020033479號(hào)-4 Copyright ? 2016 學(xué)習(xí)鳥. 頁(yè)面生成時(shí)間:3.229秒