版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、C 語言程序設(shè)計—基礎(chǔ)篇,第 1 章 C語言概述,2024年3月17日,課程教學(xué)目標(biāo),以C語言為平臺,介紹程序設(shè)計的思想和方法。通過學(xué)習(xí),使學(xué)生不但掌握高級編程語言的知識、編程技術(shù)和基本算法,更重要的是掌握程序設(shè)計的思想和方法,具備利用計算機求解實際問題的基本能力,能靈活應(yīng)用高級語言進行程序設(shè)計。,2024年3月17日,教學(xué)內(nèi)容與教學(xué)環(huán)節(jié),教學(xué)內(nèi)容包括“程序設(shè)計”和“語言知識”兩部分,在教學(xué)過程中被分為若干個主題,以程序設(shè)計做
2、為貫穿各主題的主線。對教學(xué)內(nèi)容的詳細(xì)描述見教學(xué)大綱。課程教學(xué)環(huán)節(jié)包括課堂教學(xué)、課外自學(xué)、上機實踐、答疑討論和考核。,2024年3月17日,教學(xué)環(huán)節(jié),(1) 課堂教學(xué):教師通過案例分析,重點講解程序設(shè)計的思想和方法,輔以必要的語言知識介紹。(2) 課外自學(xué):學(xué)生根據(jù)自己的實際情況,自主學(xué)習(xí)不同層次的學(xué)習(xí)資料。(3) 上機實踐:學(xué)生必須完成大量的上機練習(xí),包括基本訓(xùn)練(自測作業(yè)和主題作業(yè))和綜合訓(xùn)練大型作業(yè):通過大型作業(yè),從而達(dá)到在
3、實踐中掌握知識,培養(yǎng)程序設(shè)計能力的目的。,2024年3月17日,本課程學(xué)習(xí)分三個階段,基礎(chǔ)篇(5周)第 1 章 C語言概述第 2 章 C語言簡單程序設(shè)計㈠ 順序、選擇控制結(jié)構(gòu)第 3 章 C語言簡單程序設(shè)計㈡ 循環(huán)控制結(jié)構(gòu)第 4 章 數(shù)組第 5 章 算法,2024年3月17日,本課程學(xué)習(xí)分三個階段,基礎(chǔ)篇(5周)進階篇(7周)第1章 數(shù)據(jù)類型與輸入輸出(二)第2章 運算符和表達(dá)式第3章 函數(shù)(一)第4章 預(yù)編譯與C程序
4、工程文件(期中測試)第5章 指針(一)第6章 數(shù)組(二),2024年3月17日,本課程學(xué)習(xí)分三個階段,基礎(chǔ)篇(5周)進階篇(7周)提高篇(5周)第1章 指針與函數(shù)(2)第2章 結(jié)構(gòu)體第3章 文件第4章 位運算,C 語言程序設(shè)計—基礎(chǔ)篇,第 1 章 C語言概述,2024年3月17日,1.1 C語言簡介1.1.1 程序設(shè)計語言的發(fā)展,第一代:機器語言是一種CPU機器語言。由數(shù)字0、1組合而成。優(yōu)點:
5、機器可直接執(zhí)行,速度快。缺點:程序長,難記,難理解,不易查錯。第二代:匯編語言用助記符描述的指令系統(tǒng)。如:MOV AX, [BP+4]PUSH DL優(yōu)點:比機器語言較易理解,執(zhí)行速度快。缺點:難度大,非專業(yè)人士難以掌握。,2024年3月17日,1.1.1 程序設(shè)計語言的發(fā)展,第三代:面向過程的高級語言或稱算法語言。如:Fortran,Basic,Pascal,C 等等。優(yōu)點:靈活,易于理解,容易查錯
6、。缺點:對大型程序而言維護性較差,對“擬定”好的程序難以擴充,修改(所謂牽一而動百)。第四代:非過程化的高級語言是一種面向?qū)ο蟮脑O(shè)計語言,如:C++,Java 等等。優(yōu)點:靈活、易于理解、維護、修改、擴充。缺點:掌握難度較大。第五代:可視化多媒體程序設(shè)計工具。具有面向?qū)ο蟮乃枷?,如:Visual C++,Visual Basic,Delphe等等。,2024年3月17日,1.1.2 C語言發(fā)展過程,1960年出現(xiàn)了Algo
7、l60語言。1967年,Matin Richards對CPL進行改進、簡化、推出了BCPL。1970年,美國貝爾實驗室Ken Thomson 以BCPL為基礎(chǔ),再次簡化推出了B語言,并寫了第一個UNIX系統(tǒng)。1972年美國貝爾實驗室D.M. Ritchie 在B語言基礎(chǔ)上設(shè)計出了C語言,并用其將UNIX系統(tǒng)全部改寫并實現(xiàn)。經(jīng)進一步改進,至1977年出現(xiàn)了與具體機器無關(guān)的C編譯文本,從而使C語言廣泛應(yīng)用,各種機器皆可使用。,202
8、4年3月17日,1.1.2 C語言發(fā)展過程,1978年,美國Brain W.Kernighan與 Dennis. M. Ritchie 聯(lián)合出版一書《The C Programming Language》成為 ANSI C之基礎(chǔ)。1983年,美國標(biāo)準(zhǔn)化協(xié)會(ANSI) 制定了ANSI C。以ANSI C 為基礎(chǔ):不同機器有不同版本,尤其是函數(shù)均應(yīng)參考相應(yīng)的機器。 C語言的編譯環(huán)境有多種,如:DOS/Windows平臺:Bor
9、land/Turbo C, Microsoft C 等Unix/Linux平臺:GNU C,2024年3月17日,1.1.2 C語言發(fā)展過程,在C的基礎(chǔ)上,一九八三年又由貝爾實驗室推出了C++。 C++進一步擴充和完善了C語言,成為一種面向?qū)ο蟮某绦蛟O(shè)計語言。C是C++的基礎(chǔ),C++語言和C語言在很多方面是兼容的。因此,掌握了C語言,再進一步學(xué)習(xí)C++就能以一種熟悉的語法來學(xué)習(xí)面向?qū)ο蟮恼Z言,從而達(dá)到事半功倍的目的。,2024年3月
10、17日,1.2 C語言的特點,應(yīng)用面廣C語言是一種過程化的語言。既可編寫系統(tǒng)軟件(如:DOS、Windows、UNIX);又可編寫應(yīng)用軟件。,2024年3月17日,1.2 C語言的特點,簡潔、緊湊、方便、表達(dá)能力強32個關(guān)鍵字,9種控制語句,主要用小寫字母。,2024年3月17日,1.2 C語言的特點,運算符豐富(共有34種運算符)。除了最基本的+、-、×、÷、%等運算外,還將括號、賦值、類型強制轉(zhuǎn)換等
11、均作為運算符。數(shù)據(jù)類型豐富,結(jié)構(gòu)化程度高除基本類型外, 有指針, 結(jié)構(gòu)體、共同體等類型。語法嚴(yán)格,靈活如:數(shù)據(jù)類型可相互通用:整型、字符型通用。,2024年3月17日,1.2 C語言的特點,可與機器硬件打交道直接訪問內(nèi)存地址,具有“ 高”、“ 低” 級語言的功能。生成目標(biāo)代碼質(zhì)量高,執(zhí)行效率高。語言簡潔,可移植性好可移植性優(yōu)于匯編語言。,2024年3月17日,1.3 簡單的C程序介紹,為了更好、更快地掌握C程序,我們
12、先看幾個C語言程序:【例1.1】Hello, World!#include int main(){ printf("Hello, world!\n"); return(0);},運行結(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; /*求兩個數(shù)之和*/printf("a+b=%d\n", sum);return(0);},運行結(jié)果: a+b=579,2024年3月17日,【例1.3】求兩數(shù)中較大者,/* Example for Function program */#include int max (int x,
14、 int y) /*對形參x、y作類型定義*/{int z; /*max函用到的變量z,也要加以定義*/z=y; if (x>y) z=x;return (z); /*將z的值返回,通過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);},運行結(jié)果:12,34max=34,2024年3月17日,通過實例,初步看到C的程序結(jié)構(gòu),C程序全部由一個一個的函數(shù)構(gòu)成。至少有且僅有一個主函
16、數(shù)main (),也稱為主程序,其內(nèi)容在其后的一對花括號{}內(nèi),其它函數(shù)可被主函數(shù)調(diào)用或相互調(diào)用。其它函數(shù)可為C 函數(shù)庫中函數(shù),也可為用戶定義的函數(shù)。,2024年3月17日,一個函數(shù)有兩部分組成:函數(shù)的首部,即函數(shù)的第一行。包括函數(shù)名、函數(shù)類型、函數(shù)參數(shù)(形參)名和參數(shù)類型。int max (intx, int y) ↓ ↓ ↓ ↓ ↓
17、 ↓函數(shù)類型函數(shù)名 參數(shù)類型 參數(shù)名參數(shù)類型 參數(shù)名一個函數(shù)名后面必須跟一對圓括弧,函數(shù)參數(shù)可以沒有,如main()。,2024年3月17日,一個函數(shù)有兩部分組成:函數(shù)體,即函數(shù)首部下面的大括弧{……}內(nèi)的部分。如果一個函數(shù)內(nèi)有多個大括弧,則最外層的一對{}為函數(shù)體的范圍。函數(shù)體一般包括:聲明部分:在這部分中定義所用到的變量,如果需要,也要對所調(diào)用的函數(shù)進行聲明。執(zhí)行部分:有若干個語句組成。在某些情況下也可以
18、沒有聲明部分,甚至可以既無聲明部分,也無執(zhí)行部分。如:dump(){ },2024年3月17日,一個C程序總是從main函數(shù)開始執(zhí)行的,而不論main函數(shù)在整個程序中的位置如何(main函數(shù)可以放在程序最前頭,也可以放在程序的最后面,或在一些函數(shù)之前,在另一些函數(shù)之后)。C程序書寫格式自由,一行也可以寫幾個語句,一個語句可以寫在多行上。但為了程序的閱讀和理解,C程序書寫需按照某些書寫規(guī)則,稍后將介紹。,2024年3月1
19、7日,每個語句和數(shù)據(jù)定義的最后必須有一個分號。C語言本身沒有輸入、輸出語句。輸入和輸出的操作是由庫函數(shù)scanf和printf等函數(shù)來完成。 可以用/* …… */對C程序中的任何部分作注釋。,2024年3月17日,為便于閱讀,養(yǎng)成良好的程序書寫風(fēng)格,每一對{ }上下對齊;每一對{ }都對應(yīng)于段首和段尾;每一行只寫一條語句;每一對{}內(nèi)的語句左對齊;不同的語句段采用縮進格式以示區(qū)別;關(guān)鍵語句要有注釋。,C語言程序?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程序的上機步驟,目前流行的C語言有以下幾種:Microsoft CBorland CGnu C這些C語言版本不僅實現(xiàn)了ANSI C標(biāo)準(zhǔn),而且在此基礎(chǔ)上各自作了一些擴充,使之更加方便、完美。,2024年3月17日,Microsoft Visual C++ 6.0 使用簡介,新建項目(Project)新建文件(C語言程序
51、)編輯文件編譯連接運行調(diào)試,2024年3月17日,Microsoft Visual C++ 6.0 使用簡介,桌面快捷方式,新建項目打開File菜單,點擊New菜單項。,,新建項目選擇Projects為Win32 Console Application,輸入項目名稱,及選擇項目文件存放的目錄,然后點OK按鈕,,,,新建項目選擇Console Application的類型為An Empty project,然后點Fin
52、ish按鈕。,,新建項目點OK按鈕,系統(tǒng)將按照前面選擇的類型創(chuàng)建一個新的項目。,新建C源程序打開File菜單,點擊New菜單項,彈出New對話框。選擇Files類型為C++ Source File,文件名File的擴展名為.c,如下圖中為: Sample.c,其他項目不要改變。,,,輸入C源程序在下圖中的文件編輯窗口中輸入C語言源程序。,,編譯、連接和運行C程序點工具條上的 按鈕,系統(tǒng)提示是否build,點 是(Y)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- c語言-程序設(shè)計基礎(chǔ)
- c語言程序設(shè)計心得3篇
- c語言程序設(shè)計提高篇
- c語言程序設(shè)計進階篇
- 《c語言程序設(shè)計》
- c語言程序設(shè)計
- c語言程序設(shè)計
- c語言程序設(shè)計
- c語言程序設(shè)計
- c語言程序設(shè)計基礎(chǔ)教學(xué)大綱
- 程序設(shè)計基礎(chǔ):c語言7ppt
- 第02章c語言程序設(shè)計基礎(chǔ)
- c語言程序設(shè)計基礎(chǔ)知識要點
- 第二章、c語言程序設(shè)計基礎(chǔ)
- c語言程序設(shè)計(譚浩強)
- c語言程序設(shè)計教程
- c語言程序設(shè)計3
- c語言程序設(shè)計論文
- c語言程序設(shè)計論文
- c語言程序設(shè)計49295
評論
0/150
提交評論