含湿量的英文翻译英语怎么说-松江大学城地图
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在线翻译读音例句
发布评论