C语言教程全套 第1章_第1页
C语言教程全套 第1章_第2页
C语言教程全套 第1章_第3页
C语言教程全套 第1章_第4页
C语言教程全套 第1章_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2023年2月4日内容概述C语言的发展及特点。C程序的基本结构和书写风格。简单的C程序设计。C程序的上机步骤和VisualC++6.0的基本用法。2023年2月4日1.1C语言的发展及特点

1.1.1C语言的发展使用计算机,必须与计算机进行沟通、交流。计算机语言是人们定的一套与计算机沟通的规则。计算机语言分低级语言和高级语言机器语言:由数字0、1组合而成。汇编语言:用助记符描述的指令系统。高级语言:面向过程的语言或称算法语言。 如:Fortran,Basic,Pascal,C等等。2023年2月4日C语言是在1972年至1973年间由美国的贝尔实验室的M.D.Ritchie和K.Thompson以及英国剑桥大学的M.Richards等为描述和实现UNIX操作系统而设计的。

经进一步改进,至1977年出现了与具体机器无关的C编译文本,从而使C语言广泛应用,各种机器皆可使用。3.1983年,美国标准化协会(ANSI)制定了ANSIC。以ANSIC为基础:

不同机器有不同版本,尤其是函数均应参考相应的机器。

C语言的编译环境有多种,如: DOS/Windows平台:Borland/TurboC,MicrosoftC等Unix/Linux平台:GNUCC语言的诞生2023年2月4日4.1987年,ANSIC公布了新标准——87ANSIC5.1990年,国际标准化组织(InternationalStandardizationOrganization,ISO)接受了87ANSIC为ISOC的标准(ISO9899—1990)。6.进入二十世纪八九十年代,计算机语言从面向过程转化为面向对象程序设计,可视化多媒体程序设计模式的概念得到了推广、普及。C语言在发展的同时,也朝着支持面向对象、可视化程序设计语言方向发展,如BorlandC++、VisualC++、C++Builder等先后问世。C语言已经成为编写系统软件、应用软件和进行程序设计、教学的重要编程语言,甚至许多硬件开发系统也使用C语言。C语言已经成为世界上应用最广泛的计算机语言之一。

2023年2月4日1.1.2C语言的特点C语言既有高级语言的优点,又在很多方面保留了低级语言的长处。用C语言编写的程序非常简洁。C语言只有32个关键字,9种控制语句。autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedstaticsizofstructswitchtypedefunionunsignedvoidvolatilewhile2023年2月4日运算符和数据结构丰富(共有34种运算符)。除了最基本的+、-、×、÷、%等运算外,还将括号、赋值、类型强制转换等均作为运算符。除基本的整型、实型、字符型类型外,还有指针,结构体、共同体等类型。语法灵活,不太严格。如:数据类型可相互通用:整型、字符型通用。2023年2月4日允许直接访问物理内存,能实现对位的操作。

直接访问内存地址,具有“高”、“低”级语言的功能。生成目标代码质量高,执行效率高。语言简洁,可移植性好可移植性优于汇编语言。C语言是一种过程化的语言。C语言有优秀的实现工具。微软公司的MicrosoftVisualC++6.0(VC6.0)和Borland公司的TurboC等。编程集成开发环境(IDE)。2023年2月4日1.2C程序的基本结构和书写风格

1.2.1C程序的基本结构

【例1.1】编写程序在显示器输出一行信息:Hello,World!#include<stdio.h>

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

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

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

程序运行结果如下:HelloWorld!

2023年2月4日1.3简单的C程序设计

【例1.2】从键盘输入两个整数,输出它们的和。

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

intsum(inta,intb)/*子函数及其形式参数*/

{

intc; /*定义局部变量*/

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

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

/*主函数名*/{

/*函数体开始*/

inta,b,c;

/*局部变量类型定义*/

printf("输入两个整数:");

/*屏幕提示信息*/

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

/*输入两个整数*/

c=sum(a,b);

/*调用计算求和的函数*/

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

/*打印总分值*/}

/*函数体结束*/程序运行情况为:输入两个整数:7896↙

和=1742023年2月4日通过实例,初步看到C的程序结构C程序全部由一个一个的函数构成。至少有且仅有一个主函数main(),也称为主程序,其内容在其后的一对花括号{}内,其它函数可被主函数调用或相互调用。其它函数可为C函数库中函数,也可为用户定义的函数。2023年2月4日一个函数有两部分组成:

1)函数的首部,即函数的第一行。包括函数名、函数类型、函数参数(形参)名和参数类型。

例如:intsum(inta,intb)

2)函数体,即函数首部下面的大括弧{……}内的部分。 函数体一般包括:声明部分:在这部分中定义所用到的变量,如果需要,也要对所调用的函数进行声明。执行部分:有若干个语句组成。在某些情况下也可以没有声明部分,甚至可以既无声明部分,也无执行部分。如:

dump() {}2023年2月4日一个C程序总是从main函数开始执行的,而不论main函数在整个程序中的位置如何(main函数可以放在程序最前头,也可以放在程序的最后面,或在一些函数之前,在另一些函数之后)。函数由语句构成,语句由基本单词组成。C程序书写格式自由,一行也可以写几个语句,一个语句可以写在多行上。但为了程序的阅读和理解,C程序书写需按照某些书写规则,稍后将介绍。2023年2月4日6.

每个语句和数据定义的最后必须有一个分号。7.C语言本身没有输入、输出语句。输入和输出的操作是由库函数scanf和printf等函数来完成。8.可以用“/*……*/”对C程序中的任何部分作注释;也可用“//……

”对C程序中的一行作注释。2023年2月4日1.2.2C程序的书写风格

每一对{}上下对齐;每一对{}都对应于段首和段尾;每一行只写一条语句;每一对{}内的语句左对齐;不同的语句段采用缩进格式以示区别;关键语句要有注释。C程序的书写格式完全自由,为便于阅读,养成良好的程序书写风格。2023年2月4日1.3简单的C程序设计

【例1.3】求长方形的周长和面积。

分析数据输入数据:长、宽输出数据:周长、面积算法周长=(长+宽)x2面积=长x宽2023年2月4日程序中涉及的数据有两类常量:计算周长算法中的“2”变量:长、宽、周长和面积需要用变量来存储。变量需要有名称变量名由字母、数字和下划线构成变量名的第一个字符不能是数字变量需要有类型整型变量,用int表示2023年2月4日变量定义长、宽两个变量的名称用a和b inta; 每行定义一个变量 intb;周长和面积两个变量的名称用l和s intl,s; 一行定义两个变量2023年2月4日算法实现周长计算: l=(a+b)*2面积计算: s=a*b表达式由变量、常量、运算符和括号构成算术运算符:加+

减–

乘*除/运算符的优先级:先乘除后加减赋值语句等号用于赋值,把右边表达式的值赋给左边的变量2023年2月4日intmain() /*定义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函数返回*/}代码如下:2023年2月4日程序中存在的问题程序运行后没有看到结果变量l和s中得到了计算结果,但是没有输出它们的值解决办法在程序中增加输出语句

printf("l=%ds=%d\n",l,s);printf是C语言的库函数,它的功能是把程序中变量的值输出到计算机的屏幕上。使用printf前,需要在程序头部加入下面的语句

#include<stdio.h>2023年2月4日#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=%ds=%d\n”,l,s); /*输出结果*/ return(0); /*main函数返回*/}运行结果:l=40s=96代码如下:2023年2月4日程序中存在的不足矩形长、宽在程序中通过赋值的方式给定的,如果它们的值改变了,须重新编译、连接,才能计算。解决方法:在程序中增加输入语句

scanf("%d%d",&a,&b);scanf是C语言的库函数,它的功能是从键盘输入数据,把数据赋给程序中变量。使用scanf前,需要在程序头部加入下面的语句

#include<stdio.h>2023年2月4日#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=%ds=%d\n”,l,s); /*输出结果*/ return(0); /*main函数返回*/}运行结果:1012l=44s=120代码如下:2023年2月4日C语言程序实例–

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*/

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. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论