写在开始之前,适合有一点基础的人复习使用!!!!!!!
写在开始之前,适合有一点基础的人复习使用!!!!!!!
写在开始之前,适合有一点基础的人复习使用!!!!!!!
常用的头部文件
#include
#include
#include
#include
案例:求5! 求5的阶乘 1x2x3x…
int i,t;
t=1;
i=2;
while(i<=5){
t=t*i;
i=i+1;
}
printf("5的阶乘是 %d",t);
案例:求多项式(1-1/2+1/3-1/4+…+1/99-1/100)的值
int i=2;
double t=1;
double time=2;
while (i<=100){
//double remainder = i%2;
//printf("i取余2的值是 %lf",remainder);
if(i%2==0){
t=t-1/time;
i=i+1;
time=time+1;
}else{
t=t+1/time;
i=i+1;
time=time+1;
}
}
printf("多项式之和 %lf",t); //double需要用%lf 替换,int是用%d 替换
案例: 输出1900-2000年中 闰年的年份。(能被4整除,但不能被100整除,能被100整除,且能被400整除)
//第一种解法
int year=1900;
while (year<=2000){
if(year%100==0){
if(year%400==0){
printf("%d ",year);
}
}else{
if(year%4==0){
printf("%d ",year);
}
}
year=year+1;
}
//第二种解法
int year;
for(year=1900;year<=2000;year++) //设置循环范围
{
if((year%4==0&&year%100!=0)||(year%400==0)) //满足条件输出
printf("%d ",year);
}
案例:求ax²+bx+c=0的根。分别从d=b平方-4ac大于0、等于0和小于0考虑
double a,b,c;
scanf("%lf%lf%lf", &a, &b, &c);
double d=b*b-4*a*c;
if(d>0){
printf("有两根\n");
printf("第一个根为%lf 第二个根为%lf", -1 * b + sqrt(d) / (2 * a), -1 * b - sqrt(d) / (2 * a));
}else if (d==0){
printf("只有一根:");
printf("%lf", -b / (2 * a));
}else{
printf("无解");
}
案例:输入10个数,输出其中一个最大的数
int a,b,c,d,e,f,g,h,i,j;
scanf("%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf", &a, &b, &c, &d, &e, &f, &g, &h, &i, &j);
//比较上面10的数字的大小
int i =0;
int a[10];
int max=0;
for(i=0;i<10;i++){
scanf("%d",&a[i]);
}
for(i=0;i<10;i++){
if(max<a[i]){
max=a[i];
}
}
printf("10个数字最大值是 %d",max);
案例:有人用测量出华式法表示的温度(如64°F,)现在需要把他们转换成摄氏度温度如(17.8°C);公式是:c=5/9(f-32)
float f,c;
f=64.0;
c=(5.0/9)*(f-32);
printf("f=%f\nc=%f",f,c);
银行存款:第1种 存一年活期利率是0.0036,第2种 存一年定期利率是0.0225,第三种 一年分两次存半年定期利率是0.0198。
比较这三种那种利息最多
float r1=0.0036,r2=0.0225,r3=0.01968;
float temp;
float money=1000; //存1000元
float r1Money=r1*money+1000;
float r2Money=r2*money+1000;
float r3Money=r3*money+1000;
printf("r1Money=%f\nr2Money=%f\nr3Money=%f",r1Money,r2Money,r3Money);
//比较三个数字的大小
if(r1Money>=r2Money){
if(r2Money>=r3Money){
//最大的是人r1Money
temp=r1Money;
}else{
if(r1Money>=r3Money){
temp=r1Money;
}else{
temp=r3Money;
}
}
}else{
if(r2Money>=r3Money){
temp=r2Money;
}else{
if(r1Money>=r3Money){
temp=r2Money;
}else{
temp=r3Money;
}
}
}
printf("三个利息最多的是%f",temp);
常量:值不能改变的量。
整型常量:如1000,123,125等。
实型常量:①十进制小数,如123.123,2.3
②指数形式:如12.34e³ (12.34*10³)
e前面必须有数字,e后面必须是整数
字符常量:①普通字符:只有一个字符,如:'a'、'*'
等 根据ASCII
编码转换。②转义字符:\a
—表示警告、\f
—换页、\n
—换行
字符串常量:如"boy"
、“我好帅” …
符号常量:指定一个常量,本文件中直接使用定义的常量名,可以防止“一改全改”的地步。如# define PI 3.1415
定义之后,文件使用PI
代表3.14159
变量:先定义后使用。如int i;
有外部变量和全局变量之分
常变量:const int a=3;
定义一个整型变量a
,值为3
,且在变量存在期间其值不能发生变化
常变量和符合常量有什么不同?
在预编译的时候,符号常量就不存在了。全部替换成其定义的值;有了常变量之后,可以不必多使用符号常量。
标识符:只能由字母、数字、下划线组成
原、反、补码知识点
数据类型
基本整型:int
–基本整型(4)、short int
或short
–短整型(2)、long int
或者long
–长整型(4)、long long int
或long long
--双长整型(8)、char
–字符型(1)、布尔型(1)–bool
整型有符号:unsigned
–无符号 singed
–有符号
所以4种整型可以变成8种:[singed] int
、unsigned int
、[singed] short [int]
、unsigned short [int]
、 [signed] long [int]
、unsigned long [int]
、[signed] long long [int]
、unsigned long long [int]
无符号=
正数 如果定义了无符号的整型,就只能存正数
无符号的整型存放的正数比一般整型大一倍,因为他的原码的最高位不是符号位,可以存数
只有整型、字符型 可以加signed
和unsigned
修饰符,实型数据不能加
无符号的整型数据用 %u
输出,unsigned int
price=50; printf("%u/n",price);
char
-字符型可以用 %d
或者%c
输出,区别是%d
输出的是十进制的数字,%c
是某个字符
浮点型(实型数据–实数):float
–单精度浮点型(4字节,小数点后有效数字6个)、double
–双精度浮点型(8,有效数字15)、long double
(visual c++定义8字节-有效数字15,turbo c定义16字节-有效数字19)、 float_complex
double_complex
long long_complex
–复数浮点型
实数是指以指数(3.14*10²
)形式存放在存储单位
在一个小数后面加上F
,就表述float
类型常量(编译的时候会自动把float
转成double
处理,加上F
不会报警告),加上L
或者l则置顶此常量是long double
枚举型:enum
空类型:void
派生类型:指针类型(*
),数组类型([]
),结构体类型(struct
),共用体类型(union
),函数类型
运算符
+、-、*、/、++、--、%
(取余)5/3=1
小数舍弃 5/-3=-1
(Visual c++ 向0靠拢)i=3,j=++i j=4,j=i++ j=3,printf("%d",i++)
答案:3,printf("%d",++i)
答案:4>、<、==、>=、<=、!=
!、&&、||
<<、>>、~、|、^、&
=
?:
,
*
和&
sizeof
.->
[]
语句
if-else
、for
、while
、do-while
、continue
、break
、switch
、return
、goto
(转向语句)if-else
的简写:if(x>y) z=x;else z=y;
;
只有一个;叫空语句,啥也不干;但是它可以作为流程语句的转向点(流程语句从程序其他地方转向此处),也可以作为循环语句中的循环体,表啥此处啥也不做a+=b
相当于a=a+b
、x*=y+8
相当于x=x*(y+8)
c语言中标准的输入输出函数:putchar
(输出字符)、getchar
(输入字符)、printf
(格式输出)、scanf
(格式输入)、puts
(输出字符串)、gets
(输入字符串)
格式字符
d
格式字符:printf("%d",12);
输出的是12
printf("%5d",12);
输出的是 12
; 12
前面有三个空格,%5d
类似占位符 占5
个字符long
型数据,则是%ld
,在d
前面加l
,同理long long
类型的 加上ll
c
格式符:char ch='a'; printf("%c",ch);
输出的值是a
,也可以使用占位符 printf("%5c",ch);
a;
前面有4
个空格0~127
直接,也是可以输出字符的,如 short a=121; printf("%c",a);
输出的结果是y
s
格式符:用来输出一个字符串,printf("%s","CHINA");
f
格式符:用来输出实数,整数部分全部输出,小数输出6
位。 printf("%20.15f",1/3);
输出的是: 0.333333333333333;
小数位是15
,零前面有3
个空格,加上0
. 加上15
位小数正好是20
printf("%-5d",12);
输出的是12
;12
后面是三个空格%.2f
输出时保留两位小数e(E)
格式符:printf("%e",123.456);
输出的是 1.234560e+002
表示1.23456的10²
。 printf("%13.2e",123.456);
输出的是 1.23e+002;
前面有4
个空格,"%13.2e"
中13.2
表示输出13
位,小数点后面2
位o
格式符将按照数字的八进制输出x(X)
格式符将按照数字的十六进制输出u
格式符用来输出无符号型数据,十进制输出g(G)
格式符用来输出浮点数,系统自动选f格式或e格式输出,选择其中长度较短的格式scanf函数
scanf("a=%d,b=%d",&a,&b);
应该输入a=1,b=3;
才能打印出a=1,b=3;
scanf("%c%c%c",&c1,&c2,&c3);
应该输出abc
,中间不能有空格,才能打印出来abc
。
scanf("%d%c%f",&a,&b,&c);
若是输入1234a1230o.26
打印出的是1234a1230;
后面的数没有读入。
d,i
输入有符号的十进制整数u
输入无符号的十进制整数o
输入无符号的八进制整数x,X
输入无符号的十六进制整数c
输入单个字符s
输入字符串,将字符串送到一个数组,在输入时以非空白字符开始,以第一个空白字符结束,结束标志’\0
’作为做好一个字符f
输入实数,以小数或者指数形式e,E,g,G
和f作用相同,二者可以互换l
输入长整型数据h
输入短整型数据解释一下 #include
相当于java
中的包,导包;为了程序调用输入输出函数,#include
放在程序开头,所以stdio.h
叫做头文件,.h
是文件后缀
输出函数 putchar
char a='A',b='B',c='C';
putchar(a);
putchar(b);
putchar(c);
putchar("\n"); //输出的是ABC
int a=66,b=79,c=89;
putchar(a); //a对应的int值 转成ASCII码中对应的字符,所以输出的是B
putchar(b);
putchar(c);
putchar('\n'); //输出的是BOY
putchar('\101'); //输出A
putchar('\\'); //输出的是'\'
putchar('\015'); //八进制15相当于十进制13,ASCII表中对应的是回车
输入函数 getchar
getchar
–取得一个字符,没有参数; 类似scanf
案例:从键盘输入BOY
三个字符,打印到屏幕
注意:在键盘输入数据的时候,并不是输入一个字符,该字符就被立即使用的;
这些字符会被放到缓冲区中,只有按了enter
才会把这些字符输入到计算机中
那么如果你输入的字符不够,如 你只输入B
,就按了回车,会出现什么情况?
这时候a
是B,b
是回车
在输入一个O
,再按一次回车
此时a,b,c
的值才补全,分别是:B
回车 O
char a,b,c;
a=getchar();
b=getchar();
c=getchar();
putchar(a);
putchar(b);
putchar(c);
//上面的6行代码可以简写
putchar(getchar());
putchar(getchar());
putchar(getchar());
//也可以使用printf函数输出getchar得到的值
printf("%c",getchar()); //"%c" 是输出字符的格式声明
习题
1.假如我国人民生产总值年增长率是百分之7,计算10年后比现在增加了多少百分比
//第一种解法
double p;
int n=10;
double r=0.07;
p=pow(1+r,n); //p的10次方函数 要有头文件 比前10年增长了1.967151
printf("比前10年增长了%f",p);
//第二种解法
int n=10;
double r=0.07;
double p=1+r;
for(int i=1;i<10;i++){
p=p*(1+r);
}
printf("比10年前增长了%15.15f",p); //比10年前增长了1.967151357289567
2.有1000元,存5年,有5种方法,如下
//一次性存5年 利率是3% 公式:p=1000*(1+n*r);
float p=1000*(1+5*0.03);
printf("一次性存五年的总金是:%f\n",p);
//先存2年,再存3年
float p1=(1000*(1+2*0.021))*(1+3*0.0275);
printf("先存2年,在存3年的总金是:%f\n",p1);
//先存3年,再存2年
float p2=(1000*(1+3*0.0275))*(1+2*0.021);
printf("先存3年,在存2年的总金是:%f\n",p2);
//1年1年存
float p3=(1000*(1+0.015))*(1+0.015)*(1+0.015)*(1+0.015)*(1+0.015);
printf("1年1年存的总金是:%f\n",p3);
//存活期 公式:1000*(1+r/4)⁴ⁿ
float p4=1000*pow((1+0.035/4),20);
printf("存5年活期的总金是:%f\n",p4);
3.购房贷款d,每月还款p,月利率是r,计算多少月能还清
int d = 300000, p = 6000; //定义贷款总额,每月还贷数
double r = 0.01, m, x, y; //定义利率,月份
x = p / (p - d * r);
y = 1 + r;
m = log10(x) / log10(y); //计算公式
printf("m=%.2lf\n", m);
system("pause"); //暂停程序,需要引入包 #include
4.分析下面程序
char c1, c2;
c1 = 97;
c2 = 98;
printf("c1=%c, c2=%c\n", c1, c2); // c1=a, c2=b 解释:输出的格式字符是 c,所以打印的是单个字符
printf("c1=%d, c2=%d\n", c1, c2); // c1=97, c2=98
int c1, c2; //如果将c1和c2改成 int c1,c2;
c1 = 97;
c2 = 98;
printf("c1=%c, c2=%c\n", c1, c2); // c1=a, c2=b //结果一样的
printf("c1=%d, c2=%d\n", c1, c2); // c1=97, c2=98
5.将China译成密码;用原来的字母后面第 4 个字母代替原来的字母。例如China变成Glmre
char c1='C',c2='h',c3='i',c4='n',c5='a';
c1+=4;
c2+=4;
c3+=4;
c4+=4;
c5+=4;
printf("c1的值是%c\n",c1); //c1的值是G c2 c3 c4 c5都是类似的
putchar(c1); //G
6.设圆的半径是r,圆柱高h,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积,用scanf输入数据
float r;
float pi=3.1415926;
printf("请输入圆的半径r:\n");
fflush(stdout); //使得printf和scanf按照顺序执行 printf语句之后scanf语句之前加入刷新缓冲的代码 fflush(stdout); !!!
scanf("%f",&r);
float h;
printf("请输入圆柱的高h:\n");
fflush(stdout);
scanf("%f",&h);
float c=2*pi*r; //周长
printf("圆的周长是:%.2f\n",c); //保留两位小数 6.28
float s=pi*r*r; //面积
printf("圆的面积是:%.2f\n",s);
float qs=4*pi*r*r; //表面积
printf("圆球表面积是:%.2f\n",qs);
float v=(4/3)*pi*r*r*r; //圆球体积公式是 3分之4πr³
printf("圆球的体积为:%.2f\n",v);
float zhuv=pi*r*r*h; //圆柱的体积
printf("圆柱的体积为:%.2f\n",zhuv);
用if、if-else、if-else if-else 案例
float a,b,c,disc,x1,x2,p,q;
scanf("a=%f,b=%f,c=%f",&a,&b,&c);
printf("a的值是:%f\n",a);
printf("b的值是:%f\n",b);
printf("b的值是:%f\n",c);
disc=b*b-4*a*c;
printf("disc的值是:%f\n",disc);
if(disc>0){
//有根
p=-b/2*a;
q=sqrt(disc)/2*a;
x1=p+q;
x2=p-q;
printf("根是:%f和%f",x1,x2);
}else{
//无根
printf("the equation has not real boots;\n ");
}
int a,b,t;
scanf("a=%d,b=%d",&a,&b);
if(a<b){
t=a;
a=b;
b=t;
}
printf("两个值从小到大是%d和%d",b,a);
int a,b,c,t;
scanf("a=%d,b=%d,c=%d",&a,&b,&c);
//经过三轮比较即可
if(a>b){
t=a; a=b; b=t;
}
if(a>c){
t=a; a=c; c=t;
}
if(b>c){
t=b; b=c; c=t;
}
printf("三个数字从小到大是:%d、%d和%d\n",a,b,c);
逻辑运算符
&&
–逻辑与、||
–逻辑或、!
–逻辑非
运算顺序:非、与、或
案例:判断某一年是否是闰年
条件:能被4
整除,但不能被100
整除;能被400
整除
用逻辑运算符表示:(year%4==0&&year%100!=0)||year%400==0
条件运算符和条件表达式—三目运算
案例:输入一个字符,判断他是否是大写字母(>A&&
char ch;
scanf("%c",&ch);
ch=(ch>='A'&&ch<='Z')?(ch+32):ch;
printf("输入的字符是:%c\n",ch);
switch
语句多分支选择结构 没有出现break
,继续向下执行,直到出现break
,如果一直没有出现 那就把程序执行完
案例:按照要求 输出考试等级,A
等级是85
分以上,B
等级是70--84
,C
等级是60~69
,D
等级是60
分一下;成绩等级由键盘输入,如果用if-else
则需要三次判断。故用switch
char grade;
scanf("%c",&grade);
printf("该等级对应的分数是:");
switch (grade) {
case 'A':printf("85分以上!!\n");break;
case 'B':printf("70~84分!!\n");break;
case 'C':printf("60~69分!!\n");break;
case 'D':printf("60分以下!!\n");break; //break 结束程序判断
default:printf("enter data error!\n"); //其余的情况 走此步!
}
案例:输入’A
’或者’a
’,就会执行A
的操作。输入’B
’或者’b
’就会执行B的操作
void action(int,int); //action方法在最下面的自定义函数列表中
void action1(int,int);
char ch=getchar();
int a=15,b=2;
switch (ch) {
case 'a':
case 'A':action(a,b);break;
case 'b':
case 'B':action1(a,b);break;
default:printf("enter data error!!");
}
选择结构程序综合使用
案例:输入一个年,输出闰年还是非闰年
int year,leap;
printf("enter year:\n");
fflush(stdout);
scanf("%d",&year);
if ((year%4==0&&year%100!=0) || (year%400==0))
leap=1;
else
leap=0;
if (leap==1)
printf("%d is a leap year.",year);
else
printf("%d is not a leap year.",year);
案例:求ax²+bx+c=0
方程的解;考虑复根,就是b²-4ac<0
的情况
double a,b,c,x1,x2,disc,realpart,imagpart;
scanf("%lf,%lf,%lf",&a,&b,&c); //输入函数的时候,一定要加& 这个字符
printf("The equation ");
if (fabs(a) <= 1e-6) //浮点型不能用==判断等于0,这样不准,基本都是用fabs(a)<=1e-6 判断是不是接近0; 1e 是数字1,1e-6=0.000001
printf("is not a quadratic!");
else
disc=b*b-4*a*c;
if (fabs(disc)<=1e-6)
printf("has two equal roots:%8.4f\n",-b/(2*a));
else{
if (disc>1e-6){
x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
printf("has distinct real roots:%8.4f and %8.4f",x1,x2);
}else{
realpart=-b/(2*a);//复根的实部
imagpart=sqrt(-disc)/(2*a);//复根的虚部
printf("has complex roots:\n");
printf("%8.4f+%8.4fi\n",realpart,imagpart); //i是表示虚根的那个符号,这样就能输出q+pi的复数形式
printf("%8.4f-%8.4fi\n",realpart,imagpart);
}
}
案例:某运输公司对用户计算运输费用,路程越远,费用越低,标准如下
int c,s;
float p,w,d,f;
printf("please enter price,weight,distance:");
fflush(stdout);
scanf("%f,%f,%d",&p,&w,&s);
if (s>=3000)
c=12;
else
c=s/250;
switch (c) {
case 0:d=0;break; //c=0 表示250km一下,d折扣是0
case 1:d=2;break;
case 2:
case 3:d=5;break;
case 4:
case 5:
case 6:
case 7:d=8;break; //没有出现break,继续向下执行
case 8:
case 9:
case 10:
case 11:d=10;break;
case 12:d=15;break;
}
f=p*w*s*(1-d/100);
printf("freight is %.2f",f);
习题
1.在C语言中逻辑常量只有两个,即0和1,用来表示两个对立的逻辑状态,其中0 假,1 真
int a = 3, b = 4, c = 5;
printf("%d\n", a+b>c&&b==c);
2.有3个整数a,b,c,由键盘输入,输出其中最大的数字
int a,b,c,t;
scanf("%d,%d,%d",&a,&b,&c);
if(a>b){
t=a; a=b; b=t;
}
if(a>c){
t=a; a=c; c=t;
}
if(b>c){
t=b; b=c; c=t;
}
printf("three numbers from small to large is %d and %d and %d.",a,b,c);
案例: 从键盘上输入一个小于1000
的正数,要求输出他的平方根(如果不是整数,则输出整数部分)。要求校验是否是小于1000
的正数,不是重新输入
int x,y;
printf("输入一个小于1000的整数:");
fflush(stdout);
scanf("%d",&x);
while(x>=1000||x<=0){
printf("输入的数不符合,请再输入一次\n");
fflush(stdout);
scanf("%d",&x);
}
y=sqrt(x);
printf("y=%d\n",y);
案例:有一个函数y=x(x<1),y=2x-1(1<=x<10),y=3x-11(x>=10)
。写一段程序,输入x
,输出y
值
int x,y;
scanf("%d",&x);
if(x<1)
y=x;
else if (1<=x<10)
y=2*x-1;
else
y=3*x-11;
printf("y的值是%d",y);
案例:输入一个百分制的分数,要求输出’A
’、‘B
’、‘C
’、‘D
’、‘E
’。90
分以上是A
,80-89
分是B
,70-79
分是C
,60-69
分是D
,60
分以下是E
int score;
char grade;
scanf("%d",&score);
if (score>=90) grade='A';
else if(80<=score) grade='B';
else if(70<=score) grade='C';
else if(60<=score) grade='D';
else grade='E';
printf("分数的等级是:%c",grade);
案例:5
位的正整数,求出它是几位数,分别输出每一位按逆序输出每一位数字 如123
输出的是321
int a;
scanf("%d",&a);
void Nixu(int); //初始化函数 在最下面
while(a>99999){
printf("enter data error! please enter again!\n");
fflush(stdout);
scanf("%d",&a);
}
if(a>99999)
printf("enter data error!");
else
Nixu(a);
案例:企业发放的奖金根据利润提成
i <= 100000 --- 10%
100000 < i <= 200000 --- 低于100000的10%,高于100000的7.5%
200000 < i <= 400000 --- 低于200000同上,高于200000的5%
400000 < i <= 600000 --- 高于400000的3%,
600000 < i <= 1000000 --- 高于600000的1.5%
i > 1000000 --- 超过1000000按1%。
//从键盘输入当月利润i,求应发奖金总数
//if语句
double i, bonus;
printf("Please enter profit: ");
fflush(stdout);
scanf("%lf", &i);
//输入低于0的数字,报错并重新输入
while (i < 0){
printf("Error!\n");
printf("Please enter profit: ");
fflush(stdout);
scanf("%lf", &i);
}
if (i <= 100000)
bonus = i * 0.1;
else if (i > 100000 && i <= 200000)
bonus = 10000 + (i - 100000) * 0.075;
else if (i > 200000&& i <= 400000)
bonus = 17500 + (i - 200000) * 0.05;
else if (i > 400000 && i <= 600000)
bonus = 33500 + (i - 400000) * 0.03;
else if (i > 600000 && i <= 1000000)
bonus = 39500 + (i - 600000) * 0.015;
else
bonus = 43500 + (i - 1000000) * 0.01;
printf("Bonus = %.2lf\n", bonus);
//switch语句
int i,t;
float m;
scanf("%ld",&i);
if(i<100000){
m=i*0.1;
printf("bonus is %.2lf\n",m);
}
else{
t=i/100000;
}
switch(t)
{
case 1:
case 2:
m=10000+(i-100000)*0.075;break;
case 3:
case 4:
m=17500+(i-200000)*0.05;break;
case 5:
case 6:
m=33500+(i-400000)*0.03;break;
case 7:
case 8:
case 9:
m=39500+(i-600000)*0.015;break;
default:
m=43500+(i-1000000)*0.01;break;
}
printf("This month's bonus is %lf",m);
案例:输入4个整数,由小到大的顺序输出
int a[4],i,j,t;
for(i=0;i<4;i++){
printf("请输入%d个整数:",i+1);
fflush(stdout);
scanf("%d",&a[i]);
}
for(i=0;i<=3;i++){
for(j=i+1;j<4;j++){
if(a[i]>a[j]){
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
printf("从小到大输出的顺序是:");
for(i=0;i<4;i++){
printf("%d",a[i]);
}
案例:有4个圆塔,圆心分别为(2,2)、(-2,2)、(-2,-2),(2,-2)
,圆半径为1
,这4
个塔的高度为10m
,塔以外无建筑物。
今输入任一点的坐标,求该点的建筑高度 (塔外的高度为0
),也就是说在圆内才有高度
int h=10;
float x1=2,y1=2,x2=-2,y2=2,x3=-2,y3=-2,x4=2,y4=-2,x,y,d1,d2,d3,d4;
printf("请输入一个点(x,y):");
fflush(stdout);
scanf("%f,%f",&x,&y);
d1=sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1)); /*求该点到各中心点距离*/
d2=sqrt((x-x2)*(x-x2)+(y-y2)*(y-y2));
d3=sqrt((x-x3)*(x-x3)+(y-y3)*(y-y3));
d4=sqrt((x-x4)*(x-x4)+(y-y4)*(y-y4));
//第一种判断方法
if (d1>1 && d2>1 && d3>1 && d4>1) h=0; /*判断该点是否在塔外*/
//第二种判断方法
if (d1<=1 || d2<=1 || d3<=1 || d4<=1) ? h == 0 : h == 10; /*判断该点是否在塔外*/
printf("该点高度为 %d\n",h);
第一阶段 - - 完结