新手问题这个c语言编程软件程序哪里错了

我的C语言的初学者,有谁能告诉我这个简单这个程序错在哪里吗?为什么报错说 'zhuanhuan' : undeclared id_百度知道
我的C语言的初学者,有谁能告诉我这个简单这个程序错在哪里吗?为什么报错说 'zhuanhuan' : undeclared id
printf(&}void zhuanhuan(;stdio,b),a.h& void main()弑症赤菏俦孤幅圃{int a=2,b=3;x=y;zhuanhuan(a;t=x;%d,%d&quot,b),int y){y=t#include &quot
提问者采纳
b=3,b);void zhuanhuan(;stdio:
#include &quot,int y){ void main(){void zhuanhuan(printf(&int a=2;y=t;t=x;肯定了 你函数使用前没有声明啊 可以吧那个函数放到主函数前面 也可以在使用前加个声明 方法一,b);%d;}方法二,%d&t=x,b);x=y;zhuanhuan(a;zhuanhuan(a,a;%d.h&}
void main(){int a=2,%d&y=t,b=3,b);printf(&quot:#include &quot,int y);x=y,a;}void zhuanhuan弧莜汾吠莴杜惑米(int x,int y){int t.h&stdio
提问者评价
谢谢了,我还刚学没有几天,见笑了
其他类似问题
c语言的相关知识
其他3条回答
y=t;%d;zhuanhuan(a;x=y,b).h&void zhuanhuan(int x,int y){int t,a;t=x;;}
void main(){int a=2,b=3;printf(&quot,%d&quot,b)#include &quot
在函数调用之前要先声明!在zhuanhuan(a,b);这一行前面加上void zhuanhuan(int x,int y);或者把被调用函数放到调用函数上面,就像1楼说的那样。另外你还不了解实参和形参的关系,这种转换是没有用的,建议你学一学指针。
#include &stdio.h&void zhuanhuan(int x,int y){t=x;x=y;y=t;}
void main(){int a=2,b=3;zhuanhuan(a,b);printf(
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁来 自:何方
等 级:版主
威 望:125
帖 子:6233
专家分:38184
&&得分:10&
sum=sum+f/s; 这里的f / s 估计被转成整形了。
把f 和s 改成double 试试
我的博客:
http://blog.sina. com. cn/yuccn
等 级:论坛游民
专家分:13
&&得分:10&
你在开始定义的f是int整形,所以sum=sum+f/s;f/s被转化成整形了。还有你最后输出怎么会有total呢?
等 级:新手上路
帖 子:13
哈哈~~问题解决了!! 这样的句式是可以的~!!
我把所有变量都定义为浮点型了~!!结果是0.688172~!!以后是成功代码~!
#include&stdio.h&
int main()
&&& double sum,s,f;
&&& sum=1.0;
&&& s=2.0;
&&& f=1.0;
&&& while(s&=100.0)
&&&&&&&&f=(-1)*f;
&&&&&&&&sum=sum+f/s;
&&&&&&&&s=s+1.0;
&&& printf(&total=%f\n&,sum);
&&&&&&&&return 0;
等 级:新手上路
帖 子:13
回复 2楼 yuccn
是的~!!多谢版主了~!!
等 级:新手上路
帖 子:13
回复 3楼 蚂蚁学习
total是我自己加的~~
版权所有,并保留所有权利。
Powered by , Processed in 0.022045 second(s), 7 queries.
Copyright&, BCCN.NET, All Rights Reserved请高手帮忙看看这个C语言程序错在哪里?很简单,新手问题。。_百度知道
请高手帮忙看看这个C语言程序错在哪里?很简单,新手问题。。
有一分数序列:2/1
21/13...求出这个数列的前20项之和。程序如下:#include &stdio.h&void main(){t;n=20; float a=2,b=1,s=0; for (i=1;i&=n;i++) {s=s+a/b; t=a; a=a+b; b=t; } printf(&sum=%9.6f\n&,s);}请问这个程序错在哪里。。在VC6.0中显示有一个错误,可我找不到。。
提问者采纳
int i,t,n=20;
提问者评价
感谢,所有人答案都是对的,你是第一个,所以选你。。。。
其他类似问题
按默认排序
其他4条回答
t;n=20; t,n没有类型,应为你用的分号建议一个变量一行int n=20;
你的主函数第一行定义变量出现了错误,应该将t;n=20;修改成:int i,t,n=20;我不建议你像楼上的哪种方法,如果在以后的程序编写中须要定义多个变量的话,它的形式会显得复杂。没有什么意义。只是在简单的小程序中,这样定义有利于初学者检查错误。
原文:t;n=20; 改正:int i,t,n=20;平时要注意:1和l,和,0和O(大写)
你的Int i后边改成逗号,t后边也改成逗号
c语言程序的相关知识
等待您来回答
您可能关注的推广回答者:回答者:
下载知道APP
随时随地咨询
出门在外也不愁  问题出处见 &。
  在该文的最后,曾提到完成的代码还有进一步改进的余地。本文完成了这个改进。所以本文讨论的并不是初学者代码中的常见错误与瑕疵,而是对我自己代码的改进和优化。标题只是为了保持系列的连续性。
  程序的总体思想没有改变,所以main()函数不需要任何改动。
int main( void )
puts( "数据组数=?" );
scanf( "%u" , &n );
while ( n -- & 0 )
puts( "整数X=?" );
scanf( "%d", & x );
printf("%d\n" , get_nearest( x ) ); //求最接近x的素数
&  进一步的改进体现在
struct prime_list
struct prime_list *
int get_nearest( int x )
int step = 0 ;
//步长增量
int sign = -1;
Node * head = NULL ;
//素数链表
while ( ! be_prime( x , & head ) )
x += ( sign = - sign ) * ++
my_free(head) ;
&  这里增加了一个链表head,用于存储素数表。这样,在判断素数时只用较小的素数试除就可以了,这可以使计算数量大为减少。因为与自然数相比,素数的数量很少(&ln n / n 个)。此外,在判断完x是否为素数之后,如果需要判断下一个数(x += ( sign = - sign ) * ++)是否为素数,这个素数表还可以重复使用,最多再向其中添加一个素数就可以了。(注意最初素数表是空的)
  判断素数的方法很简单,小学生都懂。
bool be_prime( int x , Node * * pp ) //根据素数表pp判断x是否为素数
if ( x &= 1 )
return false ;
if ( x == 2 )
return true ;
if ( get_remainder( x , pp ) == 0 ) // x对素数表pp中素数逐个求余有0值
return false ;
return true ;
  但是由于素数表(*pp==NULL)可能是空的,因此
int get_remainder( int x , Node * * pp )//x对素数表pp中素数逐个求余
while ( * pp == NULL || sqr_less( (*pp) -& prime , x ) )//表中素数个数不足
add_1_prime ( pp ) ;
//表中增加一个素数
Node * p = *
while ( p != NULL )
if ( x % p -& prime == 0 )
return !0 ;
bool sqr_less ( int n , int x )
return n * n &
  需要先向其中添加素数
  add_1_prime ( pp ) ;
  sqr_less( (*pp) -& prime , x )
  依从小到大次序最后加入的那个素数的平方不小于x为止。
void add_1_prime( Node * * pp )
if ( * pp == NULL )
add ( 2 , pp );
//第一个素数
int next_p = ( * pp )-&prime + 1 ;
//从最后一个素数之后开始找下一个素数
while ( !be_prime( next_p , pp ) )
next_p ++ ;
add( next_p , pp );
//将下一个素数加入素数表
来说,加入第一个素数&&2很容易,但是寻找素数表中最大素数后的下一个素数时,却需要判断一个整数是否是素数
be_prime( next_p , pp )
  这样,就会发现,这个过程最初是由判断某个数x是否是素数开始,
be_prime( x , & head )
  在判断过程中需要建立素数表,
add_1_prime ( pp ) ;
  而建立素数表,又需要判断某个数是否是素数
be_prime( next_p , pp )
  这样就形成了一个极其复杂的间接递归调用。更为复杂的是,在调用的过程中,素数表本身即不断地被使用,而自身也处于不断的变化状态之中,即不断地被添加进新的素数,与复杂的间接递归一道,构成了比复杂更复杂的复杂的代码结构与复杂的数据结构的复杂的结合体。有兴趣的话可以自己算一下圈复杂度,如此复杂的情况通常并不容易遇到。
  这种局面完全是由于精打细算造成的,由于对速度的斤斤计较,从而形成了一幅小猫在拼命咬自己尾巴同时小猫自己又在不断变化的复杂无比的动态画面。由此我们不难理解,为什么有人说,&不成熟的优化是万恶之源&(Premature optimization is the root of all evil!- Donald Knuth)。因为优化往往意味着引人复杂。复杂也是一种成本,而且是一种很昂贵的成本。
  就这个题目而言这种成本应该算是值得,因为对于求一个较大的最接近的素数问题而言(例如对于109这个量级),两套代码的速度有天壤之别。
增强可读性?
  如果把建立素数表的要求写在get_nearest()函数中,可能会使代码可读性变得更好些。&
int get_nearest( int x )
int step = 0 ;
//步长增量
int sign = -1;
Node * head = NULL ;
//素数链表
while ( 建立最大素数平方不小于x的素数表() , ! be_prime( x , & head ) )
x += ( sign = - sign ) * ++
my_free(head) ;
&  但这里的这个这个&,&是免不掉的,且圈复杂度不变。
  至于这种写法是否真的改善了可读性,恐怕是见仁见智。
进一步提高效率
  没什么更好的办法,只能用点&赖皮&手段,即充分运用已有的素数知识,帮计算机算出一部分素数。
void add_1_prime( Node * * pp )
if ( * pp == NULL )
add ( 2 , pp );
//第一个素数
switch ( ( * pp ) -& prime )
2: add ( 3
3: add ( 5
/* 这里可以依样写多个case,只要是按照素数从小到大的次序*/
int next_p = ( * pp )-&prime + 1 ;
//从最后一个素数之后开始找下一个素数
while ( !be_prime( next_p , pp ) )
next_p ++ ;
add( next_p , pp );
//将下一个素数加入素数表
&  这里switch语句的结构非常有趣。
/*问题: 素数 在世博园某信息通信馆中,游客可利用手机等终端参与互动小游戏,与虚拟人物Kr. Kong 进行猜数比赛。当屏幕出现一个整数X时,若你能比Kr. Kong更快的发出最接近它的素数答案,你将会获得一个意想不到的礼物。
例如:当屏幕出现22时,你的回答应是23;当屏幕出现8时,你的回答应是7;若X本身是素数,则回答X;若最接近X的素数有两个时,则回答大于它的素数。
输入:第一行:N 要竞猜的整数个数 接下来有N行,每行有一个正整数X 输出:输出有N行,每行是对应X的最接近它的素数
样例:输入 4 22 5 18 8 输出 23 5 19 7
作者:薛非出处:&& &C语言初学者代码中的常见错误与瑕疵&系列博文
版本:V 2.1*/
#include &stdio.h&
#include &stdbool.h&
struct prime_list
struct prime_list *
int get_nearest( int );
bool be_prime( int , Node * * );
int get_remainder( int , Node * * ) ;
void add_1_prime( Node * * );
bool sqr_less ( int , int );
void add ( int , Node * * );
void my_malloc( Node * *
void my_free( Node * );
int main( void )
puts( "数据组数=?" );
scanf( "%u" , &n );
while ( n -- & 0 )
puts( "整数X=?" );
scanf( "%d", & x );
printf("%d\n" , get_nearest( x ) ); //求最接近x的素数
int get_nearest( int x )
int step = 0 ;
//步长增量
int sign = -1;
Node * head = NULL ;
//素数链表
while ( ! be_prime( x , & head ) )
x += ( sign = - sign ) * ++
my_free(head) ;
bool be_prime( int x , Node * * pp ) //根据素数表pp判断x是否为素数
if ( x &= 1 )
return false ;
if ( x == 2 )
return true ;
if ( get_remainder( x , pp ) == 0 ) // x对素数表pp中素数逐个求余有0值
return false ;
return true ;
int get_remainder( int x , Node * * pp )//x对素数表pp中素数逐个求余
while ( * pp == NULL || sqr_less( (*pp) -& prime , x ) )//表中素数个数不足
add_1_prime ( pp ) ;
//表中增加一个素数
Node * p = *
while ( p != NULL )
if ( x % p -& prime == 0 )
return !0 ;
bool sqr_less ( int n , int x )
return n * n &
//&偷奸耍滑&的add_1_prime()
void add_1_prime( Node * * pp )
if ( * pp == NULL )
add ( 2 , pp );
//第一个素数
switch ( ( * pp ) -& prime )
2: add ( 3
3: add ( 5
/* 这里可以依样写多个case,只要是按照素数从小到大的次序*/
int next_p = ( * pp )-&prime + 1 ;
//从最后一个素数之后开始找下一个素数
while ( !be_prime( next_p , pp ) )
next_p ++ ;
add( next_p , pp );
//将下一个素数加入素数表
//老老实实的add_1_prime()
//void add_1_prime( Node * * pp )
if ( * pp == NULL )
add ( 2 , pp );
//第一个素数
int next_p = ( * pp )-&prime + 1 ;
//从最后一个素数之后开始找下一个素数
while ( !be_prime( next_p , pp ) )
next_p ++ ;
add( next_p , pp );
//将下一个素数加入素数表
void add ( int prime , Node * * pp )
my_malloc( & temp );
temp -& prime =
temp -& next = *
void my_malloc( Node * * p_p )
if ( ( * p_p = malloc( sizeof (* * p_p) ) ) == NULL )
void my_free( Node * p )
while ( ( temp = p ) != NULL )
free( temp );
&相关博客:
  偶然发现网友后来研究同一问题的一篇博文,我感觉对阅读此文的网友可能有一定的参考价值,故在此给出相关链接:。
阅读(...) 评论()我想问一下这样写程序哪里出错了,我是C语言新手 ,谢谢了 在线等 #include &stdafx.h& #include &math.h&_百度知道
我想问一下这样写程序哪里出错了,我是C语言新手 ,谢谢了 在线等 #include &stdafx.h& #include &math.h&
提问者采纳
程序在哪里没看到 能看到的部分:我想问一下这样写程序哪里出错了,我是C语言新手 ,谢谢了 在线等 #include &stdafx.h& #include &math.h&
{float x,y;scanf(&f%&,x);if(-5.0&x&0.0) {c=1;}else if(x=0.0){c=2;}elseif(0.0&x&8.0) {c=3;}switch(c){case 1:printf(&x-1=%f\n&,y);case 2: printf(&x=%f\n&,y);case 3: printf(&x+1=%f\n&,y);default :printf(&错误&);} return 0;}第一次在这上面没问问题
,不好意思
主程序如上面哎呀
这有字数限制
int main(){ float x,y; scanf(&f%&,x); //这里x要改成&x if(-5.0&x&0.0) {c=1;} //改成if(-5&x&&x&0) else if(x=0.0){c=2;} //改成if(x==0.0) else if(0.0&x&8.0) {c=3;} //改成if(0&x&&x&8) switch(c) { case 1:printf(&x-1=%f\n&,y); //改成printf(&x-1=%f\n&,(x-1)); case 2: printf(&x=%f\n&,y); //改成printf((&x=%f\n&,x) case 3: printf(&x+1=%f\n&,y);//改成printf(&x+1=%f\n&,(x+1)); default :printf(&错误&); } return 0; } 修改后 int main(){ float x,y; scanf(&%f&,&x); if(-5.0&x&&x&0.0) {c=1;} else if(x==0.0){c=2;} else if(0.0&x&&x&8.0) {c=3;} switch(c) { case 1:printf(&x-1=%f\n&,(x-1)); case 2: printf(&x=%f\n&,x); case 3: printf(&x+1=%f\n&,(x+1)); default :printf(&错误&); } return 0; }
提问者评价
其他类似问题
stdafx的相关知识
其他2条回答
#include &stdafx.h&#include &math.h&得这样写才可以,这是C语言对头文件的引用,用以调用这里面的函数的。 在引用了头文件之后,后面是还需要跟上man()主函数的。你还得引用一个输入输出头文件。
{ float x,y; scanf(&f%&,x); if(-5.0&x&0.0) {c=1;} else if(x=0.0){c=2;} else if(0.0&x&8.0) {c=3;} switch(c) {case 1:printf(&x-1=%f\n&,y); case 2: printf(&x=%f\n&,y); case 3: printf(&x+1=%f\n&,y); default :printf(&错误&);} return 0; } 第一次在这上面没问问题 ,不好意思 主程序如上面哎呀 这有字数限制
估计用的是VC6.0或者VS系列你应该是工程建错了应该建Win32 Console Project不会包含头文件&stdafx.h& 我猜你是建成了Win32 Project或者是MFC之类的
{ float x,y; scanf(&f%&,x); if(-5.0&x&0.0) {c=1;} else if(x=0.0){c=2;} else if(0.0&x&8.0) {c=3;} switch(c) {case 1:printf(&x-1=%f\n&,y); case 2: printf(&x=%f\n&,y); case 3: printf(&x+1=%f\n&,y); default :printf(&错误&);} return 0; } 第一次在这上面没问问题 ,不好意思 主程序如上面哎呀 这有字数限制
新建工程,如果是中文版选择win32控制台程序,英文版的话选择win32 console project包含头文件&stdio.h&
&math.h&粘贴主程序重新编译应该就可以了
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 c语言视频教程 的文章

 

随机推荐