C語言程序設計-基礎篇:第1章 C語言概述_第1頁
C語言程序設計-基礎篇:第1章 C語言概述_第2頁
C語言程序設計-基礎篇:第1章 C語言概述_第3頁
C語言程序設計-基礎篇:第1章 C語言概述_第4頁
C語言程序設計-基礎篇:第1章 C語言概述_第5頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

C語言程序設計

—基礎篇第1章C語言概述2022/11/2內容概述C語言的發(fā)展及特點。C程序的基本結構和書寫風格。簡單的C程序設計。C程序的上機步驟和VisualC++6.0的基本用法。常量和變量的概念基本輸入輸出函數的初步使用2022/11/2通過本章的學習,讀者對C程序設計要有一個初步的認識,了解C語言的發(fā)展及特點和基本結構及書寫風格;熟悉C程序的開發(fā)環(huán)境,掌握VisualC++6.0的基本用法及上機步驟,初步了解常量和變量的概念,為學習程序設計技能奠定良好的基礎。

教學目標2022/11/21.1C語言的發(fā)展及特點

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

經進一步改進,至1977年出現了與具體機器無關的C編譯文本,從而使C語言廣泛應用,各種機器皆可使用。3.1983年,美國標準化協會(ANSI)制定了ANSIC。以ANSIC為基礎:

不同機器有不同版本,尤其是函數均應參考相應的機器。

C語言的編譯環(huán)境有多種,如: DOS/Windows平臺:Borland/TurboC,MicrosoftC等Unix/Linux平臺:GNUCC語言的誕生2022/11/24.1987年,ANSIC公布了新標準——87ANSIC5.1990年,國際標準化組織(InternationalStandardizationOrganization,ISO)接受了87ANSIC為ISOC的標準(ISO9899—1990)。6.進入二十世紀八九十年代,計算機語言從面向過程轉化為面向對象程序設計,可視化多媒體程序設計模式的概念得到了推廣、普及。C語言在發(fā)展的同時,也朝著支持面向對象、可視化程序設計語言方向發(fā)展,如BorlandC++、VisualC++、C++Builder等先后問世。C語言已經成為編寫系統軟件、應用軟件和進行程序設計、教學的重要編程語言,甚至許多硬件開發(fā)系統也使用C語言。C語言已經成為世界上應用最廣泛的計算機語言之一。

2022/11/21.1.2C語言的特點C語言既有高級語言的優(yōu)點,又在很多方面保留了低級語言的長處。用C語言編寫的程序非常簡潔。C語言只有32個關鍵字,9種控制語句。autobreakcasecharconstcontinuedefaultdodoubleelseenum

externfloatforgoto

ifint

longregisterreturnshortsignedstaticsizof

struct

switchtypedef

unionunsignedvoidvolatilewhile2022/11/2運算符和數據結構豐富(共有34種運算符)。除了最基本的+、-、×、÷、%等運算外,還將括號、賦值、類型強制轉換等均作為運算符。除基本的整型、實型、字符型類型外,還有指針,結構體、共同體等類型。語法靈活,不太嚴格。如:數據類型可相互通用:整型、字符型通用。2022/11/2允許直接訪問物理內存,能實現對位的操作。

直接訪問內存地址,具有“高”、“低”級語言的功能。生成目標代碼質量高,執(zhí)行效率高。語言簡潔,可移植性好可移植性優(yōu)于匯編語言。C語言是一種過程化的語言。C語言有優(yōu)秀的實現工具。微軟公司的MicrosoftVisualC++6.0(VC6.0)和Borland公司的TurboC等。編程集成開發(fā)環(huán)境(IDE)。2022/11/21.2簡單的C程序設計

1.2.1認識C語言程序

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

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

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

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

2022/11/2【例1.2】求長方形的周長和面積。

分析數據輸入數據:長、寬輸出數據:周長、面積算法周長=(長+寬)x2面積=長x寬2022/11/2程序中涉及的數據有兩類常量:計算周長算法中的“2”變量:長、寬、周長和面積需要用變量來存儲。變量需要有名稱變量名由字母、數字和下劃線構成變量名的第一個字符不能是數字變量需要有類型整型變量,用int

表示2022/11/2變量定義長、寬兩個變量的名稱用a和b

inta; 每行定義一個變量

intb;周長和面積兩個變量的名稱用l和s

intl,s; 一行定義兩個變量2022/11/2算法實現周長計算: l=(a+b)*2面積計算: s=a*b表達式由變量、常量、運算符和括號構成算術運算符:加+

減–

乘*除/運算符的優(yōu)先級:先乘除后加減賦值語句等號用于賦值,把右邊表達式的值賦給左邊的變量2022/11/2intmain() /*定義main函數*/{

inta; /*定義矩形的長度變量a*/

intb; /*定義矩形的寬度變量b*/

intl,s; /*定義矩形的周長、面積變量l和s*/ a=12; /*給長度賦值12*/ b=8; /*給寬度賦值8*/ l=(a+b)*2; /*計算矩形周長*/ s=a*b; /*計算矩形面積*/ return(0); /*main函數返回*/}代碼如下:2022/11/2程序中存在的問題程序運行后沒有看到結果變量l和s中得到了計算結果,但是沒有輸出它們的值解決辦法在程序中增加輸出語句

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

#include<stdio.h>2022/11/2#include<stdio.h>intmain() /*定義main函數*/{

inta; /*定義矩形的長度變量a*/

intb; /*定義矩形的寬度變量b*/

intl,s; /*定義矩形的周長、面積變量l和s*/ a=12; /*給長度賦值12*/ b=8; /*給寬度賦值8*/ l=(a+b)*2; /*計算矩形周長*/ s=a*b; /*計算矩形面積*/

printf(“l(fā)=%ds=%d\n”,l,s); /*輸出結果*/ return(0); /*main函數返回*/}運行結果:l=40s=96代碼如下:2022/11/2程序中存在的不足矩形長、寬在程序中通過賦值的方式給定的,如果它們的值改變了,須重新編譯、連接,才能計算。解決方法:在程序中增加輸入語句

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

#include<stdio.h>2022/11/2#include<stdio.h>intmain() /*定義main函數*/{

inta; /*定義矩形的長度變量a*/

intb; /*定義矩形的寬度變量b*/

intl,s; /*定義矩形的周長、面積變量l和s*/

scanf(“%d%d”,&a,&b); /*從鍵盤輸入長、寬*/ l=(a+b)*2; /*計算矩形周長*/ s=a*b; /*計算矩形面積*/

printf(“l(fā)=%ds=%d\n”,l,s); /*輸出結果*/ return(0); /*main函數返回*/}運行結果:1012l=44s=120代碼如下:2022/11/21.數據類型為了使程序設計語言能充分有效地表達各種數據,一般將數據分為若干類型。C語言中最常用的基本數據類型整型(int)實型(float、double)字符型(char)1.2.2數據類型、常量與變量2022/11/2常量:程序運行過程中不能被改變的量。在程序中,數據顯式寫法均表示常量

如s=2*3.14*r中的2和3.14都是常量;符號常量:

#definePRICE586;2.常量2022/11/23.變量變量:程序執(zhí)行過程中可以改變它的值。變量包括變量名和變量值。變量名:用標識符命名,對應一定數量的內存存貯單元,其單元數視變量類型而定。在【例1.1】中:

c=a+b; /*計算和*/

a、b、c是三個變量,而且是整型變量。2022/11/2在C語言中,變量須先定義,后使用。如:

inttotal;

/*變量定義*/

total=30;

是合法的。若沒有定義變量直接寫成:

total=30;

則編譯時會指出未定義錯誤。變量一旦被定義,其類型便確定即可在編譯時為其分配相應數量的單元。

2022/11/24標識符標識符:由字母、數字、下劃線組成且由字母或下劃線開頭的字符串。

如:_sum,sum,stu_name,price等為合法的標識符。7ax,x&y,printf,va?r等為非法的標識符。標識符的作用:可用來作為變量名、常量名、函數名、類型名、文件名等。2022/11/2建議:采用具有一定意義的英文單詞、拼音字母的縮寫作為標識符注意:C語言區(qū)分大小寫如:Price和price,系統會認為是兩個不同的標識符。標識符的長度一般不超過31個字符具體情況視不同系統而定。2022/11/25變量賦值

變量的賦值有三種方法:在定義變量的同時為變量賦初值,格式為:<數據類型><變量名>=<常量表達式>;

例如,inta=10;

利用賦值語句為變量賦初值,格式為:<變量名>=<表達式>;

例如,a=10+3;利用格式化輸入函數為變量賦初值,格式為:

scanf(“格式控制字符串”,變量地址表列);

例如,

scanf("%d",&a);定義后的變量其值是隨機的、不確定的,只有通過賦值操作,其值才是確定的,才能被使用。2022/11/21.2.3數據輸入輸出的概念及在C語言中的實現

所謂輸入輸出是以計算機為主體而言的。數據輸入是從標準輸入設備輸入,也就是鍵盤。數據輸出到標準輸出設備,也就是顯示器。DOS下整個屏幕是標準輸出設備,Windows下當前窗口是標準輸出設備。在C語言中,所有的數據輸入/輸出都是由庫函數完成的,因此都是函數語句。在使用C語言庫函數時,需要用預編譯命令include包含標準輸入輸出頭文件stdio.h,即:

#include<stdio.h>2022/11/2格式輸出函數printf()函數函數功能: 按用戶指定的格式,把指定的數據顯示到顯示器屏幕上。一般形式:

printf(“格式控制字符串”,輸出表列);

格式字符串是以%開頭的字符串,在%后面跟有各種格式字符,以說明輸出數據的類型、形式、長度、小數位數等。如:“%d”表示按十進制整型輸出。

輸出表列中給出了各個輸出項,要求格式字符串和各輸出項在數量和類型上應該一一對應2022/11/2格式輸入函數scanf

()函數函數功能: 按用戶指定的格式從鍵盤上把數據輸入到指定的變量之中。一般形式

scanf(“格式控制字符串”,地址表列); 其中,格式控制字符串的作用與printf函數相同,但不能顯示非格式字符串。地址表列中給出各變量的地址。 地址是由地址運算符“&”后跟變量名組成的。 例如:&a,&b

分別表示(取)變量a和變量b的地址。2022/11/2【例1.3】從鍵盤輸入兩個整數,輸出它們的和。

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

int

sum(int

a,intb)/*子函數及其形式參數*/

{

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

c=a+b; /*計算和*/

return(c);/*返回值*/}1.3C程序的基本結構和書寫風格

1.3.1C程序的基本結構

2022/11/2main()

/*主函數名*/{

/*函數體開始*/

inta,b,c;

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

printf("輸入兩個整數:");

/*屏幕提示信息*/

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

/*輸入兩個整數*/

c=sum(a,b);

/*調用計算求和的函數*/

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

/*打印總分值*/}

/*函數體結束*/2022/11/2通過實例,初步看到C的程序結構C程序全部由一個一個的函數構成。至少有且僅有一個主函數main(),也稱為主程序,其內容在其后的一對花括號{}內,其它函數可被主函數調用或相互調用。其它函數可為C函數庫中函數,也可為用戶定義的函數。2022/11/2main()函數的最后一條語句是

return0;

它結束main()函數的運行,并向系統返回一個整數0,作為程序結束狀態(tài),這條語句可以省略。實際上,主函數main()還可以定義成沒有返回值的形式:voidmain(){……}2022/11/2一個函數有兩部分組成:

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

例如:int

sum(int

a,intb)

2)函數體,即函數首部下面的大括弧{……}內的部分。 函數體一般包括:聲明部分:在這部分中定義所用到的變量,如果需要,也要對所調用的函數進行聲明。執(zhí)行部分:有若干個語句組成。在某些情況下也可以沒有聲明部分,甚至可以既無聲明部分,也無執(zhí)行部分。如:

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

每個語句和數據定義的最后必須有一個分號。7.C語言本身沒有輸入、輸出語句。輸入和輸出的操作是由庫函數scanf和printf等函數來完成。8.可以用“/*……*/”對C程序中的任何部分作注釋;也可用“//……”對C程序中的一行作注釋。2022/11/21.3.2C程序的書寫風格

每一對{}上下對齊;每一對{}都對應于段首和段尾;每一行只寫一條語句;每一對{}內的語句左對齊;不同的語句段采用縮進格式以示區(qū)別;關鍵語句要有注釋。C程序的書寫格式完全自由,為便于閱讀,養(yǎng)成良好的程序書寫風格。2022/11/2C語言程序實例–ApacheHTTP服務器源代碼片段#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*/

2022/11/2staticvoidshow_mpm_settings(void){

int

mpm_query_info;

apr_status_t

retval;

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");}}}2022/11/2int

main(int

argc,constchar*constargv[]){charc;

int

configtestonly=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_t

rv;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);}#endif2022/11/2

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;2022/11/2 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.*/2022/11/2

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");

溫馨提示

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

評論

0/150

提交評論