含湿量的英文翻译英语怎么说-松江大学城地图


2023年4月5日发(作者:韩国字转换器)

C语⾔学习记录(三)——Switch、函数定义

学习⾜迹

前⾔

这⼀节简单地介绍C中两个基础语法

…else…的替代⽅法:switch…case…

2.函数function的定义及声明

参考及引⽤:

⼀、switch⽤法

swich是⼀种选择语法,使⽤场景是针对不同情况需要做出不同操作。因此它可以代替某些if…e有一款很老的三国单机游戏 lse…语句。当不同情况数较多时,就会体

现出switch的优势。

1.使⽤语法

我们直接看⼀段代码来掌握其语法

#include

intmain(intargc,char*argv[])

{四大名著的作者

if(argc!=2){

printf(\"ERR冥顽不灵 OR:Youneedoneargument.n\");

//thisishowyouabortaprogram

return1;

}

inti=0;

for(i=0;argv[1][i]!=\'0\';i++){

charletter=argv[1][i];

switch(letter){

case\'a\':

case\'A\':

//letter==\'a\'或\'A\'时,执⾏的程序段

printf(\"%d:\'A\'n\",i);

break;

case\'e\':

case\'E\':

//letter==\'e\'或\'E\'时,执⾏的程序段

printf(\"%d:\'E\'n\",i);

break;

case\'i\':

case\'I\':

//letter==\'e\'或\'E\'时,执⾏的程序段

printf(\"%d:\'I\'n\",i);

break;

case\'o\':

case\'O\':

//letter==\'o\'或\'O\'时,执⾏的程序段

printf(\"%d:\'O\'n\",i);

break;

case\'u\':

case\'U\':

//letter==\'u\'或\'U\'时,执⾏的程序段

printf(\"%d:\'U\'n\",i);

break;

case\'y\':

case\'Y\':

//letter==\'y\'或\'Y\'时,执⾏的程序段

if(i>2){

//it\'sonlysometimesY

printf(\"%d:\'Y\'n\",i)红色经典诗词硬笔书法作品 ;

}

break;

default:

//letter取其他值时,执⾏的程序段

printf(\"%d:%cisnotavoweln\",i,letter);

}

}

return0;

}

输⼊及运⾏结果如下:

$./ex13aAeOk

0:\'A\'

1:\'A\'

2:\'E\'

3:\'O\'

4:kisnotavowel

从程序中我们提取出关键信息:

switch()的括号中是可以取不同值的变量(必须是⼴义上的整数,⽐如字母或者结果为整数的布尔表达式),紧跟在case后⾯的值是该变量

可能的不同取值,case下⾯的程序段是变量正好等于该值时,要执⾏的程序;

default指⽆论何值都可以执⾏的程序。看到这⾥可能有著名唐诗300首 个疑问,从程序运⾏结果看default后⾯的程序,是在letter不取前⾯case中的任何

值时才会执⾏,怎么能说⽆论何值都会执⾏呢?

这个问题的答案关键在break。我们通过switch的执⾏原理可以获得答案。

2.执⾏原理:跳转表

switch实际上是⼀个跳转表,switch(a)这句话就定义了⼀个跳转表的起始位置,并且要将这个起始地址加上a的值(因此a必须是整数),

得到要跳转到的⽬的地址。

如果这个⽬的地址等于下⾯某个case代表的⽬的地址,就跳转到这个case处继续向下运⾏程序。

这时注意:如果没有break,这个程全宋词pdf 序就从当前case处,⼀直向下运⾏。会把下⾯的case带的代码也执⾏⼀遍。因此要使⽤break来进⾏隔

断!这样才能保证只执⾏某个case处的代码。

以上⾯代码为例具体解释跳转表的跳转过程:

编译器会标记swicth语句的顶端,我们先把它记为地址Y。Y是整张表的起始地址(类似于数组的其起始地址)。

接着对switch中的表达式求值,产⽣⼀个数字。在上⾯的例⼦中,数字为argv[1]中字母的原始的ASCLL码。

编译器也会把每个类似case\'A’的case代码块翻译成这个程序中秋节的古诗四句诗 中距离语句顶端的地址,所以case‘A’就在*(Y+‘A’)处。

接着计算是否Y+letter位于switch语句中,如果距离太远则会将其调整为Y+Default。

⼀旦计算出了地址,程序就会“跳”到代码的那个位置并继续执⾏。这就是⼀些case代码块中有break⽽另外⼀些没有的原因。

如果输出了’a’,那它就会跳到case‘a’,它⾥⾯没有break语句,所以它会贯穿执⾏底下带有代码和break的case‘A’。

最后它执⾏这段代码,执⾏break完全跳出switch语句块。

这时再看上⾯那个关于default的问题。

如果default前⾯的case都不带break,那么default后⾯的代码⼀定会被执⾏,它之所以不会被执⾏,就是因为前⾯的break!所以说

default是变量⽆论取何值都可以执⾏的程序。

⼆、函数定义及声明

1.定义语法

定义时按照下⾯的格式:

返回值数据类型函数名(数据类型参数1,数据类型参数2,...)

{

函数体

return返回值

}

函数体包含声明部分和语句部分,声明部分⽤于声明及初始化函数中⽤到的变量,语句部分就是执⾏运算等其他操作的语句。

2.提前声明

举⼀个函数定义的栗⼦(虽然定义了这么多函数,最终执⾏的仍是主函数main哦~)

#include

#include

//forwarddeclarations

intcan_print_it(charch);

voidprint_letters(chararg[]);

voidprint_arguments(intargc,char*argv[])

{

inti=0;

for(i=0;i

print_letters(argv[i]);

}

}

voidprint_letters(chararg[])

{

inti=0;

for(i=0;arg[i]!=\'0\';i++){

charch=arg[i];

if(can_print_it(ch))课外古诗20首 {

printf(\"\'%c\'==%d\",ch,ch);

}

}

printf(\"n\");

}

intcan_print_it(charch)

{

returnisalpha(ch)||isblank(ch);

}

intmain(intargc,char*argv[])

{

print_arguments(argc,argv);

return0;

}

其中下⾯这两⾏是提前声明函数的语句。就是把要声明的函数,其定义参数的那⾏复制⼀遍就⾏。

intcan_print_it(charch);

voidprint_letters(chararg[]);

为什么需要提前声明?

可以看到,在下⾯的程序中,函数print_arguments先被定义,函数体中⽤到了函数can_print_it和print_letters;然⽽这两个函数在后⾯

才被定义,因此为了不报错,我们需要在定义print_arguments前,声明这两个函数。

如果我们最后定义函数print_arguments,就不需要提前声明了。

总结

1、switch的本质是跳转表;

2、switch⽤法中的break很重要,可以⽤它来实现if(xxx||xxx)的逻辑,或者其他更复杂的操作;

3、使⽤⾃定义函数时,注意是否需要提前声明。

更多推荐

swith是什么意思th在线翻译读音例句