C語(yǔ)言教程全套 第1章_第1頁(yè)
C語(yǔ)言教程全套 第1章_第2頁(yè)
C語(yǔ)言教程全套 第1章_第3頁(yè)
C語(yǔ)言教程全套 第1章_第4頁(yè)
C語(yǔ)言教程全套 第1章_第5頁(yè)
已閱讀5頁(yè),還剩37頁(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)介

2023年2月4日內(nèi)容概述C語(yǔ)言的發(fā)展及特點(diǎn)。C程序的基本結(jié)構(gòu)和書(shū)寫風(fēng)格。簡(jiǎn)單的C程序設(shè)計(jì)。C程序的上機(jī)步驟和VisualC++6.0的基本用法。2023年2月4日1.1C語(yǔ)言的發(fā)展及特點(diǎn)

1.1.1C語(yǔ)言的發(fā)展使用計(jì)算機(jī),必須與計(jì)算機(jī)進(jìn)行溝通、交流。計(jì)算機(jī)語(yǔ)言是人們定的一套與計(jì)算機(jī)溝通的規(guī)則。計(jì)算機(jī)語(yǔ)言分低級(jí)語(yǔ)言和高級(jí)語(yǔ)言機(jī)器語(yǔ)言:由數(shù)字0、1組合而成。匯編語(yǔ)言:用助記符描述的指令系統(tǒng)。高級(jí)語(yǔ)言:面向過(guò)程的語(yǔ)言或稱算法語(yǔ)言。 如:Fortran,Basic,Pascal,C等等。2023年2月4日C語(yǔ)言是在1972年至1973年間由美國(guó)的貝爾實(shí)驗(yàn)室的M.D.Ritchie和K.Thompson以及英國(guó)劍橋大學(xué)的M.Richards等為描述和實(shí)現(xiàn)UNIX操作系統(tǒng)而設(shè)計(jì)的。

經(jīng)進(jìn)一步改進(jìn),至1977年出現(xiàn)了與具體機(jī)器無(wú)關(guān)的C編譯文本,從而使C語(yǔ)言廣泛應(yīng)用,各種機(jī)器皆可使用。3.1983年,美國(guó)標(biāo)準(zhǔn)化協(xié)會(huì)(ANSI)制定了ANSIC。以ANSIC為基礎(chǔ):

不同機(jī)器有不同版本,尤其是函數(shù)均應(yīng)參考相應(yīng)的機(jī)器。

C語(yǔ)言的編譯環(huán)境有多種,如: DOS/Windows平臺(tái):Borland/TurboC,MicrosoftC等Unix/Linux平臺(tái):GNUCC語(yǔ)言的誕生2023年2月4日4.1987年,ANSIC公布了新標(biāo)準(zhǔn)——87ANSIC5.1990年,國(guó)際標(biāo)準(zhǔn)化組織(InternationalStandardizationOrganization,ISO)接受了87ANSIC為ISOC的標(biāo)準(zhǔn)(ISO9899—1990)。6.進(jìn)入二十世紀(jì)八九十年代,計(jì)算機(jī)語(yǔ)言從面向過(guò)程轉(zhuǎn)化為面向?qū)ο蟪绦蛟O(shè)計(jì),可視化多媒體程序設(shè)計(jì)模式的概念得到了推廣、普及。C語(yǔ)言在發(fā)展的同時(shí),也朝著支持面向?qū)ο?、可視化程序設(shè)計(jì)語(yǔ)言方向發(fā)展,如BorlandC++、VisualC++、C++Builder等先后問(wèn)世。C語(yǔ)言已經(jīng)成為編寫系統(tǒng)軟件、應(yīng)用軟件和進(jìn)行程序設(shè)計(jì)、教學(xué)的重要編程語(yǔ)言,甚至許多硬件開(kāi)發(fā)系統(tǒng)也使用C語(yǔ)言。C語(yǔ)言已經(jīng)成為世界上應(yīng)用最廣泛的計(jì)算機(jī)語(yǔ)言之一。

2023年2月4日1.1.2C語(yǔ)言的特點(diǎn)C語(yǔ)言既有高級(jí)語(yǔ)言的優(yōu)點(diǎn),又在很多方面保留了低級(jí)語(yǔ)言的長(zhǎng)處。用C語(yǔ)言編寫的程序非常簡(jiǎn)潔。C語(yǔ)言只有32個(gè)關(guān)鍵字,9種控制語(yǔ)句。autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedstaticsizofstructswitchtypedefunionunsignedvoidvolatilewhile2023年2月4日運(yùn)算符和數(shù)據(jù)結(jié)構(gòu)豐富(共有34種運(yùn)算符)。除了最基本的+、-、×、÷、%等運(yùn)算外,還將括號(hào)、賦值、類型強(qiáng)制轉(zhuǎn)換等均作為運(yùn)算符。除基本的整型、實(shí)型、字符型類型外,還有指針,結(jié)構(gòu)體、共同體等類型。語(yǔ)法靈活,不太嚴(yán)格。如:數(shù)據(jù)類型可相互通用:整型、字符型通用。2023年2月4日允許直接訪問(wèn)物理內(nèi)存,能實(shí)現(xiàn)對(duì)位的操作。

直接訪問(wèn)內(nèi)存地址,具有“高”、“低”級(jí)語(yǔ)言的功能。生成目標(biāo)代碼質(zhì)量高,執(zhí)行效率高。語(yǔ)言簡(jiǎn)潔,可移植性好可移植性優(yōu)于匯編語(yǔ)言。C語(yǔ)言是一種過(guò)程化的語(yǔ)言。C語(yǔ)言有優(yōu)秀的實(shí)現(xiàn)工具。微軟公司的MicrosoftVisualC++6.0(VC6.0)和Borland公司的TurboC等。編程集成開(kāi)發(fā)環(huán)境(IDE)。2023年2月4日1.2C程序的基本結(jié)構(gòu)和書(shū)寫風(fēng)格

1.2.1C程序的基本結(jié)構(gòu)

【例1.1】編寫程序在顯示器輸出一行信息:Hello,World!#include<stdio.h>

/*文件包含*/main(){

printf("Hello,World!\n");

/*顯示文本Hello,World!*/}

程序運(yùn)行結(jié)果如下:HelloWorld!

2023年2月4日1.3簡(jiǎn)單的C程序設(shè)計(jì)

【例1.2】從鍵盤輸入兩個(gè)整數(shù),輸出它們的和。

#include<stdio.h>/*文件包含*/

intsum(inta,intb)/*子函數(shù)及其形式參數(shù)*/

{

intc; /*定義局部變量*/

c=a+b; /*計(jì)算和*/

return(c);/*返回值*/}2023年2月4日main()

/*主函數(shù)名*/{

/*函數(shù)體開(kāi)始*/

inta,b,c;

/*局部變量類型定義*/

printf("輸入兩個(gè)整數(shù):");

/*屏幕提示信息*/

scanf("%d%d",&a,&b);

/*輸入兩個(gè)整數(shù)*/

c=sum(a,b);

/*調(diào)用計(jì)算求和的函數(shù)*/

printf("和=%d\n",c);

/*打印總分值*/}

/*函數(shù)體結(jié)束*/程序運(yùn)行情況為:輸入兩個(gè)整數(shù):7896↙

和=1742023年2月4日通過(guò)實(shí)例,初步看到C的程序結(jié)構(gòu)C程序全部由一個(gè)一個(gè)的函數(shù)構(gòu)成。至少有且僅有一個(gè)主函數(shù)main(),也稱為主程序,其內(nèi)容在其后的一對(duì)花括號(hào){}內(nèi),其它函數(shù)可被主函數(shù)調(diào)用或相互調(diào)用。其它函數(shù)可為C函數(shù)庫(kù)中函數(shù),也可為用戶定義的函數(shù)。2023年2月4日一個(gè)函數(shù)有兩部分組成:

1)函數(shù)的首部,即函數(shù)的第一行。包括函數(shù)名、函數(shù)類型、函數(shù)參數(shù)(形參)名和參數(shù)類型。

例如:intsum(inta,intb)

2)函數(shù)體,即函數(shù)首部下面的大括弧{……}內(nèi)的部分。 函數(shù)體一般包括:聲明部分:在這部分中定義所用到的變量,如果需要,也要對(duì)所調(diào)用的函數(shù)進(jìn)行聲明。執(zhí)行部分:有若干個(gè)語(yǔ)句組成。在某些情況下也可以沒(méi)有聲明部分,甚至可以既無(wú)聲明部分,也無(wú)執(zhí)行部分。如:

dump() {}2023年2月4日一個(gè)C程序總是從main函數(shù)開(kāi)始執(zhí)行的,而不論main函數(shù)在整個(gè)程序中的位置如何(main函數(shù)可以放在程序最前頭,也可以放在程序的最后面,或在一些函數(shù)之前,在另一些函數(shù)之后)。函數(shù)由語(yǔ)句構(gòu)成,語(yǔ)句由基本單詞組成。C程序書(shū)寫格式自由,一行也可以寫幾個(gè)語(yǔ)句,一個(gè)語(yǔ)句可以寫在多行上。但為了程序的閱讀和理解,C程序書(shū)寫需按照某些書(shū)寫規(guī)則,稍后將介紹。2023年2月4日6.

每個(gè)語(yǔ)句和數(shù)據(jù)定義的最后必須有一個(gè)分號(hào)。7.C語(yǔ)言本身沒(méi)有輸入、輸出語(yǔ)句。輸入和輸出的操作是由庫(kù)函數(shù)scanf和printf等函數(shù)來(lái)完成。8.可以用“/*……*/”對(duì)C程序中的任何部分作注釋;也可用“//……

”對(duì)C程序中的一行作注釋。2023年2月4日1.2.2C程序的書(shū)寫風(fēng)格

每一對(duì){}上下對(duì)齊;每一對(duì){}都對(duì)應(yīng)于段首和段尾;每一行只寫一條語(yǔ)句;每一對(duì){}內(nèi)的語(yǔ)句左對(duì)齊;不同的語(yǔ)句段采用縮進(jìn)格式以示區(qū)別;關(guān)鍵語(yǔ)句要有注釋。C程序的書(shū)寫格式完全自由,為便于閱讀,養(yǎng)成良好的程序書(shū)寫風(fēng)格。2023年2月4日1.3簡(jiǎn)單的C程序設(shè)計(jì)

【例1.3】求長(zhǎng)方形的周長(zhǎng)和面積。

分析數(shù)據(jù)輸入數(shù)據(jù):長(zhǎng)、寬輸出數(shù)據(jù):周長(zhǎng)、面積算法周長(zhǎng)=(長(zhǎng)+寬)x2面積=長(zhǎng)x寬2023年2月4日程序中涉及的數(shù)據(jù)有兩類常量:計(jì)算周長(zhǎng)算法中的“2”變量:長(zhǎng)、寬、周長(zhǎng)和面積需要用變量來(lái)存儲(chǔ)。變量需要有名稱變量名由字母、數(shù)字和下劃線構(gòu)成變量名的第一個(gè)字符不能是數(shù)字變量需要有類型整型變量,用int表示2023年2月4日變量定義長(zhǎng)、寬兩個(gè)變量的名稱用a和b inta; 每行定義一個(gè)變量 intb;周長(zhǎng)和面積兩個(gè)變量的名稱用l和s intl,s; 一行定義兩個(gè)變量2023年2月4日算法實(shí)現(xiàn)周長(zhǎng)計(jì)算: l=(a+b)*2面積計(jì)算: s=a*b表達(dá)式由變量、常量、運(yùn)算符和括號(hào)構(gòu)成算術(shù)運(yùn)算符:加+

減–

乘*除/運(yùn)算符的優(yōu)先級(jí):先乘除后加減賦值語(yǔ)句等號(hào)用于賦值,把右邊表達(dá)式的值賦給左邊的變量2023年2月4日intmain() /*定義main函數(shù)*/{ inta; /*定義矩形的長(zhǎng)度變量a*/ intb; /*定義矩形的寬度變量b*/ intl,s; /*定義矩形的周長(zhǎng)、面積變量l和s*/ a=12; /*給長(zhǎng)度賦值12*/ b=8; /*給寬度賦值8*/ l=(a+b)*2; /*計(jì)算矩形周長(zhǎng)*/ s=a*b; /*計(jì)算矩形面積*/ return(0); /*main函數(shù)返回*/}代碼如下:2023年2月4日程序中存在的問(wèn)題程序運(yùn)行后沒(méi)有看到結(jié)果變量l和s中得到了計(jì)算結(jié)果,但是沒(méi)有輸出它們的值解決辦法在程序中增加輸出語(yǔ)句

printf("l=%ds=%d\n",l,s);printf是C語(yǔ)言的庫(kù)函數(shù),它的功能是把程序中變量的值輸出到計(jì)算機(jī)的屏幕上。使用printf前,需要在程序頭部加入下面的語(yǔ)句

#include<stdio.h>2023年2月4日#include<stdio.h>intmain() /*定義main函數(shù)*/{ inta; /*定義矩形的長(zhǎng)度變量a*/ intb; /*定義矩形的寬度變量b*/ intl,s; /*定義矩形的周長(zhǎng)、面積變量l和s*/ a=12; /*給長(zhǎng)度賦值12*/ b=8; /*給寬度賦值8*/ l=(a+b)*2; /*計(jì)算矩形周長(zhǎng)*/ s=a*b; /*計(jì)算矩形面積*/ printf(“l(fā)=%ds=%d\n”,l,s); /*輸出結(jié)果*/ return(0); /*main函數(shù)返回*/}運(yùn)行結(jié)果:l=40s=96代碼如下:2023年2月4日程序中存在的不足矩形長(zhǎng)、寬在程序中通過(guò)賦值的方式給定的,如果它們的值改變了,須重新編譯、連接,才能計(jì)算。解決方法:在程序中增加輸入語(yǔ)句

scanf("%d%d",&a,&b);scanf是C語(yǔ)言的庫(kù)函數(shù),它的功能是從鍵盤輸入數(shù)據(jù),把數(shù)據(jù)賦給程序中變量。使用scanf前,需要在程序頭部加入下面的語(yǔ)句

#include<stdio.h>2023年2月4日#include<stdio.h>intmain() /*定義main函數(shù)*/{ inta; /*定義矩形的長(zhǎng)度變量a*/ intb; /*定義矩形的寬度變量b*/ intl,s; /*定義矩形的周長(zhǎng)、面積變量l和s*/ scanf(“%d%d”,&a,&b); /*從鍵盤輸入長(zhǎng)、寬*/ l=(a+b)*2; /*計(jì)算矩形周長(zhǎng)*/ s=a*b; /*計(jì)算矩形面積*/ printf(“l(fā)=%ds=%d\n”,l,s); /*輸出結(jié)果*/ return(0); /*main函數(shù)返回*/}運(yùn)行結(jié)果:1012l=44s=120代碼如下:2023年2月4日C語(yǔ)言程序?qū)嵗C

ApacheHTTP服務(wù)器源代碼片段#include"apr.h"#include"apr_strings.h"#include"apr_getopt.h"#include"apr_general.h"#include"apr_lib.h"#include"apr_md5.h"#defineAPR_WANT_STDIO#defineAPR_WANT_STRFUNC#include"apr_want.h"

#defineCORE_PRIVATE#include"ap_config.h"#include"httpd.h"#include"http_main.h"#include"http_log.h"#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_common.h"/*WARNING:Win32bindshttp_main.cdynamicallytotheserver.Pleaseplace*externfunctionsandglobaldatainanotherappropriatemodule.**Mostsignificantmain()globaldatacanbefoundinhttp_config.c*/

2023年2月4日staticvoidshow_mpm_settings(void){intmpm_query_info;apr_status_tretval;printf("ServerMPM:%s\n",ap_show_mpm());retval=ap_mpm_query(AP_MPMQ_IS_THREADED,&mpm_query_info);if(retval==APR_SUCCESS){printf("threaded:");if(mpm_query_info==AP_MPMQ_DYNAMIC){printf("yes(variablethreadcount)\n");}elseif(mpm_query_info==AP_MPMQ_STATIC){printf("yes(fixedthreadcount)\n");}else{printf("no\n");}}retval=ap_mpm_query(AP_MPMQ_IS_FORKED,&mpm_query_info);if(retval==APR_SUCCESS){printf("forked:");if(mpm_query_info==AP_MPMQ_DYNAMIC){printf("yes(variableprocesscount)\n");}elseif(mpm_query_info==AP_MPMQ_STATIC){printf("yes(fixedprocesscount)\n");}else{printf("no\n");}}}2023年2月4日intmain(intargc,constchar*constargv[]){charc;intconfigtestonly=0;constchar*confname=SERVER_CONFIG_FILE;constchar*def_server_root=HTTPD_ROOT;constchar*temp_error_log=NULL;constchar*error;process_rec*process;server_rec*server_conf;apr_pool_t*pglobal;apr_pool_t*pconf;apr_pool_t*plog;/*Pooloflogstreams,reset_after_eachreadofconf*/apr_pool_t*ptemp;/*Poolfortemporaryconfigstuff,resetoften*/apr_pool_t*pcommands;/*Poolfor-D,-Cand-cswitches*/apr_getopt_t*opt;apr_status_trv;module**mod;constchar*optarg;APR_OPTIONAL_FN_TYPE(ap_signal_server)*signal_server;AP_MONCONTROL(0);/*turnoffprofilingofstartup*/apr_app_initialize(&argc,&argv,NULL);process=create_process(argc,argv);pglobal=process->pool;pconf=process->pconf;ap_server_argv0=process->short_name;#ifAPR_CHARSET_EBCDICif(ap_init_ebcdic(pglobal)!=APR_SUCCESS){destroy_and_exit_process(process,1);}#endif2023年2月4日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_array_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,APLOG_STARTUP|APLOG_EMERG,0,NULL,"%s:%s",ap_server_argv0,error);destroy_and_exit_process(process,1);}ap_run_rewrite_args(process);

/*MaintainAP_SERVER_BASEARGSlistinhttp_main.htoallowtheMPM*tosafelypassonourargsfromitsrewrite_args()handler.*/apr_getopt_init(&opt,pcommands,process->argc,process->argv);while((rv=apr_getopt(opt,AP_SERVER_BASEARGS,&c,&optarg))==APR_SUCCESS){char**new;switch(c){case'c':new=(char**)apr_array_push(ap_server_post_read_config);*new=apr_pstrdup(pcommands,optarg);break;case'C':new=(char**)apr_array_push(ap_server_pre_read_config);*new=apr_pstrdup(pcommands,optarg);break;2023年2月4日 case'd':def_server_root=optarg;break;case'D':new=(char**)apr_array_push(ap_server_config_defines);*new=apr_pstrdup(pcommands,optarg);

/*Setting-DDUMP_VHOSTSisequivalenttosetting-S*/if(strcmp(optarg,"DUMP_VHOSTS")==0)configtestonly=1;

/*Setting-DDUMP_MODULESisequivalenttosetting-M*/if(strcmp(optarg,"DUMP_MODULES")==0)configtestonly=1;break;}}

/*badcmdlineoption?thenwedie*/if(rv!=APR_EOF||opt->ind<opt->argc){usage(process);}apr_pool_create(&plog,pglobal);apr_pool_tag(plog,"plog");apr_pool_create(&ptemp,pconf);apr_pool_tag(ptemp,"ptemp");

/*Notethatwepreflighttheconfigfileonce*beforereadingit_again_inthemainloop.*Thisallowsthings,logfilesconfiguration*forexample,tosettledown.*/2023年2月4日ap_server_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_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-configurationfailed");destroy_and_exit_process(process,1);}rv=ap_process_config_tree(server_conf,ap_conftree,p

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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)論