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

问题1.这个是求圆面积及周长源程序
#include <stdio.h>0sy

#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);
}
在vc上怎么运行总是说“double calcucirum(double r)”有错误,把汉字换成英文在tc上运行时也发现里面有错误,高手来帮忙看看吧!
问题2.#include <stdio.h>

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

为什么a的结果是:扬(繁体字)
如果把程序做一点改动
即#include <stdio.h>

int main(void)
{
char a='2',b='a';
int c;
c=a+b;
a=c;
printf("c is:%d,a is:%c\n",c,c);
return 0;
}

a的结果却变成“?”,这是什么原因?
问题3.#include <stdio.h>

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

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

为什么结果是无法运行?
3.#include <stdio.h>

int main(void)
{
double a,abstr(double x);

printf("请输入一个双精度的数:");

scanf("%f",&a);

printf("这个结果是:%f",abstr(a));

getch();

return 0;

}
double abstr(double x)
{
if (x>=0.0)
return (x);
else
return (-x);

}
此时结果是非常长的一串数,非意愿,但是将“%f”换成“%lf”时结果就变成了意愿!
问题在哪里?
4.#include <stdio.h>
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;
}
--------------------Configuration: NONAME00 - Win32 Debug--------------------
Compiling...
NONAME00.C
D:\Program Files\C语言编译器\BIN\NONAME00.C(5) : error C2143: syntax error : missing ';' before 'type'
D:\Program Files\C语言编译器\BIN\NONAME00.C(6) : error C2065: 'x' : undeclared identifier
D:\Program Files\C语言编译器\BIN\NONAME00.C(9) : error C2065: 'y' : undeclared identifier
D:\Program Files\C语言编译器\BIN\NONAME00.C(12) : error C2065: 'z' : undeclared identifier
执行 cl.exe 时出错.
这个程序错在哪里?
5.#include <stdio.h>
int main(void)
{
doubble popu;
popu=13;

int i=1;
while (i<=10)
{
popu=popu*(1+0.002);
printf("第i年人口是:%f\n",i,popu);
i++;
}
return 0;

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

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

#include <stdio.h>
#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 <stdio.h>

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 <stdio.h>
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
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-07-26
问题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写错了

给你一点建议,你的错误都非常低级,以后不要一有错就来问,可以尝试自己调试一下就知道错误在哪里了,这样也有助于你自己的提高
第2个回答  推荐于2016-04-25
问题1:
#include <stdio.h>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 <stdio.h>

#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书写错误!本回答被提问者采纳
第3个回答  2008-07-26
问题分开来问啊。
我答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,
所以输出的是乱码。
相似回答