C语言程序设计之第三章

3.1 顺序程序设计举例

【例3.1】有人用温度计测量出用华氏法表示的温度,今要求把它转换为以摄氏法表示的温度

需要知道转换公式:c=5/9(f-32)

#include<stdio.h>
int main()
{
	float f,c;
	f=64.0;
	c=(5.0/9)*(f-32);
	printf("f=%f\nc=%f\n",f,c);
	return 0;
} 

在这里插入图片描述
【例3.2】计算存款利息。
有1000元,想存一年。有3种方法可选:
(1)活期,年利率为r1;
(2)一年期定期,年利率为r2;
(3)存两次半年定期,年利率为r3。
请分别计算出一年后按3种方法所得到的本息和。

#include<stdio.h>
int main()
{
	float p0=1000,r1=0.0036,r2=0.0225,r3=0.0198,p1,p2,p3;
	p1=p0*(1+r1);
	p2=p0*(1+r2);
	p3=p0*(1+r3/2)*(1+r3/2);
	printf("p1=%f\np2=%f\np3=%f\n",p1,p2,p3);
	return 0;
} 

在这里插入图片描述

3.2 数据的表现形式及其运算

3.2.1 常量和变量

在计算机高级语言中,数据有两种表现形式:常量和变量

1.常量

在程序运行过程中,其值不能被改变的量称为常量。

数值常量就是数学中的常数。

1)整型常量
2)实型常量
①十进制小数形式,由数字和小数点组成
②指数形式
(规定以字母e或E代表以10为底的指数。
e或E之前必须有数字,且e或E后面必须为整数)
3)字符常量
①普通字符
②转义字符
4)字符串常量
5)符号常量

2.变量

变量代表一个有名字的、具有特定属性的一个存储单元。用来存放数据,即存放变量的值。

变量必须先定义后使用

(注意区分)
变量值即存放在某内存单元的数据。
变量名实际上是以一个名字代表的一个存储地址。

3.常变量

C99允许使用常变量,方法是在定义变量时,前面加一个关键字const

常变量和常量的异同:常变量具有变量的基本属性:有类型,占存储单元,只是不允许改变其值。可以说,常变量是有名字的不变量,而常量是没有名字的不变量。

4.标识符

在计算机高级语言中,用来对变量、符号常量名、函数、数组、类型等命名的有效字符序列统称为标识符。

C语言规定标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线。

3.2.2 数据类型

所谓类型,就是对数据分配存储单元的安排,包括存储单元的长度(占多少字节)以及数据的存储形式。

在这里插入图片描述
基本类型和枚举类型变量的值都是数值,统称为算术类型。
算术类型和指针类型统称为纯量类型。
枚举类型是程序中用户定义的整数类型。
数组类型和结构体类型统称为组合类型,共用体类型不属于组合类型。
函数类型用来定义函数,描述一个函数的接口,包括函数返回值的数据类型和参数的类型。

不同类型的数据在内存中占用的存储单元长度是不同的。

3.2.3 整型数据

1.整型数据的分类

1)基本整型(int型)
2)短整型(short int)
3)长整型(long int)
4)双长整型(long long int)

2.整型变量的符号属性

变量值在存储单元中都是以补码形式存储的,存储单元中的第一个二进制代表符号。

3.2.4 字符型数据

1.字符与字符代码

ASCII字符集的基本集包括了127个字符

2.字符变量

字符变量是用类型符char定义字符变量的

在输出字符变量的值时,用“%d”格式输出十进制整数,用“%c”输出字符形式

3.2.5 浮点型数据

浮点型数据是用来表示具有小数点的实数的。在C语言中,实数是以指数形式存放在存储单元中的。

浮点数类型包括float(单精度浮点型)、double(双精度浮点型)、long double(长双精度浮点型)
1)float(单精度浮点型)
2)double(双精度浮点型)
3)long double(长双精度浮点型)

3.2.6 怎样确定常量的类型

不带小数点的数值是整型常量。
在一个整数的末尾加大写字母L或小写字母l,表示它是长整型。

凡以小数形式或指数形式出现的实数均是浮点类型常量,在内存中都是以指数形式存储。
C编译系统把浮点型常量都按双精度处理,分配8个字节。

可以在常量的末尾加专用字符,强制指定常量的类型。

区分类型与变量
每一个变量都属于一个确定的类型,类型是变量的一个重要属性。变量是占用存储单元的,是具体存在的实体,在其占用的存储单元中可以存放数据。而类型是变量的共性,是抽象的,不占用存储单元,不能用来存放数据。

3.3 运算符和表达式

3.3.1 C运算符

1)算术运算符(+ - * / % ++ --)
2)关系运算符(> < == >= <= !=)
3)逻辑运算符(! && ||)
4)位运算符(<< >> ~ | ^ &)
5)赋值运算符(=及其扩展赋值运算符)
6)条件运算符(?:)
7)逗号运算符(,)
8)指针运算符(&)
9)求字节数运算符(sizeof)
10)强制类型转换运算符((类型))
11)成员运算符(.->)
12)下标运算符([ ])
13)其他(如函数调用运算符())

3.3.2 基础的算术运算符

3.3.3 自增、自减运算符

自增(++)和自减(–)运算符的作用是使变量的值加1或减1

自增(减)运算符常用于循环语句中,使循环变量自动加1;也用于指针变量,使指针指向下一个地址。

3.3.4 算术表达式和运算符的优先级与结合性

用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子称为C算术表达式。

C语言规定了运算符的优先级,还规定了运算符的结合性。

C语言规定了各种运算符的结合方向(结合性),算术运算符的结合方向都是“自左向右”,赋值运算符的结合方向都是“自右向左”。

3.3.5 不同类型数据间的混合运算

规律为:
1)+、-、*、/运算的两个数中有一个数为float或double型,结果是double型,因为系统将所有float型数据都先转换为double型,然后进行计算。
2)如果int型与float型或double型数据进行计算,先把int型和float型转换为double型,然后进行计算,结果是double型。
3)字符型数据与整型数据进行计算,就是把字符的ASCII代码与整型数据进行运算。

【例3.3】给定一个大写字母,要求用小写字母输出。

#include<stdio.h>
int main()
{
	char c1,c2;
	c1='A';
	c2=c1+32;
	printf("%c\n",c2);
	printf("%d\n",c2);
	return 0;
}

在这里插入图片描述

3.3.6 强制类型转换运算符

其一般形式为:(类型名)(表达式)

3.4 C语句

3.4.1 C语句的作用与分类

分为五类:
1)控制语句
①if() …else…(条件语句)
②for() (循环语句)
③while() (循环语句)
④do…while() (循环语句)
⑤continue (结束本次循环语句)
⑥break (中止执行switch或循环语句)
⑦switch (多分支选择语句)
⑧retrun (从函数返回语句)
⑨goto (转向语句,在结构化程序中基本不用该语句)

2)函数调用语句(函数调用语句由一个函数调用加一个分号构成)
3)表达式语句(表达式语句由一个表达式加一个分号构成)
一个表达式的最后一个加分号就成了一个语句。一个语句必然在最后有一个分号,分号是语句中不可缺少的组成部分。
4)空语句
5)复合语句(可以用{}把一些语句和声明括起来称为复合语句(又称语句块))
复合语句中最后一个语句末尾的分号不能省略不写

3.4.2 最基本的语句——赋值语句

在C程序中,最常用的语句是:赋值语句和输入输出语句。其中,最基本的是赋值语句。

【例3.4】给出三角形的三边长,求三角形的面积。

#include<stdio.h>
#include<math.h>
int main()
{
	double a,b,c,s,area;
	a=3.67;
	b=5.43;
	c=6.21;
	s=(a+b+c)/2;
	area=sqrt(s*(s-a)*(s-b)*(s-c));
	printf("a=%f\tb=%f\tc=%f\n",a,b,c);
	printf("area=%f\n",area);
	return 0;
}

在这里插入图片描述
以后凡是在程序中要用到数学函数库中的函数,都应当在本文件的开头包含math.h头文件。

1.赋值运算符

赋值符号“=”就是赋值运算符,它的作用是将一个数据赋给一个变量,也可以将一个表达式赋给一个变量。

2.复合的赋值运算符

在赋值符=之前加上其他运算符,可以构成复合的运算符。如果在“=”前加一个“+”运算符就成了复合运算符“+=”。

凡是二元(二目)运算符,都可以与赋值符一起组合成复合赋值符。有关算术运算的复合赋值运算符有+=,-=,*=,/=,%=

3.赋值表达式

由赋值运算符将一个变量和一个表达式连接起来的式子称为“赋值表达式”。
一般形式为:变量 赋值运算符 表达式

4.赋值过程中的类型转换

如果赋值运算符两侧的类型一致,则直接进行赋值。

如果赋值运算符两侧的类型不一致,但都是基本类型,在赋值时要进行类型转换。类型转换时由系统自动进行的,转换的规则是:
1)将浮点型数据(包括单、双精度)赋给整型变量时,先对浮点数取整,即舍弃小数部分,然后赋予整型变量
2)将整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中
3)将一个double型数据赋给float变量时,先将双精度数转换为单精度,即只取6-7位有效数字,存储到float型变量的4个字节中。将一个float型数据赋给double型变量时,数值不变,在内存中以8个字节存储,有效位数扩展为15位。
4)字符型数据赋给整型变量时,将字符的ASCII代码赋给整型变量。
5)将一个占字节多的整型数据赋给一个占字节少的整型变量或字符变量时,只将低字节原封不动地送到被赋值的变量(即发生“截断”)

5.赋值表达式和赋值语句

C语言的赋值语句属于表达式语句,由一个赋值表达式加一个分号组成。

区分赋值表达式和赋值语句
赋值表达式的末尾没有分号,而赋值语句的末尾必须有分号。在一个表达式中可以包含一个或多个赋值表达式,但绝对不能包含赋值语句。

6.变量赋初值

3.5 数据的输入与输出

3.5.1 输入输出举例

【例3.5】求axx+bx+c=0方程的根,a,b,c,由键盘输入,设bb-4ac>0

#include<stdio.h>
#include<math.h>
int main()
{
	double a,b,c,disc,x1,x2,p,q;
	scanf("%lf%lf%lf",a,b,c);
	disc=b*b-4*a*c;
	p=-b/(2.0*a);
	q=sqrt(disc)/(2.0*a);
	x1=p+q;x2=p-q;
	printf("x1=%7.2f\nx2=%7.2f\n",x1,x2);
	return 0;
}

3.5.2 有关数据输入输出的概念

在讨论程序的输入输出时要注意以下几点:
1)所谓输入输出是以计算机主机为主体而言的
2)C语言本身不提供输入输出语句
3)要在程序文件的开头用预处理指令#include把有关头文件放在本程序中

3.5.3 用printf函数输出数据

在C程序中用来实现输出和输入的主要是printf函数和scanf函数。这两个函数是格式输入输出函数。

1.printf函数的一般格式

printf(格式控制,输出表列)
1)格式控制使用双撇号括起来的一个字符串,称为格式控制字符串,简称格式字符串。包括以下两个信息
①格式声明
②普通字符
2)输出表列是程序需要输出的一些数据,可以是常量、变量或表达式。

printf函数的一般形式可以表示为:
printf(参数1,参数2,参数3,…参数n)

2.格式字符

1)d格式符。用来输出一个有符号的十进制整数
可以在格式声明中指定输出数据的域宽
2)c格式符。用来输出一个字符
3)s格式符。用来输出一个字符串
4)f格式符。用来输出实数(包括单、双精度、长双精度),以小数形式输出
①基本型,用%f
实数中的整数部分全部输出,小数部分输出6位

【例3.6】用%f输出实数,只能得到六位小数。

#include<stdio.h>
int main()
{
	double a=1.0;
	printf("%f\n",a/3);
	return 0;
}

在这里插入图片描述
②指定数据宽度和小数位数,用%m.nf

【例3.7】float型数据的有效位数

#include<stdio.h>
int main()
{
	
	float a;
	a=10000/3.0;
	printf("%f\n",a);
	return 0;
}

在这里插入图片描述
③输出的数据向左对齐,用%-m.nf

5)e格式符。用格式声明%e指定以指数形式输出实数。

3.5.4 用scanf函数输入数据

1.scanf函数的一般形式

scanf(格式控制,地址表列)
地址表列是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址

2.scanf函数中的格式声明

以%开始,以一个格式字符结束,中间可以插入附加的字符

3.使用scanf函数应注意的问题

1)scanf函数中的格式控制后面应当是变量地址,而不是变量名
2)如果在格式控制字符串中除了格式声明以外还有其他字符,则在输入数据是在对应位置上应输入与这些字符相同的字符。
3)在用“%c”格式声明输入字符时,空格字符和转义字符中的字符都作为有效字符输入
4)在输入数值数据时,如输入空格、回车、Tab键或遇非法字符,认为该数据结束

3.5.5 字符输入输出数据

1.用putchar函数输出一个字符

一般形式为 putchar(c)
c可以是字符常量、整型常量、字符变量或整型变量(其值在ASCII代码范围内)

【例3.8】先后输出BOY三个字符

#include<stdio.h>
int main()
{
	char a='B',b='O',c='Y';
	putchar(a);
	putchar(b);
	putchar(c);
	putchar('\n');
	return 0; 
}

在这里插入图片描述

#include<stdio.h>
int main()
{
	int a=66,b=79,c=89;
	putchar(a);
	putchar(b);
	putchar(c);
	putchar('\n');
	return 0; 
}

2.用getchar函数输入一个字符

一般形式 getchar()

【例3.9】从键盘输入BOY3个字符,然后把它们输出到屏幕

#include<stdio.h>
int main()
{
	char a,b,c;
	a=getchar();
	b=getchar();
	c=getchar();
	putchar(a);
	putchar(b);
	putchar(c);
	putchar('\n');
	return 0; 
}
#include<stdio.h>
int main()
{
	
	putchar(getchar());
	putchar(getchar());
	putchar(getchar());
	putchar('\n');
	return 0; 
}

在这里插入图片描述
执行getchar函数不仅可以从输入设备获得一个可显示的字符,而且可以获得在屏幕上无法显示的字符。

【例3.10】改写例3.3程序,使之可以适用于任何大写字母,把它转换为小写字母,然后用putchar函数输出该小写字母。

#include<stdio.h>
int main()
{
	char c1,c2;
	c1=getchar();
	c2=c1+32;
	putchar(c2);
	putchar('\n');
	return 0;
}

在这里插入图片描述

#include<stdio.h>
int main()
{
	char c1,c2;
	c1=getchar();
	c2=c1+32;
	printf("大写字母:%c\n小写字母:%c\n",c1,c2);
	return 0;
}

在这里插入图片描述
————————————————————————————————————
有些地方,我省略了,毕竟,不可能一模一样,都应该有自己的理解……

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

想去见见你

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

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

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

打赏作者

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

抵扣说明:

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

余额充值