C问题与第一个计算程序

时间:2017-05-03 10:54:01

标签: c

我正在从Java转移到C和C ++,我遇到了这类最简单的任务问题所以如果可以,请帮助我:

#include<stdio.h>
#include<math.h>

 void main()
 {
int a, h;
double interres;
double base;
printf("Input  a: ");
scanf("%d", &a);
printf("Input  height h: ");
scanf("%d", &h);
base =(a^2 * sqrt(3))/ 4;//line 13
interres = a ^ 2 * sqrt(3);//line 14

printf("(%d^2*sqrt(3))/4=(%d^2*%f)/4=(%f*%f)/4=%f/4=%f cm",a,a,sqrt(3),a^2,sqrt(3),interres,base);

 }

我经常出错:

error C2297: '^': illegal, right operand has type 'double' line 13
error C2297: '^': illegal, right operand has type 'double' line 14
 warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.  warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

2 个答案:

答案 0 :(得分:0)

几个问题:

在C和C ++中,main返回int,而不是void。除非您的编译器文档明确将void main()列为有效签名,否则使用它会调用未定义的行为。 main应定义为

int main( void )

如果您不接受任何命令行参数,或

int main( int argc, char **argv )

如果你这样做。

其次,^运算符是按位XOR运算符,而不是取幂运算符; C和C ++都没有指数运算符。您必须使用标准库中的pow功能或自行滚动。

最后,scanf 在使用%s%[转换说明符读取输入时,可能不安全,您不会这样做。就个人而言,我按照错误消息中的描述禁用警告。

答案 1 :(得分:-1)

#include<stdio.h>
#include<math.h>

 void main()
 {
int a, h;
double interres;
double base;
printf("Input  a: ");
scanf("%d", &a);
printf("Input  height h: ");
scanf("%d", &h);
base =(double)((a*a) * sqrt(3))/ 4;//line 13
interres =(double) (a *a)  * sqrt(3);//line 14

printf("(%d^2*sqrt(3))/4=(%d^2*%f)/4=(%f*%f)/4=%f/4=%f cm",a,a,sqrt(3),a*a,sqrt(3),interres,base);

 }