关于C语言中#if的用法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于C语言中#if的用法相关的知识,希望对你有一定的参考价值。
参考技术A #if是预编译命令。它的条件只能是一些定值:预定义变量、预定义字符串。这里num(0)
需要在运行时才有返回值。 参考技术B 这个是条件编译命令,表示SPEND为真时,下面的语句才能加入编译器进行编译,为假时,下面的语句不参与编译。可以去掉defined
#if
1
#if
defined(SPEND)
#if
0
#if
defined(SPEND)
#endif和
#endif
当SPEND为真时,效果一样,
#endif
和
#endif
当SPEND为假时,效果一样。
比如:
main()
char
a[]="a参加了编译";
char
b[]="b参加了编译";
#if
defined(M)
printf("%s\n",a);
#endif
printf("%s\n",b);
当M为真时,编译器先把代码变成:
main()
char
a[]="a参加了编译";
char
b[]="b参加了编译";
printf("%s\n",a);
printf("%s\n",b);
再编;
当M为假时,会变成这样再编:
main()
char
a[]="a参加了编译";
char
b[]="b参加了编译";
printf("%s\n",b);
极简嵌入式C语言教程——从入门到入土
文章目录
第二章:渐入佳境(上)
前言:建议复习一下第一章内容防止遗忘。
1.结构及结构在编程中的应用
(1)选择结构(if & switch)
<1>if 语句的基本用法
if(条件表达式) 语句;
括号中的条件表达式可以是逻辑表达式也可以是关系表达式,例如:
if(a>=10) a=b;
if(!a) a=b+1;
if 后的语句可以是多个语句,这时多个语句应用花括号包裹。例如:
if(a||b==0)
a=b;
b=c;
c=a;
单个 if 在逻辑上表示判断,即是或否,从另一方面来说,也就是有两个选择。当有多个选择条件时,单个if的两个选择已经不能满足,因此 if 可与 else 组合成双分支或多分支语句以提供更多选择,例如:
if(a>b) max=a;
else max=b;
上面的代码是典型的 if 双分支语句,这里 else 可以理解成否则,那么整个程序的意思就是:如果a大于b,那么最大值就是a;否则,最大值就是b。
当一个问题有多种选择时,一种方法是利用 if 编写多分支语句;另一种方法是利用关键字 switch,这种方法在下面会讲到。现在使用第一种方法,编写一元二次方程的判别式:
delta=b^2-4*a*c;
if(delta>0) printf("方程有两个不相等实数解");
else if(delta==0) printf("方程有两个相等的实数解");
else if(delta<0) printf("方程有一对共轭复根");
补充:关于三目运算符
C语言中唯一一个三目运算符“?:”由一个问号和一个冒号构成,其表达意义及使用示例如下:
//一般形式:
表达式1?表达式2:表达式3
//相当于:
if(表达式1) 表达式2;
else 表达式3;
/*********************************************************/
//例:从键盘上输入一个字符,如果是小写字母,就将其转换成大写字母,否则直接输出。
scanf("%c",&ch);
ch=(ch>='a' && ch<='z')?(ch-32):ch;//关于字符运算不理解的去第一章看,然后自己查ASCII码。
putchar(ch);
1 if 的高级用法:嵌套
这里以求解一元二次方程为示例:
delta=b^2-4*a*c;
if(delta>=0)
if(delta>0)
x1=-b+sqrt(delta)/(2*a);
x2=-b-sqrt(delta)/(2*a);
printf("x1=.2%f;x2=%.2f\\n",x1,x2);//保留两位小数
else
x1=-b/(2*a);
x2=x1;
printf("x1=x2=%.2f\\n",x1);
else
p=-b/(2*a);
q=sqrt(fabs(delta))/(2*a);
printf("x1=%.2f + %.2f i\\n",p,q);//一对共轭复根
printf("x2=%.2f - %.2f i\\n",p,q);
提问:请自行画出该结构的流程图或示意图
2关于 if 的几点建议
.1.多分支选择优先选择switch结构,当switch不能满足要求时考虑if分支。
.2.使用 if 分支嵌套时一定注意各语句属于哪一级if结构,防止出现错误。
<2>switch语句的基本用法
switch 语句顾名思义,是选择多分支语句,其表达形式如下:
switch(表达式)
case 常量表达式1 : 语句1; break;//break绝对不能丢!!!
case 常量表达式2 : 语句2; break;
......
case 常量表达式n : 语句n; break;
default : 语句n+1;
该表达形式的意义可以理解为:表达式与switch中的常量表达式进行匹配,一致的执行后面的语句,并由break跳出switch结构,如果与所有常量表达式都不匹配,那么执行default后的语句n+1,然后跳出switch结构。
示例:
scanf("%d",&num);
switch(num)
case 1: printf("one!\\n");break;
case 2: printf("two!\\n");break;
case 3: printf("three!\\n");break;
case 4: printf("four!\\n");break;
case 5: printf("five!\\n");break;
default : printf("error!!!\\n");break;
1关于switch语句的几点建议
.1.switch关键字后表达式可以是任何结果为整形或字符型的表达式
.2.case 关键字后面只能是整形或字符型的常量或常量表达式,不能处理非常量情况;
.3.各个case 后常量表达式不能相同;且不可丢掉break语句(丢掉break就代表你想有意的使多分支指向一个结果);
.4.default语句可有可无,你用不到的时候可以不写,不过在选择结构很多的时候还是建议加上;
.5.case关键字后可以接多个语句,但要用花括号括起来。
(2)循环结构(while & for)
<1>while结构
1 while 语句
while语句可以理解为:当满足一个条件的时候,进入while循环执行……;不满足就不进入while循环。**while **语句的一般形式为:
while(表达式)
循环体语句;
/***************************例*************************/
int i=0
while(i<10)
i++;
//i初始值为0,进入循环的条件是i<10,进入循环后i在初始值基础上+1,此时i=1,仍然小于10,继续进入循环,直到i=10才跳出循环。
例:求 ∑ n = 1 n = 100 n \\sum_n=1^n=100n ∑n=1n=100n
#include <stdio.h>
int main()
int sum=0,n=1;
while(n<=100)
sum=sum+n;
n++;
printf("sum=%d",sum);
return 0;
2do…while 语句
do…while语句可以理解为:先执行do后面的语句,直到满足while中的条件,才跳出循环体。do…while语句一般形式为:
do(循环体语句)
while(表达式)
/******************************例*************************/
int n=1,sum=0;
do
sum=sum+n; //该结构的特点为先循环再判断
n++;
while(n<=100);//分号不可丢
<2>for 结构(不嵌套)
1for 语句的一般形式及等价while 语句
for 语句的一般形式为:
for(循环变量赋初值;循环条件;循环变量增值)
等价于:
循环变量赋初值;
while(循环条件)
循环体语句;
循环变量增值;
仍以此题为例:求 ∑ n = 1 n = 100 n \\sum_n=1^n=100n ∑n=1n=100n
#include <stdio.h>
int main()
int sum=0,n=1;
for(;n<=100;n++) //在变量初始化的时候就已经为i赋予了处置,因此此处可省略n=1
sum=sum+n;
printf("sum=%d",sum);
return 0;
相比于while 语句,for 语句在形式上更加简洁。
2关于 for 语句的几点建议
.1.循环体语句可以是单个语句,也可以是用花括号括起来的多个语句,个人建议无论是单个还是多个语句,都用花括号括起来,以免出现因格式错误而使循环出现问题。
.2.for 语句中三个表达式均可省略,但是分号不可省略。另外,省略的前提是这些被省略的语句已经在前或后提及。省略循环变量赋初值的前提是前面已有赋初值的语句;在电脑上不建议省略循环条件,因为那样是个死循环;省略循环变量增值的条件是在后面for 语句循环体中提及。
(3)改变控制流的语句(break & continue)
<1>break 语句
break 语句最直接的理解就是跳出,既可以跳出循环,又可以跳出switch语句这种多分支选择;例:
for(int i=0;i<100;i++)
a=a+i;
if(a=b)
break;
<2>continue 语句
continue 语句作用是结束本次循环,即跳过循环体中下面未执行的语句,接着进行下一次是否执行循环体的判断,此处不过多赘述。
2.函数及函数在编程中的应用
(1)什么是函数、形式参数(形参)、实际参数(实参)
函数:你在前面程序中一直用的printf、scanf、getchar、putchar等等都是函数,只不过这些函数都是系统库里给出的,想使用它们,就要利用 #include 调用 stdio.h、stdlib.h等函数库。
形参:是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数
实参:实参的本质是一个变量,“int a=1;”中,a就是实参
(2)如何定义和使用函数
<1>如何定义函数
函数的定义一般格式如下:
返回值类型 函数名(形式参数列表) /*[函数头]*/
/*[函数体]*/
变量声明
函数实现过程
这里以判断大小并输出最大值函数为例,展示函数定义过程:
int judgenum(int x,int y)//该函数叫做judgenum,有两个参数x,y,返回值为整数
int max,min; //定义最大值,最小值
if(x!=y)
if(x>y)
max=x;
min=y
else
max=y;
min=x;
else return 0; //如果x=y那么就返回0表示相等
return max; //如果x≠y那么返回最大值
注:这里函数头的返回值类型可以是int、float、char等等,根据需要而定
注:关于return:
return函数:函数的返回值通过函数中的返回语句return将被调用函数中的一个确定的值带回到主调函数中去。
一般形式:
return(表达式);
<2>如何使用函数
使用函数第一步就是要声明函数,不声明直接用鬼知道你用的啥函数(doge),举个栗子:
求
∑
n
=
1
n
=
100
n
\\sum_n=1^n=100n
∑n=1n=100n
程序如下:
#include <stdio.h>
int summation(int num); //函数声明
int main()
int sum=0;
sum=summation(100);
printf("sum=%d",sum);
return 0;
int summation(int num)
int temp=0;
for(int n=1;n<=num;n++)
temp=temp+n;
return temp;
以上程序利用了自己编写的summation函数,这样做的好处是主函数main的结构更加简单清晰,当程序的复杂性增加,主函数中引用的各种函数仍然有较好的可读性,此外,函数更像是积木一样有良好的组合性,大大增加了程序的可移植性。学会引用函数,编写函数,以及编写头文件,自己组建函数库(函数库编写和组建在第二章(下)),无论是学习C语言本身,还是学习嵌入式,都是极其重要的。
温馨提示:建议将第一章和第二章(上)多看几遍,多自己上手编程几次再开始第二章(下)的学习。目前,作者更新的速度是一天一篇博客。
以上是关于关于C语言中#if的用法的主要内容,如果未能解决你的问题,请参考以下文章