当前位置: 代码迷 >> C语言 >> [求助]我是新手//请教一个中等题
  详细解决方案

[求助]我是新手//请教一个中等题

热度:427   发布时间:2007-03-29 18:48:08.0
不好意思啊..我题目写错啦..


#include "stdio.h"
void main()
{int i1=3,i2=3,j1,j2;
j1=++i1+(++i1)+(++i1);
prinf("i1=%d,j1=%d\n",i1,j1);
j2=i2+++(i2++)+(i2++);
prinf("i2=%d,j2=%d\n",i2,j2);
}
这在TC下输出
i1=6,j1=18 i2=6,j2=9
在vc下输出
i1=6,j1=16 i2=6,j2=9





我想知道为什么不是这个样子的\

j1=++i1+(++i1)+(++i1);
括号优先级高,--->j1=++i1+i1+(++i1) 这时i1的值为4
--->j1=++i1+i1+i1 这时i1的值为5
--->j1=i1+i1+i1 这时i1的值为6
为什么不是6+5+4???


还有那个16是怎么弄的///
谢谢大家..

----------------解决方案--------------------------------------------------------

这是因为TC 和VC 的执行策略不同.


----------------解决方案--------------------------------------------------------
回复:(v1v1wang)[求助]我是新手//请教一个中等题

这个程序员如是刚开始的学者,这个程序编的不错,我经过的调试,改为以下程序,能用了,我也是菜鸟,大家多多指教

#include <conio.h>
#include <iostream>
#include <string>
using namespace std;
struct adbook
{
char name[7];
char number[12];
};
//////////////////////////////////////////////////////////
int t=0;
class bookss
{
adbook data[10];

public:
void input(char *p,char* a); //增加函数
void output(); // 输出
void find1(char *p,int n); // 查找
void find2(char *p); //查找
};
////////////////////////////////////////////////

void bookss::input (char *p,char* a)
{
strcpy(data[t].name ,p);
strcpy(data[t].number ,a);
t++;
}

void bookss::output ()
{
cout<<" "<<data[t-1].name <<" "<<data[t-1].number <<endl;
}

void bookss::find1 (char *p,int n)
{
for(int i=0;i<10;i++)
{
for(int j=0;j<strlen(data[i].name);j++)
{
for(int k=j;k<n;k++)
{
if(p[k]==data[i].name[j])
{
cout<<" "<<data[i].name <<" "<<data[i].number <<endl;
break;
}

}

}

}

}
////////////////////////////////////////////////////////////
void bookss::find2 (char *p)
{
for(int i=0;i<10;i++)
{
if(strcmp(data[i].name ,p)==0)
cout<<" "<<data[i].name <<" "<<data[i].number <<endl;
}

}


///////////////////////////////////////////////////////////////////////

int main()
{
char* str=new char[10];
char* number=new char[10];
char i;
int k;
bookss bk;
while(1)
{ system("cls");
cout<<"*---------------------------------------------------*"<<endl;
cout<<"* *"<<endl;
cout<<"* 欢迎使用通迅录 *"<<endl;
cout<<"* *"<<endl;
cout<<"* 请选择操作 *"<<endl;
cout<<"* 1 新增 2 输出 3 查找 4 退出 *"<<endl;
cout<<"*---------------------------------------------------*"<<endl;

cin>>i;
if(i=='4')
{cout<<"谢谢使用,88"<<endl;
exit(0);
}
switch(i)
{
case '1':
{

cout<<"请输入 "<<endl
<<" 姓名, 电话号码"<<endl;

cin>>str>>number;

bk.input (str,number);
}break;
///////////////////////////////////////
case '2':
{ cout<<" 姓名 电话号码"<<endl;
int temp=t;
t=1;
while(temp>=t)
{ bk.output();
t++;
}
t--;
getch();
}break;
//////////////////////////////////
case '3':
{
cout<<" 1 按姓名查找 2 按号码查找 "<<endl;
char n;
char *p1=new char[10];
cin>>n;
cout<<"请输入关键字"<<endl;

switch(n)
{

case '1':
{ cin>>p1;
k=strlen(p1);
cout<<" 姓名 电话号码"<<endl;
bk.find1(p1,k);
getch();
}break;
case '2':
{
cin>>p1;
cout<<" 姓名 电话号码"<<endl;
bk.find2(p1);
getch();
}break;

default:
{
cout << "输入错误!!!,请重新输入" << endl;
getch();
}break;
}break;
delete [] p1;
}break;

default:
{
cout << "输入错误!!!,请重新输入" << endl;
getch();
}break;
}
}
delete [] str;
delete [] number;
return 0;

}
//////////////////////////////////////////////////////////////////////////////////



----------------解决方案--------------------------------------------------------

如果你们是初学者
那我连菜鸟都算不上了啊

----------------解决方案--------------------------------------------------------

搞笑了吧,我在vc上运行
两个答案一样
6 16


----------------解决方案--------------------------------------------------------
  相关解决方案