关于c语言一个普通题目的问题

来源:百度知道 编辑:UC知道 时间:2024/07/03 11:30:20
下列程序的功能是:在3位整数(100至999)中寻找符合下面条件的整数,并依次从小到大存入数组b中;它既是完全平方数,又有两位数字相同,例如144,676等。
请编制函数int jsValue(int bb[])实现此功能,满足该条件的整数的个数通过所编制的函数返回。
最后调用函数writeDat()把结果输出到文件OUT.DAT中。
注意:部分源程序已给出。请勿改动主函数main()和写函数writeDat()的内容。
#include <stdio.h>
#include <math.h>
void writeDat();

int jsValue(int bb[ ])
{
int i,j; /*定义循环控制变量*/
int cnt=0; /*定义计数器变量*/
int a3,a2,a1; /*定义变量存储三位数每位的数字*/
for(i=100;i<=999;i++) /*在该范围中找符合条件的数*/
for(j=10;j<=sqrt(i);j++)
if(i==j*j) /*如果该数是完全平方数*/
{
a3=i/100; /*求该数的百位数字*/
a2=i%100/10; /*求该数的十位数字*/
a1=i%10; /*求该数的个位数字*/
if(a3==a2 || a3==a1 || a2==a1) /*有两位数字相同*/
{
bb[cnt]=i; /*则把该数存入数组bb中*/
cnt++;
} /*统计满足条件的数的个数*/
}
return cnt; /*返回满足

sqrt函数的原型是double sqrt(double x),所以sqrt(i)是double型的;
浮点型0.0与整型0是可以比较大小的,他们是一样大的,都是等于零。浮点型与整型比较大小时,由编译器自动统一转换成浮点型。因此是可以直接比较大小的。但是对于
被除数和除数都是整数的表达式,把分子和分母任一个写成xx.0的形式与把分子分母都写成整数形式的结果是不一样的。如果结果是负数,后者大于前者;如果结果是正数,前者大于后者。结果总是向零的方向靠近!例如 假设a,b,c,d都是float型,a=5/2;b=-5/2;c=5.0/2;d=-5.0/2,则有以下结果a<c,b>d.

希望对你有所帮助!

sqrt(i)是平方根,这里他是浮点型,若赋给整形的话则截掉小数点取整。
浮点型0.0==整型0

应该是Int,因为sqrt函数默认输出为INT,如果有小数,它会省率掉的。
对于0.0与0比较,C语言规定是两种不同类型的进行比较时候,先要进行转换,一般是字节长的把后面部分省掉,用与比较的相同的字节进行,但如果长字节的数是负数,那省率后部分后,剩下的第一位要变为1,这样看来,0.0与0是相等的

函数原型:double sqrt(double x)
表明函数的返回值是一个double型。

另外关于int型与double型比较的问题,一定是要把两个数转换成相同格式才可以比较。
如果是自动转换int -> double,如果是强制转换,可以是double -> int.
当然还有一个精度的问题,比如float型是精度是七位有效数字,那么0.000000001和0比较时,不要用“=”结果可能不正确。浮点型数字的比较可以用两个值的差,然后取绝对值与0.0比较。

j<=sqrt(i);最好换成j<sqrt(i)+1 比较保险

其他问题楼上的都说得很清楚了