c语言语法问题!高手请进

2024-12-12 17:29:26
推荐回答(4个)
回答1:

1.
#define是替换的意思,所以函数形参也被替换了,所以语法不对
改好了:

#include
#define pi 3.1415926
#define r 2.0
double calcuarea(double ) ;
double calcucirum(double ) ;
int main(void)
{
printf("圆的面积是:%f\n", calcuarea(r));
printf("圆的周长是:%f\n", calcucirum(r));
return 0; }
double calcuarea(double R)
{
return(pi*R*R);
}
double calcucirum(double R)
{
return(pi*R*2.0);
}

2.
扬和?的输出是汉字编码,你想要的应该是ascii码
'2'的ascii是50,'a'的ascii是97,他们的和达到了147,不属于ascii的范畴了,当超过127的字符以字符格式输出会按汉字编码方式两个字节结合成一个汉字
字符串以\0结尾,第一次的扬由147,0这两个字节结合
第二次由于在\0前面多了个\n,147不能和另一字符结合,单字节非ascii输出?

3.
#include

int main(void)
{
int i,j;
float x,y;
char c;

scanf("%2d%f%f%c%d",&i,&x,&y,&c,&j);
return 0;
}

为什么结果是无法运行?
可以运行

4.
此时结果是非常长的一串数,非意愿,但是将“%f”换成“%lf”时结果就变成了意愿!

浮点数的内存格式是 符号为+阶码+尾数(左端为高字节)
而double为8字节,float为4字节
当以%lf格式操作的时候没有问题
当以%f格式操作的时候,由于输入的浮点数按float的格式保存在了低4字节,高4字节没有修改,vc的默认值为0xcc,所以double a的实际内存格式为0xcccccccc+符号位+阶码+尾数,这种格式显然是不对的,由于最终阶码非0,所以输出一个极大的浮点数

5.
#include
int main(void)
{
printf("%-8s%8s%8s\n","cocks","hens","chicks");
int x=0,y=0,z=0;
while (x<20)
x++;
while (y<=33)
y++;
z=300-15*x-9*y;
if (100-x-y==z)
printf("%-8d%8d%8d\n",x,y,z);
return 0;
}
我编译运行没有问题
x=20,y=34,z=-306
最后一次不会输出xyz

6.
为什么把 double popu=13;
分解成 doubble popu;
popu=13;运行出现错误?

你写错了doubble多写了个b

回答2:

问题1:
错误1:
double calcuarea(double r)
double calcucirum(double r)
后面没加分号;
错误2:r用宏定义为常量,不能作为形参
问题2:a,b均为字符,在ascII中有定义,分别按照字符整形输入的是ascII的码值,可以先进性字符串到整形的变换再输出
问题3:scanf输入时%f表示浮点型,不包括双精度,可以改用%l或者%lf
问题4:没有问题,编译通过。是你的编译器有问题
问题5:你的double写错了

给你一点建议,你的错误都非常低级,以后不要一有错就来问,可以尝试自己调试一下就知道错误在哪里了,这样也有助于你自己的提高

回答3:

问题1:
#include 0sy/*去掉0sy*/

#define pi 3.1415926
#define r 2.0/*这里的r和后面函数的形参同名,建议改为R*/

double calcuarea(double r)/*缺少分号*/
double calcucirum(double r)/*缺少分号*/

int main(void)
{

printf("圆的面积是:%f\n", calcuarea(r));/* r改为R */
printf("\t圆的周长是:%f\n", calcucirum(r));/* r改为R */
return 0;

}
double calcuarea(double r)
{
return(pi*r*r);
}
double calcucirum(double r)
{
return(pi*r*2.0);
}

修正后的程序如下:

//---------------------------------------------------------------------------

#include

#define pi 3.1415926
#define R 2.0

double calcuarea(double r) ;
double calcucirum(double r) ;

int main(void)
{

printf("圆的面积是:%f\n", calcuarea(R));
printf("\t圆的周长是:%f\n", calcucirum(R));
return 0;

}
double calcuarea(double r)
{
return(pi*r*r);
}
double calcucirum(double r)
{
return(pi*r*2.0);
}
//---------------------------------------------------------------------------

问题二:

'2'的ASCII码是50
'a'的ASCII码是97
所以c=147,这个值已经超出了ASCII码的范围(不含扩展ASCII),所以会出错乱码

换成a=c后,由于char类型是8位,而且此时最高位是1,所以这是一个负数,同样超出了ASCII码的范围,所以出错。

问题三:
%f代表float
%lf代表double

问题四:
变量定义必须放在函数的一开始。

问题五:

分解后的关键字double书写错误!

回答4:

问题分开来问啊。
我答2.int main(void)
{
char a='2',b='a';
int c;
c=a+b;
a=c;
printf("c is:%d,a is:%c",c,c);
return 0;
}

'2'=50.
'a'=97.
c=a+b=147
超过了char 的最大值127,
所以输出的是乱码。