版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/TONGZONGE/article/details/78731749
选择结构和条件判断
一、用if语句实现选择结构
1、
if语句的一般形式:
(1) if(表达式) 语句1 (没有else 子句的部分)
(2) if(表达式) 语句1 (有else 子句的部分)
else if 语句2
(3) if(表达式1) 语句1
else if(表达式2) 语句2
else if(表达式3) 语句3 (在else部分又镶嵌了多层if语句)
........
else if(表达式4) 语句4
else if(表达式m) 语句m
else 语句m+1
2、关系运算符及其优先次序
C语言的六种运算符:
① < {
② <= 优先等级相同(高)
③ >
④ >= }
⑤ == { 优先等级相同(低) }
⑥ !=
关于优先次序:
(1) 前四种关系运算符的优先级别相同,后两种也相同。前四种高于后两种。例如:“>”优先于“==”,“>”与“<”优先级相同。
(2)算数运算符的优先级>关系运算符优先级>赋值运算符的优先级
例如:
c>a+b 等效于 c>(a+b)
a>b==c 等效于 (a>b)==c
a=b>c 等效于 a=(b>c)
二、switch语句
switch(表达式)
{
case 常量1: 语句1
case 常量2: 语句2
........
case 常量n: 语句n
default: 语句n+1
}
PS:switch的参数只能是整形,default不论在前在后都可,当数据多余三个或四个时,与if较比,更高效。
三、宏
简单来说:宏定义又称是宏代换、宏替换,简称“宏”。是C语言中三种预处理功能之一。
宏定义
宏定义是C语言中三种预处理功能之一,三种预处理包括:宏定义、文件包含、条件编译。
1.不带参数的宏定义:
格式:#define 标识符 字符串
其中的标识符就是符号常量,也称‘宏名’
预处理也叫作宏展开,将宏名替换为字符串。即在对相关命令或语句的含义和功能做具体分析之前替换。
例:#define PI 3.1415926 把程序中所有出现的PI全部替换成3.1415926.
说明:
(1)宏名一般不用大小写;
(2)使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改。如:数组大小常用宏定义;
(3)预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查;
(4)宏定义末尾不加分号;
(5)宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头;
(6)可以用#undef命令终止宏定义的作用域;
(7)宏定义可以嵌套;
(8)“字符串”中永远不包含宏;
(9)宏定义不分配内存,变量定义分配内存;
带参数的宏定义
除了一般的字符串替换,还要参数替换
格式:#define S (a,b) a*b
area=S(3,2);第一步被换成area=a*b;第二步被换成area=3*2;
(1)参数如果是表达式容易出错
如:#define S(r) r*r
正确表达:#define S(r) ( (r)*(r));
(2)宏名和参数的括号间不能有空格;
(3)宏替换只做宏替换,不做计算,不做表达式求解;
(4)宏可以有多个返回值;
(5) 宏展开不占运行时间,只占编译时间,函数调用占运行时间;
四、const与宏的区别
1、编译器处理不同
宏是在预处理阶段展开,const常量是在编译阶段使用。
2、类型和安全检查不同
const常量有数据类型,而宏常量没有数据类型,仅仅是展开。编译器可以对前者进行安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换时可能产生意料不到的错误。
四、
练习题
1、求m和n的最大公约数
#include<stdio.h>
int main(int argc, char* argv[])
{
int m,n,tmp;
if(m%n==0)
{printf("zuidagongyueshu%d\n",n);}
if(m%n!=0)
{printf("zuidagongyueshu%d\n",n);}
while(m%n!=0)
{tmp=m%n;
m=n;
n=tmp;
}
return 0;
}
int main(int argc, char* argv[])
{
int m,n,tmp;
if(m%n==0)
{printf("zuidagongyueshu%d\n",n);}
if(m%n!=0)
{printf("zuidagongyueshu%d\n",n);}
while(m%n!=0)
{tmp=m%n;
m=n;
n=tmp;
}
return 0;
}
2、判断奇偶数
#include<stdio.h>
int main(int argc, char* argv[])
{
int m ;
if(m%2== 0)
{
printf("%d is even number\n",m);
}
else
{printf("%d is odd number\n",m);}
return 0;
}
int main(int argc, char* argv[])
{
int m ;
if(m%2== 0)
{
printf("%d is even number\n",m);
}
else
{printf("%d is odd number\n",m);}
return 0;
}
3、判断字符大小写
#include<stdio.h>
int main()
{ char a;
if(a>='A'&&a<='Z')
{printf("%d is daxie\n",a);}
else
{printf("%d is xiaoxie\n",a);}
return 0;
}
4、比较a,b,c的大小
#include<stdio.h>
void sort(int a,int b,int c)
{
int tmp;
if(a>b)
{tmp=a;
a=b;
b=tmp;
}
if(a>c)
{tmp=a;
a=c;
c=tmp;
}
if(b>c)
{tmp=b;
b=c;
c=tmp;
}
printf("%d,%d,%d\n",a,b,c);
//return 0;
}
int main()
{
sort(10,50,30);
sort(100,50,30);
sort(-10,50,30);
return 0;}
void sort(int a,int b,int c)
{
int tmp;
if(a>b)
{tmp=a;
a=b;
b=tmp;
}
if(a>c)
{tmp=a;
a=c;
c=tmp;
}
if(b>c)
{tmp=b;
b=c;
c=tmp;
}
printf("%d,%d,%d\n",a,b,c);
//return 0;
}
int main()
{
sort(10,50,30);
sort(100,50,30);
sort(-10,50,30);
return 0;}
5、求a^2x+bx+c=0的根。
#include<stdio.h>
void Fun5(int a,int b,int c)
{
int d=b*b-4*a*c;
double x1;double x2;
if(a==0&&b!=0)
{x1=x2=-c/(double)b;}
if(d<0)
{
printf("wujie\n");
}
else if(d>0)
{
x1=((-b+sqrt((double)d))/(2*a));
x2=((-b-sqrt((double)d))/(2*a));
}
else if(d==0)
{x1=x2=-c/(double)b;}
printf("%f,%f\n",x1,x2);
// return 0;
}
int main()
{Fun5(1,3,1);
return 0;}
void Fun5(int a,int b,int c)
{
int d=b*b-4*a*c;
double x1;double x2;
if(a==0&&b!=0)
{x1=x2=-c/(double)b;}
if(d<0)
{
printf("wujie\n");
}
else if(d>0)
{
x1=((-b+sqrt((double)d))/(2*a));
x2=((-b-sqrt((double)d))/(2*a));
}
else if(d==0)
{x1=x2=-c/(double)b;}
printf("%f,%f\n",x1,x2);
// return 0;
}
int main()
{Fun5(1,3,1);
return 0;}
6、划分等级
#include<stdio.h>
void Fun6(char a)
{
switch(a)
{
case'A': printf("85 up\n"); break;
case'B': printf("70~84\n"); break;
case'C': printf("60~69\n"); break;
case'D': printf(" 60 down\n"); break;
default :break;
}
}
int main()
{
char a ='A';
Fun6(a);
return 0;
}
void Fun6(char a)
{
switch(a)
{
case'A': printf("85 up\n"); break;
case'B': printf("70~84\n"); break;
case'C': printf("60~69\n"); break;
case'D': printf(" 60 down\n"); break;
default :break;
}
}
int main()
{
char a ='A';
Fun6(a);
return 0;
}
7、给一个不多余五位的正整数,要求:①求出它是几位数;②分别输出每一位数字;③按逆序输出各位数字;
#include<stdio.h>
int Getfigers(int n)
{
int count=0;
while(n!=0)
{
n=n/10;
count++;
}
return count;
}
void ordernum(int n)
int figers=Getfigers(n);
int tmp;
int power=(int)pow((double)10,(double)(figers-1));
if(n==0)
{
printf("no num\n");
}
if(n<0)
{
n=-n;
}
while(n!=0)
{
tmp=n/power;
n=n%power;
power=power;
printf("%d",tmp);
}
printf("\n");
}
void revernum(int n)
{
int tmp;
if(n==0)
{
printf("no num\n");
}
if(n<0)
{n=-n;
printf("-");}
while (n!=0)
{
tmp=n%10;
n=n%10;
printf("%d",tmp);
}
printf("\n");
}
int main()
{
int n=Getfigers(3533);
printf("%d\n",n);
ordernum(345);
return 0;
}
int Getfigers(int n)
{
int count=0;
while(n!=0)
{
n=n/10;
count++;
}
return count;
}
void ordernum(int n)
int figers=Getfigers(n);
int tmp;
int power=(int)pow((double)10,(double)(figers-1));
if(n==0)
{
printf("no num\n");
}
if(n<0)
{
n=-n;
}
while(n!=0)
{
tmp=n/power;
n=n%power;
power=power;
printf("%d",tmp);
}
printf("\n");
}
void revernum(int n)
{
int tmp;
if(n==0)
{
printf("no num\n");
}
if(n<0)
{n=-n;
printf("-");}
while (n!=0)
{
tmp=n%10;
n=n%10;
printf("%d",tmp);
}
printf("\n");
}
int main()
{
int n=Getfigers(3533);
printf("%d\n",n);
ordernum(345);
return 0;
}