华剑缘
一切都在这个过程中获得,将那些目标埋藏于心中
posts - 19,comments - 20,trackbacks - 0

一个矩阵类Matrix 类,在构造函数中根据参数创建数据成员:一个二维数组,类中实际定义的二维数组的数据成员是一个指针 ( 二级指针 ) , int **pMatrix 。 在构造函数中根据传送的参数为这个二维数组分配空间: pMatrix = newint[x][y]
~~~~~~~~
 int **pMatrix;
pMatrix = new int [x][y] ;

~~~~~~~~




*pMatrix = new int[x][y]
这样她提示什么

 error C2440: '=' : cannot convert from 'int (*)[1]' to 'int *'

编译器说new int [x][y]是int (*)[1]型的
 
如果改成:
int **pMatrix;
*pMatrix= new int [x];

倒可以通过编译

??????


//忘了从什么地方看到某人这么说:

动态数组不能用在二维……
动态数组实际上是一个指针,为其分配空间
如果想设置二维数组的话,就必须设置一个指针类型的动态数组,数组中的每个项都是另一个二维数组
举例:
int **a = new int* [m];
for(int i=0; i<m; i++)
  a[i]= new int[n];

释放内存时要先
for(i=0; i<m; i++)
  delete[] a[i];
然后再
delete[]  a;


呵呵;

posted @ 2006-04-09 22:54 华剑缘 阅读(521) | 评论 (2)编辑 收藏

作用域:
  
标识符是否有效的范围

  1.  函数原形作用域
  2.块作用域
  3.类作用域
  4.文件作用域



程序运行在内存中分配空间:代码区,全局数据区,堆区 ,栈区/

具有文件作用域的变量放在全局数据区。

具有其它的作用域的变量放在堆区,栈区。  



可见性 :
   标识符是否能够被引用的问题。

   1声明在先,引用在后。
   2不能在同作用域中重名。
   3标识符在外层中声明,在内层同名标识符中没有声明,则在该内层中可见。
   4对于两个嵌套的作用域,内层声明的标识符跟外层的标识符同名则外层的标识符在内层中不可见。

posted @ 2006-04-05 08:43 华剑缘 阅读(223) | 评论 (0)编辑 收藏


Lucy上了初中,她很喜欢数学,经常做数学奥林匹克的题目,可是今天她遇到了难题,于是就向她在南开大学上学的哥哥Feagle请教,聪明的哥哥不一会功夫就编程解决了妹妹的问题(^_^,南开大学的学生就是优秀)! 妹妹的题目是这样的:对给定的f(n) 当 n>=50025002 的时候,f(n)=n-5;当 n<50025002 的时候,f(n)=f(f(n+2005))。现在请您试试编程解决Lucy的难题! 


输入 

  
输入只有一个整数n,-2147483647<n<2147483647 。 
  输出
  
输出只有一个整数,f(n) 的值。
  样例输入 样例输出
50025002 50024997
  
  时间限制
  
对每个输入数据,程序应在5秒内给出结果。
 

 
  输入  
输入只有一个整数n,-2147483647<n<2147483647 。
  输出  
输出只有一个整数,f(n) 的值。
 
样例输入 样例输出
50025002 50024997
 
  时间限制  
对每个输入数据,程序应在5秒内给出结果。
posted @ 2006-04-04 22:13 华剑缘 阅读(128) | 评论 (1)编辑 收藏

试验

目的: 用递推近似计算定积分

内容:   n = 0,1,2,…,20  计算定积分

        = 

 

代码:

算法一:

#include < stdio.h >

#include
< math.h >

main()

{

   
int  n;

   
double  y[ 21 ];

y[
0 ] = log( 6 ) - log( 5 );

for (n = 1 ;n <= 20 ;n ++ )

 y[n]
= ( 1.0 / n) - 5 * y[n - 1 ];

printf(
" Data is:\n " );

      
for (n = 1 ;n <= 20 ;n ++ )

      
{

      printf(
" y[ "" %d "" ]:   " ,n);

      printf(
" %f " ,y[n]);

      printf(
" \n " );

      printf(
" \n " );

    }


}

Data is:

y[1]:  0.088392

y[2]:  0.058039

y[3]:  0.043139

y[4]:  0.034306

y[5]:  0.028468

y[6]:  0.024325

y[7]:  0.021233

y[8]:  0.018837

y[9]:  0.016926

y[10]:  0.015368

y[11]:  0.014071

y[12]:  0.012977

y[13]:  0.012040

y[14]:  0.011229

y[15]:  0.010522

y[16]:  0.009890

y[17]:  0.009372

y[18]:  0.008696

y[19]:  0.009151

y[20]:  0.004243

算法二:

#include < stdio.h >

#include
< math.h >

main()

{

   
int  n;

   
double  y[ 21 ];

y[
20 ] = ( 1 / 2 ) * ( 1 / 105 + 1 / 126 );

for (n = 20 ;n >= 0 ;n -- )

 y[n
- 1 ] = (( 1.0 / n) - y[n]) / 5.0 ;

printf(
" Data is:\n " );

      
for (n = 1 ;n <= 20 ;n ++ )

      
{

      printf(
" y[%d]:   " ,n);

      printf(
" %f " ,y[n]);

      printf(
" \n " );

      printf(
" \n " );

    }


}


Data is:

y[1]:  0.088392

y[2]:  0.058039

y[3]:  0.043139

y[4]:  0.034306

y[5]:  0.028468

y[6]:  0.024325

y[7]:  0.021233

y[8]:  0.018837

y[9]:  0.016926

y[10]:  0.015368

y[11]:  0.014071

y[12]:  0.012977

y[13]:  0.012040

y[14]:  0.011229

y[15]:  0.010523

y[16]:  0.009884

y[17]:  0.009406

y[18]:  0.008526

y[19]:  0.010000

y[20]:  0.000000

分析对算法的认识:

Y[20] 之前两种算法所产生的结果相差不大。但是由于误差传播是逐步扩大的。因而不可直接就此断言那种算法好;随着次数的增大其后果是可怕的,代价是巨大的 。经验在下亲自验证到 Y[50] 时,会出现相当可怕的结果!!

算法一:

 

算法二:

 

进行误差分析:

由递推公式布难求出:算法一的误差是 5^n 级别!!

                    算法二 的误差级别则为 (1/5)^n 级别的!!

综上所述:在数值计算中 如不注意误差分析,就会出现“差之毫厘 失之千里”

的错误结果。我们应重视计算过程中的误差分析,算法分析。

 

posted @ 2006-04-04 11:43 华剑缘 阅读(147) | 评论 (0)编辑 收藏
  • 类就是一种自己定义的类型,如同int ,double ,bool ,char~~~

    对象就相当于变量,如int a;double b;char c;~~~

    用起来又是一样的,呵呵,现在才明白真是好糊涂呀。

    拷贝构造函数:
  • //调用之前一定要定义构造函数
  • class 类名{
  • 类名  (类名&   对象名);
  • }
  • 类名::类名(类名&   类名){
  • 函数体;
  • }


(1):当用类的一个对象去初始化里为一个对象时系统自动调用拷贝构造函数来实现拷贝赋值。
  • void main(void)
  • {
  •    Point  A(1,2);   //
  •    Point  B(A);       //拷贝构造函数被调用
  •      cout<<B.GetX()<<endl;
  • }

           (2):若函数的形式函数为类对象,调用函数时,实参赋值给形参,系统自动调用拷贝构造函数。
    
void fund1(Point A)
{
    cout<<p.GetX()<<endl;
}
void main(void)
{
Point A(1,2);
fund1(A):          //调用拷贝构造函数


}

(3)若函数的返回值是类对象,调用函数时,系统自动调用拷贝构造函数。

posted @ 2006-04-03 21:59 华剑缘 阅读(175) | 评论 (0)编辑 收藏
终于发现什么叫:

纸上得来终觉浅,绝知此事要躬行。


以后要多多练习才是呀 。

郁闷了,看那么多书。想得方法到很丰富,可是自己能力不足实现不了。

东西记得模模糊糊的。用的时候才知道。
posted @ 2006-04-03 21:08 华剑缘 阅读(85) | 评论 (0)编辑 收藏
     摘要: 实验 3 对象数组与对象指针 1 .实验目的 (1) 掌握数组与指...  阅读全文
posted @ 2006-04-03 16:21 华剑缘 阅读(1344) | 评论 (0)编辑 收藏

//C++第一次作业,老师试探C语言基础
//输入不多于20是个字符,遇到回车结束输入,并判断个数,字符类型,并反序输出。
//
#include <stdio.h>
   int XiaoXie=0,ShuZi=0,DaXie=0,Other=0;
main(){
   int i,n,m;
   char a[100];
    printf("最多输入20个你想到的字符:\n");
    for(i=0;i<20;i++){
     a[i]=getchar();
     if (a[i]=='\n')
       break;
       m=i+1;             //回车前字符个数
     }
   printf("你输入的字符:\n");
   for(n=0;n<i;n++)
     putchar(a[n]);
     putchar('\n');
     printf("反序:");
   for(n=i-1;n>=0;n--){  //回车时i已经计数,所以'n=i-1'
     putchar(a[n]);

//判断字符类型,个数:
     if (a[n]>='0'&&a[n]<='9')
         ShuZi=ShuZi+1;
     else if(a[n]>='a'&&a[n]<='z')
         XiaoXie=XiaoXie+1;
     else if (a[n]>='A'&&a[n]<='Z')
         DaXie=DaXie+1;
     else Other=Other+1;
     }
     printf("\n你输入了%d个字符",m);
     printf("其中:\n");
       printf("所输入的小写字母个数为:%d\n",XiaoXie);
       printf("所输入的数字个数为:%d\n",ShuZi);
       printf("所输入的大写字母个数为:%d\n",DaXie);
       printf("其他字符的个数为:%d\n",Other);
}


实验2  类与对象
1.实验目的
(1)学习类与对象的定义。
(2)掌握类与对象的使用方法。
(3)学习类和对象的声明。
(4)学习数据成员与成员函数的访问方式。
(5)理解构造函数和析构函数的定义与执行过程。
(6)学会构造函数的重载方法。
2.实验基本要求
(1)可以定义出一个类,并且在程序中创建一个该类的对象。
(2)实现类的定义,建立一个新的类。
(3)体现出构造函数和析构函数的调用。
(4)重载构造函数。
(5)为了提高对相关知识的综合应用能力,编写一个较为复杂的类和对象的应用程序。
3.实验基本步骤
(1) 建立一个源程序文件。
(2)在此文件中建立一个新的类,将新建的类命名为Rect。
class Rect
{
public:
  int Area_int();
  double Area_double();
  Rect(double l,double w);
  Rect(int l,int w);
  virtual ~Rect();
  int nLength;
   int nWidth;
  double dLength;
  double dWidth;
};
(3)向Rect类中添加数据成员及成员函数,并完善成员函数的功能。如设计一个Area_int()函数,计算边长为整型的长方形的面积;设计一个Area_double()函数,计算边长为double型的长方形的面积。
(4)重载构造函数。一种构造函数用整型变量记录长方形的长和宽,另一种构造函数用double型记录。
(5)体现对象的构造和析构过程。例如,在构造函数中用cout<<”I am the constructor!”<<endl;在析构函数中输出cout<<”I am the destructor”<<endl。
(6)在main()函数中定义两个Rect类的对象,一个对象用实例实现(就像定义普通的变量一样),另一个对象用指针实现(利用关键字new,给指针分配内存空间)。并用不同的参数,以调用不同的构造函数体现构造函数的重载。
(7)下面提供一个较为复杂的类与对象的应用,请根据掌握情况进行实验。定义一个类student,管理一个学生的基本信息,包括学生姓名、学号、英语成绩、数学成绩、程序设计语言成绩、平均成绩等数据成员,以及对这些数据成员的操作。
class student
{
private:
  char stu_name[10];
  charstu_no[10];
  float english_score;
  float math_score;
  float program_score;
  float avg_score;
public:
  student();
  void setname(char'newname);
  void setno(charG number);
  char getname();
  char getno();
  void setenglish(float e);
  void setmath(float m);
  void setprogram(float p);
  float getavg();
};
(8)在main()函数中,根据要求动态分配一组学生的基本信息。从键盘输入得到学生的基本信息,并输出到显示器上。
(9)设置一静态成员记录学生人数。
// (10)设计一友元函数,输出学生名单。



//第二次作业1
///////////////////////////////////
////计算机C041 袁建华 044599///////
//////////////////////////////////

#include <iostream.h>
class Rect {
public:
  int Area_int();
  double Area_double();
  Rect();
  Rect (int l,int w);
  Rect (double l,double w);
  virtual ~Rect();
int nLength;
int nWidth;
double dLength;
double dWidth;
};

//计算面积
int Rect::Area_int(){
return nLength*nWidth;
}
double Rect::Area_double(){
return dLength*dWidth;
}

//定义构造函数
Rect::Rect(int l,int w){
   nLength=l;
   nWidth=w;
   cout<<"I am the constructor!"<<endl;
}
Rect::Rect(double l,double w){
   dLength=l;
   dWidth=w;
   cout<<"I am the constructor!"<<endl;
}
Rect::~Rect(){
cout<<"I am the destructor"<<endl;
}


void main(){
 Rect A1(123,321);
 cout<<"the int Area:"<<A1.Area_int()<<endl;
 Rect *P1=new Rect(0.123,0.321);       //动态创建对象
 cout<<"the double Area:"<<P1->Area_double()<<endl;
}




/////第二次作业2
 //////////////////////////////
 //////////student.cpp/////////
 //////////////////////////////

//1.在main()函数中,根据要求动态分配一组学生的基本信息。从键盘输入得到学生的基本信息,并输出到显示器上。
//2.设置一静态成员记录学生人数。
//3.设计一友元函数,输出学生名单。

#include "iostream"
#include "string"
using namespace std;
class student{
private:
  int i;
  string stu_name;
  string stu_no;
  float english_score;
  float math_score;
  float program_score;
  float avg_score;
public:
student(){
    }
  void setname();
  void setno();
  string getname();
  string getno();
  void setenglish();
  void setmath();
  void setprogram();
  float getavg();

// void friend list_stu(student &);          //声明友元函数

};

//定义友元函数
/*
void list_stu(student &Stu[i]){
  cout>>"Name:">>Stu[i]->stu_name;
  cout>>"Number:">>Stu[i]-stu_no;
}*/

void student::setname(){  //通过一个数组接受学号
 string name;
 cout<<"Name:";
 cin>>name;
 stu_name=name;
}

void student::setno(){    //通过一个数组接受一个学号
 string number;
 cout<<"Number:";
 cin>>number;
 stu_no=number;
}

string student::getname(){   //返回一个名字
 return stu_name;
}

string student::getno(){     //返回学号
 return stu_no;
}

void student::setenglish(){  //输入英语成绩
 float e;
 cout<<"English_score:";
 cin>>e;
 english_score=e;
}

void student::setmath(){       //输入数学成绩
 float m;
 cout<<"Math_score:";
 cin>>m;
 math_score=m;
}
void student::setprogram(){    //输入程序设计程序
 float p;
 cout<<"Program_score:";
 cin>>p;
 cout<<endl;
 program_score=p;
}

float student::getavg(){       //计算三科平均成绩
 avg_score=(english_score+math_score+program_score)/3;
 return avg_score;
}

 

void main(){
 //   int i;
 student *stu=new student();    //动态创建一组
    stu->setname();
    stu->setno();
    stu->setenglish();
    stu->setmath();
    stu->setprogram();
 /* student Stu[10];
for(i=0;i<4;i++){
    cout<<"第"<<i+1<<"个"<<endl;
 Stu[i].setname();
    Stu[i].setno();
    Stu[i].setenglish();
    Stu[i].setmath();
    Stu[i].setprogram();
    }
 */

/*for (i=0;i<10;i++){
   cout<<"第"<<i+1<<"个"<<endl;
 cout<<"Name:"<<Stu[i].getname()<<endl;
    cout<<"Number:"<<Stu[i].getno()<<endl;
   // cout<<Stu[i].getenglish();
   // cout<<Stu[i].getmath();
   // cout<<Stu[i].getprogram();
 */

}

//list_stu(Stu[1]);


 

posted @ 2006-04-03 13:02 华剑缘 阅读(402) | 评论 (0)编辑 收藏
一本C++ primer,什么时候能看完呢,其中要夹杂一些练习。

坚持写读书笔记。

这就开始,呵呵。
posted @ 2006-04-02 20:08 华剑缘 阅读(93) | 评论 (0)编辑 收藏
仅列出标题
共2页: 1 2