C-枚举详解

C-枚举详解
C-枚举详解

C-枚举

在实际应用中,有的变量只有几种可能取值。如人的性别只有两种可能取值,星期只

有七种可能取值。在 C 语言中对这样取值比较特殊的变量可以定义为枚举类型。所谓枚举是指将变量的值一一列举出来,变量只限于列举出来的值的范围内取值。

定义一个变量是枚举类型,可以先定义一个枚举类型名,然后再说明这个变量是该枚

举类型。例如:

enum weekday{sun,mon,tue,wed,thu,fri,sat};

定义了一个枚举类型名 enum weekday,然后定义变量为该枚举类型。例如:

enum weekday day;

当然,也可以直接定义枚举类型变量。例如:

enum weekday{sun,mon,tue,wed,thu,fri,sat} day;

其中,sum,mon,…,sat 等称为枚举元素或枚举常量,它们是用户定义的标识符。

需要说明的有以下几点。

① 枚举元素不是变量,而是常数,因此枚举元素又称为枚举常量。因为是常量,所

以不能对枚举元素进行赋值。

② 枚举元素作为常量,它们是有值的,C 语言在编译时按定义的顺序使它们的值为

0,1,2,…。

在上面的说明中,sun 的值为 0,mon 的值为 1,…sat 的值为 6,如果有赋值语句

day=mon;

则 day 变量的值为 1。当然,这个变量值是可以输出的。例如:

printf ("%d",day);

将输出整数 1。

如果在定义枚举类型时指定元素的值,也可以改变枚举元素的值。例如:

enum weekday{sun=7,mon=1,tue,wed,thu,fri,sat}day;

这时,sun 为 7,mon 为 1,以后元素顺次加 1,所以 sat 就是 6 了。

③ 枚举值可以用来作判断。例如:

if (day==mon) {…}

if (day>mon) {…}

枚举值的比较规则是:按其在说明时的顺序号比较,如果说明时没有人为指定,则第

一个枚举元素的值认作 0。例如,mon>sun,sat>fri。

C 语言教程 ?216?

④ 一个整数不能直接赋给一个枚举变量,必须强制进行类型转换才能赋值。例如:

day=(enum weekday)2;

这个赋值的意思是,将顺序号为 2 的枚举元素赋给 day,相当于

workday=tue;

【例 11.6】从键盘输入一个整数,显示与该整数对应的枚举常量的英文名称。

# include

void main( )

{

enum weekday {sun,mon,tue,wed,thu,fri,sat} day;

int k;

printf("input a number(0--6)");

scanf("%d",&k);

day=(enum weekday)k;

switch(day)

{

case sun: printf("sunday\n");break;

case mon: printf("monday\n");break;

case tue: printf("tuesday\n");break;

case wed: printf("wednesday\n");break;

case thu: printf("thursday\n");break;

case fri: printf("friday\n");break;

case sat: printf("satday\n");break;

default: printf("input error\n");break;

}

}

程序运行结果为:

input a number(0--6)1

monday

在该程序中,枚举常量与枚举变量可以进行比较,但要输出枚举常量对应的英文单词,

不能使用以下语句:

printf(" %s",mon);

因为枚举常量 mon 为整数值,而非字符串。

在使用枚举变量时,主要关心的不是它的值的大小,而是其表示的状态。

注:以下全部代码的执行环境为VC++ 6.0

在程序中,可能需要为某些整数定义一个别名,我们可以利用预处理指令#define来完成这项工作,您的代码可能是:

#define MON 1

#define TUE 2

#define WED 3

#define THU 4

#define FRI 5

#define SAT 6

#define SUN 7

在此,我们定义一种新的数据类型,希望它能完成同样的工作。这种新的数据类型叫枚举型。

1. 定义一种新的数据类型 - 枚举型

以下代码定义了这种新的数据类型 - 枚举型

enum DAY

{

MON=1, TUE, WED, THU, FRI, SAT, SUN

};

(1) 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号,隔开。

(2) DAY是一个标识符,可以看成这个集合的名字,是一个可选项,即是可有可无的项。

(3) 第一个枚举成员的默认值为整型的0,后续枚举成员的值在前一个成员上加1。

(4) 可以人为设定枚举成员的值,从而自定义某个范围内的整数。

(5) 枚举型是预处理指令#define的替代。

(6) 类型定义以分号;结束。

2. 使用枚举类型对变量进行声明

新的数据类型定义完成后,它就可以使用了。我们已经见过最基本的数据类型,如:整型int, 单精度浮点型float, 双精度浮点型double, 字符型char, 短整型short等等。用这些基本数据类型声明变量通常是这样:

char a; //变量a的类型均为字符型char

char letter;

int x,

y,

z; //变量x,y和z的类型均为整型int

int number;

double m, n;

double result; //变量result的类型为双精度浮点型double

既然枚举也是一种数据类型,那么它和基本数据类型一样也可以对变量进行声明。

方法一:枚举类型的定义和变量的声明分开

enum DAY

{

MON=1, TUE, WED, THU, FRI, SAT, SUN

};

enum DAY yesterday;

enum DAY today;

enum DAY tomorrow; //变量 tomorrow的类型为枚举型enum DAY

enum DAY good_day, bad_day; //变量good_day和bad_day的类型均为枚举型enum DAY 方法二:类型定义与变量声明同时进行:

enum //跟第一个定义不同的是,此处的标号DAY省略,这是允许的。

{

saturday,

sunday = 0,

monday,

tuesday,

wednesday,

thursday,

friday

} workday; //变量workday的类型为枚举型enum DAY

enum week { Mon=1, Tue, Wed, Thu, Fri Sat, Sun} days; //变量days的类型为枚举型enum week

enum BOOLEAN { false, true } end_flag, match_flag; //定义枚举类型并声明了两个枚举型变量

方法三:用typedef关键字将枚举类型定义成别名,并利用该别名进行变量声明:

typedef enum workday

{

saturday,

sunday = 0,

monday,

tuesday,

wednesday,

thursday,

friday

} workday; //此处的workday为枚举型enum workday的别名

workday today, tomorrow; //变量today和tomorrow的类型为枚举型workday,也即enum workday

enum workday中的workday可以省略:

typedef enum

{

saturday,

sunday = 0,

monday,

tuesday,

wednesday,

thursday,

friday

} workday; //此处的workday为枚举型enum workday的别名

workday today, tomorrow; //变量today和tomorrow的类型为枚举型workday,也即enum workday

也可以用这种方式:

typedef enum workday

{

saturday,

sunday = 0,

monday,

tuesday,

wednesday,

thursday,

friday

};

workday today, tomorrow; //变量today和tomorrow的类型为枚举型workday,也即enum workday

注意:同一个程序中不能定义同名的枚举类型,不同的枚举类型中也不能存在同名的命名常量。错误示例如下所示:

错误声明一:存在同名的枚举类型

typedef enum

{

wednesday,

thursday,

friday

} workday;

typedef enum WEEK

{

saturday,

sunday = 0,

monday,

} workday;

错误声明二:存在同名的枚举成员

typedef enum

{

wednesday,

thursday,

friday

} workday_1;

typedef enum WEEK

{

wednesday,

sunday = 0,

monday,

} workday_2;

3. 使用枚举类型的变量

3.1 对枚举型的变量赋值。

实例将枚举类型的赋值与基本数据类型的赋值进行了对比:

方法一:先声明变量,再对变量赋值

#include

/* 定义枚举类型 */

enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };

void main()

{

/* 使用基本数据类型声明变量,然后对变量赋值 */

int x, y, z;

x = 10;

y = 20;

z = 30;

/* 使用枚举类型声明变量,再对枚举型变量赋值 */

enum DAY yesterday, today, tomorrow;

yesterday = MON;

today = TUE;

tomorrow = WED;

printf("%d %d %d \n", yesterday, today, tomorrow);

}

方法二:声明变量的同时赋初值

#include

/* 定义枚举类型 */

enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };

void main()

{

/* 使用基本数据类型声明变量同时对变量赋初值 */

int x=10, y=20, z=30;

/* 使用枚举类型声明变量同时对枚举型变量赋初值 */

enum DAY yesterday = MON,

today = TUE,

tomorrow = WED;

printf("%d %d %d \n", yesterday, today, tomorrow);

}

方法三:定义类型的同时声明变量,然后对变量赋值。

#include

/* 定义枚举类型,同时声明该类型的三个变量,它们都为全局变量 */

enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN } yesterday, today, tomorrow; /* 定义三个具有基本数据类型的变量,它们都为全局变量 */

int x, y, z;

void main()

{

/* 对基本数据类型的变量赋值 */

x = 10; y = 20; z = 30;

/* 对枚举型的变量赋值 */

yesterday = MON;

today = TUE;

tomorrow = WED;

printf("%d %d %d \n", x, y, z); //输出:10 20 30

printf("%d %d %d \n", yesterday, today, tomorrow); //输出:1 2 3

}

方法四:类型定义,变量声明,赋初值同时进行。

#include

/* 定义枚举类型,同时声明该类型的三个变量,并赋初值。它们都为全局变量 */ enum DAY

{

MON=1,

TUE,

WED,

THU,

FRI,

SAT,

SUN

}

yesterday = MON, today = TUE, tomorrow = WED;

/* 定义三个具有基本数据类型的变量,并赋初值。它们都为全局变量 */

int x = 10, y = 20, z = 30;

void main()

{

printf("%d %d %d \n", x, y, z); //输出:10 20 30

printf("%d %d %d \n", yesterday, today, tomorrow); //输出:1 2 3

}

3.2 对枚举型的变量赋整数值时,需要进行类型转换。

#include

enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };

void main()

{

enum DAY yesterday, today, tomorrow;

yesterday = TUE;

today = (enum DAY) (yesterday + 1); //类型转换

tomorrow = (enum DAY) 30; //类型转换

//tomorrow = 3; //错误

printf("%d %d %d \n", yesterday, today, tomorrow); //输出:2 3 30 }

3.3 使用枚举型变量

#include

enum

{

BELL = '\a',

BACKSPACE = '\b',

HTAB = '\t',

RETURN = '\r',

NEWLINE = '\n',

VTAB = '\v',

SPACE = ' '

};

enum BOOLEAN { FALSE = 0, TRUE } match_flag;

void main()

{

int index = 0;

int count_of_letter = 0;

int count_of_space = 0;

char str[] = "I'm Ely efod";

match_flag = FALSE;

for(; str[index] != '\0'; index++)

if( SPACE != str[index] )

count_of_letter++;

else

{

match_flag = (enum BOOLEAN) 1;

count_of_space++;

}

printf("%s %d times %c", match_flag ? "match" : "not match", count_of_space , NEWLINE);

printf("count of letters: %d %c%c", count_of_letter, NEWLINE, RETURN);

}

输出:

match 2 times

count of letters: 10

Press any key to continue

4. 枚举类型与sizeof运算符

#include

enum escapes

{

BELL = '\a',

BACKSPACE = '\b',

HTAB = '\t',

RETURN = '\r',

NEWLINE = '\n',

VTAB = '\v',

SPACE = ' '

};

enum BOOLEAN { FALSE = 0, TRUE } match_flag;

void main()

{

printf("%d bytes \n", sizeof(enum escapes)); //4 bytes

printf("%d bytes \n", sizeof(escapes)); //4 bytes

printf("%d bytes \n", sizeof(enum BOOLEAN)); //4 bytes

printf("%d bytes \n", sizeof(BOOLEAN)); //4 bytes

printf("%d bytes \n", sizeof(match_flag)); //4 bytes

printf("%d bytes \n", sizeof(SPACE)); //4 bytes

printf("%d bytes \n", sizeof(NEWLINE)); //4 bytes

printf("%d bytes \n", sizeof(FALSE)); //4 bytes

printf("%d bytes \n", sizeof(0)); //4 bytes

}

5. 综合举例

#include

enum Season

{

spring, summer=100, fall=96, winter

};

typedef enum

{

Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday

}

Weekday;

void main()

{

/* Season */

printf("%d \n", spring); // 0

printf("%d, %c \n", summer, summer); // 100, d

printf("%d \n", fall+winter); // 193

Season mySeason=winter;

if(winter==mySeason)

printf("mySeason is winter \n"); // mySeason is winter

int x=100;

if(x==summer)

printf("x is equal to summer\n"); // x is equal to summer

printf("%d bytes\n", sizeof(spring)); // 4 bytes

/* Weekday */

printf("sizeof Weekday is: %d \n", sizeof(Weekday)); //sizeof Weekday is: 4 Weekday today = Saturday;

Weekday tomorrow;

if(today == Monday)

tomorrow = Tuesday;

else

tomorrow = (Weekday) (today + 1); //remember to convert from int to Wee kday

}

c语言中enum的使用

如果一个变量你需要几种可能存在的值,那么就可以被定义成为枚举类型。之所以叫枚举就是说将变量或者叫对象可能存在的情况也可以说是可能的值一一例举出来。 举个例子来说明一吧,为了让大家更明白一点,比如一个铅笔盒中有一支笔,但在没有打开之前你并不知道它是什么笔,可能是铅笔也可能是钢笔,这里有两种可能,那么你就可以定义一个枚举类型来表示它! enum box{pencil,pen};//这里你就定义了一个枚举类型的变量叫box,这个枚举变量内含有两个元素也称枚举元素在这里是pencil和pen,分别表示铅笔和钢笔。 这里要说一下,如果你想定义两个具有同样特性枚举类型的变量那么你可以用如下的两种方式进行定义! enum box{pencil,pen}; enum box box2;//或者简写成box box2; 再有一种就是在声明的时候同时定义。 enum {pencil,pen}box,box2; //在声明的同时进行定义! 枚举变量中的枚举元素系统是按照常量来处理的,故叫枚举常量,他们是不能进行普通的算术赋值的,(pencil=1;)这样的写发是错误的,但是你可以在声明的时候进行赋值操作! enum box{pencil=1,pen=2}; 但是这里要特别注意的一点是,如果你不进行元素赋值操作那么元素将会被系统自动从0开始自动递增的进行赋值操作,说到自动赋值,如果你只定义了第一个那么系统将对下一个元素进行前一个元素的值加1操作,例如 enum box{pencil=3,pen};//这里pen就是4系统将自动进行pen=4的定义赋值操作! 前面说了那么多,下面给出一个完整的例子大家可以通过以下的代码的学习进行更完整的学习! #include using namespace std;

谈谈用枚举算法解决问题的编程思路与步骤方法

谈谈用枚举算法解决问题的编程思路与步骤方法 一.问题 上海市普通高中在信息科技学科中开展《算法与程序设计》教学,教材中有一章名为“算法实例”的内容,其中有一节介绍“枚举算法”。教材中关于枚举算法的描述:有一类问题可以采用一种盲目的搜索方法,在搜索结果的过程中,把各种可能的情况都考虑到,并对所得的结果逐一进行判断,过滤掉那些不合要求的,保留那些符合要求的。这种方法叫做枚举算法(enumerative algorithm)。 枚举法就是按问题本身的性质,一一列举出该问题所有可能的解,并在逐一列举的过程中,检验每个可能解是否是问题的真正解,若是,我们采纳这个解,否则抛弃它。在列举的过程中,既不能遗漏也不应重复。 生活和工作中,人们经常会不经意间运用“枚举算法”的基本原理,进行问题的解决。比如,让你用一串钥匙,去开一把锁,但是不知道具体是用哪一把钥匙,你就会一把一把地挨个地逐个尝试,最终打开锁为止。又如,要对1000个零件,进行合格检验,等等。 二.用枚举算法的思想编写程序的思路与步骤 枚举算法,归纳为八个字:一一列举,逐个检验。在实际使用中,一一列举;采用循环来实现,逐个检验:采用选择来实现。 下面,通过一个问题的解决来说明这一类问题的解决过程的方法与步骤; 例1:在1—2013这些自然数中,找出所有是37倍数的自然数。 这个问题就可以采用枚举算法来解决: 1).一一列举;采用循环来实现; 循环需要确定范围:本循环控制变量假设用i,起始值是1,终止值是2013。 2).逐个检验:采用选择来实现; 选择需要列出判断的关系表达式:i Mod 37 = 0 这样,就可以写出整个求解的VB代码: Dim i As Integer For i = 1 To 2013 If i Mod 37 = 0 Then Print i End If Next i 说白了,用枚举算法解决问题,其实是利用计算机的高速度这一个优势,就好比上题完全可以使用一张纸和一支笔,采用人工的方法完成问题的解,从1开始,一一试除以37,这样计算2013次,也可以找到问题的答案。 在教学中,问题的求解往往是针对数学上的问题,下面举一些相关的例子,来巩固与提高采用枚举算法进行程序设计的技能。 三.枚举算法举例: 1:一张单据上有一个5位数的编号,万位数是1,千位数是4,百位数是7,个位数、十位数已经模糊不清。该5位数是57或67的倍数,输出所有满足这些条件的5位数的个数。(147□□) 1).一一列举;采用循环来实现;

C语言共用体、枚举、typedef

一、typedef声明新的类型名 结构体类型名较长、有些类型名不直观或不习惯、不喜欢?可不可以重命名呢? 用typedef声明新的类型名来代替已有的类型名 例如: 1)typedef float single; 2) typedef struct STU SD; 则“float x,y;”与“single x,y;”等价;

“p=(struct STU*)malloc(sizeof(struct STU));”与 “p=( SD *)malloc(sizeof(SD));”等价。 二、共用体 1、共用体类型的定义 当若干变量每次只使用其中之一时,可以采用“共用体”数据结构。共用体数据中各成员存放到同一段内存单元,设置这种数据类型的主要目的就是节省内存。 共用体类型需要用户自己定义,然后才能用之来定义相应类

型的变量、数组、指针等。 定义共用体类型的格式为: union 共用体类型名 { 数据类型1 成员名1; 数据类型2 成员名2; …… 数据类型n 成员名n; }; 【注意】在右花括号}的后面有一个语句结束符“分号”。

2、共用体变量、数组的定义 有三种方法可以定义共用体变量、数组:先定义共用体类型,然后定义变量、数组;同时定义共用体类型和变量、数组;定义无名称的共用体类型的同时定义变量、数组。 例如:①union GYT {char a[2]; int b; }; GYT x ,y[5]; ②union GYT

{ char a[2]; int b; }x ,y[5]; ③union { char a[2]; int b; }x ,y[5]; 上述三种方法完全等价。 【注意】(1)共用体变量所占内存单元数目等于占用单元数目最多的那个成员的单元数目。 (2)共用体变量各成员占据相同的起始地址,每一瞬时

c语言中枚举类变量使用

#include void main() { printf("c语言中枚举类型变量的使用:\n"); printf("\n"); printf("实际问题说明:\n"); printf("口袋中有红、黄、蓝、白、黑5种颜色的球若干。每次从袋子中先后取出三个球,求得到3种不同颜色的球的可能取法:\n"); printf("\n"); enum color{red,yellow,blue,white,black }; enum color pri; int i,j,k,n,loop; n=0; for(i=red;i<=black;i++) { for(j=red;j<=black;j++) { if(i!=j) { for(k=red;k<=black;k++) { if((k!=i)&&(k!=j)) { n=n+1; printf("第%d个筛选组合\n",n); printf("%-4d",n); for(loop=1;loop<=3;loop++) {

switch(loop) { case 1: pri=(enum color)i;//此处需要进行强制类型转换,否则报错 break; case 2: pri=(enum color)j;//此处需要进行强制类型转换,否则报错 break; case 3: pri=(enum color)k;//此处需要进行强制类型转换,否则报错 break; default: break; } switch(pri) { case red: printf("%-10s","red"); break; case yellow: printf("%-10s","yellow"); break; case blue: printf("%-10s","blue"); break; case white: printf("%-10s","white");

C语言自定义数据类型

自定义数据类型 结构体 结构体是程序员在程序中自定义的一种数据类型,在说明和使用之前必须先定义它,也就是构造它。定义一个结构体的语法格式如下: Struct 结构体类型名 { 成员1的数据类型名成员1名称; 成员2的数据类型名成员2名称; . . 成员n的数据类型名成员n名称; }结构体变量表={成员初始化}; 注意成员可以由若干个不同的数据类型组成,每个成员也可以是结构体,即可以嵌套定义。 例如: Struct student { Long num; Char name; Char sex; Float score; }; 已经定义的某种结构体类型可以视为一种标准的数据类型,它的使用方法与标准数据类型使用方法相同,可以用来定义变量、数组、指针。 结构体变量说明 结构体变量的说明在程序的变量说明部分给出,一般在结构定义之后,它的语法格式如下: Struct 结构类型名结构变量名表; 例如: Struct student stu; 指出了结构变量stu是student类型的变量,它由四个成员组成,每个成员的数据类型和名字都与student结构定义中给出的相同。系统完全按照结构定义时制定的内存模式为结构变量分配内存空间。 可以在定义结构体类型的同时给出结构体变量。 Struct student { Long num; Cha name[20]; Cha sex; Float score; }stu1,stu2; 这种形式与前面给出的结构定义和结构说明分开处理效果相同。

结构体成员访问 结构体成员是通过结构体变量名和成员名进行访问的,不能把他作为一个整体进行访问。其访问格式如下: 结构体变量名.成员名 其中运算符.是成员访问运算符,其运算级别是最高的,和圆括号运算符()、下标运算符[]是同一级别的。如果结构体成员是指针变量,则访问格式为: *https://www.360docs.net/doc/128583581.html, 如果某个结构体变量的成员数据类型又是一个结构体,则访问方式为: 外层结构体变量名.外层成员名.内层成员名 可以在定义结构体变量的同时对结构体变量初始化。 {结构体成员}结构体变量={初始数据}; struct student { long num; char name[20]; char sex; float score; } stu1={200401L,"ZhangHong",'f',92.5f}; 对于嵌套的结构体类型数据,访问格式为: 结构体变量名1.结构体变量名2.成员名 结构体变量初始化的格式如下: struct 结构体名 {结构体成员}结构体变量={初始数据}; 初始数据类型必须与结构成员的数据类型相匹配,并且先后顺序一一对应赋值。 要对结构体变量的成员地址进行访问,其语法格式为: &结构体变量.成员名 当一个指针变量用来指向一个结构变量时,称为结构体指针变量。结构体指针变量中的值是所指向的结构体变量的首地址。 结构体指针变量: Struct 结构名*结构体指针变量名 Struct student *pstu; 必须先赋值后使用,把结构体变量的首地址赋给指针变量,不能把结构名或结构体变量名赋给指针变量。 pstu=&stu1; 结构体名和结构体变量是两个不同的概念,结构体名只能表示一个结构形式,编译系统并不对它分配内存空间,只有当某变量被说明为这种类型的结构时,才对该变量分配存储空间。这是因为结构体变量被定义后相当于标准数据类型被使用。 利用结构体指针变量访问成员如下: (*结构体指针变量).成员名 或者: 结构体指针变量->成员名 后一种形式较为方便,容易区分。

枚举算法 练习题

1.用50元钱兑换面值为1元、2元、5元的纸币共25张。每种纸币不少于1张,求出有多少种兑换方案?每种兑换方案中1元、2元、5元的纸币各有多少张? 假设面值为1元、2元、5元的纸币分别是x、y、z张,兑换方案有k种,从题意可得出x、y、z满足的表达式为 x+y+z=25 x+2y+5z=50 解决此问题的Visual Basic程序如下,在(1)和(2)划线处,填入合适的语句或表达式,把程序补充完整。 Private Sub Command1_Click() Dim k As Integer Dim x As Integer, y As Integer, z As Integer k = 0 List1.Clear For y = 1 To 23 For z = 1 To 9 x = 25 - y - z If (1) Then List1.AddItem "1元" + Str(x) + "张 2元" + Str(y) + "张 5元" + Str(z) + "张" ____(2)___________ End If Next z Next y Label1.Caption = "共有" + Str(k) + "种兑换方案" End Sub 程序中划线处(1)应填入_____________ 程序中划线处(2)应填入_____________ 2.以下Visual Basic程序的功能是:计算表达式1+2+22+23+24+25+26+27+28+29+210的值,并在文本框Text1中输出结果。为了实现这一功能,程序中划线处的语句应更正为_____________。 Private Sub Command1_Click() Dim i As Integer,s As Long s = 0 k = 2 For i= 1 To 10 s = s + k k = k * 2 Next i Text1.Text=Str(s) End Sub

(完整版)小学奥数枚举法题及答案【三篇】

小学奥数枚举法题及答案【三篇】 导读:本文小学奥数枚举法题及答案【三篇】,仅供参考,如果觉得很不错,欢迎点评和分享。 【篇一】枚举法问题 在一个圆周上放了1个红球和1994个黄球。一个同学从红球开始,按顺时针方向,每隔一个球,取走一个球;每隔一个球,取走一个球;……他一直这样操作下去,当他取到红球时就停止。你知道这时圆周上还剩下多少个黄球吗? 答案与解析: 根据题中所说的操作方法,他在第一圈的操作中,取走的是排在黄球中第2、4、6、……1994位置上的黄球,这时圆周上除了一个红球外,还剩下1994÷2=997个黄球。 在第二圈操作时,他取走了这997个黄球中,排在第1、3、5、7、……995、997位置上的黄球,这时圆周上除了一个红球外,还剩下997—(997+1)÷2=498个黄球。 他又要继续第三圈操作了,他隔过红球,又取走了这498个黄球中,排在第1、3、5、……495、497的位置上的黄球,这时圆周上除了一个红球外,还剩下498÷2=249个黄球。 因为在上一圈操作时,排在这498个黄球中最后一个位置上的黄球没有被取走,所以他再进行操作时,第一个被取走的就是那个红球,这时,他的操作停止,圆周上剩下249个黄球。【篇二】

在一个圆周上放了1个红球和1994个黄球。一个同学从红球开始,按顺时针方向,每隔一个球,取走一个球;每隔一个球,取走一个球;……他一直这样操作下去,当他取到红球时就停止。你知道这时圆周上还剩下多少个黄球吗? 答案与解析: 根据题中所说的操作方法,他在第一圈的操作中,取走的是排在黄球中第2、4、6、……1994位置上的黄球,这时圆周上除了一个红球外,还剩下1994÷2=997个黄球。 在第二圈操作时,他取走了这997个黄球中,排在第1、3、5、7、……995、997位置上的黄球,这时圆周上除了一个红球外,还剩下997—(997+1)÷2=498个黄球。 他又要继续第三圈操作了,他隔过红球,又取走了这498个黄球中,排在第1、3、5、……495、497的位置上的黄球,这时圆周上除了一个红球外,还剩下498÷2=249个黄球。 因为在上一圈操作时,排在这498个黄球中最后一个位置上的黄球没有被取走,所以他再进行操作时,第一个被取走的就是那个红球,这时,他的操作停止,圆周上剩下249个黄球。【篇三】

算法(枚举)

枚举算法(2课时) 一、教学目标 1.知识目标:(1)通过具体实例的求解,让学生了解什么是枚举算法; (2)让学生亲身体验并理解枚举算法解决问题的基本思想; (3)用流程图形式来表示枚举算法解决问题的思路; (4)拓展:通过学习,解决日常实际问题; 2.能力目标:(1)“摆事实,讲道理”,通过具体例子分析,让学生理解如何用3步法来解决实际问题(提出问题——分析问题——解决问题); (2)通过自主学习过程体验,合作探究画流程图的学习方式,提高学生的信息素养。 3.情感目标:(1)通过情景创设,激发学生学习兴趣; (2)通过3步法,让学生更能结合其他学科的学习方法,激发学生善 于思考问题,解决问题的能力; (3)通过小组合作,增进学生间的学习交流,培养合作能力,激发学生学习能动性; 二、重点与难点 1.重点:通过对涂抹数据的猜想,让学生理解枚举算法的思想,初步培养学生解决实际问题的能力; 2.难点:理解多种控制结构的嵌套; 枚举算法思想的理解与实现(流程图转化为代码并上机实践) 三、教学模式 1.教师教法:情景创设法、演示法、讨论法 2.学生学法:自主学习、合作探究学习 四、课前准备 1.上课环境:多媒体电脑房; 2.上课工具:幻灯片(枚举算法.ppt课件);辅助教学软件(flash动画,过程体验);

一件校服 五、教学过程 (一)、创设情景,引入问题(引导学生概括枚举算法的概念)(引入主题) 幻灯片展示:这是我的校服吗? 教师:各位同学,在我们上课之前,先请7位同学表演一段试衣情景!(要求:某一列的学生起立,由第1位同学开始试穿上衣,然后脱掉后传给第2位, 第2位试穿后传给第3位,依次……) 试衣结束后教师提出问题:同学们,请问,看了此情景后,你们觉得这件校服是谁的呢? 学生一答:是甲的,也可能是乙的。 学生二答:谁也不是,我觉得。 教师问:那么依照学生二回答,难道就找不到这件校服的主人了吗? 学生二补充:老师,你可以给其他同学再试试啊,也许有适合的哦。 学生们:对对对…… 教师小结:很好,那么我们从刚才的小情景中可以看出,如果要找到一个问题的真正解,必须要把所有可能的解都先列出来,然后再一一进行检验, 看看是否有符合条件的。那么我们把这样的一种算法称为“枚举算法”(二)、学习新课(认知主题) 幻灯片展示:枚举算法:按问题本题的性质,一一列举出该问题所有可能的解, 并在逐一列举的过程中,检验每个可能解是否是问题的真正解,若 是,就采纳这个解,否则就抛弃它。 教师问:请问各位同学,在看了枚举算法这个概念后,你们觉得这个算法的最关键的要求是什么? 学生三答:一一列举,检验 教师问:那么在列举过程中,我在刚才范了一个怎么样的错误呢? 学生们:你没列举出所有的解,只试了一部分同学啊……

C语言基本数据类型

第2章基本数据类型 本章介绍常量与变量的概念,以及C语言基本数据类型中的整型、字符型、实型数据的基本知识,各种不同数据类型之间的转换及混合运算。 2.1 数据概述 一个完整的计算机程序,至少应包含两方面的内容,一方面对数据进行描述,另一方面对操作进行描述。数据是程序加工的对象,数据描述是通过数据类型来完成的,操作描述则通过语句来完成。 C语言不仅提供了多种数据类型,还提供了构造更加复杂的用户自定义数据结构的机制。C语言提供的主要数据类型有: 1.基本类型:包括整型、字符型、实型(浮点型)和枚举类型 2.构造类型:包括数组、结构体和共用体类型 3.指针类型 4.空类型 其中整型、字符型、实型(浮点型)和空类型由系统预先定义,又称标准类型。 基本类型的数据又可分为常量和变量,它们可与数据类型结合起来分类,即为整型常量、整型变量、实型(浮点型)常量、实型(浮点型)变量、字符常量、字符变量、枚举常量、枚举变量。在本章中主要介绍基本数据类型(除枚举类型外),其它数据类型在后续章节中再详细介绍。 2.1.1 常量与符号常量 在程序执行过程中,其值不发生改变的量称为常量。常量区分为不同的类型,如68、0、-12为整型常量,3.14,9.8为实型常量,‘a’,‘b’,‘c’则为字符常量。常量即为常数,一般从其字面即可判别。有时为了使程序更加清晰和便于修改,用一个标识符来代表常量,即给某个常量取个有意义的名字,这种常量称为符号常量。如: 【例2-1】 #define PI 3.14 main( ) { float aera; aera=10*10*PI; printf(“aera=%f\n”,aera); }

列表枚举

列表枚举 教学内容:二年级第二学期P71 教学目标: 知识与技能:初步了解枚举法,并能通过列表枚举的方法解决简单实际问题。过程与方法:通过尝试、探究、学会用列表枚举法一一找到不确定的答案。 情感、态度与价值观:感悟数学的实用价值,激发学习数学的兴趣。 教学过程: 一、情境引入: 1、师:我们先来做个游戏,猜猜它们是谁。 (出示一些动物的图片,只有腿)通过看腿猜动物。 (青蛙、鸭子、羊) 你是怎么马上就知道它们是什么动物的? 2、引入:小朋友真聪明,从腿部特征一下就能猜出是什么动物,今天我们 就要运用小动物的只数以及它们腿的条数来解决的问题。 二、新授 1、根据确定的只数计算腿数 (1)(口答:大声的说出□里填的数。) 1只青蛙4条腿,2只青蛙□条腿。□只青蛙20条腿。(5是怎么算出来的?)1只鸭子2条腿,5只鸭子□条腿。(10是怎么算出来的?) □只鸭子16条腿。(8的算式怎么表示?) (2)出示:5只羊和3只鸭,共有□条腿? 师:你是怎么算出来的?能用算式表示吗? 根据生答,出示 5×4 3×2 20 + 6 = 26(条) 师:原来你是先算出了羊的腿数,再算出了鸭的腿数,最后把它们的腿数相加,所以求总腿数就是怎么求呢?

(板书:羊的总腿数+鸭的总腿数=总腿数) 师:今天,我们也要运用这个数量关系来解决问题。 2、根据不确定的只数算腿数 小胖也在算关于动物和腿的问题,他遇到困难了,你能帮助他吗? (出示图片) 羊和鸭共有4只 一共有()条腿 (1)师:一共有()条腿?你能马上算出来吗? 预设生:先要确定羊和鸭的只数。 根据生答,出示:□只羊和□只鸭, 师:想一想,现在,羊的只数和鸭的只数可不可以随便填呢?为什么不能随便填? 预设生:要考虑他们一共有4只。 (2)我们在解决问题之前一定要审清题目的意思。请大家动笔完成。 (巡视,找到1种、2种或几种答案。) (3)反馈汇报。(根据学生的回答一一板书,不要按序。) 板书:羊的只数鸭的只数总腿数 (1)2只2只 2×4=8条2×2=4条12条 师:这种想法可以吗?你还有不同的想法吗? (2)1只3只 1×4=4条3×2=6条10条 (3)3只1只 3×4=12条1×2=2条14条 师:三种想法都对吗?是不是都符合题目中的条件?

枚举算法

枚举算法 一、定义: 枚举法就是按问题本身的性质,一一列举出该问题所有可能的解,并在逐一列举的过程中,检验每个可能解是否是问题的真正解,若是,我们采纳这个解,否则抛弃它。在列举的过程中,既不能遗漏也不应重复。 通过生活实例,理解枚举算法的定义,找出枚举算法的关键步骤及注意点1.在枚举算法中往往把问题分解成二部分: (1)一一列举: 这是一个循环结构。要考虑的问题是如何设置循环变量、初值、终值和递增值。循环变量是否参与检验。(要强调本算法的主要是利用计算机的运算速度快这一特点,不必过多地去做算法优化工作。) (2)检验: 这是一个分支结构。要考虑的问题是检验的对象是谁?逻辑判数后的二个结果该如何处理? 2.分析出以上二个核心问题后,再合成: 要注意循环变量与判断对象是否是同一个变量。 3.该算法的输入和输出处理: 输入:大部分情况下是利用循环变量来代替。 输出:一般情况下是判断的一个分支中实现的。 用循环结构实现一一列举的过程,用分支结构实现检验的过程,理解枚举算法流程图的基本框架。 \ 二、算法实例 【例5】.求1-1000中,能被3整除的数 对该问题的分析: (1)从1-1000一一列举,这是一个循环结构 (2)在循环中对每个数进行检验。 凡是能被3整除的数,打印输出,否则继续下一个数。

【例6】.找出[1,1000]中所有能被7和11整除的数 本例参照上例,修改其中的判断部分。 【例7】.一张单据上有一个5位数的编号,万位数是1,千位数时4,百位数是7,个位数、十位数已经模糊不清。该5位数是57或67的倍数,输出所有满足这些条件的5位数的个数。 【例8】一张单据上有一个5位数的编号,万位数是1,千位数时4,十位数是7,个位数和百位数已经模糊不清。该5位数是57或67的倍数,输出所有满足这些条件的5位数的个数。 【例9】.找水仙花数(若三位数x=100a+10b+c,满足a3+b3+c3=x,则x为水仙花数) 【例10】.百鸡百钱问题(公鸡5元,母鸡3元,1元3只小鸡花100元钱,买100只鸡,怎么买?)

VB解析算法及程序实现

3.1解析算法及程序实现 1.计算长方体体积的算法描述如下: ①输入长方体的长(z)、宽(w)、高(h) ②计算长方形体积 v = z * w * h ③输出结果 ④结束 上述算法属于( ) A. 枚举算法 B. 排序算法 C. 解析算法 D. 递归算法 2.下列问题适合用解析算法求解的是( ) A.将十三张纸牌按从小到大进行排列 B.统计100内偶数的各位数字之和恰好为10的个数 C.计算一辆车行驶100公里的油耗 D.寻找本年级身高最高的同学 3.有如下问题: ①已知圆锥的半径r 和高度h ,使用公式V= 3 1πh r 2求出此圆锥体的体积。 ②已知班级每位同学的其中成绩总分s ,按照s 的值从大到小进行成绩排名。 ③已知圆的周长s ,利用公式r=s/(2*3.14)求出圆的半径。 ④已知“水仙花数”的定义,找出1~10000范围内所有的水仙花数。 用计算机解决上述问题时,适合用解析算法的是( ) A. ①② B. ①③ C. ③④ D. ②④ 4.出租车计价规则:3公里以内,10元;超出3公里每公里增加2元。假定公里数为x,金额为y.解决此问题的公式和流程图如下图所示: 流程图加框处部分的算法属于:( ) A.解析算法 B.排序算法 C.枚举算法 D.递归算法

5.现要求编写VB程序实现如下功能:分别 在文本框Text1、Text2、和Text3中输入 三条线段的长度,单击“判断”按钮Command1 后,在标签Label1中显示判断结果。程序 运行界面如图: 按此要求编写的程序如下: Private Sub Command1_Click() Dim a As Single ,b As Single Dim c As Single ,st As String a=Val(Text1.Text) b=Val(Text2.Text) c=Val(Text3.Text) If Not (a + b > c And b + c > a And c + a > b) Then st = “这三条线不能构成一个三角形” ElseIf a * a + b * b = c * c Or a * a + c * c = b * b Or b * b + c * c = a * a Then st = “可以构成一个直角三角形” ElseIf ① Then st = “可以构成一个等边三角形” Else st = “可以构成一个不等边的斜三角形” End If Label1.Caption = ② End Sub 划线处应填写正确的语句是: (1)划线处① (2)划线处② 6.下列VB程序段实现计算s=1+1/2+2/3+3/4+…+99/100的值。请将下面划线处代码补充完整。 Private Sub Command1_Click() Dim i As Integer Dim s As Double s=1 For i=2 To 100 s= Next i Text1.Text=Str(s) End Sub 程序划线处应填入的内容是

五年级思维专项训练7 枚举法(原卷+解析版)全国通用

五年级思维训练7 枚举法 1. 今年是2002年,把2002年这样的年份称为“对称年”(年份的个位数字和千位数字相同,百位数字和十位数字相同),从2000年~2999年之间共有个“对称年”。 2. 在所有的三位数中,满足其数字和等于12的共有个。 3. 下边的加法运算,答案824正好和上面的加数428数字顺序相反,如果选出另外一个三位数加上396后,答案也正好和所选的三位数的数字顺序相反的话,可以选出若干个这样的三位数,这样的三位数还有(除去428)个。 428 +396 824 4. 从1、2、3、4、5、6、7、8、9中选出7个数,使得它们的和是3的倍数,共有种不同选法。

5. 一次,齐王与大将田忌赛马。每人有四匹马,分为四等。田忌知道齐王这次比赛马的出场顺序依次为一等、二等、三等、四等,而且还知道这八匹马跑得最快的是齐王的一等马,接着依次为自己的一等,齐王的二等,自己的二等,齐王的三等,自己的三等,齐王的四等,自己的四等。田忌有种方法安排自己的马的出场顺序,保证自己至少能赢两场比赛。 6. 小珊到邮局购买5张邮票,并要求这些邮票的式样都要相同且全部都要互相连接在一起(两张邮票之间只有顶点与顶点相连不算相连在一起)。现在邮局只存最后的9张邮票。如下图所示,为满足小珊的要求,请问邮局的职员有多少种不同的撕邮票的办法? 7. 给定三种重量的砝码(每种数量都有足够多个)3kg、11kg、17kg,将它们组合凑成100kg 有种不同的方案(每种砝码至少有一块)。 8. 将下图中20张扑克牌分成10对,每对红心和黑桃各一张。问:你能分出几对这样的牌,使两张牌上的数的乘积除以10的余数是1?(将A看成1) 9. 有五种价格分别为2元、5元、8元、11元、14元的礼品以及五种价格分别为1元、3元、

小学数学《常规应用题的解法——枚举法》教案

小学数学《常规应用题的解法——枚举法》教案 教学内容: 教学目标: 1.能利用枚举法解决生活中的问题。 教学重点: 准确抓住对象的特征,按照一定的顺序,选择恰当的标准,把问题分为不重复、不遗漏的有限种情形,通过一一列举或计数,最终达到解决目的。 教学难点: 准确抓住对象的特征,按照一定的顺序,选择恰当的标准,把问题分为不重复、不遗漏的有限种情形,通过一一列举或计数,最终达到解决目的。 教学过程: 一.探索新知 (一)教学例1 1.枚举法在数字组合中的应用。 按照一定的组合规律,把所有组合的数一一列举出来。 【例1】用数字1,2,3组成不同的三位数,分别是哪几个数? 【思路点拨】根据百位上的数字的不同分为3类。 第一类:百位上为1的有:123 132 第二类:百位上为2的有:213 231 第三类:百位上为3的有:312 321 答:可以组成123,132,213 ,231,312 ,321六个数。 【变式题1】用0、6、7、8、9这五个数字组成各个数位上数字不相同的两位数共有多少个?

(二)教学例2. 2.骰子中的点数 掷骰子是生活中常见的游戏玩法,既可以掷一个骰子,比较掷出的点数大小,也可以掷两个骰子,把两个骰子的点数相加,再比较点数的大小。一个骰子只有6个点数,而两个骰子的点数经过组合最小是2,最大是12。在解决有关掷两个骰子的问题时,要全面考虑所有出现的点数情况。 【例2】小明和小红玩掷骰子的游戏,共有两枚骰子,一起掷出。若两枚骰子的点数和为7,则小明胜;若点数和为8,则小红胜。试判断他们两人谁获胜的可能性大。 【思路点拨】将两枚骰子的点数和分别为7与8的各种情况都列举出来,就可得到问题的结论。用a+b表示第一枚骰子的点数为a,第二枚骰子的点数是b的情况。 出现7的情况共有6种,它们是: 1+6,2+5,3+4,4+3,5+2,6+1。 出现8的情况共有5种,它们是: 2+6,3+5,4+4,5+3,6+2。 所以,小明获胜的可能性大。 注意,本题中若认为出现7的情况有1+6,2+5,3+4三种,出现8的情况有2+6,3+5,4+4也是三种,从而得“两人获胜的可能性一样大”,那就错了。 答:小明获胜的可能性大。 【变式题2】用一台天平和重1克、3克、9克的砝码各一个(不再用其他物体当砝码),当砝码只能放在同一盘内时,可称出不同的质量有多少种? 3.下面这道题比较直观的展示解决问题有多种方法和途径,通过本题的练习可以开阔我们的发散思维。

算法设计与分析(详细解析(含源代码)

常用算法设计方法 要使计算机能完成人们预定的工作,首先必须为如何完成预定的工作设计一个算法,然后再根据算法编写程序。计算机程序要对问题的每个对象和处理规则给出正确详尽的描述,其中程序的数据结构和变量用来描述问题的对象,程序结构、函数和语句用来描述问题的算法。算法数据结构是程序的两个重要方面。 算法是问题求解过程的精确描述,一个算法由有限条可完全机械地执行的、有确定结果的指令组成。指令正确地描述了要完成的任务和它们被执行的顺序。计算机按算法指令所描述的顺序执行算法的指令能在有限的步骤内终止,或终止于给出问题的解,或终止于指出问题对此输入数据无解。 通常求解一个问题可能会有多种算法可供选择,选择的主要标准是算法的正确性和可靠性,简单性和易理解性。其次是算法所需要的存储空间少和执行更快等。 算法设计是一件非常困难的工作,经常采用的算法设计技术主要有迭代法、穷举搜索法、递推法、贪婪法、回溯法、分治法、动态规划法等等。另外,为了更简洁的形式设计和藐视算法,在算法设计时又常常采用递归技术,用递归描述算法。 一、迭代法 迭代法是用于求方程或方程组近似根的一种常用的算法设计方法。设方程为f(x)=0,用某种数学方法导出等价的形式x=g(x),然后按以下步骤执行: (1)选一个方程的近似根,赋给变量x0; (2)将x0的值保存于变量x1,然后计算g(x1),并将结果存于变量x0; (3)当x0与x1的差的绝对值还小于指定的精度要求时,重复步骤(2)的计算。 若方程有根,并且用上述方法计算出来的近似根序列收敛,则按上述方法求得的x0就认为是方程的根。上述算法用C程序的形式表示为: 【算法】迭代法求方程的根 { x0=初始近似根; do { x1=x0; x0=g(x1);/*按特定的方程计算新的近似根*/ } while ( fabs(x0-x1)>Epsilon);

C语言数据类型及转换

C语言的数据类型 C语言提供的数据结构,是以数据类型形式出现的。具体分类如下: 1.基本类型 分为整型、实型(又称浮点型)、字符型和枚举型四种。 2.构造类型 分为数组类型、结构类型和共用类型三种。 3.指针类型。在第9章中介绍。 4.空类型 C语言中的数据,有常量和变量之分,它们分别属于上述这些类型。 本章将介绍基本类型中的整型、实型和字符型三种数据。 2.3 常量和变量 2.3.1 常量 1.常量的概念 在程序运行过程中,其值不能被改变的量称为常量。 2.常量的分类 (1)整型常量 (2)实型常量 (3)字符常量。 (4)符号常量。 常量的类型,可通过书写形式来判别。 2.3.2 变量 1.变量的概念 在程序运行过程中,其值可以被改变的量称为变量。 2.变量的两个要素 (1)变量名。每个变量都必须有一个名字──变量名,变量命名遵循标识符命名规则。(2)变量值。在程序运行过程中,变量值存储在内存中。在程序中,通过变量名来引用变量的值。 3.标识符命名规则 (1)有效字符:只能由字母、数字和下划线组成,且以字母或下划线开头。 (2)有效长度:随系统而异,但至少前8个字符有效。如果超长,则超长部分被舍弃。 例如,由于student_name和student_number的前8个字符相同,有的系统认为这两个变量,是一回事而不加区别。 在TC V2.0中,变量名(标识符)的有效长度为1~32个字符,缺省值为32。 (3)C语言的关键字不能用作变量名。 注意:C语言对英文字母的大小敏感,即同一字母的大小写,被认为是两个不同的字符。 习惯上,变量名和函数名中的英文字母用小写,以增加可读性。 思考题:在C语言中,变量名total与变量名TOTAL、ToTaL、tOtAl等是同一个变量吗?标识符命名的良好习惯──见名知意: 所谓“见名知意”是指,通过变量名就知道变量值的含义。通常应选择能表示数据含义的英文单词(或缩写)作变量名,或汉语拼音字头作变量名。 例如,name/xm(姓名)、sex/xb(性别)、age/nl(年龄)、salary/gz(工资)。 4.变量的定义与初始化 在C语言中,要求对所有用到的变量,必须先定义、后使用;且称在定义变量的同时进行赋初值的操作为变量初始化。

专题02 解析和枚举算法及VB程序实现(专项练习)(参考答案)

第1页共1页 专题2解析和枚举算法及VB程序实现(专项练习)(参考答案)1. 【答案】(1)500(2)①False②Label1.Caption=Str(c) ③开始 【解析】(1)计时器timer的interval属性表示时钟频率,其单位为毫秒。题干中的频率为0.5秒,故答案为500。 (2)①根据题意可知,按钮标题变为“开始”的同时,计时器停止工作,故答案为false。②根据题意可知,每次产生的抽奖号码都要显示在label1中,故答案为Label1.Caption=Str(c)。 (3)初始时为“开始”,单击一次后变为“停止”,单击两次后变为“开始”,以此类推可知,单击奇数次后为停止,单击偶数次后为开始。故答案为开始。 2. 【答案】(1)Com1(2)①n = Val(Text1.Text) ②Str(2*(n-i)+1) ③Text2.Text = s 【解析】(1)代码中第一行的“Com1_Click”是事件驱动过程名,由对象名和事件名组成,故答案为Com1。(2)①变量n为正整数,类型为整型,其值通过文本框text1输入,故答案为n = Val(Text1.Text)。②代码中for循环的功能是逐个推理数字串中的数据,数字串前半段为依次递增2,后半段为依次递减2,else解决的就是后半段数据的计算,s为字符串型,故答案为Str(2*(n-i)+1)。③最终的结果存储在变量s中,需要通过文本框text2输出,故答案为Text2.Text = s。 3. 【答案】(1)Caption(2)①n = Val(Text1.Text) ②y * 10 + x Mod10③Str(sum) 【解析】(1)窗体类对象的标题显示内容由Caption属性来决定,故填Caption。 (2)①变量n表示回文数,类型为长整型,其值通过text1来输入,故答案为n = Val(Text1.Text)。②返回个位数,将原有的y扩大10倍。故y * 10 + x Mod10。③变量sum表示某区间内回文数的总个数,其值为长整型,通过标签Label2输出时,需要现转换为字符类型,故答案为Str(sum) 4. 【答案】①Step7 ②c = s Mod10③a=1or b=1or c=1 【解析】①循环变量s的初值为105,而105是三位数中最小的且能被7整除的数,那么下一个能被7整除的数字必然105+7,为了使枚举算法更加高效,步长值应为7,故答案为step7。②变量c表示一个三位数s的个位,最直接且最常用的表达式为c = s Mod10,本题答案也可以是c= s-a*100-b*10。③题干中要求“至少有一位数为1”,该数为一个三位数,a表示百位,b表示十位,c表示个位,故答案为a=1or b=1or c=1。

Java枚举类型

Java枚举类型入门 这里就将为大家谈谈Java枚举类型,static final通常跟的是一个int类型的常数,所以有时候可以用int型代替枚举。在Java中,枚举确实是一个类。 Tiger中的一个重要新特性是枚举构造,它是一种新的Java枚举类型,允许用常量来表示特定的数据片断,而且全部都以类型安全的形式来表示。Tiger 专家、developerWorks 的多产作者Brett McLaughlin将解释枚举的定义,介绍如何在应用程序中运用枚举,以及它为什么能够让您抛弃所有旧的public static final 代码。 您已经知道,Java 代码的两个基本的构造块是类和接口。现在Tiger 又引入了枚举,一般简称它为enum。这个新类型允许您表示特定的数据点,这些数据点只接受分配时预先定义的值集合。当然,熟练的程序员可以用静态常量实现这项功能,如清单 1 所示:清单 1. public static final 的常量 1.public class OldGrade { 2. 3.public static final int A = 1; 4.public static final int B = 2; 5.public static final int C = 3; 6.public static final int D = 4; 7.public static final int F = 5; 8.public static final int INCOMPLETE = 6; 9.} 说明:我要感谢O'Reilly 媒体公司,该公司允许在本文中使用我撰写的Java 1.5 Tiger:A Developer's Notebook 一书中“枚举”这一章中的代码示例(请参阅参考资料)。 然后您就可以让类接受像OldGrade.B 这样的常量,但是在这样做的时候,请记住这类常量是Java 中int 类型的常量,这意味着该方法可以接受任何int 类型的值,即使它和OldGrade 中定的所有级别都不对应。因此,您需要检测上界和下界,在出现无效值的时候,可能还要包含一个IllegalArgumentException。而且,如果后来又添加另外一个级别(例如OldGrade.WITHDREW_PASSING),那么必须改变所有代码中的上界,才能接受这个新值。 换句话说,在使用这类带有整型常量的类时,该解决方案也许可行,但并不是非常有效。幸运的是,枚举提供了更好的方法。 定义枚举清单 2 使用了一个可以提供与清单 1 相似的功能的枚举: 清单 2. 简单的枚举类型

枚举类型定义及例子

枚举类型 Pascal程序不仅用于数值处理,还更广泛地用于处理非数值的数据。例如,性别、月份、星期几、颜色、单位名、学历、职业等。 1、枚举类型的定义 格式:type 枚举类型标识符=(标识符1,标识符2,…,标识符n) 2、枚举类型数据特点 ①枚举元素只能是标识符; 例如,下列类型定义是合法的: type days=(sun,mon,tue,wed,thu,fri,sat); colors=(red,yellow,blue,white,black,green); 而下列类型定义是错误的: type colortype=('red','yellow','blue','white'); numbers=(1,3,5,7,9); 定义枚举类型时列出的所有枚举元素构成了这种枚举类型的值域(取值范围)。 ②枚举类型属于顺序类型 根据定义类型时各枚举元素的排列顺序确定它们的序号,且序号从0开始。 例如,定义type days=(sun,mon,tue,wed,thu,fri,sat); 则,o rd(sun)=0,ord(mon)=1,……,以此类推。 枚举类型中的第一个元素无前趋,最后一个元素无后继。 pred(sat)=fri; succ(sun)=mon; ord(sat)=6; ③同一个枚举元素不能出现在两个或两个以上的枚举类型定义中。如下列定义是错误的: type color1=(red,yellow,white); color2=(blue,red,black); 因为red属于枚举类型color1和color2 ④枚举类型变量只能进行赋值运算和关系运算,不能进行算术运算和逻辑运算。 在枚举元素比较时,实际上是对其序号的比较。 例如定义如下: type days=(sun,mon,tue,wed,thu,fri,sat); colors=(red,yellow,blue,white,black,green);

相关文档
最新文档