比较两个实型数据是否相等(考虑误差)
#include<stdio.h>
#include<math.h>
int main(void){
float a = 10.2222225,b = 10.2222229;
//if(a==b)
if(fabs(a-b)<=1e-6) //double fabs(double), int abs(int)
printf("这两个数相等\n");
else
printf("这两个数不相等\n");
return 0;
}
浮点型数据有误差,尽量不用==
求一元二次方程的根
#include<stdio.h>
#include<math.h>
int main(void){
double a,b,c,d;
printf("请输入一元二次方程的3个系数:");
scanf("%lf%lf%lf",&a,&b,&c);
if(fabs(a-0)<=1e-6){
printf("输入有误,程序结束运行\n");
return 0;
}
d=b*b-4*a*c;
if(d<0)
printf("此方程无实数根\n");
else if(fabs(d)<=1e-6)
printf("此方程的根为%lf\n",-b/(2*a));
else
printf("此方程的两个根为%lf,%lf\n",(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a));
return 0;
}
逻辑型数据
//布尔数据类型也是整形数据的一种
//#include<stdbool.h> //该文件中有_Bool这个数据类型,_Bool与bool是同义词,vc++中没有这个头文件
#include<stdio.h>
int main(void){
//定义布尔型变量 ——C99中的新增类型,用它所定义的变量,可以用来表示真假,取值范围为1和0
bool a=false; //false表示常数 0 该句与bool a=0;等价
bool b=true; //true表示常数 1 该句与bool b=1;等价
//_Bool c; //和 bool c;等价
b=3; //3为真,b的值为 1
printf("%d\n",b); //输出:1
printf("%d\n",sizeof(a)); //布尔型数据占1个字节
}
switch语句
//电梯程序
#include<stdio.h>
int main(void){
printf("请输入所要到达的楼层:");
int a;
scanf("%d",&a);
switch(a){
default:
printf("没有这个楼层\n");
break;
case 1:
printf("上一楼\n");
break;
case 2:
printf("上二楼\n");
break;
case 3:
printf("上三楼\n");
break;
}
return 0;
}
可以不用default标号,标号改变顺序,default标号也可以先出现
注意:在执行完一个case标号后面的语句后,就从此标号开始执行下去,不再进行判断
条件编译
#include<stdio.h>
int main(void){
char ch;
while((ch=getchar())!='\n'){
#if 1
if(ch>='A' && ch <= 'Z')
ch+=32;
#else
if(ch>='a' && ch <= 'z')
ch-=32;
#endif
putchar(ch);
}
return 0;
}
头文件
文件包含指令:
(1)#include<文件名>系统到存放 c 库函数头文件的目录中寻找要包含的文件,这称为标准方式。
(2)#include"文件名”系统先在用户当前目录中寻找要包含的文件,若找不到,再按标准方式查找。
注意:头文件的后缀可以为“.h”、“.c” 或者没有后缀。
文件:头文件.h
#define PI 3.1415
int E = 123;
int max(int x,int y){
if(x>y)
return x;
else
return y;
}
文件:头文件练习.cpp
#include<stdio.h>
#include "D:\桌面\头文件.h"
//#include "D:\桌面\头文件.h" //重复定义会报错
int main(void){
printf("%lf\n",PI); //3.141500
printf("%d\n",max(1,3)); //3
printf("%d\n",E); //123
return 0;
}
重复定义会出现错误,解决方法:
文件:头文件.h
#ifndef UI
#define UI 1
#define PI 3.1415
int E = 123;
int max(int x,int y){
if(x>y)
return x;
else
return y;
}
#endif
文件:头文件练习.cpp
#include<stdio.h>
#include "D:\桌面\头文件.h"
#include "D:\桌面\头文件.h" //不在报错
int main(void){
printf("%lf\n",PI); //3.141500
printf("%d\n",max(1,3)); //3
printf("%d\n",E); //123
return 0;
}
习题一
1.输入3个整数,使用条件编译的方式,让其按从小到大或者从大到小的方式输出
#include<stdio.h>
int main(void){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(a>b){
int d;
d=a;
a=b;
b=d;
}
if(a>c){
int d;
d=a;
a=c;
c=d;
}
if(b>c){
int d;
d=b;
b=c;
c=d;
}
#if 0
printf("%d,%d,%d\n",a,b,c);
#else
printf("%d,%d,%d\n",c,b,a);
#endif
return 0;
}
习题二
2.使用switch语句,要求输入1,输出abc;输入2,输出bc,输入3,输出c。
#include<stdio.h>
int main(void){
int a;
scanf("%d",&a);
switch(a){
case 1:
printf("abc\n");
break;
case 2:
printf("bc\n");
break;
case 3:
printf("c\n");
break;
default:
printf("请输入1,2,3\n");
break;
}
return 0;
}
方法二:
#include<stdio.h>
int main(void){
int a;
scanf("%d",&a);
switch(a){
case 1:
putchar('a');
case 2:
putchar('b');
case 3:
putchar('c');
}
return 0;
}