一、堂上练习
1.由键盘输入一个正整数,判断该数是否为平方数,是输出Y,否则输出N
输入格式 一个整数
输出格式 Y或者N
输入样例 49
输出样例 Y
代码如下(示例):
#include <stdio.h>
#include <math.h>
int main()
{
int n;
scanf("%d", &n);
if((int)sqrt(n) * (int)sqrt(n) == n)//转换为int的时候,直接把小部分删掉
//或者写成 if(sqrt(n) == (int)sqrt(n)) 也对
//但是写成 if(sqrt(n)*sqrt(n) == n) 就不对,因为sqrt(n)返回浮点数,存在精度误差。
//虽然在sqrt(n)*sqrt(n) == n,你输入n = 4或16之类的数字都能得出结果,但是这种方法是不可靠的
printf("Y");
else
printf("N");
return 0;
}
2.由键盘输入一个不多于9位的正整数,要求输出它是几位数。
输入格式 一个整数
输出格式 输出该数为几位数
输入样例 349213
输出样例 6
代码如下(示例):
#include <stdio.h>
int main()
{
int n,place;
scanf("%ld",&n);
if(n>99999999) place=9;
else if(n>9999999) place=8;
else if(n>999999) place=7;
else if(n>99999) place=6;
else if(n>9999) place=5;
else if(n>999) place=4;
else if(n>99) place=3;
else if(n>9) place=2;
else place=1;
printf("%d\n",place);
return 0;
}
有被标程震惊到,之前我做这道题的时候用的是循环,完全没想过这种方法。
3.由键盘输入一个点的坐标, 要求编程判断这个点是否在单位圆(圆心在坐标0,0)上,点在圆上输出Y, 不在圆上输出N。
使用小数点后3位精度进行判断。
输入样例 0.707,0.707
输出样例 Y
代码如下(示例):
#include<stdio.h>
#include<math.h>
int main()
{
double a,b;
scanf("%lf,%lf",&a,&b);//注意输入格式
if(fabs(sqrt(a*a+b*b)-1)<0.001)
printf("Y\n");
else
printf("N\n");
return 0;
}
可以看看前面的一篇文章:如何判断两个浮点数是否相等
二、单元测试
1.由键盘输入一个形如长方体的盒子的长、宽、高,以及一个圆球的半径,判断该盒子能否完全装下圆球,能输出Y,否则输出N.
输入格式
第一行长方体的三边长
第二行圆球的半径
输出格式 Y或N
输入样例
40.1 50.2 20
21
输出样例
N
代码如下(示例):
#include <stdio.h>
#include <math.h>
int main()
{
double a = 0,b = 0,c = 0,r = 0;
scanf("%lf%lf%lf",&a,&b,&c);
scanf("%lf",&r);
//if(sqrt(a*a+b*b+c*c)>=2*r)是错的,亲爱的宝宝们这就是数学问题啦,设想这个长方体巨长,但是又矮又窄……
if(a>2*r&&b>2*r&&c>2*r)//不能大于等于,因为要完全装下
printf("Y");
else
printf("N");
return 0;
}
总结
既然要总结两句,那我就总结这两句吧!