SCAUoj实验4_选择结构_堂上练习&&单元测试

文章提供了几个C语言程序示例,包括判断正整数是否为平方数、确定输入数字的位数、判断点是否在单位圆上以及检验长方体能否装下圆球。程序利用数学原理和精确比较来解决这些问题,展示了简洁高效的编程思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、堂上练习

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;
}

总结

既然要总结两句,那我就总结这两句吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值