帮我看看这个荒淫函数有什么问题,怎么结果只...

测试这个c++程序最后的main函数的大括号有问题,帮忙看下啊。_百度知道
测试这个c++程序最后的main函数的大括号有问题,帮忙看下啊。
#include&stdio.h&#define MAX 101#define maxTrip 10000struct step{
int x,y;}chase[maxTrip];int field[MAX][MAX];int row[MAX][MAX],column[MAX][MAX];int m,n;int max(int x,int y){return (x&y)?x:y;}int min(int x,int y){return (x&y)?x:y;}void initialize(){int i,j;scanf(&%d,%d&,&m,&n);for(i=1;i&=m;++i)fo旦处测肺爻镀诧僧超吉r(j=1;j&=n;++j) scanf(&%d&,&field[i][j]);
for(i=1;i&=m;++i)
for(j=1;j&=n;++j)
row[i][j]=row[i][j-1]+field[i][j];
for(i=1;i&=n;++i)
for(j=1;j&=m;++j)column[j][i]=column[j-1][i]+field[j][i];trip=0;int from,while(scanf(&%d,%d,&from,&to&) && (from || to)){
chase[trip].x=
chase[trip].y=
scanf(& %c&,&chase[trip].direct);
}}void search(int step,int x,int y){if (found)if (step==trip){
found=1;}for(i=chase[step].x;i&=chase[step].y;++i){int x0=x,y0=y;switch (chase[step].direct){case 'R':y0+=i;case 'L':y0-=i;case 'U':x0-=i;case 'D':x0+=i;}if(x0&=1 && x0&=m && y0&=1 && y0&=n) switch(chase[step].direct){case'R':case'L':
if (row[x0][max(y,y0)]==row[x0][min(y,y0)-1])
search(step+1,x0,y0);case 'U':case 'D':
if (column[max(x,x0)][y0]==column[min(x,x0)-1][y0])
search(step+1,x0,y0);
}}int main(void){
for (i=1;i&=m;++i)
row[i][0]=0;
for(i=1;i&=n;++i)
column[0][i]=0;
scanf(&%d&,&iCase);
while (iCase--){initialize();ans=0;for(i=1;i&=m;++i)for(j=1;j&=n;++j)if (!field[i][j]){found=0;search(0,i,j);}printf(&%d\n&,ans);
}return 0;}
提问者采纳
swich缺少个结尾 },程序最后结尾多了一个} 望采纳,谢谢switch(chase[step].direct){case'R':case'L':
if (row[x0][max(y,y0)]==row[x0][min(y,y0)-1])
search(step+1,x0,y0);case 'U':case 'D':
if (column[max(x,x0)][y0]==column[min(x,x0)-1][y0])
searc旦处测肺爻镀诧僧超吉h(step+1,x0,y0);
改了之后运行时输入1 2 R之后还是出现程序崩溃的情况,怎么办啊?
#include&stdio.h&#define&MAX&101#define&maxTrip&10000struct&step{int&x,y;char&}chase[maxTrip];int&field[MAX][MAX];int&row[MAX][MAX],column[MAX][MAX];int&m,n;int&int&int&int&max(int&x,int&y){return&(x&y)?x:y;}int&min(int&x,int&y){return&(x&y)?x:y;}void&initialize(){int&i,j;scanf(&%d,%d&,&m,&n);for(i=1;i&=m;++i)for(j=1;j&=n;++j)&scanf(&%d&,&field[i][j]);for(i=1;i&=m;++i)for(j=1;j&=n;++j)row[i][j]=row[i][j-1]+field[i][j];& &for(i=1;i&=n;++i)for(j=1;j&=m;++j)column[j][i]=column[j-1][i]+field[j][i];trip=0;int&from,while(scanf(&%d,%d,&from,&to&)&&&&(from&||&to)){chase[trip].x=&chase[trip].y=scanf(&&%c&,&chase[trip].direct);++}}void&search(int&step,int&x,int&y){int&i;if&(found)&if&(step==trip){++found=1;}for(i=chase[step].x;i&=chase[step].y;++i){int&x0=x,y0=y;switch&(chase[step].direct){case&'R':y0+=i;case&'L':y0-=i;case&'U':x0-=i;case&'D':x0+=i;}if(x0&=1&&&&x0&=m&&&&y0&=1&&&&y0&=n)switch(chase[step].direct){case'R':case'L':if&(row[x0][max(y,y0)]==row[x0][min(y,y0)-1])search(step+1,x0,y0);case&'U':case&'D':& if&(column[max(x,x0)][y0]==column[min(x,x0)-1][y0])search(step+1,x0,y0);}}}int&main(void){int&i,j;for&(i=1;i&=m;++i)row[i][0]=0;for(i=1;i&=n;++i)column[0][i]=0;int&iCscanf(&%d&,&iCase);while&(iCase--){initialize();ans=0;for(i=1;i&=m;++i)for(j=1;j&=n;++j)if&(!field[i][j]){found=0;search(0,i,j);}printf(&%d\n&,ans);}return&0;}vs下的这是运行结果,不知道你的程序是要做什么,但是修改后的经编译运行是没有错误的,望采纳& &
提问者评价
其他类似问题
void search(int step,int x,int y) //最后掉了一个 }#include&stdio.h&#define MAX 101#define maxTrip 10000struct step{
int x,y;}chase[maxTrip];int field[MAX][MAX];int row[MAX][MAX],column[MAX][MAX];int m,n;int max(int x,int y){return (x&y)?x:y;}int min(int x,int y){return (x&y)?x:y;}void initialize(){int i,j;scanf(&%d,%d&,&m,&n);for(i=1;i&=m;++i)for(j=1;j&=n;++j) scanf(&%d&,&field[i][j]);for(i=1;i&=m;++i)for(j=1;j&=n;++j)row[i][j]=row[i][j-1]+field[i][j];
for(i=1;i&=n;++i)for(j=1;j&旦处测肺爻镀诧僧超吉=m;++j)column[j][i]=column[j-1][i]+field[j][i];trip=0;int from,while(scanf(&%d,%d,&from,&to&) && (from || to)){chase[trip].x= chase[trip].y=scanf(& %c&,&chase[trip].direct);++}}void search(int step,int x,int y){if (found)if (step==trip){++found=1;}for(i=chase[step].x;i&=chase[step].y;++i){int x0=x,y0=y;switch (chase[step].direct){case 'R':y0+=i;case 'L':y0-=i;case 'U':x0-=i;case 'D':x0+=i;}if(x0&=1 && x0&=m && y0&=1 && y0&=n)switch(chase[step].direct){case'R':case'L':if (row[x0][max(y,y0)]==row[x0][min(y,y0)-1])search(step+1,x0,y0);case 'U':case 'D':
if (column[max(x,x0)][y0]==column[min(x,x0)-1][y0])search(step+1,x0,y0);}}}int main(void){int i,j;for (i=1;i&=m;++i)row[i][0]=0;for(i=1;i&=n;++i)column[0][i]=0;int iCscanf(&%d&,&iCase);while (iCase--){initialize();ans=0;for(i=1;i&=m;++i)for(j=1;j&=n;++j)if (!field[i][j]){found=0;search(0,i,j);}printf(&%d\n&,ans);}return 0;}
改了之后运行时输入1 2 R之后还是出现程序崩溃的情况,怎么办啊?
我都不知道你要干嘛
大括号的相关知识
按默认排序
其他1条回答
main函数前面少个},是上一个函数search少的
改了之后运行时输入1 2 R之后还是出现程序崩溃的情况,怎么办啊?
输入是分多行的先输入scanf(&%d&,&iCase);再输入scanf(&%d,%d&,&m,&n);再输入scanf(&%d&,&field[i][j]);再输入scanf(&%d,%d,&from,&to&)再输入scanf(& %c&,&chase[trip].direct);简单的输入应该是11,1 // m,n注意是逗号1
//field1,1 // from toR
//direct0,0 // from to 结束循环
按照这样的输入也是无法运行啊。。。
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁一生只为等待能手绘这个函数给我的人_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
&&¥2.00
喜欢此文档的还喜欢
一生只为等待能手绘这个函数给我的人
熟​悉​数​学​的​人​看​了​就​知​道​,​浪​漫​的​事​情
阅读已结束,如果下载本文需要使用
想免费下载本文?
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢帮我看看我的对勾函数证明过程有什么问题设x1 x2∈(0,正无穷),切x10,1+a/x1x2&0所以f(x1)_百度作业帮
拍照搜题,秒出答案
帮我看看我的对勾函数证明过程有什么问题设x1 x2∈(0,正无穷),切x10,1+a/x1x2>0所以f(x1)
帮我看看我的对勾函数证明过程有什么问题设x1 x2∈(0,正无穷),切x10,1+a/x1x2>0所以f(x1)
你只错了一点点~设x1 x2∈(0,正无穷),且x1
第5排:1+a/x1x2应该改为1-a/x1x2
我懂了,改完之后该怎么证呀?
zczczczczc帮我看看这函数有什么问题,急求_百度知道
帮我看看这函数有什么问题,急求
reverse(str); scanf(&s%&}/} &#47,j=strlen(str); &#47.h& }
str[i]=str[j-1];下一行进行函数声明 int reverse(char str[]); puts(str);反转后的字符串为.h&strlen(str)/请输入字符串,str);
str[j-1]=t:&quot,j; return 0;i++;); gets(str); ;i&printf(&quot:&下一行进行函数调用int reverse(str[]){ int main(){ char str[80];&#47,j--) {
t=str[i];/ for(i=0;stdio#include &);/#include &2
提问者采纳
&);&&}结果; //这儿
str[j-1-i]=t;&nbsp:&&&& //去掉scanf(&quot.& puts(str);&int main(){
char str[80];&/zhidao/pic/item/d53fd1efc65ad7f1ad5ad6edcc438&&s%&quot://g;&nbsp.jpg" esrc="& reverse(str);请输入字符串;&nbsp,j=strlen(str);&nbsp:#include &&&&&&),str);}int reverse(char str[])&printf(&&&/zhidao/wh%3D600%2C800/sign=000d285fb21cbae/d53fd1efc65ad7f1ad5ad6edcc438cd:&quot.h&gt. return 0://g;stdio.baidu,用//注释并且修改;& gets(str);&反转后的字符串为;& //这儿少了类型char{ & int i.baidu. //去掉j-- {
t=str[i]://g,j.h&
str[i]=str[j-1-i];&&i& for(i=0;i++)&nbsp:<img class="ikqb_img" src="&&#include &&&&&&&&/zhidao/wh%3D450%2C600/sign=a9a884f49f2fdc1494af/d53fd1efc65ad7f1ad5ad6edcc438&&nbsp
warning C4018: &#39;&&#39; : signed&#47;unsigned mismatch
这是警告,不是错误,可以忽略
提问者评价
其他类似问题
按默认排序
其他3条回答
str);int reverse(str[])
这里改为int reverse(char str[]);scanf(&s%&
都是从键盘输入一串数据 所以只用使用其中一个就行了
程序已经跑过,掉了类型 另外gets(str)
warning C4018: &#39;&&#39; : signed&#47;unsigned mismatch,还有错
这是警告 没关系的!
for(i=0,j=strlen(str);i&(int)strlen(str)&#47;2;i++,j--)
这句代码改成这样就行了 这样都不采纳 佩服!
int reverse(char str[]);应该放在main函数外面。否则main无法调用位于他外面的reverse()函数……这是函数声明作用域的问题……
c++函数声明和函数定义应该写在main函数外面吧!难道c语言是这样语法?
这是C语言,不是C++
int reverse(str[])这句是不是少了参数类型
warning C4018: &#39;&&#39; : signed&#47;unsigned mismatch
函数的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁当前位置:
C++中的虚函数(一)
C++中的虚函数(一)
发布日期: 17:12
浏览次数:14346次
标  签:MFC,C++
文章评分:5.0
操  作:
称号:未设置简介:...
文章概要:
虽然很难找到一本不讨论多态性的C++书籍或杂志,但是,大多数这类讨论使多态性和C++虚函数的使用看起来很难。我打算在这篇文章中通过从几个方面和结合一些例子使读者理解在C++中的虚函数实现技术。说明一点,写这篇文章只是想和大家交流学习经验因为本人学识浅薄,难免有一些错误和不足,希望大家批评和指正,在此深表感谢!
虽然很难找到一本不讨论多态性的C++书籍或杂志,但是,大多数这类讨论使多态性和C++虚函数的使用看起来很难。我打算在这篇文章中通过从几个方面和结合一些例子使读者理解在C++中的虚函数实现技术。说明一点,写这篇文章只是想和大家交流学习经验因为本人学识浅薄,难免有一些错误和不足,希望大家批评和指正,在此深表感谢!
一、 基本概念
首先,C++通过虚函数实现多态."无论发送消息的对象属于什么类,它们均发送具有同一形式的消息,对消息的处理方式可能随接手消息的对象而变"的处理方式被称为多态性。"在某个基类上建立起来的类的层次构造中,可以对任何一个派生类的对象中的同名过程进行调用,而被调用的过程提供的处理可以随其所属的类而变。"虚函数首先是一种成员函数,它可以在该类的派生类中被重新定义并被赋予另外一种处理功能。
二、 虚函数的定义与派生类中的重定义
class 类名{
virtual 成员函数说明;
class 类名:基类名{
virtual 成员函数说明;
三、 虚函数在内存中的结构
1.我们先看一个例子:
#include "iostream.h"
#include "string.h"
virtual void fun0() { cout && "A::fun0" && }
int main(int argc, char* argv[])
cout && "Size of A = " && sizeof(a) &&
结果如下:Size of A = 4
2.如果再添加一个虚函数:virtual void fun1() { cout && "A::fun" &&}
得到相同的结果。如果去掉函数前面的virtual修饰符
void fun0() { cout && "A::fun0" && }
int main(int argc, char* argv[])
cout && "Size of A = " && sizeof(a) &&
结果如下:Size of A = 1
3.在看下面的结果:
virtual void fun0() { cout && "A::fun0" && }
int main(int argc, char* argv[])
cout && "Size of A = " && sizeof(a) &&
结果如下:Size of A = 12
其实虚函数在内存中结构是这样的:
在window2000下指针在内存中占4个字节,虚函数在一个虚函数表(VTABLE)中保存函数地址。在看下面例子。
virtual void fun0() { cout && "A::fun0" && }
virtual void fun1() { cout && "A::fun1" && }
int main(int argc, char* argv[])
cout && "Size of A = " && sizeof(a) &&
结果如下:结果如下:
Size of A = 4
虚函数的内存结构如下,你也可以通过函数指针,先找到虚函数表(VTABLE),然后访问每个函数地址来验证这种结构,在国外网站作者是:Zeeshan Amjad写的"ATL on the Hood中有详细介绍"
4.我们再来看看继承中虚函数的内存结构,先看下面的例子
virtual void f() { }
virtual void f() { }
virtual void f() { }
class Drive : public A, public B, public C {
int main() {
cout && "Size is = " && sizeof(d) &&
结果如下:Size is = 12 ,相信大家一看下面的结构图就会很清楚,
5.我们再来看看用虚函数实现多态性,先看个例子:
virtual void f() { cout && "A::f" && }
class B :public A{
virtual void f() { cout && "B::f" &&}
class C :public A {
virtual void f() { cout && "C::f" &&}
class Drive : public C {
virtual void f() { cout && "D::f" &&}
int main(int argc, char* argv[])
结果:A::f
不用解释,相信大家一看就明白什么道理!注意:多态不是函数重载
6.用虚函数实现动态连接在编译期间,C++编译器根据程序传递给函数的参数或者函数返回类型来决定程序使用那个函数,然后编译器用正确的的函数替换每次启动。这种基于编译器的替换被称为静态连接,他们在程序运行之前执行。另一方面,当程序执行多态性时,替换是在程序执行期进行的,这种运行期间替换被称为动态连接。如下例子:
virtual void f(){cout < <
"A::f" < <};
class B:public A{
virtual void f(){cout < <
"B::f" < <};
class C:public A{
virtual void f(){cout < <
"C::f" < f();
int main(int argc, char* argv[])
B *b=new B;
C *c=new C;
cout< < "type
B for class B,C for class C:"< >
if(choice==''b'')
else if(choice==''c'')
}while(1);
cout< < endl< <
在上面的例子中,如果把类A,B,C中的virtual修饰符去掉,看看打印的结果,然后再看下面一个例子想想两者的联系。如果把B和C中的virtual修饰符去掉,又会怎样,结果和没有去掉一样。&
7.在基类中调用继承类的函数(如果此函数是虚函数才能如此)
还是先看例子:
virtual void fun() {
cout && "A::fun" &&
void show() {
class B : public A {
virtual void fun() {
cout && "B::fun" &&
int main() {
打印结果:A::fun&
在6中的例子中,test(A *a)其实有一个继承类指针向基类指针隐式转化的过程。可以看出利用虚函数我们可以在基类调用继承类函数。但如果不是虚函数,继承类指针转化为基类指针后只可以调用基类函数。反之,如果基类指针向继承类指针转化的情况怎样,这只能进行显示转化,转化后的继承类指针可以调用基类和继承类指针。如下例子:
void fun() {
cout && "A::fun" &&
class B : public A {
void fun() {
cout && "B::fun" &&
void fun0() {
cout && "B::fun0" &&
int main() {
A *a=new A;
B *b=new B;
pb=static_cast(a); //基类指针向继承类指针进行显示转化
pb-&fun0();
pb-&fun();
&参考资料:
1.科学出版社 《C++程序设计》
2.Zeeshan Amjad 《ATL on the Hood》
是有点小错,不过无关紧要,讲得很清楚,谢谢楼主我头不晕了。
13:30 发表
有点小错误,不过很感谢我明白了。
13:53 发表
最多还可以输入100字
【VIP年会员制套餐】
【C/C++软件工程师实战能力集训大纲】
VC知识库发布了C/C++业界的“本草纲目”
【牛人都在千人一号群! 加群三步走!!!】
第一步:请必须加VC知识库QQ: 为好友;
第二步:请必须关注本站微博:
第三步:申请加入群:.(必须将关注微博截屏发到QQ方可通过!)
【最新2013:】
全部100% VC++源码提供: E-Form++全新大型SCADA & HMI解决方案源码、CAD解决方案源码、Gis解决方案源码 、电力石油化工仿真与图形建模解决方案源码、大量其他高级制图VC++源码下载!
【 新视频发布】
o o o o o o o o o o
在VC环境中除了我们所常用的Dialog、Menu和Bitmap等标准资源类型之外,它还支持自定义资源类型(Custom Resource),我们自定义的资源类型能做些什么呢?呵呵,用处多多。...
在VC环境中除了我们所常用的Dialog、Menu和Bitmap等标准资源类型之外,它还支持自定义资源类型(Custom Resource),我们自定义的资源类型能做些什么呢?呵呵,用处多多。...
本文介绍了套接字编程的基本知识。...}

我要回帖

更多关于 看看这个荒淫 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信