C程序设计(第五版)谭浩强 学习笔记—重点及易错点(1-5章)

5 篇文章 0 订阅
3 篇文章 0 订阅

第一章 程序设计与C语言

目录

第一章 程序设计与C语言

一、计算机语言的发展

二、C语言的注释方法

三、程序设计任务

第二章 算法—程序的灵魂

一、程序的组成

二、结构化程序设计的方法

第三章 最简单的C程序设计—顺序程序设计

一、数据类型

二、运算符与表达式

三、数据的输入和输出

第四章 选择结构与条件判断

第五章 循环结构程序设计

第六章 利用数组处理批量数据

第七章用函数实现模块化程序设计

第八章 善于利用指针-上


一、计算机语言的发展

1.机器语言

2.汇编语言

3.高级语言

高级语言又经历了:非结构化,结构化,面向对象的发展历程。

二、C语言的注释方法

1.单行注释

如: int i ;    //声明变量

2.多行注释

如:

/*int main()
{
    printf("hello c program");
}*/

三、程序设计任务

1.问题分析

2.设计算法

3.编写程序

4.对源程序进行编辑、编译和运行

5.运行程序,分析结果

注意:C语言的每个语句与数据声明后边都必须要有分号

第二章 算法—程序的灵魂

一、程序的组成

1.数据结构:对数据的描述,在程序中用到的数据及其组织形式。

2.算法:计算机对数据的操作。

程序=算法+数据结构。除了算法与数据结构外,程序员还应该具备编程语言、程序设计方法的技能。

二、结构化程序设计的方法

1.自顶向下

2.逐步细化

3.模块化设计,高内聚,低耦合

4.结构化设计(面向对象思想)

第三章 最简单的C程序设计—顺序程序设计

一、数据类型

1.常量:在程序运行过程中,其值不能被改动的量为常量。

包括:整型常量、实型常量、字符常量、字符串常量、符号常量

符号常量:用#define指令,指定用一个符号代表一个常量。如:

#define    PI   3.14

注意:结尾没有分号!!!!!!!!!

2.变量:在程序运行期间其值可以改变,变量必须先定义后使用。

3.常变量:在定义变量时,前面加一个关键字const。如:

const int a = 1 ;

4.标识符

C语言中标识符,由数字、字母、下换线组成,首位不能是数字。

5.数据类型

(1) 只有整型(包括字符型)数据可以加signed或unsigned修饰符,实型数据不能加。

(2) 对无符号整型数据用“%u”格式输出。%u表示用无符号十进制数的格式输出。如:

unsigned short price=50;	//定义price为无符号短整型变量
printf("%u\n",price); 		//指定用无符号十进制数的格式输出

二、运算符与表达式

1.自增(++)自减(--)运算符

++i是先执行i=i+1,再使用i的值;而i++是先使用i的值,再执行i=i+1。

2.强制类型转换

(double)a        将a转换成double型

(int)(x+y)        将x+y的值转换成int型

(float)(5%3)        将5%3的值转换成float型

注意:强制类型转换时“()”不能忘记,如下:

(int)x+y        只将x转换成整型,然后与y相加 int a; float x,y;double b; a=(int)x 进行强制类型运算(int)x后得到一个int类型的临时值,它的值等于x的整数部分,把它赋给a,注意x的值和类型都未变化,仍为float型。该临时值在赋值后就不再存在了。

3.赋值运算

如果赋值运算符两侧的类型不一致,但都是基本类型时,在赋值时要进行类型转换。类型转换是由系统自动进行的,转换的规则是:

将浮点型数据(包括单、双精度)赋给整型变量时,先对浮点数取整,即舍弃小数部分,然后赋予整型变量。

将整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中。

将一个double型数据赋给float变量时,先将双精度数转换为单精度,即只取6~7位有效数字,存储到float型变量的4个字节中。应注意双精度数值的大小不能超出float型变量的数值范围;

将一个float型数据赋给double型变量时,数值不变,在内存中以8个字节存储,有效位数扩展到15位。

字符型数据赋给整型变量时,将字符的ASCII代码赋给整型变量。

将一个占字节多的整型数据赋给一个占字节少的整型变量或字符变量时,只将其低字节原封不动地送到被赋值的变量(即发生“截断”)。

三、数据的输入和输出

1.C语言没有自己特定的输入输出函数,都是由库函数提供的在使用时,要在源文件头部加上#include<stdio.h>

#include指令说明

三种形式:

#include "c:\cpp\include\myfile.h" 按指定路径查找文件

#include "myfile.h“ 源程序文件所在目录

#include <myfile.h>  C编译系统指定的include目录

2.printf函数

printf(格式控制,输出表列);

(1) “格式控制”是用双引号括起来的一个字符串,称为格式控制字符串,简称格式字符串。包括: ① 格式声明。格式声明由“%”和格式字符组成。作用是将输出的数据转换为指定的格式后输出。 ② 普通字符。普通字符即需要在输出时原样输出的字符。

(2) 输出表列是程序需要输出的一些数据,可以是常量、变量或表达式。

格式

字符

说    明

d,i

以带符号的十进制形式输出整数(正数不输出符号)

o

以八进制无符号形式输出整数(不输出前导符0)

x,X

以十六进制无符号形式输出整数(不输出前导符0x),用x则输出十六进制数的a~f时以小写形式输出,用X时,则以大写字母输出

u

以无符号十进制形式输出整数

c

以字符形式输出,只输出一个字符

s

输出字符串

f

以小数形式输出单、双精度数,隐含输出6位小数

e,E

以指数形式输出实数,用e时指数以“e”表示(如1.2e+02),用E时指数以“E”表示(如1.2E+02)

g,G

选用%f或%e格式中输出宽度较短的一种格式,不输出无意义的0。用G时,若以指数形式输出,则指数以大写表示

附加字符

说    明

l

长整型整数,可加在格式符d、o、x、u前面)

m

(代表一个正整数)

数据最小宽度

n

(代表一个正整数)

对实数,表示输出n位小数;对字符串,表示截取的字符个数

-

输出的数字或字符在域内向左靠

3.scanf函数

scanf(格式控制,地址表列);

1) “格式控制”是用双引号括起来的一个字符串,含义同printf函数。包括: ① 格式声明。以%开始,以一个格式字符结束,中间可以插入附加的字符。 ② 普通字符。

 (2) 地址表列是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址。

4.putchar函数与getchar函数

putchar(c);

getchar();函数没有参数。 函数的值就是从输入设备得到的字符。 只能接收一个字符。 如果想输入多个字符就要用多个函数。 不仅可以从输入设备获得一个可显示的字符,而且可以获得控制字符。 用getchar函数得到的字符可以赋给一个字符变量或整型变量,也可以作为表达式的一部分。如,putchar(getchar());将接收到的字符输出。

第四章 选择结构与条件判断

1.C语言有两种选择语句

if语句,用来实现两个分支的选择结构 ;

switch语句,用来实现多分支的选择结构。

2.if语句

if (表达式)
	语句1 
else 
	语句2

3.关系运算符及其优先次序

<、>、>=、<=4种关系运算符的优先级别相同,==、!=2种也相同。前4种高于后2种。

关系运算符的优先级低于算术运算符。

关系运算符的优先级高于赋值运算符。

优先次序:!(非)→&&(与)→‖(或),

即“!”为三者中最高的; 逻辑运算符中的“&&”和“‖”低于关系运算符,“!”高于算术运算符

4.switch语句

switch()
{
    case 常量1:语句1;
    case 常量2:语句2;
    case 常量3:语句3;
    case 常量4:语句4;
    case 常量5:语句5;
    default: 语句6;
}

(1) 括号内的“表达式”,其值的类型应为整数类型(包括字符型)。

(2) 花括号内是一个复合语句,内包含多个以关键字case开头的语句行和最多一个以default开头的行。case后面跟一个常量(或常量表达式),它们和default都是起标号作用,用来标志一个位置。执行switch语句时,先计算switch后面的“表达式”的值,然后将它与各case标号比较,如果与某一个case标号中的常量相同,流程就转到此case标号后面的语句。如果没有与switch表达式相匹配的case常量,流程转去执行default标号后面的语句。

(3) 可以没有default标号,此时如果没有与switch表达式相匹配的case常量,则不执行任何语句。

(4) 各个case标号出现次序不影响执行结果。

(5) 每一个case常量必须互不相同;否则就会出现互相矛盾的现象。

(6) case标号只起标记的作用。在执行switch语句时,根据switch表达式的值找到匹配的入口标号,在执行完一个case标号后面的语句后,就从此标号开始执行下去,不再进行判断。因此,一般情况下,在执行一个case子句后,应当用break语句使流程跳出switch结构。最后一个case子句(今为default子句)中可不加break语句。

(7) 在case子句中虽然包含了一个以上执行语句,但可以不必用花括号括起来,会自动顺序执行本case标号后面所有的语句。当然加上花括号也可以。

(8) 多个case标号可以共用一组执行语句。

第五章 循环结构程序设计

1.while语句

while(表达式) 语句

while语句可简单地记为: 只要当循环条件表达式为真(即给定的条件成立),就执行循环体语句。 “语句”就是循环体。循环体可以是一个简单的语句,可以是复合语句(用花括号括起来的若干语句)。 执行循环体的次数是由循环条件控制的,这个循环条件就是上面一般形式中的“表达式”,它也称为循环条件表达式。当此表达式的值为“真” (以非0值表示)时,就执行循环体语句;为“假” (以0表示)时,就不执行循环体语句。

例如:求1+2+++100的值

#include<stdio.h>
int main()
{
	int i=1,sum=0;		 //定义变量i的初值为1,sum的初值为0  
	while(i<=100)		//当i>100,条件表达式i<=100的值为假,不执行循环体
	{			//循环体开始
		sum=sum+i;       //第1次累加后,sum的值为1
		i++;		//加完后,i的值加1,为下次累加做准备
	}			//循环体结束
	printf("sum=%d\n",sum);	//输出1+2+3…+100的累加和
	return 0;
}

注意:不要忽略给i和sum赋初值,否则它们的值是不可预测的,结果显然不正确。

2.do  while语句

do   

 语句

while(表达式);

注意:分号

3.for语句

or(表达式1;表达式2;表达式3)

    语句

表达式1: 设置初始条件,只执行一次。可以为零个、一个或多个变量设置初值。 表达式2: 是循环条件表达式,用来判定是否继续循环。在每次执行循环体前先执行此表达式,决定是否继续执行循环。 表达式3: 作为循环的调整,例如使循环变量增值,它是在执行完循环体后才进行的。

4.break语句

作用:使流程跳到循环体之外,接着执行循环体下面的语句。

注意:break语句只能用于循环语句和switch语句之中,而不能单独使用。

5.continue语句

作用:结束本次循环,即跳过循环体中下面尚未执行的语句,转到循环体结束点之前,接着执行for语句中的“表达式3”,然后进行下一次是否执行循环的判定。

continue语句只结束本次循环,而非终止整个循环。break语句结束整个循环,不再判断执行循环的条件是否成立

链接:

第六章 利用数组处理批量数据

第七章用函数实现模块化程序设计

第八章 善于利用指针-上

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DP+GISer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值