欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      C語言socket課程設(shè)計(jì)報(bào)告[小編推薦]

      時(shí)間:2019-05-15 11:09:07下載本文作者:會(huì)員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《C語言socket課程設(shè)計(jì)報(bào)告[小編推薦]》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《C語言socket課程設(shè)計(jì)報(bào)告[小編推薦]》。

      第一篇:C語言socket課程設(shè)計(jì)報(bào)告[小編推薦]

      第1章 概述

      TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)協(xié)議屬于傳輸層協(xié)議。其中TCP提供IP環(huán)境下的數(shù)據(jù)可靠傳輸,它提供的服務(wù)包括數(shù)據(jù)流傳送、可靠性、有效流控、全雙工操作和多路復(fù)用。通過面向連接、端到端和可靠的數(shù)據(jù)包發(fā)送。通俗說,它是事先為所發(fā)送的數(shù)據(jù)開辟出連接好的通道,然后再進(jìn)行數(shù)據(jù)發(fā)送;而UDP則不為IP提供可靠性、流控或差錯(cuò)恢復(fù)功能。一般來說,TCP對(duì)應(yīng)的是可靠性要求高的應(yīng)用,而UDP對(duì)應(yīng)的則是可靠性要求低、傳輸經(jīng)濟(jì)的應(yīng)用。TCP支持的應(yīng)用協(xié)議主要有:Telnet、FTP、SMTP等;UDP支持的應(yīng)用層協(xié)議主要有:NFS(網(wǎng)絡(luò)文件系統(tǒng))、SNMP(簡單網(wǎng)絡(luò)管理協(xié)議)、DNS(主域名稱系統(tǒng))、TFTP(通用文件傳輸協(xié)議)等。

      面向連接的TCP

      “面向連接”就是在正式通信前必須要與對(duì)方建立起連接。比如你給別人打電話,必須等線路接通了、對(duì)方拿起話筒才能相互通話。

      TCP(Transmission Control Protocol,傳輸控制協(xié)議)是基于連接的協(xié)議,也就是說,在正式收發(fā)數(shù)據(jù)前,必須和對(duì)方建立可靠的連接。一個(gè)TCP連接必須要經(jīng)過三次“對(duì)話”才能建立起來,其中的過程非常復(fù)雜,我們這里只做簡單、形象的介紹,你只要做到能夠理解這個(gè)過程即可。我們來看看這三次對(duì)話的簡單過程:主機(jī)A向主機(jī)B發(fā)出連接請(qǐng)求數(shù)據(jù)包:“我想給你發(fā)數(shù)據(jù),可以嗎?”,這是第一次對(duì)話;主機(jī)B向主機(jī)A發(fā)送同意連接和要求同步(同步就是兩臺(tái)主機(jī)一個(gè)在發(fā)送,一個(gè)在接收,協(xié)調(diào)工作)的數(shù)據(jù)包:“可以,你什么時(shí)候發(fā)?”,這是第二次對(duì)話;主機(jī)A再發(fā)出一個(gè)數(shù)據(jù)包確認(rèn)主機(jī)B的要求同步:“我現(xiàn)在就發(fā),你接著吧!”,這是第三次對(duì)話。三次“對(duì)話”的目的是使數(shù)據(jù)包的發(fā)送和接收同步,經(jīng)過三次“對(duì)話”之后,主機(jī)A才向主機(jī)B正式發(fā)送數(shù)據(jù)。

      TCP協(xié)議能為應(yīng)用程序提供可靠的通信連接,使一臺(tái)計(jì)算機(jī)發(fā)出的字節(jié)流無差錯(cuò)地發(fā)往網(wǎng)絡(luò)上的其他計(jì)算機(jī),對(duì)可靠性要求高的數(shù)據(jù)通信系統(tǒng)往往使用TCP協(xié)議傳輸數(shù)據(jù)。

      面向非連接的UDP協(xié)議

      “面向非連接”就是在正式通信前不必與對(duì)方先建立連接,不管對(duì)方狀態(tài)就直接發(fā)送。這與現(xiàn)在風(fēng)行的手機(jī)短信非常相似:你在發(fā)短信的時(shí)候,只需要輸入對(duì)方手機(jī)號(hào)就OK了。

      UDP(User Data Protocol,用戶數(shù)據(jù)報(bào)協(xié)議)是與TCP相對(duì)應(yīng)的協(xié)議。它是面向非連接的協(xié)議,它不與對(duì)方建立連接,而是直接就把數(shù)據(jù)包發(fā)送過去。

      UDP適用于一次只傳送少量數(shù)據(jù)、對(duì)可靠性要求不高的應(yīng)用環(huán)境。比如,我們經(jīng)常使用“ping”命令來測(cè)試兩臺(tái)主機(jī)之間TCP/IP通信是否正常,其實(shí)“ping”命令的原理就是向?qū)Ψ街鳈C(jī)發(fā)送UDP數(shù)據(jù)包,然后對(duì)方主機(jī)確認(rèn)收到數(shù)據(jù)包,如果數(shù)據(jù)包是否到達(dá)的消息及時(shí)反饋回來,那么網(wǎng)絡(luò)就是通的。例如,在默認(rèn)狀態(tài)下,一次“ping”操作發(fā)送4個(gè)數(shù)據(jù)包(如圖所示)。大家可以看到,發(fā)送的數(shù)據(jù)包數(shù)量是4包,收到的也是4包(因?yàn)閷?duì)方主機(jī)收到后會(huì)發(fā)回一個(gè)確認(rèn)收到的數(shù)據(jù)包)。這充分說明了UDP協(xié)議是面向非連接的協(xié)議,沒有建立連接的過程。正因?yàn)閁DP協(xié)議沒有連接的過程,所以它的通信效率高;但也正因?yàn)槿绱耍目煽啃圆蝗鏣CP協(xié)議高。QQ就使用UDP發(fā)消息,因此有時(shí)會(huì)出現(xiàn)收不到消息的情況。

      第2章 程序設(shè)計(jì)部分

      2.1 設(shè)計(jì)目的

      通過本課程設(shè)計(jì),在學(xué)習(xí)《計(jì)算機(jī)通信與網(wǎng)絡(luò)C》課程的基礎(chǔ)上,進(jìn)一步深入理解計(jì)算機(jī)通信與網(wǎng)絡(luò)的基本理論及其協(xié)議,進(jìn)一步熟練掌握UDP、TCP Client/Server模式的數(shù)據(jù)通信原理,熟悉進(jìn)程通信的所要解決的問題,掌握網(wǎng)絡(luò)通信的程序編程技術(shù)。

      2.2 設(shè)計(jì)要求

      1)Java語言支持TCP/UDP及其上層的網(wǎng)絡(luò)設(shè)計(jì),所設(shè)計(jì)的網(wǎng)絡(luò)通信應(yīng)用系統(tǒng)建議采用Java語言利用Eclipse集成開發(fā)環(huán)境編程實(shí)現(xiàn)。課程設(shè)計(jì)按下述步驟進(jìn)行:

      ①利用socket編程方法,編寫一個(gè)TCP、UDP Client/Server模式的通信程序。②調(diào)試并運(yùn)行自己編寫的實(shí)現(xiàn)程序。

      ③了解TCP、UDP Client/Server模式的工作原理,比較二者的不同,如出現(xiàn)異常情況,在課程設(shè)計(jì)報(bào)告中寫出原因分析。

      ④備份保留程序代碼電子文檔,以備教師隨時(shí)檢查。

      2)Client/Server網(wǎng)絡(luò)通信程序設(shè)計(jì)內(nèi)容要具體詳實(shí),具有一定的編程工作量(程序代碼一般應(yīng)在100行以上)和技術(shù)難度。

      3)在課程設(shè)計(jì)報(bào)告中,通過截屏圖給出Client/Server網(wǎng)絡(luò)通信或手機(jī)收發(fā)電子郵件的運(yùn)行結(jié)果。

      4)對(duì)課程設(shè)計(jì)進(jìn)行總結(jié),寫出符合規(guī)范格式要求的課程設(shè)計(jì)報(bào)告。課程設(shè)計(jì)報(bào)告撰寫要求如下:

      ①每個(gè)學(xué)生必須獨(dú)立完成課程設(shè)計(jì)報(bào)告。

      ②課程設(shè)計(jì)報(bào)告書寫規(guī)范、文字通順、圖表清晰、數(shù)據(jù)完整、結(jié)論明確。③課程設(shè)計(jì)報(bào)告后應(yīng)附參考文獻(xiàn)。

      ④提供電子文檔資料。例如程序源代碼、設(shè)計(jì)思路、功能結(jié)構(gòu)圖或程序流程圖等。⑤附錄:給出程序源代碼(可附主要部分或代表自己編程特色的代碼)。

      ⑥課程設(shè)計(jì)報(bào)告封面按照學(xué)校統(tǒng)一要求格式編寫,并裝訂成冊(cè)。要求書面工整、美觀;如果條件許可,最好打印裝訂成冊(cè)。

      2.3 設(shè)計(jì)原理 TCP通信流程:

      UDP通信流程:

      2.4 設(shè)計(jì)方案

      Socket連接:

      根據(jù)連接啟動(dòng)的方式以及本地套接字要連接的目標(biāo),套接字之間的連接過程可以分為三個(gè)步驟:服務(wù)器監(jiān)聽,客戶端請(qǐng)求,連接確認(rèn)。

      服務(wù)器監(jiān)聽:是服務(wù)器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)狀態(tài)。

      客戶端請(qǐng)求:是指由客戶端的套接字提出連接請(qǐng)求,要連接的目標(biāo)是服務(wù)器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字,指出服務(wù)器端套接字的地址和端口號(hào),然后就向服務(wù)器端套接字提出連接請(qǐng)求。

      連接確認(rèn):是指當(dāng)服務(wù)器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請(qǐng)求,它就響應(yīng)客戶端套接字的請(qǐng)求,建立一個(gè)新的線程,把服務(wù)器端套接字的描述發(fā)給客戶端,一旦客戶端確認(rèn)了此描述,連接就建立好了。而服務(wù)器端套接字繼續(xù)處于監(jiān)聽狀態(tài),繼續(xù)接收其他客戶端套接字的連接請(qǐng)求。

      第3章 程序設(shè)計(jì)實(shí)現(xiàn)部分

      3.1 C語言的網(wǎng)絡(luò)功能與編程簡介

      網(wǎng)絡(luò)編程,一定離不開套接口;那什么是套接口呢?在Linux下,所有的I/O操作都是通過讀寫文件描述符而產(chǎn)生的,文件描述符是一個(gè)和打開的文件相關(guān)聯(lián)的整數(shù),這個(gè)文件并不只包括真正存儲(chǔ)在磁盤上的文件,還包括一個(gè)網(wǎng)絡(luò)連接、一個(gè)命名管道、一個(gè)終端等,而套接口就是系統(tǒng)進(jìn)程和文件描述符通信的一種方法。目前最常用的套接口是字:字節(jié)流套接口(基于TCP)和數(shù)據(jù)報(bào)套接口(基于UDP),當(dāng)然還有原始套接口(原始套接口提供TCP套接口和UDP套接口所不提供的功能,如構(gòu)造自己的TCP或UDP分組)等。

      3.2 系統(tǒng)原理框圖

      3.3 程序設(shè)計(jì)

      服務(wù)器端:

      #include #include #pragma comment(lib,“ws2_32.lib”)void main(){ WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD(1, 1);err = WSAStartup(wVersionRequested, &wsaData);if(err!= 0){

      return;

      } if(LOBYTE(wsaData.wVersion)!= 1 ||

      HIBYTE(wsaData.wVersion)!= 1){

      WSACleanup();

      return;

      }

      SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);

      SOCKADDR_IN addrSrv;

      addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);

      addrSrv.sin_family=AF_INET;

      addrSrv.sin_port=htons(6000);

      bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

      listen(sockSrv,5);

      SOCKADDR_IN addrClient;

      int len=sizeof(SOCKADDR);

      while(1)

      {

      SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);

      char sendbuffer[100];

      sprintf(sendbuffer,“Welcome %s here”,inet_ntoa(addrClient.sin_addr));

      send(sockConn,我是沈郁,strlen(我是沈郁)+1,0);

      char recvchar[100];

      recv(sockConn,recvchar,100,0);

      printf(“%sn”,recvchar);

      closesocket(sockConn);

      } } 客戶端:

      #include #include #pragma comment(lib,“ws2_32.lib”)void main(){ WORD wVersionRequested;WSADATA wsaData;

      int err;wVersionRequested = MAKEWORD(1, 1);err = WSAStartup(wVersionRequested, &wsaData);if(err!= 0){ return;} if(LOBYTE(wsaData.wVersion)!= 1 || HIBYTE(wsaData.wVersion)!= 1){

      WSACleanup();

      return;

      } SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr=inet_addr(“127.19.226.97”);addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(6000);connect(sockClient,(SOCKADDR *)&addrSrv,sizeof(SOCKADDR));char recvBuffer[100];recv(sockClient,recvBuffer,100,0);printf(“%sn”,recvBuffer);send(sockClient,“This is Kary”,strlen(“This is Kary”)+1,0);closesocket(sockClient);WSACleanup();}

      3.4 調(diào)試結(jié)果 服務(wù)器:

      3.5 課程設(shè)計(jì)總結(jié)

      通過本次計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì),我更加充分的理解了課本上的知識(shí),并能夠加以擴(kuò)展,從而應(yīng)用于實(shí)踐當(dāng)中,這幾天的課程設(shè)計(jì)令我受益匪淺,很多平時(shí)模棱兩可的知識(shí)點(diǎn)都認(rèn)真復(fù)習(xí)并實(shí)踐了。本次課程設(shè)計(jì)是運(yùn)用Visual C++6.0作為開發(fā)平臺(tái)以及進(jìn)行編寫程序, 在此設(shè)計(jì)過程中主要經(jīng)過了審題、需求分析與可行性研究,然后形成設(shè)計(jì)思路,設(shè)計(jì)所要實(shí)現(xiàn)的功能,最后進(jìn)行程序的編寫與調(diào)試,這個(gè)過程是不斷出現(xiàn)問題并不斷的進(jìn)行修改,深深的感受到親自動(dòng)手實(shí)踐的重要性。在實(shí)驗(yàn)的過程中發(fā)現(xiàn)學(xué)好基礎(chǔ)理論知識(shí)的重要性,在設(shè)計(jì)過程中,不斷遇到問題,通過老師和同學(xué)的幫助,解決了過程中出現(xiàn)的各種問題。

      通過本次課程設(shè)計(jì),我發(fā)現(xiàn)了自己的不足,希望在以后的學(xué)習(xí)中能夠加強(qiáng)學(xué)習(xí),提高實(shí)際應(yīng)用能力,和解決問題的能力。

      附錄:

      參考文獻(xiàn)

      1.(美)Andrew S.Tanenbaum 著,熊桂喜 王小虎譯。計(jì)算機(jī)網(wǎng)絡(luò)。北京:清華大學(xué)出版社,1998年7月第1版。

      2.計(jì)算機(jī)網(wǎng)絡(luò)原理與技術(shù)。劉化君 編著,高電子工業(yè)出版社,2012年6月第2版。3.計(jì)算機(jī)網(wǎng)絡(luò)與通信。劉化君等編著,高等教育出版社,2011年6月第2版。4.C程序設(shè)計(jì)。譚浩強(qiáng)著,清華大學(xué)出版社,2005年7月第3版。

      5.C程序設(shè)計(jì)語言。Brian W.Kernighan / Dennis M.Ritchie 著,清華大學(xué)出版社。

      第二篇:c語言簡單socket通信

      server:

      #include

      #include

      #pragma comment(lib,“ws2_32.lib”)

      int main(int argc, char* argv[]){

      //3?ê??ˉWSA

      WORD sockVersion = MAKEWORD(2,2);WSADATA wsaData;if(WSAStartup(sockVersion, &wsaData)!=0){return 0;} //′′?¨ì×?ó×? SOCKET slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if(slisten == INVALID_SOCKET){printf(“socket error!”);return 0;} //°ó?¨IPoí???ú sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(8888);sin.sin_addr.S_un.S_addr = INADDR_ANY;if(bind(slisten,(LPSOCKADDR)&sin, sizeof(sin))== SOCKET_ERROR){printf(“bind error!”);} //?aê??àìy if(listen(slisten, 5)== SOCKET_ERROR){} //?-?·?óê?êy?Y SOCKET sClient;sockaddr_in remoteAddr;printf(“l(fā)isten error!”);return 0;

      char revData[255];while(true){printf(“μè′yá??ó...n”);sClient = accept(slisten,(SOCKADDR *)&remoteAddr, &nAddrlen);if(sClient == INVALID_SOCKET)

      {

      printf(“accept error!”);

      continue;

      }

      printf(“?óêüμ?ò???á??ó£o%s

      inet_ntoa(remoteAddr.sin_addr));

      //?óê?êy?Y

      int ret = recv(sClient, revData, 255, 0);

      if(ret > 0)

      {

      revData[ret] = 0x00;

      printf(revData);

      }

      //·¢?íêy?Y

      char * sendData = ”??o?£?TCP?í?§??£?n“;

      send(sClient, sendData, strlen(sendData), 0);

      closesocket(sClient);

      }

      closesocket(slisten);

      WSACleanup();

      return 0;

      }

      client:

      #include

      #include

      #pragmacomment(lib,”ws2_32.lib“)

      rn”,int main(int argc, char* argv[])

      {

      WORD sockVersion = MAKEWORD(2,2);

      WSADATA data;

      if(WSAStartup(sockVersion, &data)!= 0)

      {

      return 0;

      }

      SOCKET sclient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if(sclient == INVALID_SOCKET)

      {

      printf(“invalid socket!”);

      return 0;

      }

      sockaddr_in serAddr;

      serAddr.sin_family = AF_INET;

      serAddr.sin_port = htons(8888);

      serAddr.sin_addr.S_un.S_addr = inet_addr(“127.0.0.1”);

      if(connect(sclient,(sockaddr *)&serAddr, sizeof(serAddr))SOCKET_ERROR)

      {

      printf(“connect error!”);

      closesocket(sclient);

      return 0;

      }

      char * sendData = “??o?£?TCP·t????£??òê??í?§??!n”;

      send(sclient, sendData, strlen(sendData), 0);

      char recData[255];

      int ret = recv(sclient, recData, 255, 0);

      if(ret > 0)

      {

      recData[ret] = 0x00;

      printf(recData);

      }

      closesocket(sclient);

      WSACleanup();

      return 0;

      } ==

      第三篇:C語言課程設(shè)計(jì)報(bào)告

      C語言課程設(shè)計(jì)報(bào)告

      Experiment Designing reporter

      課程名稱 : C語言課程設(shè)計(jì)

      英文名稱 : C Program Experiment Designing

      專 業(yè) :

      學(xué) 號(hào) :

      姓 名 :

      指導(dǎo)教師 :

      日 期: 2011年7月18日 至2011年7月22日

      《C語言課程設(shè)計(jì)》報(bào)告

      C Program Experiment Designing

      課程編號(hào):01200308005

      學(xué)時(shí): 40學(xué)時(shí) 適用專業(yè):軟件工程專業(yè) 授課單位:軟件學(xué)院

      一、C語言課程設(shè)計(jì)目的及要求

      目的:

      根據(jù)課堂講授內(nèi)容,學(xué)生做相應(yīng)的自主練習(xí),消化課堂所講解的內(nèi)容;通過調(diào)試典型例題或習(xí)題積累調(diào)試C程序的經(jīng)驗(yàn);通過完成輔導(dǎo)教材中的編程題,逐漸培養(yǎng)學(xué)生的編程能力、用計(jì)算機(jī)解決實(shí)際問題的能力。

      要求:

      1. 熟悉Turbo C 的編程環(huán)境、主要菜單功能。

      2. 通過上機(jī)驗(yàn)證運(yùn)算符、表達(dá)式、運(yùn)算規(guī)則、函數(shù)使用。3. 熟練使用C語言的典型語句編寫簡單程序。4. 調(diào)試典型例題或習(xí)題。5. 提高上機(jī)編程能力

      二、實(shí)驗(yàn)類型

      設(shè)計(jì)類型

      三、實(shí)驗(yàn)學(xué)時(shí)

      40學(xué)時(shí)

      四、實(shí)驗(yàn)設(shè)備

      微型計(jì)算機(jī)、WINDOWS98以上版本的操作系統(tǒng)、Turbo C2.0 軟件一套

      五、C語言課程參考教材:

      1.李瑞 C語言程序基礎(chǔ)(第二版)清華大學(xué)出版社 2.梁旭 C語言課程設(shè)計(jì).電子工業(yè)出版社

      課程設(shè)計(jì)(報(bào)告)任務(wù)書

      任務(wù)及要求:

      1.設(shè)計(jì)(研究)內(nèi)容和要求

      研究內(nèi)容:C語言課程設(shè)計(jì)題目相關(guān)內(nèi)容 任務(wù)和要求:

      (1).學(xué)習(xí)C語言基礎(chǔ)知識(shí),掌握C語言編程和程序調(diào)試的基本技能。(2).對(duì)指導(dǎo)教師下達(dá)的題目進(jìn)行系統(tǒng)分析。(3).根據(jù)分析結(jié)果完成系統(tǒng)設(shè)計(jì)。

      (4).編程:在計(jì)算機(jī)上實(shí)現(xiàn)題目的代碼實(shí)現(xiàn)。(5).完成對(duì)該系統(tǒng)的測(cè)試和調(diào)試。(6).提交課程設(shè)計(jì)報(bào)告。(7).指標(biāo): 要求完成課程設(shè)計(jì)報(bào)告3千字以上(約二、三十頁).完成若干綜合性程序設(shè)計(jì)題目,每個(gè)綜合設(shè)計(jì)題目的語句行數(shù)的和在300行語句以上.2.原始依據(jù)

      了解C語言的基礎(chǔ)知識(shí),有一定的語言編程基礎(chǔ),能夠熟練運(yùn)用C語言進(jìn)行程序設(shè)計(jì)。通過用C語言完成的題目,提高用C語言解決實(shí)際問題的能力。3.參考文獻(xiàn)

      [1] 黃明等.C語言程序設(shè)計(jì)輔導(dǎo)教材.大連理工大學(xué)出版社,2006 [2] 馬靖善等.C語言程序設(shè)計(jì).清華大學(xué)出版社,2005 [3] 譚浩強(qiáng).C語言程序設(shè)計(jì)(第二版).北京:高等教育出版社,2002

      目錄

      C語言課程設(shè)計(jì)報(bào)告................................................................................錯(cuò)誤!未定義書簽。

      1. 輸出楊輝三角.............................................................................................................1 1.1 系統(tǒng)分析..............................................................................................................1 1.2 設(shè)計(jì)說明..............................................................................................................1 1.3 程序運(yùn)行截圖......................................................................................................2 1.4 源程序代碼..........................................................................................................2 2 漢諾塔求解方法.............................................................................................................3 2.1 系統(tǒng)分析..............................................................................................................3 2.2 設(shè)計(jì)說明..............................................................................................................3 2.3 程序運(yùn)行截圖......................................................................................................4 2.4 源程序代碼..........................................................................................................4 3 輸出200以內(nèi)的素?cái)?shù).....................................................................................................5 3.1功能說明...............................................................................................................5 3.2 設(shè)計(jì)說明..............................................................................................................5 3.3 程序運(yùn)行截圖......................................................................................................5 3.4 源程序代碼..........................................................................................................6 4 進(jìn)制轉(zhuǎn)換計(jì)算器.............................................................................................................6 4.1功能說明...............................................................................................................6 4.2 設(shè)計(jì)說明..............................................................................................................6 4.3程序運(yùn)行截圖.......................................................................................................7 4.4 源程序代碼..........................................................................................................7 5 一元稀疏多項(xiàng)式.............................................................................................................8 5.1 功能說明..............................................................................................................8 5.2 設(shè)計(jì)說明..............................................................................................................8 5.3 程序運(yùn)行截圖....................................................................................................10 5.4 源程序代碼........................................................................................................11

      1. 輸出楊輝三角

      1.1 系統(tǒng)分析

      以等腰直角三角形輸出楊輝三角

      1.2 設(shè)計(jì)說明

      1、包含頭文件

      #include

      #include

      其中,頭文件為使用clrscr()。

      2、子函數(shù)

      函數(shù)名:int num(i,j)

      函數(shù)功能:以遞歸的方式進(jìn)行計(jì)算,用函數(shù)代替二維數(shù)組

      函數(shù)參數(shù):int i;int j;

      含義:相當(dāng)于二維數(shù)組的a[i][j] 函數(shù)流程

      Step1:輸出最外行,即三角形兩直角邊的結(jié)果都為 1 ;

      Step2:討論其余情況,相當(dāng)于數(shù)組中的

      a[i][j] = a[i-1][j-1] + a[i-1][j]。

      3、main()函數(shù)

      1為保證結(jié)果完整輸出,先進(jìn)行清屏; ○2輸入要打印的行數(shù),由于一行只能顯示80個(gè)字符,建議不要超過13行; ○3用循環(huán)調(diào)用函數(shù)int num(int i , int j)○

      其中循環(huán)為三重循環(huán):i 循環(huán)控制行打印

      j 循環(huán)控制列打印

      k 循環(huán)控制空格打印

      每執(zhí)行一次i 循環(huán)輸出一個(gè)換行符,直角三角形定點(diǎn)放在第36個(gè)字符的位置上。

      每個(gè)數(shù)字占6個(gè)字符的格。

      1.3 程序運(yùn)行截圖

      1.4 源程序代碼

      #include #include

      int num(i,j){

      int i,j;

      if(I == j ||j == 0)return(1);

      else return(num(i-1 , j-1)+num(i-1 , j));}

      int main(void){

      int n,k,i,j;

      clrscr();

      puts(“input row n:”);

      scanf(“%d”,&n);

      for(i = 0;i < n;i++)

      {

      {

      for(k = 0;k < 36-3*i;k++)

      putchar(' ');

      }

      {

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

      printf(“%6d”,num(i , j));

      }

      puts(“");

      }

      getch();

      return 0; } 漢諾塔求解方法

      2.1 系統(tǒng)分析

      漢諾塔求解方法

      2.2 設(shè)計(jì)說明

      1、包含頭文件:

      #include #include

      其中,#include 為了應(yīng)用函數(shù)toupper

      2、子函數(shù)

      函數(shù)名:void move(int n , char a , char b)

      函數(shù)功能:打印移動(dòng)的主子編號(hào)

      函數(shù)參數(shù):int n , char a , char b;

      含義:n為移動(dòng)的序數(shù),a為源柱號(hào),b目的柱號(hào) 函數(shù)流程

      Step1:輸出盤子移動(dòng)情況;

      Step2:打印換行。

      函數(shù)名:void hanoi(int n,char a,char b,char c)

      函數(shù)功能:以游戲規(guī)則求解移動(dòng)盤子的方法

      函數(shù)參數(shù):int n,char a,char b,char c;

      含義:n移動(dòng)的序數(shù),a為源柱號(hào),b為目的柱號(hào),c為中間柱號(hào)

      函數(shù)流程

      Step1:遞歸調(diào)用函數(shù) hanoi(n-1,a,c,b);

      Step2:調(diào)用函數(shù)move(n-1,a,b);

      Step3:繼續(xù)遞歸調(diào)用函數(shù)hanoi(n-1,c,b,a);

      3、主函數(shù)main()1為了使程序可以重復(fù)運(yùn)行,定義了變量ch,當(dāng)ch == N 時(shí),退出游戲; ○2使用while()循環(huán)使游戲重復(fù)運(yùn)行; ○3輸入盤子的數(shù)目以調(diào)整游戲的難度; ○3調(diào)用函數(shù)hanoi()○

      2.3 程序運(yùn)行截圖

      2.4 源程序代碼

      #include ”stdio.h“ #include ”ctype.h“

      //應(yīng)用函數(shù)toupper void move(int n,char a,char b)

      //n為移動(dòng)的序數(shù),a為源柱號(hào),b目的柱號(hào)*/ {

      printf(”Disc%d move from %c to %c;“,(n+1),a,b);

      printf(”n“);}

      void hanoi(int n,char a,char b,char c){

      //n移動(dòng)的序數(shù),a為源柱號(hào),b為目的柱號(hào),c為中間柱號(hào)

      if(n>0)

      {

      hanoi(n-1,a,c,b);

      //遞歸調(diào)用

      move(n-1,a,b);

      hanoi(n-1,c,b,a);

      } } main(){

      int n;

      char ch ='Y';

      printf(”Now let us play the game of hanoitowern“);

      while(ch == 'Y')

      //通用性設(shè)計(jì)

      {

      printf(”n Input the number of disc[2-15]:“);

      scanf(”%d“,&n);getchar();

      printf(”n The orders of moving %d discs from A to B are:n“,n);

      hanoi(n,'A','B','C');

      //調(diào)用函數(shù)

      printf(”n Continue(Y/N):“);

      ch=getchar();

      getchar();

      ch=toupper(ch);}

      return 0;} 3 輸出200以內(nèi)的素?cái)?shù)

      3.1功能說明

      輸出200以內(nèi)的素?cái)?shù)

      3.2 設(shè)計(jì)說明

      1、宏定義

      #define M 200

      //范圍,表示輸出200以內(nèi)的素?cái)?shù) #define N((M+1)/2)

      //奇數(shù)的個(gè)數(shù)

      處理流程:

      Step1:第一步篩選掉所有的偶數(shù),將剩余的奇數(shù)存放在a[N]中; Step2:第二部篩選掉多有可以被整除的數(shù) Step3:將得到的素?cái)?shù)10個(gè)一行打印。

      3.3 程序運(yùn)行截圖

      3.4 源程序代碼

      #include ”stdio.h“ #define M 200

      //范圍

      #define N((M+1)/2)

      //奇數(shù)的個(gè)數(shù) main(){

      int i,j,a[N];

      a[0]=2;

      for(i=1;i

      //初始數(shù)組實(shí)現(xiàn)第一步篩選

      a[i]=2*i+1;

      for(i=1;i<(N-1);i++)

      //第二步篩選

      if(a[i]!=0)

      for(j=i+1;j

      if((a[j]%a[i]==0))

      //倍數(shù)時(shí)置零篩去

      a[j]=0;

      printf(”n The primer are[2-%d]:n“,M);

      for(i=0,j=0;i

      //顯示得到素?cái)?shù)

      {

      if(a[i]!=0)

      {

      printf(”%5d“,a[i]);

      if((++j)%10==0)

      //十個(gè)數(shù)換行

      printf(”n“);

      } }

      return 0;} 進(jìn)制轉(zhuǎn)換計(jì)算器

      4.1功能說明

      進(jìn)行進(jìn)制轉(zhuǎn)換。

      4.2 設(shè)計(jì)說明

      1、處理流程:

      Step1:輸入原始數(shù)值xa,原始權(quán)a,已經(jīng)希望轉(zhuǎn)換的進(jìn)制b;Step2:逐位取值,將原始數(shù)值轉(zhuǎn)換成10進(jìn)制 Step3:逐位取值,將原始數(shù)值轉(zhuǎn)換成b 進(jìn)制

      4.3程序運(yùn)行截圖

      4.4 源程序代碼

      void main()#include ”stdio.h“ main()

      {

      int a=0,/*原始進(jìn)制*/ b=8,/*轉(zhuǎn)換進(jìn)制,默認(rèn)為八*/

      k=1;

      /*位權(quán)*/

      long xa=0,/*原始數(shù)值*/

      xb=0,/*轉(zhuǎn)換數(shù)值*/

      x1=0,x2=0;

      /*十進(jìn)制數(shù)值*/

      printf(”n Input the number and weight a->b:“);

      scanf(”%ld%d%d“,&xa,&a,&b);

      x1=xa;

      while(x1!=0)

      /*轉(zhuǎn)換為十進(jìn)制數(shù)*/

      { x2+=(x1%10)*k;

      /*逐位取值*/ x1/=10;k*=a;

      }

      k=1;

      x1=x2;

      while(x1!=0)

      /*轉(zhuǎn)換為b進(jìn)制數(shù)*/

      { xb+=(x1%b)*k;x1/=b;k*=10;

      }

      printf(”n %ld(%d)=%ld(%d)=%ld(%d)“,xa,a,x2,10,xb,b);

      return;} 一元稀疏多項(xiàng)式

      5.1 功能說明

      求一元稀疏多項(xiàng)式的運(yùn)算:

      1、求兩多項(xiàng)式加法;

      2、求兩多項(xiàng)式減法;

      3、求兩多項(xiàng)式乘法;

      4、求兩多項(xiàng)式導(dǎo)數(shù);

      5、求兩多項(xiàng)式在x=m處的值。

      5.2 設(shè)計(jì)說明

      1、鏈表結(jié)點(diǎn)的定義:

      typedef struct polyn {

      float coef;

      //多項(xiàng)式系數(shù)

      int expn;

      //多項(xiàng)式指數(shù)

      struct polyn * prior,* next;} polyn, *linkpolyn;

      2、子函數(shù),多項(xiàng)式的基本運(yùn)算。函數(shù)名:linkpolyn CREATEPOLYN()函數(shù)功能:創(chuàng)建多項(xiàng)式鏈表,在輸入的時(shí)候進(jìn)行升序排列 返回值:return head,即建立的多項(xiàng)式頭結(jié)點(diǎn) 參數(shù):linkpolyn head,含義:鏈表頭結(jié)點(diǎn) 處理流程:

      Step1:輸入第一個(gè)結(jié)點(diǎn),且第一個(gè)結(jié)點(diǎn)自然有序;

      Step2:循環(huán)輸入其余結(jié)點(diǎn),當(dāng)輸入0 0是表示輸入結(jié)束;

      Step3:輸入過程中進(jìn)行升冪排序,用二分法,找到新結(jié)點(diǎn)插入點(diǎn);

      Step4:插入新結(jié)點(diǎn);繼續(xù)循環(huán),直到輸入0 0,循環(huán)結(jié)束,鏈表建立成功。Step5:返回建立鏈表頭結(jié)點(diǎn),函數(shù)結(jié)束。

      函數(shù)名:linkpolyn DERIVATIONPOLYN(linkpolyn L)函數(shù)功能:多項(xiàng)式求導(dǎo)

      返回值:return(head),即求導(dǎo)多項(xiàng)式的鏈表頭結(jié)點(diǎn)

      參數(shù):linkpolyn L,含義:把建立好的鏈表A和B傳遞給L 處理流程:

      Step1:分別用指針指向L的頭結(jié)點(diǎn)和求導(dǎo)多項(xiàng)式的頭結(jié)點(diǎn)head;

      Step2:用循環(huán)逐個(gè)對(duì)L鏈表中的結(jié)點(diǎn)求導(dǎo),一次存放在求導(dǎo)多項(xiàng)式中的新結(jié)點(diǎn)中; Step3:循環(huán)中考慮,當(dāng)L鏈表中的結(jié)點(diǎn)僅存放一個(gè)常數(shù),則跳過該結(jié)點(diǎn),繼續(xù)遍歷下一結(jié)點(diǎn);

      Step4:當(dāng)循環(huán)結(jié)束,即L中的各項(xiàng)以被求導(dǎo),返回求導(dǎo)多項(xiàng)式頭結(jié)點(diǎn)head。

      函數(shù)名:linkpolyn INITPOLYN()函數(shù)功能:鏈表初始化

      返回值:return(head),即求導(dǎo)多項(xiàng)式生成的鏈表頭結(jié)點(diǎn) 參數(shù):無參數(shù) 處理流程:

      Step1:生成一個(gè)新的空間作為新結(jié)點(diǎn);

      Step2:將新節(jié)點(diǎn)的coef域賦0,expn域賦-1,以區(qū)分其他節(jié)點(diǎn); Step3:將頭結(jié)點(diǎn)的前去指針和后即指針置空,并返回頭結(jié)點(diǎn)。

      函數(shù)名:void PRINTLIST(linkpolyn head)函數(shù)功能:以類數(shù)學(xué)表達(dá)式的形式打印 返回值:無返回值

      參數(shù):linkpolyn head,含義:處理過的鏈表頭結(jié)點(diǎn) 處理流程:

      Step1:討論是否鏈表為空,若為空,則輸出0;

      Step2:若鏈表不為空,則輸出第一個(gè)值,第一個(gè)值不用輸出符號(hào); Step3:用循環(huán)依次輸出其余各項(xiàng),附加符號(hào)輸出;

      函數(shù)名:linkpolyn ADDPOLYN(linkpolyn A , linkpolyn B)函數(shù)功能:加法運(yùn)算

      返回值:return ptr,即和多項(xiàng)式的頭結(jié)點(diǎn)

      參數(shù):linkpolyn A , linkpolyn B,含義:創(chuàng)建的鏈表A和B 處理流程:

      Step1:分別以兩個(gè)指針pa和pb遍歷鏈表A和B;

      Step2:當(dāng)A和B兩鏈表都為遍歷完畢時(shí),進(jìn)行加法運(yùn)算,分配新的空間存放和多項(xiàng)式,并用二分法進(jìn)行升冪排序; Step3:當(dāng)A遍歷完畢而B未遍歷完畢,將B其余各項(xiàng)拷貝到

      和多項(xiàng)式鏈表中;

      Step4:當(dāng)B遍歷完畢而A未遍歷完畢,將A其余各項(xiàng)拷貝到

      和多項(xiàng)式鏈表中;

      函數(shù)名:linkpolyn SUBTRACTPOLYN(linkpolyn A , linkpolyn B)函數(shù)功能:計(jì)算A-B的值

      返回值:return ptr,即差多項(xiàng)式的頭結(jié)點(diǎn)

      參數(shù):linkpolyn A , linkpolyn B,含義:創(chuàng)建的鏈表A和B 處理流程:

      Step1:分別以兩個(gè)指針pa和pb遍歷鏈表A和B;

      Step2:當(dāng)A和B兩鏈表都為遍歷完畢時(shí),進(jìn)行減法運(yùn)算,分配新的空間存放和多項(xiàng)式,并用二分法進(jìn)行升冪排序;

      Step3:當(dāng)A遍歷完畢而B未遍歷完畢,將B其余各項(xiàng)拷貝到

      和多項(xiàng)式鏈表中;

      Step4:當(dāng)B遍歷完畢而A未遍歷完畢,將A其余各項(xiàng)拷貝到

      差多項(xiàng)式鏈表中; Step5:返回多項(xiàng)式頭結(jié)點(diǎn)

      函數(shù)名:float WORK(float x,int e)函數(shù)功能:求x的冪

      返回值:return t,即計(jì)算冪結(jié)果

      參數(shù):float x,int e,含義:x為輸入的x的值,e為x的指數(shù) 處理流程:

      Step1:分別討論正指數(shù)與負(fù)指數(shù)的的情況; Step2:若e>0,則累乘e次x; Step3:若e<0,則累除e次x;; Step4:將所求結(jié)果返回;

      3、主函數(shù)main()Step1:依次調(diào)用函數(shù)進(jìn)行運(yùn)算操作; Step2:調(diào)用函數(shù)創(chuàng)建鏈表; Step3:調(diào)用函數(shù)進(jìn)行運(yùn)算;

      5.3 程序運(yùn)行截圖

      5.4 源程序代碼

      #include ”stdio.h“ #include #include ”math.h“ #define FZ 1e-6

      typedef struct polyn { float coef;//多項(xiàng)式系數(shù) int expn;//多項(xiàng)式指數(shù) struct polyn * prior,* next;} polyn, *linkpolyn;

      void DESTROYPOLYN(linkpolyn head){ //銷毀鏈表 linkpolyn s,p;p=head;

      while(p->next!= NULL){ s = p;

      p = p->next;

      free(s);} } //DESTROYPOLYN

      linkpolyn INITPOLYN(){ //鏈表初始化

      struct polyn * head;head=(linkpolyn)malloc(sizeof(polyn));head->coef=0.0;//假設(shè)頭結(jié)點(diǎn)系數(shù)為0 head->expn=-1;//假設(shè)頭結(jié)點(diǎn)指數(shù)為-1 head->next=NULL;head->prior=NULL;return head;} //INITPOLYN

      void INSERTPOLYN(linkpolyn p,linkpolyn s){ //將結(jié)點(diǎn)s插入到p之后

      if(NULL!= p->next){

      s->next = p->next;

      s->next->prior = s;} s->prior = p;p->next = s;

      } //INSERPOLYN

      linkpolyn CREATEPOLYN(){ //創(chuàng)建多項(xiàng)式鏈表,在輸入的時(shí)候進(jìn)行升序排列 linkpolyn head,s,p,m,r;

      int num = 1;//計(jì)數(shù)器

      head = INITPOLYN();//初始化鏈表 head r = head;//設(shè)置為指針

      s=(linkpolyn)malloc(sizeof(polyn));

      /******************************************/ printf(”請(qǐng)輸入第%d項(xiàng)系數(shù)和指數(shù):“,num);/**輸入第一個(gè)結(jié)點(diǎn),并且第一個(gè)結(jié)點(diǎn)自然有序**/ scanf(”%f%d“,&s->coef,&s->expn);/******************************************/ r->next = s;s->prior = r;r = r->next;//r指向尾結(jié)點(diǎn)

      r->next = NULL;p = r;//p為s的插入點(diǎn)前一個(gè)結(jié)點(diǎn)

      m = r;//m為拍完結(jié)點(diǎn)中間的節(jié)點(diǎn),二分法排序

      while(++num)//while # 當(dāng)將 s->coef 與 s->expn 都賦值為0的時(shí)候,認(rèn)為輸入結(jié)束

      { s =(linkpolyn)malloc(sizeof(polyn));printf(”請(qǐng)輸入第%d項(xiàng)系數(shù)和指數(shù):“,num);scanf(”%f%d“,&s->coef,&s->expn);

      if((fabs(s->coef)<= FZ)&&(s->expn == 0))//if @

      { free(s);

      break;

      } //else @ else //else @

      { if(s->expn <= p->expn)//if #

      { while(p->prior!= NULL && p->expn > s->expn)

      p = p->prior;//p向前遍歷鏈表,找到插入點(diǎn)

      if(s->expn == p->expn)

      {

      p->coef += s->coef;

      free(s);

      r=r;

      }

      else

      {

      INSERTPOLYN(p,s);//在p后面插入結(jié)點(diǎn)s

      m = m->prior;

      p = m;

      }

      } // if #

      else //else #

      {

      while(p->next!= NULL && p->next->expn < s->expn)

      p = p->next;//p向后遍歷鏈表,找到插入點(diǎn)

      if(s->expn == p->expn)

      {

      p->coef += s->coef;

      free(s);

      }

      else

      {

      INSERTPOLYN(p,s);

      if(s->expn > r->expn)

      { r = r->next;

      r->next = NULL;

      }

      }

      } //else #

      } //else @ } //while # return head;} //CREATEPOLYN

      void PRINTPOLYN(linkpolyn head){ //以類數(shù)學(xué)表達(dá)式的形式打印 linkpolyn p;

      p = head->next;if(p == NULL)//鏈表為空

      puts(”0“);else //else @ { //鏈表不為空,輸出第一個(gè)結(jié)點(diǎn)的值

      if(p->expn == 0)printf(”%f“,p->coef);//指數(shù)為0時(shí)不輸出x else

      { if(p->coef==1)printf(”x^%d“,p->expn);/**************************/ else if(p->coef ==-1)printf(”-x^%d“,p->expn);/**第一項(xiàng)前不需要輸出符號(hào)**/ else printf(”%gx^%d“,p->coef,p->expn);/**************************/

      } p = p->next;while(p!= NULL)

      { //依次輸出以后各節(jié)點(diǎn) if(p->coef>0)

      { //當(dāng)系數(shù)為正時(shí),討論輸出符號(hào)問題

      if(p->expn == 0)printf(”+%g“,p->coef);else if(p->coef == 1)printf(”+x^%d“,p->expn);else printf(”+%gx^%d“,p->coef,p->expn);

      } else

      { //當(dāng)系數(shù)為負(fù)時(shí),討論輸出符號(hào)問題

      if(p->expn == 0)printf(”%g“,p->coef);else if(p->coef ==-1)printf(”-x^%d“,p->expn);else printf(”%gx^%d“,p->coef,p->expn);

      } p = p->next;

      } } //else @ } //PRINTPOLYN

      linkpolyn ADDPOLYN(linkpolyn A , linkpolyn B){ //加法

      linkpolyn qa,qb,q,ptr;float x;qa = A->next;qb = B->next;q = INITPOLYN();//和多項(xiàng)式頭結(jié)點(diǎn)初始化

      ptr = q;//ptr指向和多項(xiàng)式頭結(jié)點(diǎn)

      while((qa!= NULL)&&(qb!= NULL)){ //升冪求和

      if(qa->expn == qb->expn)//指數(shù)相同的項(xiàng)

      { x = qa->coef + qb->coef;//系數(shù)相加

      if(x!= 0)//求得系數(shù)非0

      { q->next =(linkpolyn)malloc(sizeof(polyn));//

      q = q->next;

      q->coef = x;

      q->expn = qa->expn;

      }

      生成和多項(xiàng)式的節(jié)結(jié)點(diǎn)

      qa = qa->next;

      qb = qb->next;

      }

      else //指數(shù)不同

      {

      q->next =(linkpolyn)malloc(sizeof(polyn));

      q = q->next;

      if(qa->expn > qb->expn)//A多項(xiàng)式當(dāng)前指數(shù)大于B

      { q->coef = qb->coef;//B多項(xiàng)式當(dāng)前的值復(fù)制到和多項(xiàng)式中

      q->expn = qb->expn;

      qb = qb->next;

      }

      else //B多項(xiàng)式當(dāng)前指數(shù)大于A

      { q->coef = qa->coef;//A多項(xiàng)式當(dāng)前的值復(fù)制到和多項(xiàng)式中

      q->expn = qa->expn;

      qa = qa->next;

      }

      } } //A或B中有一個(gè)多項(xiàng)式已經(jīng)處理完畢

      while(qa!= NULL)//A未處理完畢,將其余各項(xiàng)復(fù)制到和多項(xiàng)式中

      { q->next =(linkpolyn)malloc(sizeof(polyn));q = q->next;

      q->coef = qa->coef;

      q->expn = qa->expn;

      qa = qa->next;} while(qb!= NULL)//B未處理完畢,將其余各項(xiàng)復(fù)制到和多項(xiàng)式中

      { q->next =(linkpolyn)malloc(sizeof(polyn));q = q->next;

      q->coef = qb->coef;

      q->expn = qb->expn;

      qb = qb->next;} q->next = NULL;//令和多項(xiàng)式最末的節(jié)點(diǎn)指向頭結(jié)點(diǎn)

      return ptr;//返回多項(xiàng)式頭指針 } //LINKPOLYN

      linkpolyn SUBTRACTPOLYN(linkpolyn A , linkpolyn B){ //減法

      linkpolyn qa,qb,q,ptr;float x;qa = A->next;qb = B->next;q = INITPOLYN();//和多項(xiàng)式頭結(jié)點(diǎn)初始化

      ptr = q;//ptr指向和多項(xiàng)式頭結(jié)點(diǎn)

      while((qa!= NULL)&&(qb!= NULL)){ //升冪求差

      if(qa->expn == qb->expn)//指數(shù)相同的項(xiàng)

      { x = qa->coef-qb->coef;//多項(xiàng)式A的系數(shù)減去B的系數(shù)

      if(x!= 0)//求得系數(shù)非0

      { q->next =(linkpolyn)malloc(sizeof(polyn));//生成和多項(xiàng)式的節(jié)結(jié)點(diǎn)

      q = q->next;

      q->coef = x;

      q->expn = qa->expn;

      }

      qa = qa->next;

      qb = qb->next;

      }

      else //指數(shù)不同

      {

      q->next =(linkpolyn)malloc(sizeof(polyn));

      q=q->next;

      if(qa->expn > qb->expn)//A多項(xiàng)式當(dāng)前指數(shù)大于B

      { q->coef =-(qb->coef);//B多項(xiàng)式當(dāng)前的值復(fù)制到和多項(xiàng)式中

      q->expn = qb->expn;

      qb = qb->next;

      }

      else //B多項(xiàng)式當(dāng)前指數(shù)大于A

      { q->coef = qa->coef;//A多項(xiàng)式當(dāng)前的值復(fù)制到和多項(xiàng)式中

      q->expn = qa->expn;

      qa = qa->next;

      }

      } } //A或B中有一個(gè)多項(xiàng)式已經(jīng)處理完畢

      while(qa!= NULL)//A未處理完畢,將其余各項(xiàng)復(fù)制到和多項(xiàng)式中

      { q->next =(linkpolyn)malloc(sizeof(polyn));q = q->next;

      q->coef = qa->coef;

      q->expn = qa->expn;

      qa = qa->next;} while(qb!= NULL)//B未處理完畢,將其余各項(xiàng)復(fù)制到和多項(xiàng)式中

      { q->next =(linkpolyn)malloc(sizeof(polyn));q = q->next;

      q->coef =-(qb->coef);

      q->expn = qb->expn;

      qb = qb->next;} q->next = NULL;//令和多項(xiàng)式最末的節(jié)點(diǎn)指向頭結(jié)點(diǎn)

      return ptr;//返回多項(xiàng)式頭指針 } //SUBTRACTPOLYN

      linkpolyn MULTIPLYPOLYN(linkpolyn A,linkpolyn B){ //乘法

      linkpolyn pa,pb,s,head,m,r,p;pa = A->next;pb = B->next;head = INITPOLYN();r = head;

      s=(linkpolyn)malloc(sizeof(polyn));s->coef = pa->coef * pb->coef;//計(jì)算第一個(gè)結(jié)點(diǎn),并且第一個(gè)結(jié)點(diǎn)自然有序

      s->expn = pa->expn + pb->expn;r->next = s;s->prior = r;r =r->next;r->next = NULL;p=r;//p為插入點(diǎn)前一結(jié)點(diǎn)

      m=r;//m指向排完結(jié)點(diǎn)中間節(jié)點(diǎn)

      pb=pb->next;// 第一個(gè)乘積處理完畢

      for(pa= A->next;pa!= NULL;pa=pa->next)//for pa 處理其余乘積

      { //用A的第一個(gè)結(jié)點(diǎn)分別與B的其余結(jié)點(diǎn)相乘

      if(pa == A->next)

      pb = B->next->next;

      else

      pb = B->next;

      for(;pb!= NULL;pb = pb->next)//for pb

      {

      s =(linkpolyn)malloc(sizeof(polyn));s->coef = pa->coef * pb->coef;

      s->expn = pa->expn + pb->expn;if(s->expn <= p->expn)//if #

      { while(p->prior!=NULL && p->expn > s->expn)p=p->prior;//p向前遍歷鏈表,找到插入點(diǎn)

      if(s->expn==p->expn)

      {

      p->coef+=s->coef;

      free(s);

      }

      else

      {

      INSERTPOLYN(p,s);//在p后面插入結(jié)點(diǎn)s

      m=m->prior;

      p=m;

      }

      } // if #

      else //else #

      { while(p->next!=NULL && p->next->expn < s->expn)

      p=p->next;//p向前遍歷鏈表,找到插入點(diǎn)

      if(s->expn==p->expn)

      {

      p->coef+=s->coef;

      free(s);

      }

      else

      {

      INSERTPOLYN(p,s);

      if(s->expn > r->expn)

      { r=r->next;

      r->next=NULL;

      }

      }

      } //else #

      } //for pb } //for pa return head;} //MULTIPLYPOLYN

      linkpolyn DERIVATIONPOLYN(linkpolyn L){ //多項(xiàng)式求導(dǎo)

      linkpolyn head,p,s,r;head = INITPOLYN();//head為求導(dǎo)多項(xiàng)式頭結(jié)點(diǎn) r = head;p = L->next;while(p!= NULL){ if(p->expn == 0)

      { p = p->next;continue;} s =(linkpolyn)malloc(sizeof(polyn));s->coef = p->coef * p->expn;s->expn = p->expn-1;s->prior = r;

      r->next = s;

      r = r->next;

      r->next = NULL;

      p = p->next;} return(head);} //DERIVATIONPOLYN

      float WORK(float x,int e){ //求x的冪 float t = 1;if(e>0){ while(e)

      { t *= x;e--;} } if(e<0){ while(e)

      { t *= 1/x;e++;} }

      return(t);} //WORK

      float CALCULATEPOLYN(linkpolyn head,float x){ //計(jì)算多項(xiàng)式在x處的值 float t = 0;linkpolyn p;p = head->next;while(p){ t = t +((p->coef)*(WORK(x,p->expn)));p = p->next;} return(t);} //CALCULATEPOLYN

      int main(void){ linkpolyn A, B,addp,decp,mulp,derp1,derp2;int i;float x;start: system(”cls“);printf(”一元稀疏多項(xiàng)式計(jì)算nn“);printf(”1.建立多項(xiàng)式n“);printf(”2.多項(xiàng)式加法n“);printf(”3.多項(xiàng)式減法n“);printf(”4.多項(xiàng)式乘法n“);printf(”5.計(jì)算多項(xiàng)式在x處的值n“);printf(”6.對(duì)多項(xiàng)式求導(dǎo)n“);printf(”7.清空數(shù)據(jù)n“);printf(”8.關(guān)閉計(jì)算器n“);printf(”請(qǐng)輸入選項(xiàng)(1~7):“);scanf(”%d“,&i);switch(i){ case(1): system(”cls“);printf(”建立多項(xiàng)式nn“);printf(”建立多項(xiàng)式A,當(dāng)輸入0 0 時(shí)表示出入完畢n“);A = CREATEPOLYN();printf(”建立多項(xiàng)式成功n“);printf(”建立多項(xiàng)式B,當(dāng)輸入0 0 時(shí)表示出入完畢n“);B = CREATEPOLYN();printf(”建立多項(xiàng)式成功n“);printf(”多項(xiàng)式A:“);PRINTPOLYN(A);printf(”n“);printf(”多項(xiàng)式B:“);PRINTPOLYN(B);

      printf(”nn輸入回車返回上一級(jí)“);getchar();getchar();goto start;case(2): system(”cls“);printf(”多項(xiàng)式加法nn“);printf(”多項(xiàng)式A:“);PRINTPOLYN(A);printf(”n“);printf(”多項(xiàng)式B:“);PRINTPOLYN(B);printf(”n“);addp = ADDPOLYN(A,B);printf(”多項(xiàng)式A+B:“);PRINTPOLYN(addp);printf(”n“);printf(”nn輸入回車返回上一級(jí)“);getchar();getchar();goto start;case(3): system(”cls“);printf(”多項(xiàng)式減法nn“);printf(”多項(xiàng)式B:“);PRINTPOLYN(A);printf(”n“);printf(”多項(xiàng)式B:“);PRINTPOLYN(B);printf(”n“);decp = SUBTRACTPOLYN(A,B);printf(”多項(xiàng)式A-B:“);PRINTPOLYN(decp);printf(”n“);printf(”nn輸入回車返回上一級(jí)“);getchar();getchar();goto start;case(4): system(”cls“);printf(”多項(xiàng)式乘法nn“);printf(”多項(xiàng)式A:“);PRINTPOLYN(A);printf(”n“);printf(”多項(xiàng)式B:“);PRINTPOLYN(B);printf(”n“);mulp = MULTIPLYPOLYN(A,B);printf(”多項(xiàng)式AB:“);PRINTPOLYN(mulp);printf(”n“);printf(”nn輸入回車返回上一級(jí)“);

      getchar();getchar();goto start;case(5): system(”cls“);printf(”計(jì)算多項(xiàng)式在x處的值n“);printf(”請(qǐng)輸入x的值:“);scanf(”%f“,&x);printf(”n多項(xiàng)式A:“);PRINTPOLYN(A);printf(”n值為:%f“,CALCULATEPOLYN(A,x));printf(”n“);printf(”多項(xiàng)式B:“);PRINTPOLYN(B);printf(”n值為:%f“,CALCULATEPOLYN(B,x));printf(”nn輸入回車返回上一級(jí)“);getchar();getchar();goto start;case(6): system(”cls“);printf(”多項(xiàng)式求導(dǎo)n“);printf(”多項(xiàng)式A:“);PRINTPOLYN(A);printf(”n“);printf(”多項(xiàng)式B:“);PRINTPOLYN(B);printf(”n“);derp1 = DERIVATIONPOLYN(A);printf(”求導(dǎo)后A':“);PRINTPOLYN(derp1);printf(”n“);derp2 = DERIVATIONPOLYN(B);puts(”求導(dǎo)后B':“);PRINTPOLYN(derp2);printf(”nn輸入回車返回上一級(jí)“);getchar();getchar();goto start;case(7): system(”cls“);DESTROYPOLYN(A);DESTROYPOLYN(B);DESTROYPOLYN(addp);DESTROYPOLYN(decp);DESTROYPOLYN(mulp);DESTROYPOLYN(derp1);DESTROYPOLYN(derp2);printf(”已清空所有數(shù)據(jù)n“);printf(”nn輸入回車返回上一級(jí)“);getchar();getchar();

      goto start;case(8): printf(”退出");} return(0);}

      第四篇:C語言課程設(shè)計(jì)報(bào)告

      目錄

      1前言..............................................................1 2正文..............................................................1 2.1設(shè)計(jì)目的........................................................1 2.2設(shè)計(jì)意義........................................................1 2.3設(shè)計(jì)方案與內(nèi)容..................................................2 2.3.1設(shè)計(jì)內(nèi)容......................................................2 2.3.2程序調(diào)試......................................................4 3致謝..............................................................7 4參考文獻(xiàn)..........................................................7 5附錄..............................................................8

      塔里木大學(xué)信息工程學(xué)院課程設(shè)計(jì)

      前言

      17世紀(jì)初,西方國家的計(jì)算工具有了較大的發(fā)展,英國數(shù)學(xué)家納皮爾發(fā)明的“納皮爾算籌”,英國牧師奧卻德發(fā)明了圓柱型對(duì)數(shù)計(jì)算尺,這種計(jì)算尺不僅能做加減乘除、乘方、開方運(yùn)算,甚至可以計(jì)算三角函數(shù),指數(shù)函數(shù)和對(duì)數(shù)函數(shù),這些計(jì)算工具不僅帶動(dòng)了計(jì)算器的發(fā)展,也為現(xiàn)代計(jì)算器發(fā)展奠定了良好的基礎(chǔ),成為現(xiàn)代社會(huì)應(yīng)用廣泛的計(jì)算工具. 1642年,年僅19歲的法國偉大科學(xué)家帕斯卡引用算盤的原理,發(fā)明了

      塔里木大學(xué)信息工程學(xué)院課程設(shè)計(jì)

      其自身的優(yōu)勢(shì),仍然是一種重要的語言,而且它還是通往c++的必由之路。它是融合了控制特性的的現(xiàn)代語言,其設(shè)計(jì)使得用戶可以自然的采用自頂向下的規(guī)劃、結(jié)構(gòu)化的編程,以及模塊化的設(shè)計(jì)。這種做法使得編寫出的程序更可靠、更易懂。它是一種高級(jí)語言,在設(shè)計(jì)上它充分利用了當(dāng)前計(jì)算機(jī)在能力上的優(yōu)點(diǎn)。C程序往往很緊湊且運(yùn)行速度快,其還表現(xiàn)出通常只有匯編語言才具有的精細(xì)控制能力,可以用于電腦cpu的編程控制語言,如果愿意,可以細(xì)調(diào)程序以獲得最大速度或最大內(nèi)存使用率。其可移植性的特點(diǎn),可以使其在不經(jīng)過太大的修改,便可在其它系統(tǒng)上運(yùn)行,同時(shí),它也是很多大型系統(tǒng)的編程語言,(比如說UNIX的操作系統(tǒng)就是建立在c之上的)。

      2.3設(shè)計(jì)方案與內(nèi)容

      我此次設(shè)計(jì)的是一個(gè)計(jì)算器,主要是利用我們所學(xué)的知識(shí),做到進(jìn)一步掌握c語言的奧秘,使這種功能強(qiáng)大的高級(jí)語言走近我們的生活。本計(jì)算系統(tǒng)主要是作加減乘除運(yùn)算。

      該計(jì)算系統(tǒng)程序包括:main()函數(shù)、加函數(shù)、減函數(shù)、乘函數(shù)、除函數(shù)和顯示函數(shù)。2.3.1設(shè)計(jì)內(nèi)容

      1、加運(yùn)算:

      int jia(int a,int b){int c;c=a+b;printf(“c=%d n”,c);}

      2、減運(yùn)算:

      int jian(int a,int b){int c;c=a-b;printf(“ c=%d n”,c);}

      3、乘運(yùn)算:

      int cheng(int a,int b){int c;c=a*b;printf(“ c=%d n”,c);}

      4、除運(yùn)算:

      int chu(int a,int b){int c;c=a/b;printf(“ c=%d n”,c);}

      5、顯示函數(shù)程序:

      塔里木大學(xué)信息工程學(xué)院課程設(shè)計(jì)

      void xian(){ printf(“n”);printf(“n”);printf(“please choose lower level operation sign n”);/*選擇提示*/ printf(“***************************n”);/*分隔號(hào)*/ printf(“0:apply overn”);/*輸入0選項(xiàng)則提示結(jié)束,輸出0*/ printf(“1:apply is additionn”);/*選擇加號(hào)*/ printf(“2:apply is subtractionn”);/*選擇減號(hào)*/ printf(“3: apply is multiplicationn”);/*選擇乘號(hào)*/ printf(“4:apply is divisionn”);/*選擇除號(hào)*/ } 顯示界面程序圖如圖2-1所示

      圖2-1顯示界面

      程序分析:

      1)printf(“please choose lower level operation sign n”);/*選擇提示*/這句可以根據(jù)需要寫成時(shí)間,一句鼓勵(lì)自己的話,或者別的什么,都將不影響改程序的正常運(yùn)行,只要在規(guī)定的“n”里,用戶可以根據(jù)自己的需要把它用一句英文表達(dá)出來。

      2)printf(“***************************n”);/*分隔號(hào)*/此句無關(guān)緊要,可以去掉也可以保留,看個(gè)人心情,不過個(gè)人建議,還是保留的比較好,它能保持計(jì)算器界面的美觀特點(diǎn),還能作為分隔運(yùn)算程序的作用,讓使用者能最快的對(duì)運(yùn)算區(qū)進(jìn)行劃區(qū)。3)printf(“0:apply overn”);/*輸入0選項(xiàng)則提示結(jié)束,輸出0*/此句在運(yùn)算界面里出現(xiàn),當(dāng)用戶使用時(shí),不小心輸入了一個(gè)字符,非1~4以內(nèi),則會(huì)提示錯(cuò)誤,按‘enter’結(jié)束該片段,然后根據(jù)提示,選擇自己所希望使用的運(yùn)算符號(hào)進(jìn)行運(yùn)算。

      4)printf(“1:apply is additionn”);/*選擇加號(hào)*/此句是加法運(yùn)算提示,當(dāng)輸入‘1’后按‘enter’會(huì)得到可以使用加法的提示,然后就可以使用加法運(yùn)算了,使用空格將數(shù)字與要加的數(shù)字分開,按‘enter’將得到你要的答案。5)printf(“2:apply is subtractionn”);/*選擇減號(hào)*/這是加法運(yùn)算提示。它的使用方法和

      塔里木大學(xué)信息工程學(xué)院課程設(shè)計(jì)

      相同。

      2.3.2程序調(diào)試

      1、加法運(yùn)算

      加法運(yùn)算運(yùn)行結(jié)果如圖2-2所示。

      圖2-2加法運(yùn)算運(yùn)行結(jié)果

      2、減法運(yùn)算

      減法運(yùn)算結(jié)果如圖2-3所示。

      圖2-3減法運(yùn)算

      3、乘法運(yùn)算

      乘法運(yùn)算如圖2-4所示。

      塔里木大學(xué)信息工程學(xué)院課程設(shè)計(jì)

      圖2-4乘法運(yùn)算

      4、除法運(yùn)算

      除法運(yùn)算如圖2-5所示

      圖2-5除法運(yùn)算

      6、主函數(shù)程序: int main(){ int a, b;

      塔里木大學(xué)信息工程學(xué)院課程設(shè)計(jì)

      for(;;){ xian();switch(getchar()){ case '0':printf(“ tui chu: ”);getchar();return 0;case '1': printf(“ apply is '+': n ”);scanf(“%d”,&a);getchar();scanf(“%d”,&b);getchar();jia(a,b);break;case '2':printf(“ apply is '-':n ”);scanf(“%d”,&a);getchar();scanf(“%d”,&b);getchar();jian(a,b);break;case '3':printf(“apply is '*':n ”);scanf(“%d”,&a);getchar();scanf(“%d”,&b);getchar();cheng(a,b);break;case '4':printf(“ apply is '/':n ”);scanf(“%d”,&a);getchar();scanf(“%d”,&b);getchar();chu(a,b);break;default:printf(“wrong!please push down'enter' go on with ”);/*提示錯(cuò)誤*/ getchar();break;

      塔里木大學(xué)信息工程學(xué)院課程設(shè)計(jì)

      } } return 0;/*一輪運(yùn)算結(jié)束后返回符號(hào)選擇功能選項(xiàng)*/ } 該主函數(shù)程序中使用了xian()函數(shù)、switch(getchar())語句、getchar()、for、break、return。xian()函數(shù)的功能是在程序運(yùn)行中,具有顯示界面的功能。switch(getchar())語句具有多分支選擇功能。getchar()是庫函數(shù)。for循環(huán)語句。是break語句是實(shí)現(xiàn)跳出循環(huán)的功能的語句。Return語句是返回語句,是程序最后一個(gè)語句,在int main(void)中int表示main()函數(shù)的返回值應(yīng)該是一個(gè)整數(shù)。該程序具備的選擇功能:

      (1)選擇提示:該計(jì)算器編輯界面有5個(gè)提示,它們分別是‘0’、‘1’,‘2’、‘3’、‘4’,當(dāng)使用者在該界面上輸入它們其中一個(gè)數(shù)字,會(huì)得到相對(duì)應(yīng)的提示,其中1~4分別表示加、減、乘、除運(yùn)算?!?’表示結(jié)束工作框結(jié)束。

      (2)使用方法:進(jìn)入選擇界面后,要選擇加法運(yùn)算,請(qǐng)輸入‘1’,然后按下‘enter’鍵。會(huì)得到提示;然后輸入兩個(gè)數(shù)字用空格分開,按回車‘enter’結(jié)束,得出答案。結(jié)束此輪運(yùn)算后,該程序又進(jìn)入到選擇提示界面,用戶再根據(jù)需要選擇相應(yīng)的運(yùn)算符號(hào)。以后的運(yùn)算方法和前面一樣。

      致謝

      在本次課程設(shè)計(jì)中,首先我要感謝張老師。是他至始至終的教導(dǎo)讓我能夠在編程方面迅速的入門。在我們對(duì)程序語言的學(xué)習(xí)過程中,是他不斷的給我們講解語句內(nèi)容并且糾正我們存在的錯(cuò)誤。不斷的給我們提供幫助并且給我們分析遇到的問題。老師認(rèn)真負(fù)責(zé)的工作態(tài)度,嚴(yán)謹(jǐn)治學(xué)的精神和深厚的理論水平都使我受益匪淺。他們無論在理論上還是實(shí)踐中都給了我很大的幫助,使我整體水平得到了提高,對(duì)于我以后的學(xué)習(xí)和工作都有一定的幫助,感謝張兵老師的耐心輔導(dǎo)!

      參考文獻(xiàn)

      [1]孫雄勇.Visual C++ 6.0 實(shí)用教程.北京:中國鐵道出版社,2004.[2]新電腦課堂編委會(huì).Visual C++ 編程篇.北京:電子工業(yè)出版社,2004.[3]陳清華.Visual C++課程設(shè)計(jì)案例精選與編程指導(dǎo).北京:北京大學(xué)出版社,2005.[4]李東玉.Visual C++.NET實(shí)用編程100例.北京:中國鐵道出版社,2003.[6]張志清.管理信息系統(tǒng).南京:東南大學(xué)出版社,2003.

      塔里木大學(xué)信息工程學(xué)院課程設(shè)計(jì)

      附錄

      #include #include int jia(int a,int b){int c;c=a+b;printf(“c=%d n”,c);} int jian(int a,int b){int c;c=a-b;printf(“ c=%d n”,c);} int cheng(int a,int b){int c;c=a*b;printf(“ c=%d n”,c);}

      int chu(int a,int b){int c;c=a/b;printf(“ c=%d n”,c);}

      void xian(){ printf(“n”);printf(“n”);printf(“please choose lower level operation sign n”);/*選擇提示*/ printf(“***************************n”);/*分隔號(hào)*/ printf(“0:apply overn”);/*輸入0選項(xiàng)則提示結(jié)束,輸出0*/ printf(“1:apply is additionn”);/*選擇加號(hào)*/ printf(“2:apply is subtractionn”);/*選擇減號(hào)*/ printf(“3: apply is multiplicationn”);/*選擇乘號(hào)*/ printf(“4:apply is divisionn”);/*選擇除號(hào)*/ }

      int main(){

      塔里木大學(xué)信息工程學(xué)院課程設(shè)計(jì)

      int a, b;

      for(;;){ xian();

      switch(getchar())

      {

      case '0':printf(“ tui chu: ”);

      getchar();

      return 0;

      case '1': printf(“ apply is '+': n ”);

      scanf(“%d”,&a);

      getchar();

      scanf(“%d”,&b);

      getchar();

      jia(a,b);

      break;

      case '2':printf(“ apply is '-':n ”);

      scanf(“%d”,&a);

      getchar();

      scanf(“%d”,&b);

      getchar();

      jian(a,b);

      break;

      case '3':printf(“apply is '*':n ”);

      scanf(“%d”,&a);

      getchar();

      scanf(“%d”,&b);

      getchar();

      cheng(a,b);

      break;

      case '4':printf(“ apply is '/':n ”);

      scanf(“%d”,&a);

      getchar();

      scanf(“%d”,&b);

      getchar();

      chu(a,b);

      break;

      塔里木大學(xué)信息工程學(xué)院課程設(shè)計(jì)

      default:printf(“wrong!please push down'enter' go on with ”);/*提示錯(cuò)誤*/

      getchar();

      break;

      }

      }

      return 0;/*一輪運(yùn)算結(jié)束后返回符號(hào)選擇功能選項(xiàng)*/ }

      第五篇:C語言課程設(shè)計(jì)報(bào)告

      C語言課程設(shè)計(jì)報(bào)告

      級(jí):

      10電子本1

      學(xué)

      號(hào):

      10303033122

      名:

      指導(dǎo)老師:

      方文森

      完成日期:

      溫州大學(xué)城市學(xué)院課程設(shè)計(jì)

      目 錄

      1、課程設(shè)計(jì)目的和要求.....................................................................................................2

      2、課程設(shè)計(jì)任務(wù)內(nèi)容.........................................................................................................2

      3、詳細(xì)設(shè)計(jì)說明.................................................................................................................3

      3.1分析.........................................................................................................................3 3.2軟件設(shè)計(jì).................................................................................................................3 3.3軟件調(diào)試(對(duì)編程中的錯(cuò)誤進(jìn)行記錄,并給出你的解決辦法).....................3

      4、軟件使用說明.................................................................................................................4

      5、課程設(shè)計(jì)心得與體會(huì).....................................................................................................4 附錄1:參考文獻(xiàn)................................................................................................................5 附錄2:部分程序清單(帶有較詳細(xì)的注釋)................................................................5

      溫州大學(xué)城市學(xué)院課程設(shè)計(jì)

      C語言課程設(shè)計(jì)報(bào)告

      1、課程設(shè)計(jì)目的和要求

      目的:(1)鞏固和加深學(xué)生對(duì)C語言課程的基本知識(shí)的理解和掌握(2)掌握C語言編程和程序調(diào)試的基本技能(3)利用C語言進(jìn)行基本的軟件設(shè)計(jì)(4)掌握書寫程序設(shè)計(jì)說明文檔的能力(5)提高運(yùn)用C語言解決實(shí)際問題的能力 要求:(1)分析課程設(shè)計(jì)題目的要求(2)寫出詳細(xì)設(shè)計(jì)說明

      (3)編寫程序代碼,調(diào)試程序使其能正確運(yùn)行(4)設(shè)計(jì)完成的軟件要便于操作和使用(5)設(shè)計(jì)完成后提交課程設(shè)計(jì)報(bào)告

      2、課程設(shè)計(jì)任務(wù)內(nèi)容

      1)一個(gè)班級(jí)有4個(gè)學(xué)生,共學(xué)習(xí)5門課程(大學(xué)英語、高等數(shù)學(xué)、C語言程序設(shè)計(jì)、VB程序設(shè)計(jì)、大學(xué)語文)。要求編寫程序完成相應(yīng)功能。2)

      輸入并保存]5門課程名稱;

      3)

      輸入并保存]4個(gè)學(xué)生的學(xué)號(hào)及其[個(gè)人相關(guān)信息]; 4)

      輸入并保存]每個(gè)學(xué)生對(duì)應(yīng)的每門課程成績; 5)求出每門功課的平均分;

      6)找出有兩門以上功課不及格的學(xué)生,輸出他們的學(xué)號(hào)和全部課程成績及該學(xué)生5門課程的平均成績;

      7)找出平均成績?cè)?0分以上或者全部課程成績?cè)?5分以上的學(xué)生,輸出他們的學(xué)號(hào)和全部課程成績及該學(xué)生5門課程的平均成績;

      8)計(jì)算每位學(xué)生的總分,并按總分進(jìn)行排名,按由高到低輸出他們的學(xué)號(hào)及總成績; 9)對(duì)前面問題進(jìn)行優(yōu)化,即在一維數(shù)駔的基礎(chǔ)上,考慮采用二維數(shù)組、函數(shù)及其參數(shù)傳遞的方式來解決相關(guān)問題;

      10)對(duì)前面問題進(jìn)行優(yōu)化,在學(xué)號(hào)的基礎(chǔ)上,增加學(xué)生的其它個(gè)人信息,包括:學(xué)號(hào)、姓名、年齡、性別,并采用結(jié)構(gòu)體形式加以表示; 11)利用文件實(shí)現(xiàn)對(duì)輸入及分析輸出數(shù)據(jù)的存取操作。

      12)參照教材P27頁,3-11題引入選擇功能,輸入功能編號(hào)可以實(shí)現(xiàn)以上功能(考慮清屏函數(shù),自查)。

      溫州大學(xué)城市學(xué)院課程設(shè)計(jì)

      3、詳細(xì)設(shè)計(jì)說明

      3.1分析

      3.2軟件設(shè)計(jì)

      開始菜單(功能選擇)Key=?Key=1Key=2Key=3Key=4Key=5Key=0Key=99Key=6Key=7Key=8Key=9Key=10寫入課程名讀取課程名輸入學(xué)生信息讀取學(xué)生信息建立了學(xué)生信息及課程名稱?退出程序讀取課程、學(xué)生、成績讀取課程成績輸出功課的平均分兩門以上功課不及格的學(xué)生輸出高分的學(xué)生總分由高到低排序No保存保存Yes輸入課程成績(提示)必須輸入課程名稱、學(xué)生信息才能建立成績保存清屏

      3.3軟件調(diào)試(對(duì)編程中的錯(cuò)誤進(jìn)行記錄,并給出你的解決辦法)

      取地址。

      溫州大學(xué)城市學(xué)院課程設(shè)計(jì)

      4、軟件使用說明

      1.2.3.4.5.6.7.8.9.10.11.12.[99]讀取課程、學(xué)生、成績 [1]輸入課程名稱.[2]讀取課程名稱.[3]輸入學(xué)生信息.[4]讀取學(xué)生信息.[5]輸入課程成績.[6]讀取課程成績.[7]功課的平均分.[8]兩門以上功課不及格的學(xué)生 [9]-高分的學(xué)生-.[10]學(xué)生總分排序.[0]退出應(yīng)用程序.5、課程設(shè)計(jì)心得與體會(huì)

      在大家的共同努力下,忙碌了兩個(gè)星期,我們順利完成了對(duì)此程序的編譯及試運(yùn)行。在設(shè)計(jì)程序的過程中,我們了解到要設(shè)計(jì)一個(gè)完整的程序,其中最難的可能就屬設(shè)計(jì)整個(gè)程序的框架,其中可能會(huì)需要經(jīng)過很多次的修改與調(diào)試,所以必須要有耐心,直至最后設(shè)計(jì)出自己想要的程序。

      另外平時(shí)學(xué)習(xí)c語言的基礎(chǔ)也很關(guān)鍵,因?yàn)槿绻綍r(shí)學(xué)得就不怎么樣,那么你面對(duì)這么一個(gè)比較有難度的程序,可能會(huì)望而卻步,看懂他人的程序都是個(gè)難點(diǎn),更別說讓自己去設(shè)計(jì)。為了解決此類問題,最好就是多向同學(xué),老師請(qǐng)教,查找資料。

      設(shè)計(jì)一個(gè)程序的過程就是解決一個(gè)實(shí)際問題的過程,從解決實(shí)際問題的角度,我們可以這樣來看:首先要了解這個(gè)問題的基本要求,即輸入、輸出、完成從輸入到輸出的要求是什么;在次我們必須捋清思路,逐一的解決問題的各個(gè)方面,即從輸入開始入手,著重考慮如何從輸入導(dǎo)出輸出,在這個(gè)過程中,可確定所需的變量、數(shù)組、函數(shù),然后確定處理過程--算法。

      感謝這次的課程設(shè)計(jì),它使我更加深刻地體會(huì)到c語言程序編寫過程的嚴(yán)謹(jǐn)與細(xì)致,還有就是無論做任何事都要有耐心。當(dāng)然團(tuán)隊(duì)合作也是非常重要的一個(gè)環(huán)節(jié),這會(huì)使你在學(xué)習(xí)過程中倍感輕松

      總的來說,這次程序設(shè)計(jì)讓我獲益匪淺,對(duì)C語言也有了進(jìn)一步的認(rèn)識(shí):C語言功能高、表達(dá)能力強(qiáng)、使用靈活方便、目標(biāo)程序效率高等等。C語言是在國內(nèi)外廣泛使用的一種計(jì)算機(jī)語言,相信除了以上優(yōu)點(diǎn),還有許多我們還未發(fā)現(xiàn),希望能在以后的學(xué)習(xí)中有更深入的認(rèn)

      溫州大學(xué)城市學(xué)院課程設(shè)計(jì)

      識(shí)。

      附錄1:參考文獻(xiàn)

      《C語言程序設(shè)計(jì)與實(shí)踐教程》

      附錄2:部分程序清單(帶有較詳細(xì)的注釋)

      #include #include

      #define N 4 #define M 5 #define Debug 1

      typedef struct { char SNo[5];char SName[10];}Student;

      void ScoreRead(float Score[][M],char FileName[],char FileType[]){ int i,j;FILE *fp;fp=fopen(FileName,FileType);if(fp==NULL){ printf(“Errorn”);exit(0);} else { for(i=0;i

      溫州大學(xué)城市學(xué)院課程設(shè)計(jì)

      void ScoreWrite(float Score[][M],char FileName[],char FileType[]){ int i,j;FILE *fp;fp=fopen(FileName,FileType);if(fp==NULL){ printf(“Errorn”);exit(0);} else { for(i=0;i

      void CoureseRead(char Cname[][20],char FileName[],char FileType[]){ FILE *fp;int i,j;char ch;fp=fopen(FileName,FileType);if(fp==NULL){ printf(“Errorn”);exit(0);} i=0;j=0;while(1){ ch = fgetc(fp);if(ch==EOF)break;if(ch=='n'){ Cname[i][j]='