C程序设计——顺序结构

3.1 顺序程序设计举例

华氏法和摄氏法都可以表示温度,物理学转换公式为

c=\frac{5}{9}\left ( f-32 \right )

f代表华氏,c代表摄氏。伪代码表示如下:

S1:输入f,

S2:f带入公式c=\frac{5}{9}\left ( f-32 \right )

S3:输出c

三个步骤顺序执行,这就是一个简单的顺序结构。

计算机语言表示如下:

#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); \\%f为浮点数占位符
    return 0;
}

运行结果:

f=64.000000

c=17.777778

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

3.2.1 常量和变量

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

1.常量

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

常用常量有以下几类:

(1)整型常量。例如:1000,365,-360等。

(2)实型常量。有两种表示形式:

a)十进制小数形式,由数字和小数点组成。如:3.1415926,-56.92

b)指数形式,如56.92e2(表示56.92乘以10的3次方)

(3)字符常量。有两种形式:

a)普通字符,用单撇号括起来的一个字符,如:‘A’,‘#’。不能写成‘ab’。字符常量在计算机存储单元中以ASCII码二进制形式存储,‘a’的ASCII码是97。

b)转义字符,除了字符常量外,还有种特殊的字符常量,以\开头的字符序列。比如‘\n’代表一个换行符。相关内容可以参看转义字符表。

(4)字符串常量。如“students”,“365”等,字符串常量是双撇号中的全部字符。注意单撇号只能包含一个字符,双撇号可以包含一个字符串。

(5)符号常量。用#define指令,指定用一个符号名称代表一个常量。

# define PI 3.1415926

程序中从此行开始都可以使用pi代表3.1415926了。PI就是一个圆周率的符号。

符号常量有两个好处,第一含义清楚,第二,更改时,可以“一改全改”。

2.变量

变量必须先定义,后使用。变量的值在程序运行期间是可以改变的。定义时指定该变量的名字和类型。注意区分变量值和变量名这两个不同概念。变量名实际上是以一个名字代表的一个存储地址,从该存储单元中读取数据。

3.常变量

const int a = 3;

表示a被定义为一个整型变量,值为3,在变量存在期间其值不能改变。常变量具有变量的基本属性,有类型,占存储单元。但是值不能改变,跟常量相比,常变量有名字。

4.标识符

用来对变量、符号常量名、函数、数组、类型等命名的有效字符序列统称为标识符(identifier)。标识符可以就理解为一个对象的名字。

C语言规定标识符只能由字母、数字和下划线3种字符组成。

3.2.2 数据类型

计算机中的数字与我们在数学中遇到的数字是有差别的,数学中的数字是抽象的定义,而计算机中的数字是数据,需要存放在存储单元中,需要转码。存放数据的存储单元是有限的,需要根据类型存放。不同的类型分配不同的长度和存储形式。

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

3.2.3 整型数据

1.整型数据的分类

(1)基本整型(int型)

2个或4个字节。具体看编译系统。存储单元中,用整数的补码形式存放。

(2)短整型(short int)

2个字节。值的范围-32768~32767.

(3)长整型(long int)
2的31次方到2的31次方减1,即-2147483648~2147483647,分配4个字节。

(4)双长整型(long long int)

一般8个字节。

3.2.4 字符型数据

字母:大写英文字母A~Z,小写英文字母a~z。

数字:0~9.

专门符号:29个,! “ # & ‘( )* + - * / < = > ? []{}\|~

空格符:空格、水平制表符(tab)、垂直制表符、换行、换页(form feed)。

不能显示的字符:控(null)字符(以‘\0’表示)、警告(以‘\a’表示)、退格(以'\b'表示)、回车(以'\r'表示)等。

详见ASCII字符表。

3.2.5 浮点型数据

浮点型数据是用来表示具有小数点的实数的。浮点类型包括float单精度浮点型、double双精度浮点型、long double长双精度浮点型。float型小数部分和指数部分,分别存放,以二进制形式。

3.2.6 运算符和表达式

运算符说明举例
+正号运算符(单目运算符)+a
-负号运算符(单目运算符)-a
*乘法运算符a*b
/除法运算符a/b
求余运算符a%b
+加法运算符a+b
-减法运算符a-b

自增:++i,i++

自减:--i,i--

符号在前,使用i之前,i值先加1;符号在后,使用之后,i值加1

符号有优先级,需要配合括号使用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 卫兵布置问题是一道经典的算法问题,涉及到的算法类别为贪心算法。问题描述如下: 有n个卫兵需要布置在一条直线上,每个卫兵可以占据一个整数位置,不同卫兵之间需要保持至少k个单位的间隔。现在给出n和k,求最少需要占据的位置数。 解题思路: 首先,我们需要将卫兵按照位置从小到大排序,然后从第一个卫兵开始布置,每次选择离当前卫兵最远的位置,同时要保证与前一个卫兵的距离不小于k。具体实现可以使用一个指针记录上一个卫兵的位置,每次选择下一个卫兵时,从当前位置向后遍历,找到第一个满足条件的位置即可。 代码实现: ``` int n, k; int pos[MAXN]; int main() { cin >> n >> k; for (int i = 1; i <= n; i++) { cin >> pos[i]; } sort(pos + 1, pos + n + 1); // 对卫兵位置进行排序 int cnt = 1, last_pos = pos[1]; for (int i = 2; i <= n; i++) { if (pos[i] - last_pos >= k) { // 找到满足条件的位置 cnt++; last_pos = pos[i]; } } cout << cnt << endl; return 0; } ``` 该算法的时间复杂度为O(nlogn),其中n为卫兵的数量,主要来自于排序的时间复杂度。 ### 回答2: 卫兵布置问题是一个经典的算法程序设计问题,其目标是在给定的一段城墙上布置最少数量的卫兵,使得每个卫兵能够监视到尽可能多的城墙段。假设城墙由n个不同长度的墙段组成,每段墙上可以部署一个卫兵,卫兵的监视范围是以其所在位置为中心的一段墙。设计一个算法,计算出最少需要多少个卫兵来覆盖整段城墙。 解决这个问题的一个有效的算法是贪心算法。具体步骤如下: 1. 将城墙段按照从左到右的顺序进行排序,以便后续的贪心策略。 2. 标记第一段城墙为已布置卫兵的区域,同时记录已布置卫兵的数量为1。 3. 从第二段城墙开始依次遍历每一段城墙。 4. 若当前城墙段与前面的已布置卫兵的监视范围没有交集,则在该城墙段布置一个卫兵,并将已布置卫兵的数量加1。 5. 若当前城墙段与前面的已布置卫兵的监视范围有交集,则不需要再布置卫兵。 6. 继续遍历下一段城墙,重复步骤4和5,直到遍历完所有城墙段。 7. 返回已布置卫兵的数量作为最优解。 这个贪心算法的时间复杂度为O(nlogn),其中n是城墙段的数量,主要消耗的时间在于排序城墙段。这个算法的关键在于排序和遍历过程中的判断条件,通过贪心的策略,每次都选择覆盖范围最大的城墙段来布置卫兵,从而达到最少布置卫兵的目的。 总之,卫兵布置问题是一个经典的算法程序设计问题,可以通过贪心算法进行解决,其思想是选择覆盖范围最大的城墙段来布置卫兵,从而实现最少布置卫兵的目标。 ### 回答3: 卫兵布置问题是一个有趣的算法程序设计问题。假设有n个卫兵站在一条直线上,间隔相等。现在,需要将m个卡点放在直线上,卡点的位置必须是卫兵所站位置的整数倍。要求卡点之间的间距最小。 我们可以通过以下步骤来解决这个问题: 1. 首先,计算出卫兵的间距,即d = (直线长度) / (卫兵数量 - 1)。这个间距将作为卡点之间的最小间距。 2. 然后,将卡点均匀地放置在直线上,首先放置在第一个卫兵所站的位置,然后每隔d的距离放置一个卡点,直到放置m个卡点。 3. 如果m超过了卡点的最大数量(即卫兵数量-1),则无法找到满足条件的解。否则,输出卡点的位置即可。 该算法的时间复杂度是O(m)。在实际应用中,可以通过输入直线长度和卫兵数量来确定卫兵的间距和卡点的位置,然后根据需求决定是否继续放置卡点。这样,可以在保证卡点之间的最小间距的前提下,灵活地调整卫兵和卡点的数量,以满足各种要求。 总之,卫兵布置问题是一个简单且有趣的算法程序设计问题,通过计算卫兵的间距和均匀地放置卡点,我们可以找到满足条件的解。该算法可以应用于各种需要将点均匀地分布在一条直线上的场景中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值