C程序设计(第四版)谭浩强著中的例题2.5。有点儿不懂,帮忙给点意见谢谢

2024-05-16 19:54

1. C程序设计(第四版)谭浩强著中的例题2.5。有点儿不懂,帮忙给点意见谢谢

这个是算法问题; 举个例子6,
1x6=6, 2x3=6, 3x2=6, 4x?=6, 5x?=6, 6x1=6
乘数从1一直增到6, 同时被乘数会从6一直减到1,那么2x3和3x2就只是乘数与被乘数换位置了,这种情况下就不需要重复计算了.临界值就是6的平方根了.
所以,应该是 
S6: 如果i<=n的平方根,返回S3;否则算法结束

C程序设计(第四版)谭浩强著中的例题2.5。有点儿不懂,帮忙给点意见谢谢

2. c++谭浩强第二版课后题答案

这里有第一章的:
	谭浩强C++课后习题答案
	1.请根据你的了解,叙述C++ 的特点。C++ 对C有哪些发展?
	【解】 略。
	2.一个C++的程序是由哪几部分构成的?其中的每一部分起什么作用?
	【解】 略。
	3.从拿到一个任务到得到最终结果,一般要经过几个步骤?
	【解】 略。
	4.请说明编辑、编译、连接的作用。在编译后得到的目标文件为什么不能直接运行?
	【解】 编译是以源程序文件为单位进行的,而一个完整的程序可能包含若干个程序文件,在分别对它们编译之后,得到若干个目标文件(后缀一般为.obj),然后要将它们连接为一个整体。此外,还需要与编译系统提供的标准库相连接,才能生成一个可执行文件(后缀为.exe)。不能直接运行后缀为.obj的目标文件,只能运行后缀为.exe的可执行文件。
	5.分析下面程序运行的结果。

#include 
using namespace std;
int main( )
{
	cout<<" This "<<" is ";
	cout<<" a "<<" C++ ";
	cout<<"program. " << endl;
	return 0;
	}

	【解】 输出的结果为

ThisisaC++program.



	6.分析下面程序运行的结果。

	  #include 
	  using namespace std;
	  int main( )
	 {
	int a,b,c;
	a=10;
	b=23;
	c=a+b;
	cout<<" a+b=";
	cout<<c;
	cout<<endl;
	return 0;
	}

	【解】 前两个cout语句在输出数据后不换行,第3个cout语句输出一个换行,因此输出的结果为

a+b=33

	7.分析下面程序运行的结果。请先阅读程序写出程序运行时应输出的结果,然后上机运行程序,验证自己分析的结果是否正确。以下各题同。

	#include 
	using namespace std;
	int main( )
	{
	int a,b,c;
	int f(int x,int y,int z);
	cin>>a>>b>>c;
	c=f(a,b,c);
	cout<<c<<endl;
	return 0;
	}
	int f(int x,int y,int z)
	{
	 int m;
	 if (x<y) m=x;
	  else m=y;
	 if (z<m) m=z;
	 return(m);              
	}

	【解】 程序的作用是:输入3个整数,然后输出其中值最小的数。在主函数中输入3个整数,然后调用f函数,在f函数中实现找最小的整数,用if语句比较两个数,将小者存放在变量m中,经过两个if语句的比较,m中存放的是3个整数中最小的数。运行情况如下:

1 5 3↙                        (输入3个整数)
1                             (输出其中最小的数)

	8.在你所用的C++系统上,输入以下程序,进行编译,观察编译情况,如果有错误,请修改程序,再进行编译,直到没有错误,然后进行连接和运行,分析运行结果。

int main( );
{
 int a,b;
 c=a+b;
 cout >>" a+b=" >> a+b;
 } 

	【解】 上机编译出错,编译出错信息告知在第2行出错,经检查,发现第1行的末尾多了一个分号,编译系统无法理解第2行的花括号,导致报告第2行出错。将第1行的末尾的分号去掉,重新编译,编译出错信息告知在第5行和第6行出错。第5行出错原因是cout未经声明,因为cout不是C++语言提供的系统的关键字,而是输出流的对象,必须使用头文件iostream。第6行出错原因是main是int型函数,应返回一个整型值。将程序改为

#include 
int main( )
{
	 int a,b;
	 c=a+b;
	 cout >>" a+b=" >> a+b;
	 return 0;
 } 

重新编译。编译出错信息告知在第5行和第6行出错。第5行出错原因是变量c未定义,第6行出错原因是cout未经声明,说明#include 命令行未能起作用,原因是未指明命名空间。将程序改为

#include 
using namespace std;
int main( )
{
	 int a,b,c;
	 c=a+b;
	 cout>>" a+b=" >>a+b;
	 return 0;
 } 
重新编译。编译出错信息告知在第7行出错,经检查,是“>>”用得不当,“>>”是提取运算符,应与cin联合使用,用来从输入流中提取数据,输出时应该用插入运算符“>”都改为“<<”,再重新编译,发现没有error错误,但有两个警告(warning),原因是定义了a和b,但未对它们赋值。应增加赋值语句或输入语句,使a和b获得值,将程序改为

#include 
using namespace std;
int main( )
{
	 int a,b,c;
	 cin>>a>>b;
	 c=a+b;
	 cout>>" a+b=" >>a+b;
	return 0;
}

重新编译,没有编译错误,能通过编译和连接,可以正常运行,在Visual C++ 6.0环境下运行时屏幕显示如下:

5 9↙
a+b=14Press any key to continue

	显然这样的输出不理想,“Press any key to continue”是Visual C++系统在输出了运行结果后自动显示的一个信息,告诉用户“如果想继续工作,请按任何一个键”。当用户按任何一个键后,显示运行结果的窗口消失,屏幕显示回到Visual C++的主窗口,显示出源程序和编译信息。
	为了解决以上输出不理想的情况,可以在最后一个输出语句中增加输出一个换行符。最后的程序如下:

#include 
using namespace std;
int main( )
{
 int a,b,c;
 cin>>a>>b;
 c=a+b;
 cout<<"a+b="<<a+b<<endl;
 return 0;
} 

	运行时屏幕显示如下:

5 9↙
a+b=14
Press any key to continue

	这就完成了程序的调试。
	这里对本题的调试过程作了比较详细的分析,以便使读者对如何调试程序有比较具体而清晰的了解。需要说明:
	(1)编译系统给出的编译出错信息,只是提示性的,引导用户去检查错误,用户必须根据程序的上下文和编译出错信息,全面考虑,找出真正出错之处。例如编译出错信息通知第2行出错,其实可能是第1行出错。
	(2)有时,有的错误开始时未被检查出来并告知用户(例如未定义变量c),由于其他错误未解决,掩盖了这个错误。当解决了其他错误后,这个错误会被检查出来。有时在调试过程中会不断检查出新的错误,这是不奇怪的。一一处理,问题会迎刃而解。
	(3)为了说明调试过程,这里全部依靠计算机系统来检查错误,其实有些明显的错误,完全可以由人工查出,这样可以提高调试效率。由人工在纸面或屏幕上检查错误,称为静态查错,用计算机编译系统检查错误,称为动态查错。建议尽量先用静态查错的方法排除错误,只有人工检查不出来的错误才让计算机检查。
	9.输入以下程序,进行编译,观察编译情况,如果有错误,请修改程序,再进行编译,直到没有错误,然后进行连接和运行,分析运行结果。

#include 
using namespace std;
int main( )
{
	int a,b;
	c=add(a,b)
	cout<<"a+b="<<c<<endl;
	return 0;
 }
 int add(int x,int y);
	  {
	z=x+y;
	retrun(z);
	}

	【解】 发现7个错误:
	(1)对add函数未声明就调用,应在main函数中对add函数进行声明。
	(2)定义add函数时,函数首行末尾不应有分号。
	(3)变量c未经定义。
	(4)add函数中的变量z未经定义。
	(5)第6行末尾少了一个分号。
	(6)add函数中的retrun拼写错误,应为return。编译系统把retrun作为未声明的标识符而报错,因为retrun(z)会被认为是函数调用的形式。
	(7)变量a和b未被赋值。
	改正后的程序如下:

#include 
using namespace std;
int main( )
{int add(int x,int y);
 int a,b,c;
 cin >> a >> b;
 c=add(a,b);
 cout <<" a+b=" << c <<endl;
 return 0;
}

int add(int x,int y)
{int z;
 z=x+y;
 return(z);
}

	运行情况如下:

5 8↙
13

	10.输入以下程序,编译并运行,分析运行结果。

#include 
using namespace std;
int main( )
{ void sort(int x,int y,int z);
	int x,y,z;
	cin >> x >> y >> z;
	sort(x,y,z);
	return 0;
}
void sort(int x, int y, int z)
{
 int temp;
 if (x>y) {temp=x;x=y;y=temp;}      //{ }内3个语句的作用是将x和y的值互换
 if (z<x)  cout << z << ',' << x << ',' << y << endl;
  else if (z<y) cout << x <<',' << z << ',' << y << endl;
      else cout << x << ',' << y << ',' << z << endl;
} 

	请分析此程序的作用。sort函数中的if语句是一个嵌套的if语句。
	运行时先后输入以下几组数据,观察并分析运行结果。

① 3  6  10↙
② 6  3  10↙
③ 10  6  3↙
④ 10,6,3↙

	【解】 程序的作用是对输入的3个整数按由小到大的顺序进行排序。sort函数中的第1个if语句的作用是先将x和y排序,使x小于或等于y。第2个if语句是一个嵌套的if语句,先比较z和x,如果z<x,显然由小到大的顺序应当是z,x,y,按此顺序输出;如果z不小于x,而小于y,显然由小到大的顺序应当是x,z,y,按此顺序输出;如果z既不小于x,又不小于y,显然由小到大的顺序应当是x,y,z,按此顺序输出。
	按题目要求分别输入以下几组数据,运行结果如下:

① 3  6  10↙
	3,6,10      
② 6  3  10↙
	3,6,10
③ 10  6  3↙
	3,6,10
④ 10,6,3↙
	-858993460,-858993460,10

	以上是在Visual C++ 6.0环境下运行的情况,前3次运行正常,表明当输入不同的数据时,程序能实现由小到大的排序功能。第4次运行的结果显然不正常,这是由于输入数据时出了问题,本来要求在输入数据时,数据之间以空格或换行相隔,而现在却以逗号相隔,只有第一个整数能正常赋给变量x,第二和第三个数据均无法正常赋给变量y和z,y和z的值来自输入流中相应字节的内容。
	11.求2个或3个正整数中的最大数,用带有默认参数的函数实现。
	【解】 可以编写出以下程序:

#include 
using namespace std;
int main( )
{int max(int a,int b,int c=0);
 int a,b,c;
 cin >> a >> b >> c;
 cout << " max(a,b,c)= " << max(a,b,c) << endl;
 cout << " max(a,b)= " <<max(a,b) << endl;
 return 0;
}
	
int max(int a,int b,int c)
{if(b>a) a=b;
 if(c>a) a=c;
 return a;
}

	运行情况如下:

13  5  76↙
max(a,b,c)=76                  (从3个数中找最大者)
max(a,b)=13                     (从前2个数中找最大者)

	如果想从3个数中找大者,可以在调用时写成“max(a,b,c)”形式,如果只想从2个数中找大者,则在调用时写成“max(a,b)”形式,此时c自动取默认值0,由于0比任何正整数都小,因此从14,5,0中选最大者和从14,5中选大者的结果是一样的。
	12.输入两个整数,将它们按由大到小的顺序输出。要求使用变量的引用。
	【解】 可以编写出以下程序:

#include
using namespace std;
int main( )
{ void change(int &,int &);
	 int a,b;
	 cin>>a>>b;
	 if(a<b) change(a,b);                 //如果a<b,使a和b的值互换
	 cout<<"max="<<a<<" min="<<b<<endl;
	 return 0;
}

void change(int &r1,int &r2)          //函数的作用是使r1与r2互换
{ int temp;
	  temp=r1;
	  r1=r2;
	  r2=temp; 
}

	运行情况如下:

12 67↙
max=67 min=12

	13.对3个变量按由小到大顺序排序,要求使用变量的引用。
	【解】 可以编写出以下程序:

#include 
using namespace std;
int main( )
{void sort(int &,int &,int &);
 int a,b,c,a1,b1,c1;
 cout<<" Please enter 3 integers:";
 cin>>a>>b>>c;
 a1=a;b1=b;c1=c;
 sort(a1,b1,c1);
 cout<<a<<" "<<b<<" "<<c<<" in sorted order is ";
 cout<<a1<<" "<<b1<<" "<<c1<<endl;
 return 0;
}
void sort(int &i,int &j,int &k)
{ void change(int &,int &);
  if (i>j) change(i, j);
  if (i>k) change(i, k);
  if (j>k) change(j, k);
}
void change(int &x,int &y)
{  int temp;
	  temp=x;
	  x=y;
	  y=temp;
}

	运行情况如下:

Please enter 3 integers:23  67  -55↙
23 67 –55 in sorted order is –55 23 67

	这个程序很容易理解,不易出错。由于在调用sort函数时虚实结合使形参i,j,k成为实参a1,b1,c1的引用(别名),因此通过调用函数sort(a1,b1,c1)既实现了对i,j,k排序,也就同时实现了对a1,b1,c1排序。同样,执行change(i,j)函数,可以实现对实参i和j的互换。
	14.编一程序,将两个字符串连接起来,结果取代第一个字符串。要求用string方法。
	【解】 可以编写出以下程序:

#include 
#include                   //程序中若使用字符串变量,必须包含头文件string
using namespace std;
int main( )
{  string s1= " week ",s2= " end ";
  cout << " s1= " << s1 << endl;
  cout << "s2=" << s2 << endl;
  s1=s1+s2;
  cout<<" The new string is: "<<s1<<endl;
  return 0;
}

	运行情况如下:

s1=week
s2=end
The new string is: weekend

	15.输入一个字符串,把其中的字符按逆序输出。如输入LIGHT,输出THGIL。要求用string方法。
	【解】 可以编写出以下程序:

#include 
#include 
using namespace std;
int main( )
{ string str;                   			//定义字符串变量str
  int i,n;
	char temp;                                //定义字符变量temp
  cout<<" please input a string: ";
  cin>>str;  							//输入一个字符串赋给字符串变量str
  n=str.size( );  							//测量str的长度n
  for(i=0;i<n/2;i++) 						//使str中的字符对称互换
	{temp=str[i];str[i]=str[n-i-1];str[n-i-1]=temp;}
  cout << str << endl;
  return 0;
}

	运行情况如下:

please input a string:
LIGHT↙
THGIL

	注意:输入的字符串中不能含有空格。
	16.有5个字符串,要求将它们按由小到大的顺序排列,用string方法。
	【解】 可以编写出以下程序:

#include 
#include 
using namespace std;
int main( )
{ int i;
  string str[5]={" BASIC"," C"," FORTRAN"," C++","PASCAL"};
  void sort(string [ ]);
  sort(str);                                 //对字符串排序
  cout<<" the sorted strings : "<<endl;
  for(i=0;i<5;i++)
    cout<<str[i]<<" ";                        //按已排好的顺序输出字符串 
  cout<<endl;
  return 0;
}

void sort(string s[ ])
{int i, j;
 string t;
 for (j=0; j<5; j++)
    for(i=0; i<5-j; i++)
       if (s[i]>s[i+1])
		  {t=s[i];s[i]=s[i+1];s[i+1]=t;}
 }

	运行结果如下:

the sorted strings :
BASIC C C++ FORTRAN PASCAL

	17.编一个程序,用同一个函数名对n个数据进行从小到大排序,数据类型可以是整型、单精度型、双精度型。用重载函数实现。
	【解】 可以编写出以下两个程序:
	(1)建立3个函数,分别用于处理整型、单精度型、双精度型数据的排序,在3个函数中都采用选择法排序方法。

#include 
#include 
using namespace std;
int main( )
{ 
  long a[5]={10100,-123567, 1198783,-165654, 3456};
  int b[5]={1,9,0,23,-45};
  float c[5]={2.4, 7.6, 5.5, 6.6, -2.3 };
  void sort(long [ ]);
	void sort(int [ ]);
  void sort(float [ ]);
  sort(a);
  sort(b);
  sort(c);
  return 0;
}

void sort(long a[ ])
{int i, j;
 long t;
 for (j=0; j<5; j++)
    for(i=0;i<5-j;i++)
       if (a[i]>a[i+1])
		  {t=a[i];a[i]=a[i+1];a[i+1]=t;}
 cout<<" the sorted numbers : "<<endl;
 for(i=0;i<5;i++)
	  cout<<a[i]<< " ";
  cout<<endl<<endl;
}

void sort(int a[ ])
{int i, j, t;
 for (j=0; j<5; j++)
    for(i=0;i<5-j;i++)
       if (a[i]>a[i+1])
		  {t=a[i];a[i]=a[i+1];a[i+1]=t;}
 cout<<" the sorted numbers : "<<endl;
 for(i=0;i<5;i++)
	  cout<<a[i]<< " ";
 cout<<endl<<endl;
 }

void sort(float a[ ])
{int i, j;
 float t;
 for (j=0;j<5;j++)
    for(i=0;i<5-j;i++)
       if (a[i]>a[i+1])
		  {t=a[i];a[i]=a[i+1];a[i+1]=t;}
 cout<<" the sorted numbers : "<<endl;
 for(i=0;i<5;i++)
	  cout<<a[i]<< " ";
  cout<<endl<<endl;
}

	运行结果如下:

the sorted numbers :
-123567  -165654  10100  3456  1198783          (长整型数据排序)

the sorted numbers :                                (整型数据排序)
-45  0  1  9  23

the sorted numbers :
-2.3  2.4  5.5  6.6  7.6                           (单精度型数据排序)

	(2)在第1种方法中,3个函数的函数体基本上是相同的,都是采用选择法排序,在下面的程序中,3个函数的函数体不全相同,前两个函数采用选择法排序,最后一个函数采用起泡法排序。

#include 
#include 
using namespace std;
int main( )
{ long a[5]= {10100,-123567, 1198783,-165654, 3456};
	int b[5]={1,9,0,23,-45};
  float c[5]={2.4, 7.6, 5.5, 6.6, -2.3 };
  void sort(int [ ]);
  void sort(float [ ]);
  void sort(long [ ]);
	sort(a);                             //对长整型数据排序
  sort(b);                             //对整型数据排序
  sort(c);                             //对单精度型数据排序
  return 0;
}

void sort(long a[ ])                     //对长整型数据用选择法排序的函数
{int i,j,min;
 long t;
 for(i=0;i<5;i++)
   {min=i;
    for (j=i+1;j<5;j++) 
	  if(a[min]>a[j]) min=j;
	    {t=a[i]; a[i]=a[min];	a[min]=t; }
 cout<<" the sorted numbers : "<<endl;
 for(i=0;i<5;i++)
	cout<<a[i]<< " ";
 cout<<endl<<endl;
}


void sort(int a[ ])                        //对整型数据用选择法排序的函数
{int i, j, t;
 for (j=0; j<5; j++)
    for(i=0;i<5-j;i++)
       if (a[i]>a[i+1])
		{t=a[i];a[i]=a[i+1];a[i+1]=t;}
 cout<<" the sorted numbers : "<<endl;
 for(i=0;i<5;i++)
	cout<<a[i]<< " ";
 cout<<endl<<endl;
 }

void sort(float a[ ])                     //对单精度型数据用起泡法排序的函数
{int i, j;
 float t;
 for (j=0;j<5;j++)
    for(i=0;i<5-j;i++)
       if (a[i]>a[i+1])
	     {t=a[i];a[i]=a[i+1];a[i+1]=t;}
 cout<<" the sorted numbers : "<<endl;
 for(i=0;i<5;i++)
	cout<<a[i]<< " ";
  cout<<endl<<endl;
}

	运行结果如下:

the sorted numbers :
-123567  -165654  10100  3456  1198783           (长整型数据排序结果)

the sorted numbers :         					  (整型数据排序结果)
-45  0  1  9  23

the sorted numbers :
-2.3  2.4  5.5  6.6  7.6                            (单精度型数据排序结果)

	对比两种方法,可以看到,并不要求重载函数的函数体相同,在本例中,采用不同的排序方法,结果是相同的。从理论上说,重载的函数可以用来实现完全不同的功能,但是应该注意:同一个函数名最好用来实现相近的功能,而不要用来实现完全不相干的功能,以方便用户理解和使用。
	18.对第17题改用函数模板实现。并与17题程序进行对比分析。

#include  
#include  
using namespace std;
template 
void sort(T a[ ])                            //函数模板,采用选择法排序
{int i, j, min;
 T  t;
 for(i=0;i<5;i++)
   {min=i;
    for (j=i+1; j<5; j++) 
	  if(a[min]>a[j]) min=j;
	t=a[i]; a[i]=a[min]; a[min]=t; 
}
 cout<<" the sorted numbers : "<<endl;
 for(i=0;i<5;i++)
	cout<<a[i]<< "  ";
 cout<<endl<<endl;
}

int main( )
{ long  a[5]={10100,-123567, 1198783,-165654, 3456};
	int  b[5]={1,9,0,23,-45};
  float  c[5]={2.4, 7.6, 5.5, 6.6, -2.3 };
  sort(a);
  sort(b);
  sort(c);
  return 0;
}

	运行结果如下:

the sorted numbers :
-123567  -165654  10100  3456  1198783            (长整型数据排序)

the sorted numbers :                                  (整型数据排序)
-45  0  1  9  23

the sorted numbers :
-2.3  2.4  5.5  6.6  7.6   			 		   (单精度型数据排序)

	对比第17题和18题,可以看到,如果重载函数的函数体基本相同的话,用函数模板显然更方便,可以压缩程序篇幅,使用方便。

3. c语言程序设计谭浩强第二版答案,不要推销书

言,你可以很好地应付任何一种编程工具。  

2、一定要多上机练习,通过程式了解相关知识。几经反复方得正果。  

3、不要把学习C语言当成一种任务,更不要把它看成很难完成的任务。要充满自信,只要是一个智力正常的人都能学好C语言。始终保持游戏的心态,多发现其中的乐趣。当感到编程趣味无穷,那你在电脑方面将前程无量。  

4、如果一个程式一时无法弄清楚最后暂时放在一边,过一段时间你可能会从其他的程式中悟出道理。  

5、C语言是一个整体,各个方面是有机联系的,要从总体上把握它,不要把它割裂成互不关联的部件。  

6、不要完全相信教材(包括本讲义),所有结论最好都上机验证。 
怎样学好C语言 

  1. 工欲善其事,必先利其器

  准备工作:一个开发环境,如Turbo C 2.0、Visual C++等开发工具;一本好教材,如谭浩强主编的《C语言程序设计》(第二版)。我当时看的是他的第一版,就为它的简洁、完美所吸引,简直爱不释手,用了两个星期一口气看完。

  2. 秘密武器

  初学者学习计算机语言要会“读程序”,要对小型的应用型、游戏型程序感兴趣,并模仿去加深对C语言程序设计的理解和操作,只有不断地写程序、调试程序才能得到编写程序的经验和加深对程序的理解,这也是学习编写优秀高级程序的秘密武器。

  3. 发扬探索精神

  学习C语言程序设计有点像做数学难题,只要我们善于思考,善于探索,发扬探索精神去寻找好的设计思想和方法,才能把C语言的精髓真正地掌握。

  备战C语言考试要诀

  1. 了解大纲,临阵不乱

  各类笔试中,大多数考题是与大纲要求的基本内容一致的,难度不高,但内容十分广泛,应牢固掌握C语言考试大纲要求的基础部分。只有熟悉题型,理解语法、句法,做到心中有数,才能临阵不乱。

  2. 善于归纳,强化记忆

  对于需要记忆的计算机基础知识和基本概念,如果考试时因此失分就十分可惜。如:C语言中有几种不同的数据类型?运算的优先级别是怎样的?因此我们需要善于归纳这些计算机基础知识,并在理解的基础上强化记忆。

  3. 重视实践,善于调试

  计算机科学是一门理论性、实践性都很强的学科,对C语言考试的参加者来说,基础理论方面要求不高,而上机试题往往是很多考生不能通过考试的重要原因,因此要勤于实践。

  4. 多做练习,查漏补缺

  在认真地学完指定用书后,最好再找些试题,认真地测试一下,一则可以检查自己的复习情况;二则可以查漏补缺;三则可以调节心理状况,以备正式考试时沉着冷静、万无一失。

c语言程序设计谭浩强第二版答案,不要推销书

4. c++程序设计.谭浩强.PDF电子书...

C++程序设计第3版(清华大学谭浩强).pdf    
链接:https://pan.baidu.com/s/1iG67adfXQv4JamUsXs4qxg
?pwd=rqwf  提取码:rqwf  
  《C++程序设计(第3版)》降低入门起点,不需要C语言的基础,从零起点介绍程序设计和C++。广大师生用后反映非常好,认为《C++程序设计(第3版)》定位准确,概念清晰,深入浅出,取舍合理,以通俗易懂的语言对C++的许多难懂的概念作了透彻而通俗的说明,大大降低了初学者学习的困难,是初学者学习C++的一本好教材。 

5. 关于谭浩强的c程序设计第四版书上的问题

这跟编译器也有关系。
一般情况下,编译器有的从左向右编译,有的从右向左编译。从你的显示结果看,tc是从右向左编译:i,i++,i++ 实际上是三个语句。当i=1时,先执行最右边的i++,结果显示为1,而此时i值为2;
再执行中间的i++,显示为2,此时i值为3,最后执行i,显示为3。这是tc的执行顺序。
vc的编译情况和tc不同,因为vc是面向对象的c++语言用的,不是单纯的c语言。
实际上这是编译器内部的管理问题,只是说明问题,谁也不会用i,i++,i++这样容易混淆的表达。
明白了吗?
等你学了编译原理即明白了。
表达式在编译过程中有顺序,并且跟编译器编译工程紧密相关。tc是在编译的过程中把i,i++,i++的结果已经计算出来后再存储到临时变量里的。
 
我现在没有c编译器,只能从java里面相似地跟你说面问题:
a:
int i =1;
  System.out.println((i++)+(i++)+i);
结果:6
b:
int i =1;
  System.out.println(i+(i++)+i++);
结果:4
说明java的编译器是从左向右编译。a 中i++值为1,此时i为2;i++值为2,此时i值为3,即:((i++)+(i++)+i值为6
b 中 i为1,i++值为1,此时i值为2,i++值为2,此时i值为3 ,即:i+(i++)+i++ 值为4
注意 i++ 的值和i值是不同的概念。i++是表达式的值,为i值。即i++值比i值小1
同样++i值则和i值一样。

关于谭浩强的c程序设计第四版书上的问题

6. C++程序设计原理与实践的1图书信息

书名: C++程序设计原理与实践作 者:(美)斯特劳斯特鲁普,王刚译出版社: 机械工业出版社出版时间: 2010-6-1ISBN: 9787111303220开本: 16开定价: 108.00元

7. C语言程序设计实例教程的2010年版图书

C语言程序设计实例教程作 者: 朱家义,黄勇 主编出 版 社: 清华大学出版社出版时间: 2010-1-1开 本: 16开I S B N : 9787302193821定价:¥29.00 本书以程序设计知识板块为基础,针对高级语言的知识体系结构,围绕学习目标为相关内容设计出相应实例任务,通过与任务相关知识的学习,达到完成该章任务的目的。各章均安排具有针对性的拓展实例,以便于读者迸一步理解和牢固掌握各章节的基本内容,体现了学以致用的原则。全书共分11章,主要内容包括算法基础、c语言基础、顺序结构程序设计、选择结构程序设计、循环结构程序设计、数组与指针、函数、文件、编译预处理、简单图形编程和综合应用程序的开发等内容。本书可作为高等学校计算机及相关专业程序设计的教材,也可作为计算机等级考试以及计算机爱好者自学用书和各类工程技术人员的参考书。 第1章 程序设计基础1.1 算法1.1.1 算法的定义1.1.2 算法的描述方法1.1.3 算法设计的要求1.1.4 算法时间效率1.1.5 结构化程序设计1.2 问题求解的实现过程1.3 C语言程序结构1.3.1 C程序的结构1.3.2 标识符和关键字本章小结习题1第2章 C语言基础知识2.1 数据类型简介2.2 常量和变量2.2.1 常量2.2.2 符号常量2.2.3 变量2.3 基本数据类型2.3.1 整型2.3.2 实型2.3.3 字符型2.3.4 枚举类型2.4 构造类型2.4.1 数组2.4.2 结构体2.4.3 共用体2.4.4 用typedef定义类型2.5 指针2.5.1 指针与指针变量2.5.2 指针变量的定义2.5.3 指针变量的引用2.6 运算符与表达式2.6.1 算术运算2.6.2 关系和逻辑运算2.6.3 赋值运算2.6.4 位运算2.6.5 条件运算2.6.6 逗号运算2.6.7 表达式的其他说明2.7 数据类型转换2.7.1 自动类型转换2.7.2 赋值类型转换2.7.3 强制类型转换2.8 常用库函数介绍2.8.1 数学函数2.8.2 字符函数本章小结习题2第3章 顺序结构程序设计3.1 任务描述3.2 赋值语句3.3 数据输入与输出3.3.1 printf函数3.3.2 scanf函数3.3.3 字符数据的输入与输出3.4 程序实现3.5 实例拓展本章小结习题3第4章 选择结构程序设计4.1 任务描述4.2 if语句4.2.1 单分支if语句4.2.2 双分支if语句4.2.3 if语句的嵌套……第5章 循环结构程序设计第6章 数组与指针第7章 函数与指针第8章 文件第9章 预处理命令第10章 简单图形编程第11章 C语言综合程序设计附录A ASCII码表附录B Turbo C集成开发环境附录C Turbo C2.0常用库函数附录D Turbo C语言运算符表参考文献

C语言程序设计实例教程的2010年版图书

8. C++程序设计教程的05版图书信息

 作 者: 钱能 著出 版 社: 清华大学出版社出版时间: 2005-9-1 字 数: 891000页 数: 551纸 张: 胶版纸I S B N : 9787302114642定价:39.50 C++是一种高效实用的程序设计语言,它既可进行过程化程序设计,也可进行面向对象程序设计,因而成为编程人员最广泛使用的工具。学好C++,很容易触类旁通其他软件,C++架起了通向强大、易用、真正的软件开发应用的桥梁。许多高等院校已经开设了C++程序设计语言课,急需一本实用的教材。本书是作者总结两年教学实践的经验写成的,适合用作大学计算机专业和非计算机专业的程序设计基础课程教材,也可供自学的读者使用。本书共分两大部分。第一部分,第1章至第10章是基础部分,主要介绍C++程序设计语言、程序结构和过程化基础。第二部分,第11章至第21章,是面向对象程序设计部分,它建立在C++程序设计基础之上,讲述了面向对象程序设计方法。 本书荣获教育部全国高校优秀教材奖!以C++标准为蓝本,从过程化编程的基本描述,到对象化编程的方法展开,乃至高级编程的实质揭示,形成一条自然流畅的主线,通俗易懂,形象风趣。本书在内容结构上自成体系,并以独特的描述手法,辐射到计算机专业其他诸课程,体系严谨,结构独特。本书特色:1、第二版全方位改版,代码全部以标准C++重写,风格独特,极具模仿价值;文字诙谐生动,通俗易懂。2、自成体系,结构独特,整体关联,辐射计算机各门课程。3、引领读者由欣赏书中的初级精彩到享受国外经典名著的内在精彩。4、观点鲜明,客观褒贬C++,对术语的见解独到。5、C++内部特性和抽象编程并重,强化编程实践,以实际编程能力衡量计算机水平。第一部分为程序设计基础,分四章,包括概述,基本编程语句,数据类型和计算表达。其中基本编程语句和数据类型为重点,它们一个为算法描述的基础,一个为数据结构和抽象数据类型描述的基础。第二部分为过程化程序设计,分三章,包括函数机制,性能和程序结构。其中函数机制和程序结构是重点,前者描述过程,后者描述过程组织。第三部为分面向对象编程基础,实际上就是基于对象的编程方法,分四章,包括类,对象生灭,继承和基于对象编程。前三章对类机制作了全面描述,后一章是基于对象方法的一个归纳和实例。第四部分为高级编程,分四章,包括多态,抽象类,模板,异常。多态和抽象类是面向对象编程的核心内容,模板论述了泛型编程,异常则强化了面向对象编程中的可靠性和容错性。 1.全书以递进方式展开2.授课时数参考书3.改革课程教学4.学无止境观5.从初级精彩走向内容精彩6.观点评鉴7.代码特色8.丰富的配套资源 钱能,1984年毕业于上海复旦大学计算机软件专业;1988年获电子工业部优秀科技青年称号;两次获得浙江省级优秀教学成果奖二等奖。1999年在清华大学出版社出版 “C++程序设计系列教材” 的第一批,共三种:《C++程序设计教程》、《C++程序设计实验指导》及《C++程序设计习题及解答》。2002年,《C++程序设计教程》一书获得国家教育部评选的全国高校优秀教材二等奖。目前该书累计销量已超过400000册,深受高校师生的欢迎。指导学生多次在ACM/ICPC亚洲预赛北京赛区中获得铜奖以上成绩;2004年指导学生在ACM/ICPC亚洲预赛北京赛区中获得排名第8。从事《程序设计》、《数据结构》、《离散数学》、《算法与设计》、《编程与技巧》等专业基础类课程教学,及算法研究,教学经验丰富。 第一部分 基础编程第1章 概述第2章 基本编程语句第3章 数据类型第4章 计算表达第二部分 过程化编程第5章 函数机制第6章 性能第7章 程序结构第三部分 面向对象编程技术第8章 类第9章 对象生灭第10章 继承第11章 基于对象编程第四部分 高级编程第12章 多态第13章 抽象类第14章 模板第15章 异常附录附录A 语法导读附录B 标准模板库导用附录C 参考文献