本文目录一览:
C语言入门知识
C语言基础知识
1.1 C语言简介
C语言基础知识 C语言于1972年由美国的Dennis Ritchie发明,并首次在配备了UNIX操作系统的DEC PDP-11计算机上实现。它由早期的编程语言BCPL(Basic Combind Programming Language)发展演变而来。1970年,ATT贝尔实验室的Ken Thompson根据BCPL语言设计出了较先进并取名为B的语言,通过不断修改、完善,更先进的C语言问世了。 C语言是一种功能强大、应用广泛、具有发展前途的计算机语言。它既可用于系统软件的设计,也可用于应用软件的开发。许多著名的系统软件都是由C语言编写的。C语言具有下列特点:
- C语言既具有低级语言直接操纵硬件的特点,又具有高级语言与 自然语言和人的思维逻辑相似的特点,C语言程序易编写、易查错,而且实用性很强。
- C语言具有丰富的数据类型和运算符,语法结构简单。
- C语言是一种结构化程序设计语言,提供了完整的程序控制语句。
- C语言是一种模块化程序设计语言,适合大型软件的开发和研制。
- C语言还有一个突出的优点就是适合于多种操作系统,如DOS、UNIX,也适用于多种机型,其程序移植性好。
1.2 C语言的数据类型
数据是程序处理的对象,数据类型是数据的内在表现形式。例如,学生的年龄和成绩具有一般数值的特点,在C语言中称为数值型,其中年龄是整数,称为整型;成绩可以为小数,称为实型。而学生的姓名和性别是文字,在C语言中称为字符型数据。 C语言具有丰富的数据类型,其中基本的数据类型有整型、实型、字符型。
1.2.1 变量
变量是在程序执行过程中其值可以被改变的量。
- 变量命名规则
和人的取名一样,变量的命名也有一定的规则。
- 由字母、数字和下划线组成;
- 必须以字母或下划线打头;
- 字母区分大小写(在系统默认状态下);
- 前32个字符有效(在系统默认状态下)。 例如:a,Book,book,_Make_Cipher都是合法的变量名,且Book与book是不同的变量名,而123A,x+y都不是变量名。
- 变量的数据类型
变量可以是任意的一种数据类型,如整型变量、字符型变量、指针变量等。C语言中的基本数据类型及其特性如表1-1所示。
表1-1 C语言的基本数据类型
数据类型名 数据类型描述 数据类型的长度(字节) 数据取值范围 char 字符型 1 0~255 int 有符号整型 2 –32 768~32 767 unsigned int 无符号整型 2 0~65 535 short 短整型 2 –32 768~32 767 long 长整型 4 –2 147 483 648~2 147 483 647 unsigned long 无符号长整型 4 0~4 294 967 295 float 单精度实数 4 double 双精度实数 8 long double 长双精度实数 10 - 变量的定义
每个变量在使用前都必须先定义其数据类型,定义变量数据类型的语法格式如下:
例如:数据类型符 变量名1,变量名2,…;
int age,score; /* 定义年龄和成绩为整型 */ char name[20]; /* 定义姓名为至多含20个字符的字符数组 */
- 变量的存储类型
当定义某个变量时,C语言的编译系统就要给该变量分配若干个存储单元用来存放该变量的值。而在计算机中寄存器和内存都可以存放数据,内存又可分为临时占用和长期占用。变量的存储类型是指变量在计算机中的存放位置及时间。
定义变量存储类型的语法格式如下:
变量的存储类型有自动型(auto)、寄存器型(register)、静态型(static)和外部型(extern),具体特点和使用方法在后面的章节中详细介绍。 在变量定义时,如未说明存储类型,则系统默认为自动型(auto)。存储类型符 数据类型符 变量名1,变量名2,…;
- 变量的初始化
变量的初始化是给变量赋初值的一种方法,是指在变量定义时就给变量赋予初始值。变量初始化的方法很简单,在变量定义的语句中,在变量名后加一个等号和初值即可。
例如:
在上面的定义中,变量x未赋初值,而变量age和score的初值分别为20和100。 在程序中,变量未赋值之前不允许使用,即要遵循“先赋值后使用”的规则。int x, age=20, score=100;
1.2.2 常量
常量是在程序运行过程中值不发生改变的数据。例如,圆周率3.1415926就是一个常量。常量也有数据类型,它们是整型常量、实型常量、字符常量、字符串常量及符号常量,整型常量及实型常量的数据长度及取值范围与变量的规定相同。
- 整型常量
整型常量用来表示整数,整型数据可以以不同数制形式来表示,不同的进位制有其不同的表示方式,其表示方式如表1-2所示。
表1-2 整型常量的表示方式
数 制 表 示 方 式 示 例 十进制 一般整数的写法 0,–22,55 八进制 在八进制整数前加数字0 00,–072,+0331 十六进制 在十六进制整数前加数字0和字母x 0x0,0x1B5,–0xb3 另外,对于长整型常量,应当在其后加后缀L或l,例如30L。30L和30数值一样,但占用内存的大小不一样。30占用2个字节的存储空间,而30L占用4个字节的存储空间。 - 实型常量
实型常量只有十进制数表示方式,它没有单精度和双精度之分。其表示方式有定点数表示和浮点数表示两种。具体表示方式如表1-3所示。
表1-3 实型常量的书写方法
类 别 表 示 方 式 示 例 定点数 整数部分.小数部分 0.0,1.34,–34.0 浮点数 尾数E(或e)指数 3.57E10,–5.6e–9 说明: - 浮点数表示方式相当于数学中的科学计数法,其换算公式如下:
尾数E(或e)指数 = 尾数 × 10^指数
- 浮点数中的指数部分只能是整型数,尾数可以大于或等于10。
- 浮点数表示方式相当于数学中的科学计数法,其换算公式如下:
- 字符常量
字符常量是用两个单引号引住单个字符来表示的。例如:'A'、'*'、'!'等。使用字符常量时应注意以下几点:
- 空格也是字符,表示为'a'。
- 单引号中必须恰好有一个字符,不能空缺。如' '是错误的字符常量。
在C语言中有一类特殊的字符常量,被称为转义字符。它们用来表示特殊符号或键盘上的控制代码,常见的转义字符如表1-4所示。
表1-4 常用转义字符表
| 转义字符 | 意义 | 转义字符 | 意义 |
|----------|--------------|----------|--------------|
| \n | 回车换行符 | \a | 响铃 |
| \t | 水平制表符 | " | 双引号 |
| \v | 垂直制表符 | ' | 单引号 |
| \b | 左退一格 | \ | 反斜杠 |
| \r | 回车符 | \ddd | 1
3位八进制数ddd对应的字符 | | \f | 换页符 | \xhh | 12位十六进制数hh对应的字符 |
- 字符串常量
字符串是用双引号引住的若干个字符。例如,"hello!","485769","a"。
字符串可以不含任何字符,称为空串,表示为""。
字符串中所含的字符个数称为字符串的长度。例如,"abc123","3",""的长度分别为6,1,0。计算字符串长度时应注意以下几点:
- 对于含有转义字符的字符串,应将转义字符计算为1个字符。例如,"abc\12\n"的长度为7,而不是9;"abc\\12\n"及"abc\\123\n"的长度均为6。
- 在字符串中,反斜杠表示转义字符的开始,如果其后面没有表1-4中所列出的转义符号,则该反斜杠被忽略,并不参与计算长度。例如,"\A"的长度为1,但""是非法的。
- 符号常量
上面所介绍的常量都是具体数据,在程序中也可以用特定符号来表示某个常量,这个符号被称为符号常量。
符号常量的语法格式如下:
例如:#define 符号常量名 常量
经过上述定义后,可以在程序中使用PI来代替3.1415926。 在程序中使用符号常量有两个好处:一是提高了程序的易读性;二是为修改程序提供了方便。例如,当不需要太高精度时,只需要将符号常量定义修改为#define PI 3.1415926
而不需要在程序中去修改每一处的圆周率。#define PI 3.14
1.3 算术运算符与算术表达式
用来表示各种运算的符号称为运算符。C语言中包括以下七大类的基本运算符:算术运算符、逻辑运算符、关系运算符、赋值运算符、逗号运算符、条件运算符和位运算符。本节主要介绍算术运算符,其他的运算符将在后续章节中详细介绍。
1.3.1 算术运算符
C语言中的算术运算符和数学中的算术运算相似,是对数据进行算术运算的。算术运算符的运算对象、运算规则及结合性如表1-5所示。 表1-5 算术运算符
运算对象个数 | 名称 | 运算符 | 运算规则 | 数据类型 | 结合性 |
---|---|---|---|---|---|
单目 | 正 | + | 取原值 | 整型或实型 | 自右向左 |
单目 | 负 | – | 取负值 | ||
双目 | 加 | + | 加法运算 | 自左向右 | |
双目 | 减 | – | 减法运算 | ||
双目 | 乘 | * | 乘法运算 | ||
双目 | 除 | / | 除法运算 | ||
双目 | 模 | % | 整除取余 | 整型 | |
单目 | 增1(前缀) | ++ | 先加1,后使用 | 整型、字符型、指针型变量或数组元素、实型 | 自右向左 |
单目 | 增1(后缀) | ++ | 先使用,后加1 | ||
单目 | 减1(前缀) | –– | 先减1,后使用 | ||
单目 | 减1(后缀) | –– | 先使用,后减1 | ||
在C语言中,参加运算的对象个数称为运算符的“目”。单目运算符是指参加运算的对象只有一个,如+10,–67,x++。双目运算符是指参加运算的对象有两个,如2+3,7%3。 | |||||
相同运算符连续出现时,有的运算符是从左至右进行运算,有的运算符是从右至左进行运算,C语言中,将运算符的这种特性称为结合性。 | |||||
加法(+)、减法(–)、乘法()与数学中的算术运算相同。例如:3.5+4.7结果是8.2;3.5 – 4.7结果是–0.8;3.54.7结果是16.45。 | |||||
除法运算(/)与数学中的除法不完全相同,它与参加运算的对象的数据类型相关。当参加运算的两个对象均为整型数据时,其运算结果为数学运算结果的整数部分。如7/4结果为1,而不是1.75。若参加运算的两个对象有一个是实型或两个都是实型,那么运算结果为实际运算的值,如7/5.0的运算结果为1.4。 | |||||
模运算的运算对象必须为整型,结果是相除后的余数,如7%5结果为2。 | |||||
增1减1运算符都是单目运算符,用来对整型、实型、字符型、指针型变量或数组元素等变量进行加1或减1运算,运算的结果仍是原类型。 |
1.3.2 常用数学函数
C语言系统提供了400多个标准函数(称为库函数),设计程序时可以直接使用它们。库函数主要包括数学函数、字符处理函数、类型转换函数、文件管理函数及内存管理函数等几类。下面介绍常用的数学函数,其他类型的函数将在后面章节中陆续介绍。
- 函数名:abs
- 原型:
int abs(int i);
- 功能:求整数的绝对值。
例如,设
x=abs(5)
,y=abs(–5)
,z=abs(0)
,则x=5
,y=5
,z=0
。
- 原型:
- 函数名:labs
- 原型:
long labs(long n);
- 功能:求长整型数的绝对值。
例如,设
x=labs(40000L)
,y=labs(–5)
,z=labs(0)
,则x=40000
,y=5
,z=0
。
- 原型:
- 函数名:fabs
- 原型:
double fabs(double x);
- 功能:求实数的绝对值。
例如,设
x=fabs(5.3)
,y=fabs(–5.3)
,z=fabs(0)
,则x=5.3
,y=5.3
,z=0
。
- 原型:
- 函数名:floor
- 原型:
double floor(double x);
- 功能:求不大于x的最大整数,它相当于数学函数[x]。
例如,设
x=floor(–5.1)
,y=floor(5.9)
,z=floor(5)
,则x= –6
,y=5
,z=5
。
- 原型:
- 函数名:ceil
- 原型:
double ceil(double x);
- 功能:求不小于x的最小整数。
例如,设
x=ceil(–5.9)
,y=ceil(5.1)
,z=ceil(5)
,则x = –5
,y=6
,z=5
。
- 原型:
- 函数名:sqrt
- 原型:
double sqrt(double x);
- 功能:求x的平方根。
例如,设
x=sqrt(4)
,y=sqrt(16)
,则x=1.414214
,y=4.0
。
- 原型:
- 函数名:log10
- 原型:
double log10(double x);
- 功能:求x的常用对数。
- 原型:
- 函数名:log
- 原型:
double log(double x);
- 功能:求x的自然对数。
- 原型:
- 函数名:exp
- 原型:
double exp(double x);
- 功能:求欧拉常数e的x次方。
- 原型:
- 函数名:pow10
- 原型:
double pow10(int p);
- 功能:求10的p次方。
例如,设
x=pow10(3)
,y=pow10(0)
,则x=1000
,y=1
。
- 原型:
- 函数名:pow
- 原型:
double pow(double x, double y);
- 功能:求x的y次方。
例如,设
x=pow(3,2)
,y=pow(–3,2)
,则x=9
,y=9
。
- 原型:
- 函数名:sin
- 原型:
double sin(double x);
- 功能:正弦函数。
- 原型:
- 函数名:cos
- 原型:
double cos(double x);
- 功能:余弦函数。
- 原型:
- 函数名:tan
- 原型:
double tan(double x);
- 功能:正切函数。
- 原型:
1.3.3 算术表达式
由算术运算符和运算对象连接形成的式子称为算术表达式。 算术运算符的优先级从高到低规定如下:
++ ––
* / %
+ –
位于同一行的运算符的优先级相同。
1.4 数据类型转换规则
对数据进行运算时,要求参与运算的对象的数据类型相同(运算得到的运算结果的类型与运算对象也相同)。因此,在运算过程中常常需要对变量或常量的数据类型进行转换,转换的方法有两种,一种是系统自动转换(又称为隐式转换);另一种是在程序中强制转换(又称为显式转换)。
1.4.1 自动转换规则
在不同类型数据的混合运算中,由系统自动实现转换。转换规则如下:
- 若参与运算的数据的类型不同,则应先转换成同一类型,然后进行运算。
- 将低类型数据转换成高类型数据后进行运算。如int型和long型运算时,先把int型转换成long型后再进行运算。 类型的高低是根据其所占空间的字节数按从小到大的顺序排列的,顺序如下:
char,int,long,float,double。
- 所有的浮点运算都是按照双精度进行运算的,即使仅含float型单精度量运算的表达式,也要先转换成double型,再作运算。
- char型和short型参与运算时,必须先转换成int型。 例如,设有:
float PI=3.14;
int s,r=7;
s=r*r*PI;
因为PI为单精度型,s和r为整型,在执行s=r*r*PI
语句时,r和PI都转换成double型后再进行计算,运算结果也为double型,右边的运算结果为153.86,但由于s为整型,故应将赋值号右边的运算结果转换成整型(舍去小数部分),因此s的值为153。
1.4.2 强制类型转换
强制类型转换是通过类型转换运算来实现的,其语法格式如下:
(类型说明符)(表达式)
其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。例如:(float) a
把a转换为实型;(int)(x+y)
把x+y的结果转换为整型;而(int)x+y
则只将x转换为整型。
在使用强制类型转换时应注意以下问题:
- 类型说明符和表达式都必须加括号(单个变量可以不加括号),如把
(int)(x+y)
写成(int)x+y
则只是把x转换成int型之后再与y相加。 - 对于被转换的单个变量而言,无论是强制转换还是自动转换,都只是为了本次运算的需要而对变量的数据长度进行临时性转换,而不会改变变量定义时所声明的类型。 例如,设有:
float f = –5.75;
int x;
x= (int)f;
将f强制转换成整数–5,因此x = –5,而f本身的类型并未改变且其值仍为–5.75。
1.5 程序结构
1.5.1 主函数结构
每一个C源程序都是一系列函数的集合。其中,必须有且只能有一个主函数,其函数名为main,其结构如下:
void main(void)
{
...
}
其中,void main(void)
称为函数说明部分(又称函数头),而
{
...
}
称为函数体,函数体中的每个语句行末尾都必须用分号结束。
1.5.2 文件包含命令
C语言系统提供了400多个库函数,并将这些函数根据其功能分成了若干组,每组都有一个组名。如数学类函数组的组名为math。在C语言系统所安装文件夹的下级文件夹中有一个与其相对应的文件math.h,这些扩展名为.h的文件称为头文件。
include
称为文件包含命令,当用户在程序中使用到系统的标准库函数中的函数时,需要在程序中(一般在程序的首部)增加一条预处理语句如#include <stdio.h>
,以便告知系统需要使用某个头文件中的函数。
1.5.3 C语言程序基本结构
一个完整的C语言源程序由如下5个部分构成:
- 预处理命令;
- 全局变量说明;
- 函数原型说明;
- 主函数;
- 其他子函数。 一个简单的C语言源程序只需要(1)和(4)两个部分,其中“预处理命令”一般是一系列文件包含命令,即include命令。 关于程序结构,应当注意以下几方面的问题:
- 可由若干个函数构成,其中必须有且只有一个以main命名的主函数,可以没有其他函数。每个函数完成一定的功能,函数与函数之间可以通过参数传递信息。main()函数可以位于原程序文件中任何位置,但程序的执行总是从main函数开始,main函数执行完毕时程序执行结束。
- 子函数的结构与主函数相同,即分为函数说明部分和函数体两个部分。
- 函数中的每个语句最后要有一个分号,作为语句结束标记。但某些特殊的语句行末尾不需要分号,有时还不能有分号。
- “/”和“/”括住的任意一段字符称为“程序注释”,用来对程序作说明,可以插入到程序的任何地方,且可以跨行使用。程序注释不影响程序运行结果。
- 函数的书写格式很灵活,在一行中可以书写多个语句(每个语句末尾都要有分号),一个语句也可以写在多行中。在程序的任何地方都可以插入空格或回车符。
- 主函数可以调用任何子函数但不能调用它自己,任何子函数之间也可以相互调用,但是子函数不能调用主函数。 下面是一个简单的C语言源程序: 【例1-1】 求圆的面积。
#include <stdio.h>
void main(void)
{
float r,s,p=3.14;
r=10.5;
s=r*r*p;
printf("圆的面积是:%f ",s);
}
下面是一个较完整的C语言源程序: 【例1-2】 较完整的C语言程序示例。
#include <stdio.h>
#include <conio.h>
int y,z;
void abc(int x);
void main(void)
{
int x;
clrscr();
x=10;
y=20;
z=30;
printf("ok1: x=%d y=%d z=%d \n",x,y,z);
abc(x);
printf("ok2: x=%d y=%d z=%d \n",x,y,z);
getch();
}
void abc(int x)
{
int y;
printf("ok3: x=%d y=%d z=%d \n",x,y,z);
x=100;
y=200;
z=300;
printf("ok4: x=%d y=%d z=%d \n",x,y,z);
}
C语言教程
- 用goto语句和if语句构成循环;
- 用while语句;
- 用do-while语句;
- 用for语句;
goto
语句是一种无条件转移语句,与BASIC中的goto语句相似。goto
语句的使用格式为:goto 语句标号;
goto
语句通常不用,主要因为它将使程序层次不清,而且不易读,但在多层嵌套退出时,用goto
语句则比较合理。while
语句的语义是:计算表达式的值,当值为真(非0)时,执行循环体语句。- 这个循环与
while
循环的不同在于:它先执行循环中的语句,然后再判断表达式是否为真,如果为真则继续循环;如果为假,则终止循环。因此,do-while
循环至少要执行一次循环语句。 - 在C语言中,
for
语句使用最为灵活,它完全可以取代while
语句。for
语句它的执行过程如下:for(表达式1;表达式2;表达式3) 语句
- 先求解表达式1。
- 求解表达式2,若其值为真(非0),则执行
for
语句中指定的内嵌语句,然后执行下面第3步;若其值为假(0),则结束循环,转到第5步。 - 求解表达式3。
- 转回上面第2步继续执行。
- 循环结束,执行
for
语句下面的一个语句。
求C语言详细教程
推荐:
- C语言编程宝典
- C In China
- 百度C语言吧
- 编程中国
- C语言之家
- C语言基地 c语言基地 有名校教师 视频 教学 我认为要学好C语言首先必须了解等级考试C语言的大纲和内容,以及各种辅助材料的用途,这是学好C的基础。从以前的经验以及考网上的一些信息可知,要自学C语言必须准备以下资料:
- 教材:大家现在都公认是清华大学谭浩强主编的那本,当然有其他的也可以,如高校出版社的。
- 习题集:我认为清华大学的《C语言样题汇编》不错。书后面附有答案。
- 上机练习:我认为南开大学的那个可以,最好是在考前从头到尾做一遍。答案可以去考网下载区下载。
- 大纲:这个肯定要的,可以在考网二级版那里去下,然后打印出来。
- 自学计划:为了做到有计划有目的地学习C语言,大家可以根据自己的学习(或工作)情况,制定一个自学计划,循序渐进地学习。
- 模拟盘:为了更好地熟悉考场环境,下一个模拟盘是必不可少的,可以在。下载,注意,在下载时要把锁匙盘一起下回来,否则不能进入考试环境。
- 教学光盘:如果能买到C语言的教学光盘,那当然更好,这样可以更直观地学习C语言了。 下面从微观上针对C语言的几个重点和难点,逐个谈谈具体的自学方法。
如何学习C语言的运算符和运算顺序
C语言的运算功能十分丰富,运算种类远多于其它程序设计语言。因此,当多种不同运算组成一个运算表达式,即一个运算式中出现多种运算符时,运算的优先顺序和结合规则显得十分重要。 初学者往往对此感到非常困难,觉得C语言学习太繁杂,其实只要我们对此合理进行分类,找出它们与我们在数学中所学到运算之间的不同点之后,记住这些运算也就不困难了,有些运算符在理解后更会牢记心中,将来用起来得心应手,而有些可暂时放弃不记,等用到时再记不迟。 下面是所有的运算符按优先级不同分类列表:(对不起,因为表格显示不正常,已被我删除大家可以看书上的) 表中列出15种优先级的运算符,从高到低,优先级为1 ~ 15,最后边一栏是结合规则,除第2、3级和第14级为从右至左结合外,其它都是从左至右结合,它决定同级运算符的运算顺序。 下面我们通过几个例子来说明:
3*20/4%10
这个表达式中出现3种运算符,是同级运算符,运算顺序按从左至右结合,因此先计算3 * 20=60
,然后被4除,结果为15,最后是%(求余数)运算,所以表达式的最终结果为15%10 = 5
。a = 3;b = 5;c =++ a* b ;d =a + +* b;
例子中的“;”是C语言的语句分隔符,执行顺序为从左到右,第1条语句执行后a的值为3,第2条语句执行后b的值为5,第3条语句中有两个运算符前置++
和*
,按表中所列顺序,++
先执行,*
后执行,所以++ a
执行后,a的值为4,由于++
为前置运算,所以a的值4参与运算,C的值为20,最后执行第4条语句,由于a + +
为后置运算,所以a值为4参与运算,使得d的值仍为20,而a参与运算后其值加1,值为5。 这个例子执行后,a的值为5,b的值为5,c的值为20,d的值也是20。a = 3,b = 5,b+ = a,c = b* 5
例子中的“,”是逗号结合运算,上式称为逗号表达式,自左向右结合,最后一个表达式的结果值就是逗号表达式的结果,所以上面的逗号表达式结果为40,a的值为3,b的值为8,c的值为40。
如何学习C语言的四种程序结构
- 顺序结构
这种结构的程序比较简单,就是按照语句的排列顺序依次执行的机制。顺序结构的执行顺序是自上而下,依次执行,因此编写程序也必须遵守这一规定,否则你的程序执行结果就不对。
例如;
a = 3,b = 5
,现交换a,b的值,正确的程序为:
执行结果是c = a; a = b; b = c;
a = 5
,b = c = 3
。如果改变其顺序,写成:
则执行结果就变成a = b; c = a; b = c;
a = b = c = 5
,不能达到预期的目的,这是初学者常犯的错误。 顺序结构可以独立使用构成一个简单的完整程序,常见的输入、计算,输出三步曲的程序就是顺序结构,例如计算圆的面积,其程序的语句顺序就是输入圆的半径R,计算S = 3.14159*R*R
,输出圆的面积S。而大多数情况下顺序结构都是作为程序的一部分,与其它结构一起构成一个复杂的程序,例如分支结构中的块体、循环结构中的循环体等。 - 分支结构
分支结构与顺序结构不同,其执行是依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序。分支结构的程序设计方法的关键在于构造合适的分支条件和分析程序流程,根据不同的程序流程选择适当的分支语句。
分支结构适合于带有逻辑条件判断的计算,设计这类程序时往往都要先绘制其程序流程图,然后根据程序流程写出源程序,这样做把程序设计分析与语言分开,使得问题简单化,易于理解。程序流程图是根据解题分析所绘制的程序执行流程图。
学习分支结构不要被分支嵌套所迷惑,只要弄清基本的分支结构,嵌套结构也就不难了。嵌套只不过是分支块体中又包括分支语句而已,不是新知识,只要你基础知识扎实,分支嵌套也难不住你,下面我们重点讨论几种基本的分支结构的学习方法。
if(条件) { 块 }
这种分支结构中的块可以是一条语句,此时“{ }”可以省略,也可以是多条语句。它有两条分支路径可选,一条是条件为真,执行块,另一条是条件不满足,跳过块。 如,计算x的绝对值,根据绝对值定义,我们知道,当x=0时,其绝对值不变,而x<0时其绝对值是为x的反号,因此程序段为:if(x < 0) x = -x;
if(条件) { 块1 } else { 块2 }
这是典型的分支结构,如果条件成立,执行块1,否则执行块2,块1和块2都有1条或若干条语句构成。 如:求ax^2+bx+c=0
的根 分析:因为当b^2-4ac=0
时,方程有两个实根,否则(b^2-4ac<0
)有两个共轭复根。其程序段如下:d = b*b - 4*a*c; if(d >= 0) { x1 = (-b + sqrt(d)) / (2*a); x2 = (-b - sqrt(d)) / (2*a); printf("x1=%8.4f,x2=%8.4f\n",x1,x2); } else { r = -b / (2*a); i = sqrt(-d) / (2*a); printf("x1=%8.4f+%8.4fi\n", r, i); printf("x2=%8.4f-%8.4fi\n", r, i); }
- 多路分支:其语句格式为:
if(条件1) { 块1 }; else if(条件2) { 块2 } else if(条件3) { 块3 } ... else if(条件n) { 块n } else { 块n+1 }
switch
语句:switch
语句也是多分支选择语句,又称为多路开关语句,到底执行哪一块,取决于开关设置,也就是表达式的值与常量表达式相匹配的那一路,它不同if-else
语句,它的所有分支都是并列的,程序执行时,由第一分支开始查找,如果相匹配,执行其后的块,接着执行第2分支,第3分支……的块,直到遇到break
语句;如果不匹配,查找下一个分支是否匹配。
- 循环结构
循环结构可以减少源程序重复书写的工作量,用来描述重复执行某段算法的问题,这是程序设计中最能发挥计算机特长的程序结构,C语言中提供四种循环,即
goto
循环、while
循环、do-while
循环和for
循环。 四种循环可以用来处理同一问题,一般情况下它们可以互相代替换,但一般不提倡用goto
循环,所以下面我们重点讲解另外的三种循环。 常用的三种循环结构学习的重点在于弄清它们相同与不同之处,以便在不同场合下使用,大家好好看一下书中三种循环的格式和执行顺序,如何替换使用,如把while
循环的例题,用for
语句重新编写一个程序,这样能更好地理解它们的作用。 注意:在while
和do-while
循环体内和for
循环中的第3语句中,应包含趋于结束的语句(如i++
,i--
),否则就可能成了一个死循环,这也是初学者的一个常见错误。 下面我们来讨论下这三种循环的异同之处:- 用
while
和do-while
循环时,循环变量的初始化的操作应在循环体之前,而for
循环是在语句1中进行的; while
循环和for
循环都是先判断表达式,后执行循环体,而do-while
循环是先执行循环体后判断表达式,也就是说do-while
的循环体最少被执行一次,而while
循环和for
就不一定了。- 这三种循环都可以用
break
语句跳出循环,用continue
语句结束本次循环,而goto
语句与if
构成的循环,不能用break
和continue
语句进行控制。 这三种结构并不是彼此孤立的,在循环中可能出现分支、顺序结构,分支中也可能出现循环、顺序结构而把循环、分支看成一个语句,它又是构成顺序结构的一个元素,因此这三种结构相互结合,就能实现各种算法,设计出解题程序,但若是很大的题目,这样编出的程序往往很长,重复结构多,并且可阅读性差,因此我们常将C程序设计成模块化结构。
- 用
- 模块化程序结构
C语言的模块化程序结构用函数来实现,即将复杂的C程序分为若干模块,每个模块都编写成一个合法的C函数,然后用主函数调用函数及函数调用函数实现一大C程序:C程序=主函(main)+若干个函数。
在程序设计中,常将一些常用的功能模块写成函数,也可以将大程序段分割成若干函数,前者目的在于减少重复编写程序段的工作量,后者目的在于缩短模块长度,以便程序阅读方便。
一个源程序文件由一个或多个函数组成,它是一个编译单位,而一个C程序由一个或多个源程序文件组成。对较大的程序,往往分成多个文件,这样可以分别编写、分别编译,提高调试效率,一个源程序文件可以被多个C程序公用。
C程序的执行是从
main()
函数开始,调用其它函数后流程回到main
函数,在main
中结束整个函数运行,main
函数的称是系统规定的,用户可以修改其内容即函数体,但不能修改其名称和参数,一个C程序必须有一个main
函数,也只能有一个main
函数。 所有函数都是平行的,即在定义函数时是互相独立的一个函数不从属于另一个函数,即函数不能嵌套定义,但可以互相调用,但不能调用main
函数。 函数分成两类,即标准函数和用户自定义函数,标准函数又称库函数,由系统提供,用户可直接调用,C语言提供了丰富的库函数,请考生在编写C程序时查阅教材后的函数说明,这可节省你的编程工作量;用户自定义函数由编程者自己编写。
C语言程序设计教程(第二版) 周宇 课后答案
二、1. I love China! printf("we are students.\n")
2. 6 项目实训题参考答案
- 编写一个C程序,输出以下信息:
******************** I am a student! ********************
main() { printf("********************\n"); printf(" I am a student!\n "); printf("********************\n"); }
- 已知立方体的长、宽、高分别是10cm、20cm、15cm,编写程序,求立方体体积。
本程序运行结果为:main() { int a,b,c,v; a=10; b=20; c=15; v=a*b*c; printf("v=%d",v); }
v=3000
第2章 编制C程序的基础知识 一、选择题
C B A B A C C
二、操作题
2 21. 3,2,-8,2
3.000000,2.500000,-8.000000 - ABC DE FGH why is 21+35 equal 52
- 3 1 4 3 2 3 1 2 4. aa bb cc abc A N
项目实训题 - 定义一个符号常量M为5和一个变量n值为2,把它们的乘积输出。
#define M 5 main() { int n,c; n=2; c=M*n; printf("%d\n",c); }
- 编程求下面算术表达式的值。
(1)
x+a%3*(int)(x+y)%2/4
,设x=2.5,a=7,y=4.7
; (2)(float)(a+b)/2+(int)x%(int)y
,设a=2,b=3,x=3.5,y=2.5
。 (1)
(2)main() { int a=7; float x=2.5,y=4.7; printf("%f\n",x+a%3*(int)(x+y)%2/4); }
main() { int a=2,b=3; float x=3.5,y=2.5; printf("%f\n",(float)(a+b)/2+(int)x%(int)y); }
第三章 顺序结构程序设计
一、选择题
A C D C C
二、操作题
- x=3,a=2,b=3
- z=12.700000
- 1 2 1 a 2 1 2
三、编程题 - 某工种按小时计算工资,每月劳动时间(小时)×每小时工资=总工资,总工资中扣除10%公积金,剩余的为应发工资。编写一个程序从键盘输入劳动时间和每小时工资,打印出应发工资。
本程序运行结果为:#include <stdio.h> main() { float sj,gz,yfgz; printf("time,salary:"); scanf("%f,%f",&sj,&gz); yfgz=sj*gz*0.9; printf("total salary:%f\n",yfgz); }
time,salary:4,3 total salary:10.800000
- 编写一个程序求出任意一个输入字符的ASCII码
本程序运行结果为:#include <stdio.h> main() { char c; printf("Input a string:"); scanf("%c",&c); printf("%c ASCII is %d\n",c,c); }
Input a string:a a ASCII is 97
- 编写一个程序用于水果店售货员算帐:已知苹果每斤2.50元,鸭梨每斤1.80元,香蕉每斤2元,橘子每斤1.6元,要求输入各类水果的重量,打印出应付金额。
第四章 选择结构程序设计
一、略
二、B B A B C B A
三、1. 1 0 2. 2 3 2 2 3. 10 20 0 4. ch='A' || ch='Z' || ch='a' || ch='z' ch='0' || ch='9' ch==' ' 5. -1
四、上机操作 - 从键盘输入一个英文字母,如果是大写字母,则将它变为小写字母输出;如果是小写字母,则将其变为大写字母输出。
#include<stdio.h> main() { char ch; ch=getchar(); if(ch>='A' && ch<='Z') ch+=32; else if(ch>='a' && ch<='z') ch-=32; putchar(ch); putchar('\n'); }
- 根据输入的x值依据下列表达式,计算y的值。
y = 2x (x < -1) 3 (x == -1) 4 + x (x > -1)
本程序运行结果为:main() { float x,y; scanf("%f",&x); if(x < -1) y = 2*x; else if(x == -1) y = 3; else y = 4 + x; printf("y=%f",y); }
-2 y=2.000000
- 编写程序,输入一个整数,判断它是奇数还是偶数,若是奇数,输出“Is Odd”;若是偶数,输出“Is Even”。
main() { int x; scanf("%d",&x); if(x % 2 == 0) printf("Is Even\n"); else printf("Is Odd\n"); }
- 设计应用程序,求二次方程
ax^2+bx+c=0
的解。#include<math.h> main() { float a,b,c,disc,x1,x2,p,q; scanf("%f,%f,%f",&a,&b,&c); if(fabs(a) <= 1e-6) printf(" The equation is not a quadratic\n"); else { disc = b*b - 4*a*c; if(fabs(disc) <= 1e-6) printf("x1=x2=%8.4f\n",-b/(2*a)); else if(disc > 1e-6) { x1 = (-b + sqrt(disc)) / (2*a); x2 = (-b - sqrt(disc)) / (2*a); printf("x1=%8.4f,x2=%8.4f\n",x1,x2); } else { p = -b / (2*a); q = sqrt(-disc) / (2*a); printf("%8.4f+%x8.4fi\n",p,q); printf("%8.4f-%8.4fi\n",p,q); } } }
- 按托运规则,行李不超过50公斤时,运费为0.15元/公斤,如超过50公斤,超过部分的运费为0.22元/公斤,现有行李w公斤,编写一个程序计算运费。
本程序运行结果为:#include <stdio.h> main() { float w,f,x; printf("weight:"); scanf("%f",&w); if(w <= 50) x = 0.15 * w; else x = 0.15 * 50 + 0.22 * (w - 50); printf("money:%6.2f yuan\n",x); }
weight:20 money:3.00 yuan weight:60 money:9.70 yuan
- 某商场给与顾客购物的折扣率如下:
- 购物金额 < 200元:不打折
- 200元 ≤ 购物金额 < 500元:9折
- 500元 ≤ 购物金额 < 1000元:8折
- 购物金额 ≥ 1000元:7.5折 输入一个购物金额,输出打折率、购物实际付款金额。
#include<stdio.h> main() { float x,y,realx; scanf("%f",&x); if(x <= 0) { printf("Error! You input a worry number!\n"); y=0; } else { if(x < 200) y = 1.0; else if(x < 500) y = 0.9; else if(x < 1000) y = 0.8; else y = 0.75; } if(y != 0) { realx = x * y; printf("y=%f, the realx=%5.2f\n", y, realx); } }
第五章 循环结构程序设计
一、选择题
C C A A D D
第六章 数组
一、选择题
D A D A A C C A D
二、程序阅读题
13 13 13 13 13 13
第七章 函数
一、选择题
B D C B B D A A D
第八章 指针
一、选择题
D A C C(D) D C D
二、填空题
- m
- 指针数组名
- ABCDCD
- 49
- 25
c语言教程
在这里我把C语言的教程跟你列举出来吧,希望你会喜欢 C语言教程地址:
c语言编程怎样入门
任何知识的学习没有太多捷径,但有经验、方法及教训
- 基础教材选择-系统又通俗易懂,最好有该书配套免费视频 建议选择系统正统的大学教材,尽量不要选择“多少天精通C语言”等吸引眼球的教程,相信一点C语言学习没有速成。这里给大家推荐一本不错的入门教程:清华大学出版社-孙海洋-C语言程序设计,讲解很透彻、知识点很全面、例程较多且通俗易懂。优酷“孙海洋课题”还有全书免费教学视频,便于自学。
- 动起手来--立马安装VC++6.0或VS开发环境 C语言是特别注重动手实操能力的课程!!动起手来,现在开始安装VC++6.0开发环境,从第一个经典程序“Hello,world!”开始,每一个例题及知识点均通过开发环境验证、理解深化。多做每一章小型实验操作(网上多得很)。提升代码调试能力。
- 有了基础后,一般可以有两个发展方向可供选择
(i) 转向项目实战
建议购买一本C语言项目教程,在实践项目中强化理论知识的学习。 (ii) 继续深入理论学习
建议购买国外经典深入学习C语言的教程,人民邮电出版社-C Primer Plus(第5版),或者 机械工业出版社-C程序设计语言(第2版.新版) 下定信心,坚持下去!希望对你有所帮助。 下面是转载的 孙海洋 版 C语言程序设计 部分内容截图。