c語(yǔ)言程序設(shè)計(jì)基礎(chǔ)篇_第1頁(yè)
已閱讀1頁(yè),還剩43頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、C 語(yǔ)言程序設(shè)計(jì)—基礎(chǔ)篇,第 1 章 C語(yǔ)言概述,2024年3月17日,課程教學(xué)目標(biāo),以C語(yǔ)言為平臺(tái),介紹程序設(shè)計(jì)的思想和方法。通過(guò)學(xué)習(xí),使學(xué)生不但掌握高級(jí)編程語(yǔ)言的知識(shí)、編程技術(shù)和基本算法,更重要的是掌握程序設(shè)計(jì)的思想和方法,具備利用計(jì)算機(jī)求解實(shí)際問題的基本能力,能靈活應(yīng)用高級(jí)語(yǔ)言進(jìn)行程序設(shè)計(jì)。,2024年3月17日,教學(xué)內(nèi)容與教學(xué)環(huán)節(jié),教學(xué)內(nèi)容包括“程序設(shè)計(jì)”和“語(yǔ)言知識(shí)”兩部分,在教學(xué)過(guò)程中被分為若干個(gè)主題,以程序設(shè)計(jì)做

2、為貫穿各主題的主線。對(duì)教學(xué)內(nèi)容的詳細(xì)描述見教學(xué)大綱。課程教學(xué)環(huán)節(jié)包括課堂教學(xué)、課外自學(xué)、上機(jī)實(shí)踐、答疑討論和考核。,2024年3月17日,教學(xué)環(huán)節(jié),(1) 課堂教學(xué):教師通過(guò)案例分析,重點(diǎn)講解程序設(shè)計(jì)的思想和方法,輔以必要的語(yǔ)言知識(shí)介紹。(2) 課外自學(xué):學(xué)生根據(jù)自己的實(shí)際情況,自主學(xué)習(xí)不同層次的學(xué)習(xí)資料。(3) 上機(jī)實(shí)踐:學(xué)生必須完成大量的上機(jī)練習(xí),包括基本訓(xùn)練(自測(cè)作業(yè)和主題作業(yè))和綜合訓(xùn)練大型作業(yè):通過(guò)大型作業(yè),從而達(dá)到在

3、實(shí)踐中掌握知識(shí),培養(yǎng)程序設(shè)計(jì)能力的目的。,2024年3月17日,本課程學(xué)習(xí)分三個(gè)階段,基礎(chǔ)篇(5周)第 1 章 C語(yǔ)言概述第 2 章 C語(yǔ)言簡(jiǎn)單程序設(shè)計(jì)㈠ 順序、選擇控制結(jié)構(gòu)第 3 章 C語(yǔ)言簡(jiǎn)單程序設(shè)計(jì)㈡ 循環(huán)控制結(jié)構(gòu)第 4 章 數(shù)組第 5 章 算法,2024年3月17日,本課程學(xué)習(xí)分三個(gè)階段,基礎(chǔ)篇(5周)進(jìn)階篇(7周)第1章 數(shù)據(jù)類型與輸入輸出(二)第2章 運(yùn)算符和表達(dá)式第3章 函數(shù)(一)第4章 預(yù)編譯與C程序

4、工程文件(期中測(cè)試)第5章 指針(一)第6章 數(shù)組(二),2024年3月17日,本課程學(xué)習(xí)分三個(gè)階段,基礎(chǔ)篇(5周)進(jìn)階篇(7周)提高篇(5周)第1章 指針與函數(shù)(2)第2章 結(jié)構(gòu)體第3章 文件第4章 位運(yùn)算,C 語(yǔ)言程序設(shè)計(jì)—基礎(chǔ)篇,第 1 章 C語(yǔ)言概述,2024年3月17日,1.1 C語(yǔ)言簡(jiǎn)介1.1.1 程序設(shè)計(jì)語(yǔ)言的發(fā)展,第一代:機(jī)器語(yǔ)言是一種CPU機(jī)器語(yǔ)言。由數(shù)字0、1組合而成。優(yōu)點(diǎn):

5、機(jī)器可直接執(zhí)行,速度快。缺點(diǎn):程序長(zhǎng),難記,難理解,不易查錯(cuò)。第二代:匯編語(yǔ)言用助記符描述的指令系統(tǒng)。如:MOV AX, [BP+4]PUSH DL優(yōu)點(diǎn):比機(jī)器語(yǔ)言較易理解,執(zhí)行速度快。缺點(diǎn):難度大,非專業(yè)人士難以掌握。,2024年3月17日,1.1.1 程序設(shè)計(jì)語(yǔ)言的發(fā)展,第三代:面向過(guò)程的高級(jí)語(yǔ)言或稱算法語(yǔ)言。如:Fortran,Basic,Pascal,C 等等。優(yōu)點(diǎn):靈活,易于理解,容易查錯(cuò)

6、。缺點(diǎn):對(duì)大型程序而言維護(hù)性較差,對(duì)“擬定”好的程序難以擴(kuò)充,修改(所謂牽一而動(dòng)百)。第四代:非過(guò)程化的高級(jí)語(yǔ)言是一種面向?qū)ο蟮脑O(shè)計(jì)語(yǔ)言,如:C++,Java 等等。優(yōu)點(diǎn):靈活、易于理解、維護(hù)、修改、擴(kuò)充。缺點(diǎn):掌握難度較大。第五代:可視化多媒體程序設(shè)計(jì)工具。具有面向?qū)ο蟮乃枷耄纾篤isual C++,Visual Basic,Delphe等等。,2024年3月17日,1.1.2 C語(yǔ)言發(fā)展過(guò)程,1960年出現(xiàn)了Algo

7、l60語(yǔ)言。1967年,Matin Richards對(duì)CPL進(jìn)行改進(jìn)、簡(jiǎn)化、推出了BCPL。1970年,美國(guó)貝爾實(shí)驗(yàn)室Ken Thomson 以BCPL為基礎(chǔ),再次簡(jiǎn)化推出了B語(yǔ)言,并寫了第一個(gè)UNIX系統(tǒng)。1972年美國(guó)貝爾實(shí)驗(yàn)室D.M. Ritchie 在B語(yǔ)言基礎(chǔ)上設(shè)計(jì)出了C語(yǔ)言,并用其將UNIX系統(tǒng)全部改寫并實(shí)現(xiàn)。經(jīng)進(jìn)一步改進(jìn),至1977年出現(xiàn)了與具體機(jī)器無(wú)關(guān)的C編譯文本,從而使C語(yǔ)言廣泛應(yīng)用,各種機(jī)器皆可使用。,202

8、4年3月17日,1.1.2 C語(yǔ)言發(fā)展過(guò)程,1978年,美國(guó)Brain W.Kernighan與 Dennis. M. Ritchie 聯(lián)合出版一書《The C Programming Language》成為 ANSI C之基礎(chǔ)。1983年,美國(guó)標(biāo)準(zhǔn)化協(xié)會(huì)(ANSI) 制定了ANSI C。以ANSI C 為基礎(chǔ):不同機(jī)器有不同版本,尤其是函數(shù)均應(yīng)參考相應(yīng)的機(jī)器。 C語(yǔ)言的編譯環(huán)境有多種,如:DOS/Windows平臺(tái):Bor

9、land/Turbo C, Microsoft C 等Unix/Linux平臺(tái):GNU C,2024年3月17日,1.1.2 C語(yǔ)言發(fā)展過(guò)程,在C的基礎(chǔ)上,一九八三年又由貝爾實(shí)驗(yàn)室推出了C++。 C++進(jìn)一步擴(kuò)充和完善了C語(yǔ)言,成為一種面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言。C是C++的基礎(chǔ),C++語(yǔ)言和C語(yǔ)言在很多方面是兼容的。因此,掌握了C語(yǔ)言,再進(jìn)一步學(xué)習(xí)C++就能以一種熟悉的語(yǔ)法來(lái)學(xué)習(xí)面向?qū)ο蟮恼Z(yǔ)言,從而達(dá)到事半功倍的目的。,2024年3月

10、17日,1.2 C語(yǔ)言的特點(diǎn),應(yīng)用面廣C語(yǔ)言是一種過(guò)程化的語(yǔ)言。既可編寫系統(tǒng)軟件(如:DOS、Windows、UNIX);又可編寫應(yīng)用軟件。,2024年3月17日,1.2 C語(yǔ)言的特點(diǎn),簡(jiǎn)潔、緊湊、方便、表達(dá)能力強(qiáng)32個(gè)關(guān)鍵字,9種控制語(yǔ)句,主要用小寫字母。,2024年3月17日,1.2 C語(yǔ)言的特點(diǎn),運(yùn)算符豐富(共有34種運(yùn)算符)。除了最基本的+、-、×、÷、%等運(yùn)算外,還將括號(hào)、賦值、類型強(qiáng)制轉(zhuǎn)換等

11、均作為運(yùn)算符。數(shù)據(jù)類型豐富,結(jié)構(gòu)化程度高除基本類型外, 有指針, 結(jié)構(gòu)體、共同體等類型。語(yǔ)法嚴(yán)格,靈活如:數(shù)據(jù)類型可相互通用:整型、字符型通用。,2024年3月17日,1.2 C語(yǔ)言的特點(diǎn),可與機(jī)器硬件打交道直接訪問內(nèi)存地址,具有“ 高”、“ 低” 級(jí)語(yǔ)言的功能。生成目標(biāo)代碼質(zhì)量高,執(zhí)行效率高。語(yǔ)言簡(jiǎn)潔,可移植性好可移植性優(yōu)于匯編語(yǔ)言。,2024年3月17日,1.3 簡(jiǎn)單的C程序介紹,為了更好、更快地掌握C程序,我們

12、先看幾個(gè)C語(yǔ)言程序:【例1.1】Hello, World!#include int main(){ printf("Hello, world!\n"); return(0);},運(yùn)行結(jié)果:Hello, world!,2024年3月17日,【例1.2】加法,/* Example for add program */#include int main ( ) {int a, b

13、, sum;/*這是定義變量*/a=123; b=456;/*給變量賦值*/sum=a+b; /*求兩個(gè)數(shù)之和*/printf("a+b=%d\n", sum);return(0);},運(yùn)行結(jié)果: a+b=579,2024年3月17日,【例1.3】求兩數(shù)中較大者,/* Example for Function program */#include int max (int x,

14、 int y) /*對(duì)形參x、y作類型定義*/{int z; /*max函用到的變量z,也要加以定義*/z=y; if (x>y) z=x;return (z); /*將z的值返回,通過(guò)max帶回調(diào)用處*/}int main( ) /* 主函數(shù)*/{int a, b, c; /*定義變量*/scanf("%d,

15、 %d", &a, &b); /*輸入變量a和b的值*/c=max(a, b); /*調(diào)用max函數(shù),將得到的值賦給c*/printf("max=%d\n", c); /*輸出c的值*/return(0);},運(yùn)行結(jié)果:12,34max=34,2024年3月17日,通過(guò)實(shí)例,初步看到C的程序結(jié)構(gòu),C程序全部由一個(gè)一個(gè)的函數(shù)構(gòu)成。至少有且僅有一個(gè)主函

16、數(shù)main (),也稱為主程序,其內(nèi)容在其后的一對(duì)花括號(hào){}內(nèi),其它函數(shù)可被主函數(shù)調(diào)用或相互調(diào)用。其它函數(shù)可為C 函數(shù)庫(kù)中函數(shù),也可為用戶定義的函數(shù)。,2024年3月17日,一個(gè)函數(shù)有兩部分組成:函數(shù)的首部,即函數(shù)的第一行。包括函數(shù)名、函數(shù)類型、函數(shù)參數(shù)(形參)名和參數(shù)類型。int max (intx, int y) ↓ ↓ ↓ ↓ ↓

17、 ↓函數(shù)類型函數(shù)名 參數(shù)類型 參數(shù)名參數(shù)類型 參數(shù)名一個(gè)函數(shù)名后面必須跟一對(duì)圓括弧,函數(shù)參數(shù)可以沒有,如main()。,2024年3月17日,一個(gè)函數(shù)有兩部分組成:函數(shù)體,即函數(shù)首部下面的大括弧{……}內(nèi)的部分。如果一個(gè)函數(shù)內(nèi)有多個(gè)大括弧,則最外層的一對(duì){}為函數(shù)體的范圍。函數(shù)體一般包括:聲明部分:在這部分中定義所用到的變量,如果需要,也要對(duì)所調(diào)用的函數(shù)進(jìn)行聲明。執(zhí)行部分:有若干個(gè)語(yǔ)句組成。在某些情況下也可以

18、沒有聲明部分,甚至可以既無(wú)聲明部分,也無(wú)執(zhí)行部分。如:dump(){ },2024年3月17日,一個(gè)C程序總是從main函數(shù)開始執(zhí)行的,而不論main函數(shù)在整個(gè)程序中的位置如何(main函數(shù)可以放在程序最前頭,也可以放在程序的最后面,或在一些函數(shù)之前,在另一些函數(shù)之后)。C程序書寫格式自由,一行也可以寫幾個(gè)語(yǔ)句,一個(gè)語(yǔ)句可以寫在多行上。但為了程序的閱讀和理解,C程序書寫需按照某些書寫規(guī)則,稍后將介紹。,2024年3月1

19、7日,每個(gè)語(yǔ)句和數(shù)據(jù)定義的最后必須有一個(gè)分號(hào)。C語(yǔ)言本身沒有輸入、輸出語(yǔ)句。輸入和輸出的操作是由庫(kù)函數(shù)scanf和printf等函數(shù)來(lái)完成。 可以用/* …… */對(duì)C程序中的任何部分作注釋。,2024年3月17日,為便于閱讀,養(yǎng)成良好的程序書寫風(fēng)格,每一對(duì){ }上下對(duì)齊;每一對(duì){ }都對(duì)應(yīng)于段首和段尾;每一行只寫一條語(yǔ)句;每一對(duì){}內(nèi)的語(yǔ)句左對(duì)齊;不同的語(yǔ)句段采用縮進(jìn)格式以示區(qū)別;關(guān)鍵語(yǔ)句要有注釋。,C語(yǔ)言程序?qū)嵗?–

20、Apache HTTP服務(wù)器源代碼片段,#include "apr.h"#include "apr_strings.h"#include "apr_getopt.h"#include "apr_general.h"#include "apr_lib.h"#include "apr_md5.h"#defin

21、e APR_WANT_STDIO#define APR_WANT_STRFUNC#include "apr_want.h" #define CORE_PRIVATE#include "ap_config.h"#include "httpd.h"#include "http_main.h"#include "http_log.h&qu

22、ot;#include "http_config.h"#include "http_core.h"#include "http_vhost.h"#include "apr_uri.h"#include "util_ebcdic.h"#include "ap_mpm.h"#include "mpm

23、_common.h"/* WARNING: Win32 binds http_main.c dynamically to the server. Please place * extern functions and global data in another appropriate module. * * Most significant main() global data can be fo

24、und in http_config.c */,static void show_mpm_settings(void){ int mpm_query_info; apr_status_t retval; printf("Server MPM: %s\n", ap_show_mpm()); retval = ap_mpm_query(AP_MPMQ_IS_THREADED,

25、 &mpm_query_info); if (retval == APR_SUCCESS) { printf(" threaded: "); if (mpm_query_info == AP_MPMQ_DYNAMIC) { printf("yes (variable thread count)\n");

26、 } else if (mpm_query_info == AP_MPMQ_STATIC) { printf("yes (fixed thread count)\n"); } else { printf("no\n"); } } retval = ap_mpm_que

27、ry(AP_MPMQ_IS_FORKED, &mpm_query_info); if (retval == APR_SUCCESS) { printf(" forked: "); if (mpm_query_info == AP_MPMQ_DYNAMIC) { printf("yes (variable process

28、count)\n"); } else if (mpm_query_info == AP_MPMQ_STATIC) { printf("yes (fixed process count)\n"); } else { printf("no\n"); } }

29、},int main(int argc, const char * const argv[]){ char c; int configtestonly = 0; const char *confname = SERVER_CONFIG_FILE; const char *def_server_root = HTTPD_ROOT; const char *temp_error_log = NULL

30、; const char *error; process_rec *process; server_rec *server_conf; apr_pool_t *pglobal; apr_pool_t *pconf; apr_pool_t *plog; /* Pool of log streams, reset _after_ each read of conf */ apr_poo

31、l_t *ptemp; /* Pool for temporary config stuff, reset often */ apr_pool_t *pcommands; /* Pool for -D, -C and -c switches */ apr_getopt_t *opt; apr_status_t rv; module **mod; const char *optarg; AP

32、R_OPTIONAL_FN_TYPE(ap_signal_server) *signal_server; AP_MONCONTROL(0); /* turn off profiling of startup */ apr_app_initialize(&argc, &argv, NULL); process = create_process(argc, argv); pglobal =

33、process->pool; pconf = process->pconf; ap_server_argv0 = process->short_name;#if APR_CHARSET_EBCDIC if (ap_init_ebcdic(pglobal) != APR_SUCCESS) { destroy_and_exit_process(process, 1); }

34、#endif,apr_pool_create(&pcommands, pglobal); apr_pool_tag(pcommands, "pcommands"); ap_server_pre_read_config = apr_array_make(pcommands, 1, sizeof(char *)); ap_server_post_read_config = apr_ar

35、ray_make(pcommands, 1, sizeof(char *)); ap_server_config_defines = apr_array_make(pcommands, 1, sizeof(char *)); error = ap_setup_prelinked_modules(process); if (error) { ap_log_error(APLOG_MARK, A

36、PLOG_STARTUP|APLOG_EMERG, 0, NULL, "%s: %s", ap_server_argv0, error); destroy_and_exit_process(process, 1); } ap_run_rewrite_args(process); /* Maintain AP_SERVER_BASEA

37、RGS list in http_main.h to allow the MPM * to safely pass on our args from its rewrite_args() handler. */ apr_getopt_init(&opt, pcommands, process->argc, process->argv); while ((rv = apr_getop

38、t(opt, AP_SERVER_BASEARGS, &c, &optarg)) == APR_SUCCESS) { char **new; switch (c) { case 'c': new = (char **)apr_array_push(ap_server_post_read_config);

39、 *new = apr_pstrdup(pcommands, optarg); break; case 'C': new = (char **)apr_array_push(ap_server_pre_read_config); *new = apr_pstrdup(pcommands, optarg);

40、 break;,case 'd': def_server_root = optarg; break; case 'D': new = (char **)apr_array_push(ap_server_config_defines); *new = apr_pstrdup(pco

41、mmands, optarg); /* Setting -D DUMP_VHOSTS is equivalent to setting -S */ if (strcmp(optarg, "DUMP_VHOSTS") == 0) configtestonly = 1; /* Setting -D DUMP_MODUL

42、ES is equivalent to setting -M */ if (strcmp(optarg, "DUMP_MODULES") == 0) configtestonly = 1; break; } } /* bad cmdline option? then we die */ if

43、(rv != APR_EOF || opt->ind argc) { usage(process); } apr_pool_create(&plog, pglobal); apr_pool_tag(plog, "plog"); apr_pool_create(&ptemp, pconf); apr_pool_tag(ptemp, &quo

44、t;ptemp"); /* Note that we preflight the config file once * before reading it _again_ in the main loop. * This allows things, log files configuration * for example, to settle down. */,ap_se

45、rver_root = def_server_root; if (temp_error_log) { ap_replace_stderr_log(process->pool, temp_error_log); } server_conf = ap_read_config(process, ptemp, confname, &ap_conftree); if (!server_

46、conf) { destroy_and_exit_process(process, 1); } if (ap_run_pre_config(pconf, plog, ptemp) != OK) { ap_log_error(APLOG_MARK, APLOG_STARTUP |APLOG_ERR, 0, NULL, "Pre-conf

47、iguration failed"); destroy_and_exit_process(process, 1); } rv = ap_process_config_tree(server_conf, ap_conftree, process->pconf, ptemp); if (rv == OK) {

48、 ap_fixup_virtual_hosts(pconf, server_conf); ap_fini_vhost_config(pconf, server_conf); apr_hook_sort_all(); if (configtestonly) { ap_run_test_config(pconf, server_conf);

49、 ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, "Syntax OK"); destroy_and_exit_process(process, 0); } } apr_pool_lock(pconf, 0); destroy_and_exit_process(process, 0); ret

50、urn 0; /* Termination 'ok' */},2024年3月17日,1.4 C程序的上機(jī)步驟,目前流行的C語(yǔ)言有以下幾種:Microsoft CBorland CGnu C這些C語(yǔ)言版本不僅實(shí)現(xiàn)了ANSI C標(biāo)準(zhǔn),而且在此基礎(chǔ)上各自作了一些擴(kuò)充,使之更加方便、完美。,2024年3月17日,Microsoft Visual C++ 6.0 使用簡(jiǎn)介,新建項(xiàng)目(Project)新建文件(C語(yǔ)言程序

51、)編輯文件編譯連接運(yùn)行調(diào)試,2024年3月17日,Microsoft Visual C++ 6.0 使用簡(jiǎn)介,桌面快捷方式,新建項(xiàng)目打開File菜單,點(diǎn)擊New菜單項(xiàng)。,,新建項(xiàng)目選擇Projects為Win32 Console Application,輸入項(xiàng)目名稱,及選擇項(xiàng)目文件存放的目錄,然后點(diǎn)OK按鈕,,,,新建項(xiàng)目選擇Console Application的類型為An Empty project,然后點(diǎn)Fin

52、ish按鈕。,,新建項(xiàng)目點(diǎn)OK按鈕,系統(tǒng)將按照前面選擇的類型創(chuàng)建一個(gè)新的項(xiàng)目。,新建C源程序打開File菜單,點(diǎn)擊New菜單項(xiàng),彈出New對(duì)話框。選擇Files類型為C++ Source File,文件名File的擴(kuò)展名為.c,如下圖中為: Sample.c,其他項(xiàng)目不要改變。,,,輸入C源程序在下圖中的文件編輯窗口中輸入C語(yǔ)言源程序。,,編譯、連接和運(yùn)行C程序點(diǎn)工具條上的 按鈕,系統(tǒng)提示是否build,點(diǎn) 是(Y)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論