当前位置:文档之家› 谭浩强C程序设计第三版复习要点

谭浩强C程序设计第三版复习要点

谭浩强C程序设计第三版复习要点
谭浩强C程序设计第三版复习要点

一、二、介绍部分

1。C程序在UNIX系统下运行cc a.c默认的所有输出为a.out. 可改,如:cc -o f.outf.c 2。程序包括两个方面,一是对数据的描述也就是数据结构;二是对操作的描述也就是算法。3。算法是为解决一个问题采取的方法和步骤。

4。算法特性:有穷性,确定性,有限输入输出,有效性。

5。流程图:起止(椭圆),输入输出(平行四边形),判断(菱形),处理(长方形),流程线(-->),连接点(小圆)。

三、数据类型、运算符、表达式

1。C的数据类型:

1)基本类型:整型,字符,浮点,枚举

2)构造类型:数组,结构体,共用体

3)指针类型

4)空类型

2。整型:8进制0开头,16进制0x开头

3。整型在内存中是二进制且以补码存放的占2个字节16位。正数的补码和其原码相同,负数的补码为符号位为1,其它位按位取反再加1。

整型范围:-32768(2^15)~~32767 (2^15 - 1) unsigned (0-2^16)

注(INT):32767+1=-32768,原因,+1后,符号位为1,其它为0,这是-32768的补码形式。如下:

1000000000000000 为-32768

1000000000000001 为-32767

1000000000000010 为-32766。。。。。。

区别反码,正数不变,负数将原码除符号位外取反。

实型(4个字节,32位)实型数据是按指数形式存放的。数符位,+小数部分:.314159,还有指数部为为10的几次方。

4。字符型:

1)转义字符:/n, /t(8列), /b回退, /r回车不换行, /f换页, //

2)存的是ASCII码,'a' 97 整型可与字符转换,A 65

3)C中没有专门存放字符串的变量,用字符数组。

5。类型转换:char, short-->int; float-->double; int-->unsigned-->long-->double

6。运算符:

1)算术:+-*/%

2)比较:>, <, >=, <=, ==, !=

3)逻辑:|| && !

4)位:<<>> ~ | ^ &

5)赋值:=

6)条件:?:

7)指针:*&

8)求字节:sizeof

9)分量:. ->

10)强制转换:()

逗号,语句值为最后一个。且顺序执行。

printf("%d",-i++) 先取i值,再取负输出,再加1

四、顺序程序设计

1。C 语句

1)控制语句:if()~else~; for(); while; do~while(); continue; break; switch; goto; return; 2)函数调查用语句:printf(" ");

3)表达示语句:a=3; i++;

4)空语句

5){} 复合语句(分程序)

2。赋值语句:可以加分号成表达式,也可以在其它语句中

3。C的标准库中的输入输出函数:putchar(输出字符)、getchar(输入字符)、puts(输出字符串)、gets(输入字符串)、printf函数和scanf函数。无输入输出可以使程序编译简单,不与硬件相关。

4。使用库函数时,要用预编译命令“#include ”将相关头文件包在用户源文件中。标准输入输出库要用#include 其中用printf函数和scanf函数可以不加

5。字符数据的输入输出:putchar('A'), char c=getchar(a)

6。格式输出unsigned int a=65535; printf("a=%d,%o,%x,%u", a,a,a,a) 输出为:a=-1, 177777, ffff, 65535

注:各进制数之间的转换:十进制转为N进制除N取余。从尾到头串。

如65535 十进制转化为八进制

65535 / 8

8191 余7

8191 /8

1023 余7

1023 /8

127 余7

127 /8

15 余7

15/8

1 余7

1/8

0 余1

结果为17777

N进制转成十进制:按位* N的M次方求和17777(八进制转成十进制)

1*(8^5)+7*(8^4)+7*(8^3)+7*(8^2)+7*(8^1)+7*(8^0)

其它二、八、十六转,全转成二再转其它。

7。想输出%时要写成%%

8。格式输入:scanf*("%d",&a); 输入多个时可用空格,逗号,回车或组合都可以。9。%s 输入,字符串,放在一个字符数组中,以/0结尾

10。输入时%*表示跳过去不给任何变量。

五、选择结构程序设计

1。关系运算符优先次序:<, <=, >, >=相同,高于==, !=

2。运算符优先级为:算术,关系,赋值

3。逻辑表达式,用逻辑运算将关系表达式连起来。

4。逻辑运算符优先级。!>&&>||

5。&&前面为假不继续,||前面为真不继续

6。条件运算符:例max=(a>b)? a:b

7。条件运算符结合方向右到左。

8。多分支选择结构switch后的表达式的值可以为任何类型来匹配case中的常量表达式。一般case 语名执行完后加break语句。

9。实数(浮点)在计算和存储时都会有一定误差,不能直接判断是否==0。而是用一个极小的数来判断,如< 1e-6

10。fabs() 绝对值

六、循环控制

1。goto无条件转向,一般不要用。两种情况可用,一为与IF一起,二为从内层循环跳到最外层

2。while do-while区别,后者至少会执行一次,若开始判断就不满足条件时结果不同。

3。for(初值;条件;增值)

4。break跳出循环体,只用于循环语句和switch语句

5。PI=4*(1-1/3+1/5-1/7...)

七、数组

1。C语言不允许对数组大小作动态定义

2。C中字符串只能用字符数组来表示char str[]="hello"

3。字符串输出:printf("%s",c); 或:puts(str)

4。字符串处理函数:

strcat(str1, str2) 连接两个字符串,将2连接到1的后面。

strcpy(str1, str2) 将2复制给1

strcmp(str1, str2)相等时返回1,1大返回正,2大返回负,自左向右比较ASCII码,与长度无关

strlen(str1) 字符串实际长度,不算'/0'

strlwr(str1) 将字符串中的大写改成小写

strupr(str1) 将字符串中的小写改成大写

注判断字符串是否结束可以用while((c=str[i])!='/0')

八、函数

1。子程序通过函数来实现。

2。一个C程序由一个主函数和若干个子函数构成。

3。善用函数以减少编程的工作量。

4。一个源文件由若干函数构成,一个C程序可由多个源文件构成。C程序始于MAIN函数止于MAIN函数。

5。函数分类:有参无参,标准函数用户函数

6。类型标志符函数名(形参列表)

7。实参(主函数调时),形参(函数定义时)必须都在主函数中,及函数定义时定义(类型必须相同)

8。函数返回值应当在定义函数时指定返回值的类型。返回值与函数类型以函数值为准。

9。void 禁止在调用函数中使用被调查函数的返回值。

10。函数调用:函数名(实参列表)

11。调用系统函数应在头文件说明,调用用户自定义函数(一个文件中)应该在调用函数中申明(以备编译系统检查)。被调函数出现在主调函数之前时可以不申明。

12。递归(在调用一个函数的过程中直接或间接调用函数本身)

13。递归必须有条件的调用或终止

14。数组作为函数参数,实参与形参数组大小可以不一致(形参小于实参),只传数组首地址。

15。形参数组可不指定大小,可以同时加参数传数组元素个数方便处理。

16。局部变量:在一个函数内部定义的变量只在函数内有效,函数外无效

17。在函数之外定义的变量,有效范围是从定义到源文件结束。

18。尽量不要使用全局变量。程序运行中始终占用存储单元,且函数通用性降低,并降低程序清晰性。

19。同一文件中,外部变量与局部变量同名,在局部变量范围内,全局变量被屏蔽

20。变量按存在的时间分:静态存储(程序运行期间分配固定)和动态存储(运行期间根据需要分配)。

21。内存中供用户使用的存储空间分为:程序区,静态存储区,动态存储区。

22。全局变量全部存在静态储区中;动态存储区中存放以下数据:函数形参,自动变量(未加static申明的局部变量),函数调用时的现声保护和返回地址。

23。C语言变量及函数有两个属性,数据类型和数据的存储类别。存储类别(静态,动态)具体包括:自动(auto)、静态(static)、寄存器(register)、外部(extern)。

24。静态局部变量:在函数调用结束后保留原值(存储单元不释放),区别自动变量。静态局部变量赋初值的,只赋一次,再次运行时原初值不赋(不管运行多少次),只保留上次运行完的值。

25。静态局部变量未赋初值,自动为0。而自动变量则不确定。

26。静态局部变量不能被其它函数引用。

27。如打印1到5阶乘时用到静态局部变量。来记录上次阶乘值。

28。一般情况数据是放在内存中的,但若变量(局部自动变量和形参)使用过于频繁,为使其存取时间减短,可以将其放在寄存器中。用register申明。例计算N的阶乘时,i, f定义为寄存器变量,在N非常大时可节约执行时间。函数调用结束释放寄存器。

现在很多编译器自动将频繁使用的变量放入寄存器中,不需要人的干预。

29。用extern声明外部奕量。想在作用范围外引用外部变量时需要声明。若一个程序由不同的文件组成,在多文件中要用到同一个外部变量,不能重复定义,只能定义一次其它extern 声明。

30。若定义的外部变量只限于被本文件引用,要在定义外部变量时加一个static声明。注,只要是外部变量就是静态存储。

31。声明和定义:广义声明包括定义。需要分配存储空间的声明是定义,不需要的是狭义声明。

32。变量存储类别小结,(可能会和以上有重复)

1)作用域角度分:局部变量(自动变量、静态局部变量、寄存器变量)、全局变量(静态外部变量,非静态外部变量)。

2)变量存在时间分,看是否程序运行时始终存在的:动态存储(自动变量,寄存器变量,形式参数)和静态变量(静态局部变量,静态外部变量、非静态外部变量)

3)存储位置分:内存中的静态存储区(静态局部变量,静态全局变量,外部变量)、内存中的动态存储区(自动变量和形参)、CPU的寄存器(寄存器变量)

4)作用域(同1))和生存周期(同2))

33。内部函数和外部函数。指定函数不能被其它文件所调用(用static修饰)。

34。extern申明可以使用其它文件中的非静态函数,此关键字可以省略。

35。运行多文件的程序

1)Turb C中(现很少用)把文件名写在一个文本中存在.prj. 在主菜单中找到Project回车找到Project name回车,输入原来的prj名。再F9编译,ctrl+F9运行。

2)MS C中先编译,再用link将编译完的obj文件连接起来(扩展名不用写)

3)用#include命令将其它要用到的包括在主函数所在文件中。

九、预处理命令

1。通过预处理命令改进程序设计环境,提高编程效率。

2。C提供的预处理功能有三种:宏定义、文件包含、条件编译

3。宏定义:(中间无=号,最后无分号)

1)不带参数的宏定义:#define PI 3.1415 可以用# undef PI来结束

2)带参数的宏定义:#define S(a,b) (a)*(b) #define MAX(x,y) (x)>(y)?(x):(y) 注意带变量的一般加个括弧,以免代错,如:

#define S(a,b) a*b

int x=1,y=2,z=3;

则求S(x+y,z)=x+y*z=7,而不是想要的9;原因是宏展开时并不求值再代入,而是直接代入。且宏定义无关类型,不占编译时间。

4。文件包含:一个源文件可以将另外一个源文件的全部内容包含进来。用#include命令进行包含。

1)宏定义较多且频繁用在程序中时,将定义放在.h文件中,在程序中进和包含。

2)用尖括号<>或双引号""包含,都是合法的。区别是用前者系统到存放C库函数头文件所在目录中寻找要包含的文件,为标准方式。而后者引号,系统先在用户当前目录中寻找要包含的文件,找不到时再按标准方式找。一般系统库函数为尖括号,用户自定义头文件用引号。

5。条件编译:对程序中一部分内容指定编译条件。

1)格式

#ifdef标识符

程序段1

#else

程序段2

#endif

其中else可以没有。当指定的标识符已经被#define命令定义过,在编译时只编译程序段1 2)例子:调试用,相比在程序中处处printf,修改工作量降了很多。

#ifdef DEBUG

printf("x=%d,y=%d,z=%d/n",x,y,z);

#endif

3)与1相反

#ifndef标识符

程序段1

#else

程序段2

#endif

4)用表达式,在程序中

#if 表达示

程序段1

#else

程序段2

#endif

十、指针

1。指针好处:表达复杂数据结构;动态分配内存;方便地使用字符串;有效而方便的使用数组;调用函数时得到多于一个值;能直接处理内存地址。

2。定义变量分配一定长度的存储空间(整型2字节,实型4字节,字符型1字节),内存区的每个字节都有一个编号,为内存地址。

3。内存单元的地址和内存单元的内容不同。

4。变量的指针就是变量的地址。

5。用*表示指向,point是变量的地址,则*point是此地址所指向的变量,与变量是一回事。指针变量前的*表示该变量类型为指针变量。

6。定义一个指针变量:int *point; 使指针变量指向:point = &i;

7。指定指针变量基类型的原因是各类型在内存中的字节数不同,这样指针变量增加时就方便移动几个字节

8。指针变量只能存放地址,不要将一个整型赋给一个指针变量。

9。&(取地址),*(指针)为指针变量运算符。

10。注意(*point)++和*point++;前者对i加1,后者指向i下一个。

11。注意指针作为函数值传递时若改变值,原指向的变量也会改变值。而普通类型,形参改变不影响实参。

12。指向数组元素的指针:int a[10];int *p; p=a;(数组名表示数组首地址即a=&a[0])。13。引用一个数组可以用两种方法,下标法a[i], 指针法*(a+i)

14。数组名作为形参,其内容若改变,调用函数中也会改变。

15。多维数组指针,类似于单维,a是数组a[i][j]的首地址,a+i是第i行数组首地址,*a+i 是第一行的第i个数的首地址。如:*(a+1)+2=&a[1][2] *(*(a+i)+j)=a[i][j]

16。地址本身并不占内存单元,二维数组中,a[i]则代表了一个一维数组名,是一个地址。

17。多维数组的指针作为函数参数。

a) 用指向指针变量的指针变量定义:函数类型fun(类型(*p)[4], int n)使用:fun(a,n)

b)指向一维数组的指针变量定义:函数类型fun(类型*p int n),使用:fun(*a, n)。

18。字符串的指针和指向字符串的指针变量

1)字符串的表示形式a) 字符串数组b) 用字符指针指向一个字符串

2)两个字符串指针拷贝最易方法为:while(*to++=*from++) ;

3)字符串指针变量和数组名均可做形参和实参。

4)字符数组可以在定义时整体赋值(加大括号),但不能在赋值时整体赋值。字符指针都可以。

5)数组名的值是不可以改变的。

19。函数的指针和指向函数的指针变量

1)函数名表示入口地址如最大值函数例子中:int (*p)(); p=max; c=(*p)(a,b)

2)指向函数的指针变量的一般定义为数据类型(* 指针变量名)();

3)函数的调用可以通过函数名,也可以通过函数指针调用

4)(*p)() 表示定义一个指向函数的指针变量,是专门用来存放函数的入口地址的。

5)在给函数指针变量赋值时,只需要给出函数名不需要给出参数。

6)用函数指针变量调用函数时只需要将(*p)代替函数名即可

7)对指向函数的指针变量,像p+n,p++,p--等运算是无意义的。

20。用指向函数的指针作为函数参数。当一个函数中需要调查用其它函数,且每次调用的函数都不固定时,

21。返回指针值的函数。形式:类型名*函数名(参数表)

22。指向数组和指向指针的指针

1)指针数组int *p[4] 一个数组,数组中的每个元素都是指向整型的指针

2)指向指针数据的指针变量char **p

3)的指针数组作为main的形参:带参的main函数原型是main(intargc, char *argv[]) 十一、结构体与共用体

1。

十二、位运算

1。位运算是指进行二进制位的运算。

2。位运算符,按位与&,按位或|,按位异或^,取反~,左移<<,右移>>

1)按位与:用途清零,取或保留一个数中指定位

2)按位或:用来指定某些位为1

3)按位异或:与1异或可以使特定位翻转,与0异或保持原值,交换两个值不用临时变量a=a^b,b=b^a,a=a^b

4)按位取反:此运算符的优先级别比算术运算符,关系运算符,逻辑运算符及其它运算符都高。

5)左移:在未溢出时等同于乘法。2^n。但比乘法运算快。右移是除。

3。位段,可以让不同值不占满一个字节

4。structpacked_data

{

unsigned a:2;

unsigned b:4;

int i;

}data;

十三、文件

1。“文件”一般为存储在外部介质上数据的集合。数据以文件的形式存放在外部介质(如磁盘)上。操作系统以文件为单位对数据进行管理。

2。C语言把文件看作是一个字符(字节)序列。

3。根据数据的组织形式,可以分为ASCII文件和二进制文件。ASCII文件为文本文件,每个字节存放一个ASCII码,代表一个字符;而二进制文件是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。

二进制节省空间如:整数10000

内存中:00100111 00010000

二进制:00100111 00010000

ASCII:00110001 00110000 00110000 00110000 00110000

4。C中对文件的存取以字符为单位,输入输出的数据流的开始和结束受程序控制而不受物理符号如回车换行控制,把文件以流式处理。

区别:过去使用的C(如UNIXG下的),对文件的处理分为“缓冲文件系统”(处理文本文件),“非缓冲文件处理”(处理二进制文件)

5。ANSI C标准,用缓冲文件系统处理文本文件和二进制文件。

6。缓冲文件系统中,关键概念是“文件指针”,每个被使用的文件在内存中开辟一个区,用来存放文件有关信息。保存在系统定义的结构体中,名为FILE,在stdio.h申明。

7。FILE *fp; 为指向FILE类型结构体的指针变量,使fp指向某一文件的结构体变量,通过该项结构体奕量中的文件信息访问文件。

8。文件的打开,用fopen() 如:FILE *fp; fp=fopen(文件名,使用文件方式)

9。打开方式,"r"只读,"w"只写,"a"追加。默认为文本文件,后面加b为二进制,加+为读写。

10。向计算机输入文本时,将回车换行符转化为一个换行符,在输出时把换行符转成回车和换行两个字符。

11。文件的关闭,fclose(文件指针)当顺利执行时,返为0,否则返回EOF(-1)。

12。文件读写:

fgetc(), getc()从文件中取一个字符ch=fgetc(fp)

fputc(), putc()把字符输出到文件fputc(ch,fp)

fgets() 从指定文件读取字符串fgets(str,n,fp)

fputs() 把字符串输出到指定文件fputs("China", fp)

getw() 从文件中读一个字(int)int i=getw(fp)

putw() 把一个字(int)输出到文件putw(10,fp)

fread() 从文件中读数据项fread(buffer,size,count,fp)

fwrite() 把数据项写到指定文件fwrite(buffer,size,count,fp)

fscanf() 从指定文件按格式输入fscanf(文件指针,格式字符串,输入表列)

fprintf() 按指定格式写入到文件中

用到的feof(fp) 结束时为1,其他为0

if((in=fopen(infile,"r"))==NULL) {printf(); exit(0);}

13。文件的定位。不是读写完一个后指向下一个,而是想指向其它指定的位置。

rewind(fp) 将文件指针指向开头。

fseek(文件类型指针,位移量,起始点) 如:fseek(fp,100L,0); fseek(fp,-10L,2);

ftell函数作用为得到流式文件的当前位置,返回-1L表示出错。

14。出错的检测

ferror(fp)返回为1出错,为0不出错。

clearerr()使文件错误标志(ferror)和文件结束标志(feof)为0

十四、C++对C的补充

1。C是结构化和模块化的语言,是面向过程的。

2。编写大型程序的人才会体会到C的不足和C++优点

3。对C的增强表现在两个方面,一是在原来面向过程的机制基础上对C的扩充,二是增加了面向对象机制

4。可用//注释单行,输入输出:cin>>, cout<<

5。重载--“一物多用” 运算符的重载,函数的重载(C中缺点,不同名的函数实现的是同一类操作,C中不允许同名,而C++允许,只要参数个数或类型不同)

6。变量的引用类型,int a; int&b=a; 这样,a的值变化了,b也变化了。b的值变化了,那a值也变了

7。引用作为函数参数。

8。引用与取地址区别:&a 前有int等时,为引用;如果前面无类型符时是变量的地址。

9。内置函数,可以提高函数频繁调用的效率。在函数首行左端加一个关键字inline即可。内联可以节省运行时间,但增加了目标程序长度。

10。作用域运算符::变量表示全局变量作用域中的变量

11。动态分配/撤销内存的运算符:new 和delete 而C中较复杂还要指定大小malloc(size) 大多数情况还得由sizeof求出。

十五、C++的面向对象基础

1。一个对象应该包括两个要素,一是数据,二是需要进行的操作。

2。对象就是一个包含数据以及与这些数据有关的操作的集合。

3。面向对象的一个重要特点就是封装性,把数据和操作封在一个对象中。

4。类是对象的类型,多个对象可属于一个类型。类代表了某一批对象的共性和特征。也是对C改进的一个重要方面。

5。类是对象的抽象而对象是类的具体实现。

6。与结构体的区别,结构体只包括了数据(变量),而没有包括操作,而类中都包括了。结构体中变量的在本作用域中都是敞开的。

7。类的成员包括两大类,私有的(private)和公用的(public, protected)。

8。如果在类的声明中既不指定私有,也不指定公共,那么系统认为是私有的。

9。“方法”即为对数据的操作。为成员函数。

10。C++保留struct,union即结构体、共用体类型,且允许包括成员函数。与类的区别为,如果不作私有或公共的申明则默认为是公共的,结构体类型可以改变,而共用体不可以改。

11。构造函数,在定义对象时自动执行(只能执行一次)。由用户定义,必须与类名相同,一般申明为public,无返回值,不加void类型声明。

12。只有对象中的函数才能引用本对象中的数据,直接用对象.变量是不行的,与结构体区别。

13。如果想建立不同的对象并赋初值,在构造函数中实现赋值操作。

14。构造函数也可以重载,从而在定义对象时允许有实参无实参。若人不定义构造函数,则系统会自己生成一个,不进行任何操作。

15。析构函数与构造函数相反,当对象脱离作用域时,系统自动执行析构函数。

16。析构函数也与类名相同,只是在函数名前加一个波浪符~。不能带任何参数,无返回值,不加void类型声明,如果用户没有定义,系统会自动生成,不做任何操作。

17。可以在类的外面定义成员函数,增加可读性。在类声明的外部定义函数,必须指定类名。函数类型类名::函数名(形参列表)

18。也可以将类外部定义的函数声明为内联函数,提高程序执行效率。inline 函数类型类名::函数名(形参列表)

19。面向对象强调软件的可重用性,在C++中是通过继承来实现的。

20。如果建一个类,和原有的大部分都相同,可以用到继承

21。继承就是在一个已存在的类的基础上建一个新的类。

22。定义派生类:class 派生类名:[引用权限] 基础类{新增数据成员和成员函数} 例如:class student : public stud

23。公用派生类:声明一个派生类时将基类的引用权限指定为public的,该类称为基类的公用派生类。这时基类的公用和保护成员在派生类中仍为公用和保护的,而基类的私有成员不能被派生类引用。

24。私有派生类:声明一个派生类时将基类的引用权限指定为private的,该类称为基类的私有派生类。这时基类的公用和保护成员在派生类中为私有的,而基类的私有成员不能被派生类引用。

25。protected保护成员不能被外界引用,但它可以被派生类的成员函数引用。

26。派生类的构造函数:建立派生类的对象时,系统只执行派生类的构造函数,而不会自动执行基类的构造函数。基类的构造函数是不能被继承的。

27。派生类构造函数写法:派生类构造函数名(参数列表1):基类构造函数名(参数列表2)1一般>2。前面为基类的,后为自己的。

28。在建立一个对象时,由派生类构造函数先调用基类构造函数,再执行派生类构造函数本身,而在其消失时,先执行派生类函数,再执行基类的析构函数。

29。继承在一些大系统中非常有用。解决的代码重写问题。

十六、常见错误和程序调试

1。高质量程序:解决复杂问题,运行效率高,占内存少

2。C是函数式语言,利用标准库函数和自己设计的函数完成许多功能。

3。常见错误分析:

1)忘记定义变量

2)输入输出与格式说明不一致

3)未注意INT数据的数值范围

4)输入变量时未用地址符

5)输入时数据的输织与要求不符,如“%d,%d”,“%d%d”等

6)= ==搞混

7)语句后分落掉分号

8)在不该加分号的地方加分号

9)该加花括弧的地方未加

10)括弧不匹配

11)标志符大小写不一致

12)引用数组元素时误用了圆括弧

13)元素个数不是最大下标

14)二维或多维数组引用不对

15)误以为数组名代表全部元素而输出

16)混淆字符数组与字符指针(重申一遍,字符数组定义后不可更改,也不可用数组名输出;而字符指针可以更改,也可以加*输出)

17)引用指针变量前未赋初值

18)switch 语句中未加break

19)混淆字符和字符串的表示形式

20)使用自加(++)自减(--)运算时出现错误

21)传统方式对函数申明时把函数的形参和局部变量一起定义

22)所调用的函数有调用语句之后才定义要么在MAIN函数中申明,要么放在MAIN函数之前

23)误以为形参值的改变会影响实参的值

24)函数的实参和形参类型不一致

25)不同类型的指针混用

26)没有注意函数参数的求值顺序

27)混淆数组名与指针变量,如整型。数组名不可以自加

28)混淆结构体类型与结构体变量的区别,对一个结构体类型赋值。

29)使用文件时忘记打开,或打开方式与使用情况不匹配。

4。程序出错的三种情况

1)语法错误

2)逻辑错误

3)运行错误

5。程序调试

1)先进行人工检查建议:应当多用结构化程序方法编程;尽可能多加注释以便理解;多用函数不要全在MAIN中。

2)人工检查无误时,上机调试。(不要惧怕错误,有时一大片出错信息可能只有一两个错误)

3)在修正语法错误(错误,警告)后,进行连接后得到可执行的目标程序,要对运行结果分析,多用各方面试验数据测试。

4)运行结果不对时,

a) 将程序与流程图他细对照发现错误

(完整版)谭浩强c程序设计课后习题答案

谭浩强c++程序设计课后答案 娄警卫

第一章1.5题 #include using namespace std; int main() { cout<<"This"<<"is"; cout<<"a"<<"C++"; cout<<"program."; return 0; 1.6题 #include using namespace std; int main() { int a,b,c; a=10; b=23; c=a+b; cout<<"a+b="; cout< using namespace std; int main() { int a,b,c; int f(int x,int y,int z); cin>>a>>b>>c; c=f(a,b,c); cout< using namespace std; int main() { int a,b,c; cin>>a>>b; c=a+b; cout<<"a+b="< using namespace std; int main() { int a,b,c; int add(int x,int y); cin>>a>>b; c=add(a,b); cout<<"a+b="<

C语言程序设计谭浩强第四版期末复习重点

C语言程序设计谭浩强第四版期末复习重点 Newly compiled on November 23, 2020

第一章 程 序设计和C 语言 .什么是计算机程序 程序.. :一组计算机能识别和执行的指令。只要让计算机执行这个程序,计算机就会自动地、有条不紊地进行工作 计算机的一切操作都是由程序控制的,离开程序,计算机将一事无成。 什么是计算机语言 计算机语言:人和计算机交流信息的、计算机和人都能识别的语言。 计算机语言发展阶段:机器语言(由0和1组成的指令) 符号语言(用英文字母和数字表示指令) 高级语言(接近于人的自然语言和数学语言) 面向过程的语言(非结构化的语言、结构化语言);面向对象的语言 语言的发展及其特点 C 语言是一种用途广泛、功能强大、使用灵活的过程性编程语言,既可用于编写应用软件,又能用于编写系统软件。因此C 语言问世以后得到迅速推广。 C 语言主要特点: 语言简洁、紧凑,使用方便、灵活。(只有37个关键字、9种控制语句;程序书写形式 自由,源程序短) 运算符丰富。(34种运算符;把括号、赋值、强制类型转换等都作为运算符处理;表达 式类型多样化) 数据类型丰富。(包括:整型、浮点型、字符型、数组类型、指针类型、结构体类型、共用体类型;C99又扩充了复数浮点类型、超长整型、布尔类型;指针类型数据,能用来实现各种复杂的数据结构的运算。)

具有结构化的控制语句。(如if…else语句、while语句、do…while语句、switch语句、for语句用函数作为程序的模块单位,便于实现程序的模块化;C语言是完全模块化和结构化的语言) 语法限制不太严格,程序设计自由度大。(对数组下标越界不做检查;对变量的类型使用比较灵活,例如,整型量与字符型数据可以通用;C语言允许程序编写者有较大的自由度,因此放宽了语法检查) 允许直接访问物理地址,能进行位操作,可以直接对硬件进行操作。(C语言具有高级语言的功能和低级语言的许多功能,可用来编写系统软件;这种双重性,使它既是成功的系统描述语言,又是通用的程序设计语言) 用C语言编写的程序可移植性好。(C的编译系统简洁,很容易移植到新系统;在新系统上运行时,可直接编译“标准链接库”中的大部分功能,不需要修改源代码;几乎所有计算机系统都可以使用C语言) 生成目标代码质量高,程序执行效率高。 1.C语言允许用两种注释方式:计算法 3.编写程序 4.对源程序进行编辑、编译和连接 5. 运行程序,分析结 6.编写程序文档 第二章算法——程序的灵魂 一个程序主要包括以下两方面的信息: (1) 对数据的描述。在程序中要指定用到哪些数据以及这些数据的类型和数据的组织形式,这就是数据结构。 (2) 对操作的描述。即要求计算机进行操作的步骤,也就是算法。 数据是操作的对象,操作的目的是对数据进行加工处理,以得到期望的结果。 着名计算机科学家沃思(Nikiklaus Wirth)提出一个公式:算法 + 数据结构 = 程序

C程序设计第四版谭浩强完整版课后习题答案

C程序设计第四版谭浩强完整版课后习题答案集团标准化办公室:[VV986T-J682P28-JP266L8-68PNN]

C程序设计(第四版)(谭浩强)第一章课后习题答案 P006 向屏幕输出文字. #include<>代码均调试成功,若有失误大多不是代码问题.自已找找. int main() { printf("Welcome to \n"); return 0; } P008 求两个数的和. #include<> int main() { int a,b,sum; a=5; b=4; sum=a+b; printf("The sum is %d .\n",sum);

return 0; } P008 调用函数比较两个数的大小. #include<> int main() { int max(int x,int y); int a,b,c; scanf("%d,%d",&a,&b); c=max(a,b); printf("The max is %d .\n",c); return 0; } int max(int x,int y) { int z; if (x>y) z=x; else z=y; return(z); }

P015 三个数的大小.(数字0表示课后练习题) #include<> int main() { int a,b,c,d; int max(int x , int y , int z); printf("Please input 3 numbers :\n"); scanf("%d %d %d",&a,&b,&c); d=max(a,b,c); printf("The max is :%d .\n",d); } int max(int x , int y , int z) { int m; if (x>y && x>z) m=x; if (y>x && y>z) m=y; if (z>y && z>x) m=z; return (m); }

C程序设计第四版谭浩强_习题&例题第7章

第7章函数 例7.1 #include int main() { void print_star(); void print_message(); print_star(); print_message(); print_star(); return 0; } void print_star() { printf("***********************************\n"); } void print_message() { printf("How do you do!\n"); } 例7.2 int max(int x,int y) { int z; z=x>y?x:y; return(z); } #include int main() { int max(int x,int y); int a,b,c; printf("please enter two integer number:"); scanf("%d,%d",&a,&b); c=max(a,b); printf("max is %d\n",c); return 0; }

例7.3 #include int main() { int max(float x,float y); float a,b; int c; printf("please enter two integer number:"); scanf("%f,%f",&a,&b); c=max(a,b); printf("max is %d\n",c); return 0; } int max(float x,float y) { float z; z=x>y?x:y; return(z); } 例7.4 #include int main() { float add(float x,float y); float a,b,c; printf("please enter a and b:"); scanf("%f,%f",&a,&b); c=add(a,b); printf("sum is %f\n",c); return 0; } float add(float x,float y) { float z; z=x+y; return(z); }

《C语言程序设计》_谭浩强版教案

《C 语言程序设计》教案 职称: 助教 ____________ 单 位:湖南理工职业技术学院 学院(教研室):风能工程学院 工业机器人专业 授课教师: 周常欣

教 学 重 占 八、、 和 难 占 八、、 一、 程序设计和 C 语言 重点:计算机程序、计算机语言、 C 语言编译软件的安装、最简单的 C 语言程序 二、 算法:程序的灵魂 重点:简单的算法举例、算法的特性、用流程图表示算法。 三、 顺序结构程序设计 重点:C 语言的数据类型、C 语句的种类、赋值语句、数据的输入输出及输入输出 中最常用的 控制格式。 四、 选择结构程序设计 重点:关系运算符与逻辑运算符及其组成的具有逻辑值的表达式、 二条分支语句的格 式及基本应用、多分支的选择语句。 五、 循环结构程序设计 重点:C 构成循环的四种方法,尤其是后三种方法、 break 与continue 语句的基本作 用。 难点:while 语句;do-while 语句;for 语句;循环的嵌套; break 与continue 语句。 六、 数组 重点:一维数组、二维数组的定义与引用;字符数组的定义与引用、常用字符串处 理函数及字符处理函数;数组的应用 难点:二维数组的定义与引用;字符数组;数组的应用 七、 函数 重点:函数的定义;函数的参数和函数的值;函数的调用;函数的嵌套调用;函数的 递归调 用;数组作为函数参数;变量作用域;量存储类别; 难点:函数定义、函数调用、函数声明等基本基本概念;函数的嵌套调用与递归调 用;数组作 为函数的参数、变量的存储类别与作用域。 八、 指针 重点和难点:指针与地址的基本概念、指针与变量的关系;指针与数组;指针与字 符串、指针 数组与二级指针;指针的应用 九、 建立自己的数据类型 重点和难点:定义和使用结构体变量、用指针处理链表、共用体类型 十、文件 重点:文件的基本知识、 fopen 、fclose 函数打开与关闭文件、顺序读与数据文件、 随机读写数据文件 难点:用二进制方式向文件读写一组数据。 十一、常见错误分析 重点和难点:文件的基本概念;文件的打开、关闭、常用读写方法。 十二、数组高级应用 重点:不定长数组与二维数组的应用 难点:不定长数组与二维数组的应用 十三、综合应用 重点:数组、if 语句、循环语句、函数知识的综合应用 难点:二维数组、指针 教材、 参 考书 教材:《C 程序设计》(第四版) 谭浩强著 清华大学出版社2010年6月 参考书:《C 程序设计语言》 Kernighan&Ritchie 机械工业出版社 《C 语言程序设计》教案 第1-2课时

C语言程序设计第四版第六章答案_谭浩强

1、用筛选法求100之内的素数。解: #include #include int main() {int i,j,n,a[101]; for (i=1;i<=100;i++) a[i]=i; a[1]=0; for (i=2;i int main() {int i,j,min,temp,a[11]; printf("enter data:\n"); for (i=1;i<=10;i++)

{printf("a[%d]=",i); scanf("%d",&a[i]); } printf("\n"); printf("The orginal numbers:\n"); for (i=1;i<=10;i++) printf("%5d",a[i]); printf("\n"); for (i=1;i<=9;i++) {min=i; for (j=i+1;j<=10;j++) if (a[min]>a[j]) min=j; temp=a[i]; a[i]=a[min]; a[min]=temp; } printf("\nThe sorted numbers:\n"); for (i=1;i<=10;i++) printf("%5d",a[i]); printf("\n"); return 0; } 3、求一个3×3的整型矩阵对角线元素之和。解: #include int main() { int a[3][3],sum=0; int i,j; printf("enter data:\n"); for (i=0;i<3;i++) for (j=0;j<3;j++) scanf("%3d",&a[i][j]); for (i=0;i<3;i++) sum=sum+a[i][i]; printf("sum=%6d\n",sum);

谭浩强--C语言程序设计(第二版)习题答案

C语言程序设计(第2版)课后习题答案 第一章 1.请参照本章例题,编写一个C程序,输出以下信息: ************************** Very good! ************************** 解: #include void main() { printf("**************************"); printf("\n"); printf("Very good!\n"); printf("\n"); printf("**************************"); } 2.编写一个C程序,输入a、b、c三个值,输出其中最大值。 解: #include void main() { int a,b,c,max; printf("请输入三个数a,b,c:\n"); scanf("%d,%d,%d",&a,&b,&c); max=a; if(max #include void main() { double P, r=0.1, n=10; P=pow((1+r), n);

printf("%lf\n", P); } 3.请编程序将"China"译成密码,译码规律是用原来字母后面的第4个字母代替原来的字母。例如,字母"A"后面第4个字母是"E","E"代替"A"。因此,"China"应译为"Glmre"。请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为'C'、'h'、'i'、'n'、'a',经过运算,使c1、c2、c3、c4、c5分别变为'G'、'l'、'm'、'r'、'e',并输出。 解: #include void main() { char c1='C',c2='h',c3='i',c4='n',c5='a'; c1+=4; c2+=4; c3+=4; c4+=4; c5+=4; printf("密码是%c%c%c%c%c\n",c1,c2,c3,c4,c5); } 第三章 3.用下面的scanf函数输入数据,使a=3, b=7, x=8.5, y=71.82, c1='A', c2='a'。问在键盘上如何输入? 解: #include void main() { int a, b; float x, y; char c1, c2; scanf("a=%d, b=%d", &a, &b); scanf(" x=%f, y=%e", &x, &y); scanf(" c1=%c, c2=%c",&c1, &c2); } a=3, b=7 x=8.5, y=71.82 c1=A, c2=a 5. 设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后2位数字。请编程序。 解: #include void main() { float r,h,C1,Sa,Sb,Va,Vb; scanf("%f,%f",&r,&h);

C程序设计第四版谭浩强完整版课后习题答案

C程序设计(第四版)(谭浩强)第一章课后习题答案 #include<>代码均调试成功,若有失误大多不是代码问题.自已找找. int main() { printf("Welcome to \n"); return 0; } #include<> int main() { int a,b,sum; a=5; b=4; sum=a+b; printf("The sum is %d .\n",sum); return 0; } P008 调用函数比较两个数的大小. #include<> int main() { int max(int x,int y); int a,b,c; scanf("%d,%d",&a,&b); c=max(a,b); printf("The max is %d .\n",c); return 0; } int max(int x,int y) { int z; if (x>y) z=x; else z=y; return(z); }

P015 三个数的大小.(数字0表示课后练习题) #include<> int main() { int a,b,c,d; int max(int x , int y , int z); printf("Please input 3 numbers :\n"); scanf("%d %d %d",&a,&b,&c); d=max(a,b,c); printf("The max is :%d .\n",d); } int max(int x , int y , int z) { int m; if (x>y && x>z) m=x; if (y>x && y>z) m=y; if (z>y && z>x) m=z; return (m); } C程序设计(第四版)(谭浩强)第2章课后 习题答案 算法——程序的灵魂 P017 计算机1-5相乘的积. #include<> int main() { int i,s=1; for(i=1;i<6;i++) { s=s*i; n",s); return 0; } #include<> int main() { int i,s=1; for(i=1;i<12;i++) 可以是i=i+2 { if(i%2!=0) s=s*i; else continue; }

C语言程序设计课后习题答案第四版谭浩强完整版

C语言程序设计课后习 题答案第四版谭浩强 HUA system office room 【HUA16H-TTMS2A-HUAS8Q8-HUAH1688】

第1章程序设计和C语言1 1.1什么是计算机程序1 1.2什么是计算机语言1 1.3C语言的发展及其特点3 1.4最简单的C语言程序5 1.4.1最简单的C语言程序举例6 1.4.2C语言程序的结构10 1.5运行C程序的步骤与方法12 1.6程序设计的任务14 1-5 #include int main ( ) { printf ("**************************\n\n"); printf(" Very Good!\n\n"); printf ("**************************\n"); return 0; }

1-6#include int main() {int a,b,c,max; printf("please input a,b,c:\n"); scanf("%d,%d,%d",&a,&b,&c); max=a; if (max

2.2简单的算法举例17 2.3算法的特性21 2.4怎样表示一个算法22 2.4.1用自然语言表示算法22 2.4.2用流程图表示算法22 2.4.3三种基本结构和改进的流程图26 2.4.4用N S流程图表示算法28 2.4.5用伪代码表示算法31 2.4.6用计算机语言表示算法32 2.5结构化程序设计方法34 习题36 第章最简单的C程序设计——顺序程序设计37 3.1顺序程序设计举例37 3.2数据的表现形式及其运算39 3.2.1常量和变量39 3.2.2数据类型42

C语言程序设计谭浩强重点笔记

C语言设计 学习笔记 早晨:06:40 起床 07:20——08:20 英语 1小时 新概念英语(单词、语法、听读背) 大学英语(单词、语法、听读背) 上午:08:30——10:30 计算机基础 2小时 10:50——11:30 计算机科学技术导论 计算机组成原理 微机原理及接口技术 Intel微处理器结构编程与接口 深入理解计算机系统 80x86汇编语言程序设计 8086-8088宏汇编语言程序设计教程 BIOS研发技术剖析 自己动手写操作系统 操作系统原理 Windows操作系统原理 Windows内部原理系列 Windows程序内部运行原理 计算机网络第五版 中午:12:00——02:00 午休 下午:02:30——04:30 计算机应用及编程 Windows用户管理指南、AD配置指南、网络专业 指南、Windows即学即会教程 Windows下32位汇编语言程序设计、C#编程 晚上:05:30——08:00 锻炼、晚餐 08:00——09:00 辅导 09:00——11:00 专业基础 2小时 大学数学、大学物理、电机及拖动、电力电子技 术、通信技术 11:30 休息

目录 第一章C语言概述................................................................................................................................. - 1 - 1.1 C程序结构特点16 ................................................................................................................ - 1 - 1.2 C程序上机步骤17 ................................................................................................................... - 1 -第二章程序的灵魂——算法23 ............................................................................................................ - 2 - 2.1 算法24 ..................................................................................................................................... - 2 - 2.2 算法的三种基本结构............................................................................................................... - 2 - 2.3 结构化程序设计方法42 .......................................................................................................... - 2 -第三章数据类型运算符与表达式48 .................................................................................................. - 2 - 3.1 C语言的基本元素48 ............................................................................................................... - 2 - 3.2 C的数据类型48 ....................................................................................................................... - 2 - 3.3 常量与变量48 .......................................................................................................................... - 3 - 3.4 基本类型................................................................................................................................... - 3 - 3.5 变量63 ..................................................................................................................................... - 4 - 3.6 不同类型数据间的混合运算................................................................................................... - 5 - 3.7 函数的调用过程(补充)....................................................................................................... - 5 -第四章最简单的C程序设计——顺序程序设计77 ........................................................................... - 5 - 4.1 字符数据的输入输出............................................................................................................... - 5 -第五章选择结构的程序设计97 ............................................................................................................ - 6 -第六章循环结构程序设计..................................................................................................................... - 6 - 6.1 语句标号................................................................................................................................... - 6 - 6.2 break语句和continue语句 ...................................................................................................... - 6 -第七章数组132 ...................................................................................................................................... - 6 - 7.1 构造类型................................................................................................................................... - 6 - 7.2 数组133 ................................................................................................................................... - 6 - 7.3 二维数组................................................................................................................................... - 7 - 7.4 字符串——字符数组............................................................................................................... - 7 - 7.5 字符串处理函数#include ...................................................................................... - 7 -第八章函数153 ...................................................................................................................................... - 8 - 8.1 c程序的结构154 ...................................................................................................................... - 8 - 8.2 函数调用参数传递................................................................................................................... - 8 - 8.3 函数变量的作用范围............................................................................................................... - 8 - 8.4 变量的存储类别....................................................................................................................... - 9 -第九章预处理命令197 ........................................................................................................................ - 10 - 9.1 预编译命令作用..................................................................................................................... - 10 -第十章指针211 .................................................................................................................................... - 11 - 10.1 变量的访问方式................................................................................................................... - 11 - 10.2 指针变量............................................................................................................................... - 11 -第十一章结构体270 ............................................................................................................................ - 12 - 11.1 结构体270 ............................................................................................................................ - 12 -

C语言程序设计(第三版)-谭浩强_笔记

C语言程序设计(第三版)-谭浩强_笔记 第一章概述 1. C语言的特点 ①语言简洁、紧凑,使用方便、灵活。共有32个关键字,9种控制语句。 ②运算符丰富,公有34种运算符。 ③数据结构丰富,数据类型有:整型、实型、字符型、数组、指针、结构体、共用体等。 ④具有结构化的控制语句(如if…else、while、do…while、switch、for) ⑤语法限制不太严格,程序设计自由度大。 ⑥允许直接访问物理地址,能进行位(bit)操作,可以直接对硬件操作。 ⑦生成目标代码质量高,程序执行效率高。 ⑧可移植性好。 2. C语言的用途 C虽不擅长科学计算和管理领域,但对操作系统和系统实用程序以及对硬件进行操作方面,C有明显的优势。现在很多大型应用软件也用C编写。 第二章数据类型、运算符与表达式 1. C的数据类型 C的数据类型包括:整型、字符型、实型或浮点型(单精度和双精度)、枚举类型、数组类型、结构体类型、共用体类型、指针类型和空类型。 2.常量与变量 常量其值不可改变,符号常量名通常用大写。变量其值可以改变,变量名只能由字母、数字和下划线组成,且第一个字符必须为字母或下划线。否则为不合法的变量名。变量在编译时为其分配相应存储单元。3.整型数据 整型常量的表示方法:十进制不用说了,八进制以0开头,如0123,十六进制以0x开头,如0x1e。 整型变量分为:基本型(int)、短整型(short int)、长整型(long int)和无符号型。不同机器上各类数据所占内存字节数不同,一般int型为2个字节,long型为4个字节。 4.实型数据 实型常量表示形式:十进制形式由数字和小数点组成(必须有小数点),如:0.12、.123、123 0.0等。指数形式如123e3代表123×10的三次方。 实型变量分为单精度(float)和双精度(double)两类。在一般系统中float型占4字节,7位有效数字,

C程序设计 谭浩强 期末考试题

一、填空题 1.输入一个不包含空格的字符串,将字符串反序输出,如:“abc12”的输出为“21cba”。 #include <> void f(char *p) { char *p1, *p2; char c; p1=p2= ; while( *p2++) ; ; while ( ) { c=*p1; *p1= ; *p2= ; p1++; p2--; } } void main() { char s[200]; printf(“输入一个字符串:”); scanf( ); f(s); printf(“字符串反序:%s\n”,s); } 2.输入1个长整数,求各位数字的平方和。 例如:输入 123,输出14。 #include <> void main( ) { int digit; long in,s; scanf("%ld", &in); ; ; while(in>0){ ; s=s+digit*digit; ; } printf("sum=%ld\n", s);

} 二、程序阅读题 1.写出下面程序运行结果(5分) #include <> #define MSIZE 8 void main() { char im[MSIZE][MSIZE+1]={ “********”, “########”, “#**#***#”, “####***#”, “********”, “#*******”, “********”, “########” }; int i,j; for(j= MSIZE -1;j>=0;j--) { for(i=0;i void main() { char *str1="", *str2=”123424315”; int x=0, i; for(i=0;str1[i]!='\0'&& str2[i]!='\0';i++) if(str1[i]==str2[i]) x++; printf("%d\n",x); 3.写出下列程序的输出结果(4分) #include <> main() { int a=4,b=6; printf("a=%d\n",a<<1); printf("b=%d\n",b>>1); } 4. 写出调用函数f(-123)的输出结果是多少。(6分)

.c程序设计谭浩强第二章习题与答案

习题 2.1什么是算法?是从日常生活中找三个例子,描述他们的算法? 答:对操作的描述,即操作步骤,就是算法。 广义的说;为解决一个问题而采取的方法和步骤,就称为“算法”。 例:(略) 2.2什么叫结构化的算法?为什么要提倡结构化的算法? 答:由基本节构所构成的算法属于“结构化”的算法。 结构化的算法便于编写、阅读、便于修改和维护。这就减少了程序出错的机会、提高了程序的可靠性,保证了程序的质量。 2.3试述三种基本结构的特点,你能否自己另外设计两种基本结构(要符合基本结构的特 点)。 2.4

答:基本结构有以下共同点: 1:只有一个入口。图2-14-------2-17中的a点为入口。 2:只有一个出口。图2-14-------2-17中的b点为出口。注意,一个判断框有两个出口,但一个选择结构只有一个出口。不能混淆。 3:结构内的每一部分都有被执行到的机会。也就是说,对每一个框来说,都应当有一条到出口的路径通过它。图2-20中就没有一条从入口到出口的路径通过A框。 4:结构内不存在死循环(无终止的循环)。图2-21就是一个死循环。 需要说明的是基本结构并不一定只限于以上3中,只要有以上四种特点就可以。人们可以自己定义之。例:如下两图

2.5用传统流程图表示求解一下问题的算法。 (1)有两个瓶子A和B,分别放醋和酱油,要求将他们互换。 #include void main() { int a; int b; int c; a=10;b=5; printf("%d,%d\n",a,b); c=a;a=b;b=c; printf("%d,%d\n",a,b); } (2)一次将10个数输入,要求将将其中最大的数输出。 #include void main() { int a[10]; int i;

相关主题
文本预览
相关文档 最新文档