C++程序设计

 

C++基本格式示例
//****************************
//*C++基本格式示例如下:       *
//****************************


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

 

 

关于和<iostream.h>
1.#include <iostream>标准输入输出流
2.#include <iostream.h>非标准输入输出流

1.    不加.h的是现在C++中规定的标准,目的在于使C++代码用于移植和混合嵌入时不受扩展名.h的限制,避免因为.h而造成的额外的处理和修改. 【有利于程序的移植】


C++中为了避免名字定义冲突,特别引入了“名字空间的定义”,即namespace。
当代码中用<iostream.h>时,输出可直接引用cout<<x;
//<iostream.h>继承C语言的标准库文件,未引入名字空间定义,所以可直接使用。
当代码中引入<iostream>时,输出需要引用std如果还是按原来的方法就会有错。
使用<iostream>时,引入std::有以下方法:

1.
using namespace std;
cout<<x;
2.
using std::cout;
cout<<x;
3.
最基本的std::cout<<x;

2.而加.h的是c语言的用法,但是在c++中也支持这种用法,主要是为了向下 兼容c 的内容,我们平时尽量不用这种方法【兼容C】


这回你该知道为什么通常用#include <iostream>时,
要用using namespace std;了吧。如果你不用这个,就要在使用cout时,用后两种方法了。
其他头文件也是同样的道理。
(有“.h”的就是非标准的,C的标准库函数,无“.h”的,就要用到命令空间,是C++的。还有一部分不完全是有“.h”和没“.h”的差别。例如:math.h和cmath) 

 

 

关于mani()
/*关于mani()
1.标准C++写法:  "int main() ——  return 0"   需返回值。标准写法,有较好的程序移植性
2.非标准写法: "void main()"   ——   无需返回值return 0。C++标准中未定义过的写法。不利于程序的移植。但VC6中可通过测试*/

//标准C++写法:
#include <iostream>
using namespace std;
int main()
{
   cout << "Hello, world!" << endl;
   return 0;
}

//非标准写法:
#include <iostream>
using namespace std;
void main()
{
   cout << "Hello, world!" << endl;
}

void main 和 int main的区别就是有无返回值啊
在int main 可以出现非 int 类型的东西
我们在写代码时,一个函数要么有返回值,要么没有返回值,没有返回值就用void来表示。 main函数同样的,在没有返回值时加个void 。
有的编译器必须main要有返回值 int , 那就写成int main 。
至于什么时候需要哪种写法,不必有这种顾虑,你可以一律都写成 int main ,然后在方法体中 最后加个return 0 ;就行了,这样写法没有哪个编译器不通过的吧。

void main 和 int main 在作用上其实没什么区别啊,只是有的严谨的编译器必须要main有int 返回值而已,这两种写法跟自定义的函数没任何关系。

一句话,以后楼主就写成 int main 就行了 










写 void 可以,但c++标准从来就没有出现过main()这种函数。
通常main不写函数类型和返回值的话会默认为int 以及带有返回值,但后来的不同编译器的会有不同结果,写了int main 而没有return 0在VC6.0环境下会报错
------------------------->
下面有人说return 0return EXIT_SUCCESS 一样 标志程序无错误退出 ,这是正确的,return 0 标志程序无错结束 









关于C语言中return的一些总结 
return是C++预定义的语句,它提供了种植函数执行的一种放大。当return语句提供了一个值时,这个值就成为函数的返回值. 
说到return,有必要提及主函数的定义,下面是从网络上找到的资料,好好消化吧,对了解主函数中返回值的理解有很大的帮助. 
很多人甚至市面上的一些书籍,都使用了void main( ) ,其实这是错误的。C/C++ 中从来没有定义过void main( ) 。C++ 之父 Bjarne Stroustrup 在他的主页上的 FAQ 中明确地写着 The definition void main( ) { /* ... */ } is not and never has been C++, nor has it even been C.( void main( ) 从来就不存在于 C++ 或者 C )。下面我分别说一下 C 和 C++ 标准中对 main 函数的定义。 
1. C 
在 C89 中,main( ) 是可以接受的。Brian W. Kernighan 和 Dennis M. Ritchie 的经典巨著 The C programming Language 2e(《C 程序设计语言第二版》)用的就是 main( )。不过在最新的 C99 标准中,只有以下两种定义方式是正确的: 
int main( void ) 
int main( int argc, char *argv[] ) 
(参考资料:ISO/IEC 9899:1999 (E) Programming languages — C 5.1.2.2.1 Program startup) 
当然,我们也可以做一点小小的改动。例如:char *argv[] 可以写成 char **argv;argv 和 argc 可以改成别的变量名(如 intval 和 charval),不过一定要符合变量的命名规则。 
如果不需要从命令行中获取参数,请用int main(void) ;否则请用int main( int argc, char *argv[] ) 。 
main 函数的返回值类型必须是 int ,这样返回值才能传递给程序的激活者(如操作系统)。 
如果 main 函数的最后没有写 return 语句的话,C99 规定编译器要自动在生成的目标文件中(如 exe 文件)加入return 0; ,表示程序正常退出。不过,我还是建议你最好在main函数的最后加上return 语句,虽然没有这个必要,但这是一个好的习惯。注意,vc6不会在目标文件中加入return 0; ,大概是因为 vc6 是 98 年的产品,所以才不支持这个特性。现在明白我为什么建议你最好加上 return 语句了吧!不过,gcc3.2(Linux 下的 C 编译器)会在生成的目标文件中加入 return 0; 。 

2. C++ 
C++98 中定义了如下两种 main 函数的定义方式: 
int main( ) 
int main( int argc, char *argv[] ) 
(参考资料:ISO/IEC 14882(1998-9-01)Programming languages — C++ 3.6 Start and termination) 
int main( ) 等同于 C99 中的 int main( void ) ;int main( int argc, char *argv[] ) 的用法也和 C99 中定义的一样。同样,main 函数的返回值类型也必须是int。如果main函数的末尾没写return语句,C++98 规定编译器要自动在生成的目标文件中加入 return 0; 。同样,vc6 也不支持这个特性,但是 g++3.2(Linux 下的 C++ 编译器)支持。 

3. 关于 void main 
在 C 和 C++ 中,不接收任何参数也不返回任何信息的函数原型为“void foo(void);”。可能正是因为这个,所以很多人都误认为如果不需要程序返回值时可以把main函数定义成void main(void) 。然而这是错误的!main 函数的返回值应该定义为 int 类型,C 和 C++ 标准中都是这样规定的。虽然在一些编译器中,void main 可以通过编译(如 vc6),但并非所有编译器都支持 void main ,因为标准中从来没有定义过 void main 。g++3.2 中如果 main 函数的返回值不是 int 类型,就根本通不过编译。而 gcc3.2 则会发出警告。所以,如果你想你的程序拥有很好的可移植性,请一定要用 int main 。 

4. 返回值的作用 
main 函数的返回值用于说明程序的退出状态。如果返回 0,则代表程序正常退出,否则代表程序异常退出。下面我们在 winxp 环境下做一个小实验。首先编译下面的程序: 
int main( void ) 
{ 
return 0; 
} 
然后打开附件里的“命令提示符”,在命令行里运行刚才编译好的可执行文件,然后输入“echo %ERRORLEVEL%”,回车,就可以看到程序的返回值为 0 。假设刚才编译好的文件是 a.exe ,如果输入“a && dir”,则会列出当前目录下的文件夹和文件。但是如果改成“return -1”,或者别的非 0 值,重新编译后输入“a && dir”,则 dir 不会执行。因为 && 的含义是:如果 && 前面的程序正常退出,则继续执行 && 后面的程序,否则不执行。也就是说,利用程序的返回值,我们可以控制要不要执行下一个程序。这就是 int main 的好处。如果你有兴趣,也可以把 main 函数的返回值类型改成非 int 类型(如 float),重新编译后执行“a && dir”,看看会出现什么情况,想想为什么会出现那样的情况。顺便提一下,如果输入 a || dir 的话,则表示如果 a 异常退出,则执行 dir 。 
5. 那么 intmain(intargc,char*argv[],char*envp[])呢? 
这当然也不是标准 C 里面定义的东西!char*envp[] 是某些编译器提供的扩展功能,用于获取系统的环境变量。因为不是标准,所以并非所有编译器都支持,故而移植性差,不推荐使用。 
到了这里,你应该了解为什么主函数定义为 int返回类型,而且函数体里面有return 0;这个语句了吧. 
下面具体说说我对return的应用的理解。 
只要一个函数的返回值是数字型的,那么就可以返回0(即return 0),其实你返回多少都没问题。一般情况下,C++做出来的函数都要求返回一个值,当函数执行正常,且达到了一般情况下的目的,那么就返回0表示正确的调用了该函数,这个0就是返回给主调函数以通知没有出错的;如果函数调用中出错,或者没有按照一般情况执行,那么就返回1,以告知主调函数采取响应策略;如果你在某个函数所在类的定义所在的头文件中定义了一组状态值(一般都是负整数),那么函数就可以返回不同的值以告之主调函数具体发生了什么异常或错误,这种情况一般用于函数功能独立性较差的的情况。所以一般不鼓励把函数返回类型定义为void,至少返回应该是int,而在函数的最后加上return 0.语句: 
int func(参数列表) 
{ 
…… 
…… 
…… 
Return 0; 
} 
在函数中,如果碰到return 语句,那么程序就会返回调用该函数的下一条语句执行,也就是说跳出函数的执行,回到原来的地方继续执行下去。但是如果是在主函数中碰到return语句,那么整个程序就会停止,退出程序的执行。 
如果你定义一个函数有返回类型,可以想下面那样调用: 
int func() 
{ 
int value; 
…… 
…… 
…… 
return value; 
} 
int main() 
{ 
int intvalue; 
intvalue=func(); 
…… 
…… 
teturn 0; 
} 
return语句后面具体是什么内容,这就要具体情况具体分析了: 
(1) 在返回类型是char的函数中,return后应该是char类型的值; 
(2) 在返回类型是int的函数中,如果是要停止函数的调用,最好应该为0;其他的按照你的目的而定,只要是int 类型就行了 
(3) 在返回类型是结构类型的函数中,return后应该是结构的一个实例对象。 
总之,函数定义为什么样的返回类型,该函数中return后就应该是相应类型的值。 

参考资料: 引子百度知道  

 

 

输出表达式的值
//输出表达式的值

#include <iostream>
#include <cmath>
using namespace std;
const double pi=3.14159;
int main()
{
    //计算表达式的值
    double y;
    y=(log(5.0)*log(3.0)-log(2.0))/sin(pi/3.0);
    cout<<"y="<<y<<endl;
    return 0;
}


【或者直接输出】:

#include <iostream>
#include <cmath>
using namespace std;
const double pi=3.14159;
int main()
{
    cout<<"y="<<(log(5.0)*log(3.0)-log(2.0))/sin(pi/3.0)<<endl;
    return 0;
}

 

 

VC++中文件类型
VC++中文件类型小结 
.dsw---- 这种类型的文件在VC中是级别最高的,称为Workspace文件 
.dsp---- 在VC中,应用程序是以Project的形式存在的,Project文件的扩展名为.dsp,在Workspace文件中可以包含多个Project,由Workspace文件对它们进行统一的协调和管理,每个工程都对应一个dsp文件 
.opt---- 与dsw类型的Workspace文件像配合的一个重要的文件类型是以opt为扩展名的文件,这个文件中包含的是Workspace文件中要用大本地计算机的有关配置信息,所以这个文件不能在不同的计算机上共享。当我们打开一个Workspace文件时,如果系统找不到需要的opt类型文件,就会自动的创建一个与之配合的包含本地计算机信息的opt文件。 
.clw---- 以clw为扩展名的文件是用来存放应用程序中用到的类和资源的信息,这些信息是VC中的ClassWizard工具管理和使用类的信息来源 
readme.txt---- 这个文件每个应用程序都有一个,这个文件中列出了应用程序中用到的所有文件的信息,打开并查看其中的内容就可以对应用程序的文件结构有一个基本的知识 
.h----- 这种文件为头文件,包含的主要是类的定义 
.cpp---- 这种文件为实现文件,该种文件包含的主要是类成员函数的实现代码。一般来说,h为扩展名的文件和cpp为扩展名的文件是一一对应配合使用的 
.rc---- 在VC中以.rc为扩展名的文件为资源文件,其中包含了应用程序中用的所有的Windows资源,要指出的一点是rc文件可以直接在VC集成环境中以可视化的方法进行编辑和修改 
.rc2----- 也是资源文件,但这个文件中的资源不能在VC的集成环境下直接进行编辑和修改,而是由我们自己根据需要手工编辑这个文件 
.ico,.bmp,.cur----- 还有一些具体的资源文件不一一列举 
.exe,.dll,.fon,.mod,.drv,.ocx------ 都是所谓的动态链接库文件 

 

 

if函数
//符号函数

#include <iostream>
using namespace std;
int main()
{
    int x,y;
    cout<<"请输入x的值"<<endl;
    cin>>x;
    if (x>0) y=1;
    else if (x<0) y=-1;
    else y=0;
    cout<<"当x="<<x<<"时,y="<<y<<endl;
    return 0;
}

//求三个数中的最大值

#include <iostream>
using namespace std;
int main()
{
    float a,b,c,max;
    cout<<"本程序求三个数中的最大值,请输入三个数"<<endl;
    cin>>a>>b>>c;
    if (a>b) max=a;
    else max=b;
    if (c>max) max=c;
    cout<<"三个数中最大值是"<<max<<endl;
    return 0;
}
 

 

switch语句
//测试switch语句


#include <iostream>
using namespace std;
int main()
{
    int x;
    cout<<"x=";
    cin>>x;
    switch(x)
    {
    case 1:cout<<"one\n"; break;
    case 3:cout<<"three\n";
    case 2:cout<<"two\n";
    case 4:cout<<"four\n";
    default :cout<<"other\n";
    }
    cout<<"end"<<endl;
    return 0;
}

 

//switch语句
/*计算分段函数的值
y={10        1<=x<2
   30        2<=x<4
   50        4<=x<6
   100         其它
*/
#include <iostream>
using namespace std;
int main()
{
    double x,y;
    cout<<"x=";
    cin>>x;
    switch (int(x))
    {
    case 1:y=10; break;
    case 2:
    case 3:y=30; break;
    case 4:
    case 5:y=50; break;
    default:y=100;
    }
    cout<<"y="<<y<<endl;
    return 0;
}

 

 

for语句
//统计不同成绩段的学生人数

#include <iostream>
using namespace std;
int main()
{
    int i,n,n1,n2,n3;
    float score;
    cout<<"n=";
    cin>>n;
    n1=0; n2=0; n3=0;
    for (i=1;i<=n;i++)
    {
        cin>>score;
        if (score>=85) n1+=1;
        else if (score >=60) n2+=1;
        else n3+=1;
    }
    cout<<"85-100:"<<n1<<endl;
    cout<<"60-84:"<<n2<<endl;
    cout<<"0-59:"<<n3<<endl;
    return 0;
}


//求输入的若干个数中的最大值
#include <iostream>
using namespace std;
int main()
{
    int i,n;
    double x,max;
    cout<<"n=";
    cin>>n;
    cin>>x;
    max=x;
    for (i=2;i<=n;i++)
    {
        cin>>x;
        if (x>max) max=x;
    }
    cout<<"max="<<max<<endl;
    return 0;
}
//计算1—100的自然数的和

#include <iostream>
using namespace std;
int main()
{
    int i=0,sum=0;
    for (i=1;i<=100;i=i+1)
    {
        sum=sum+i;
    }
    cout<<"自然数1~100之和为"<<sum<<endl;
    return 0;
}





//计算10的阶乘

#include <iostream>
using namespace std;
int main()
{
    int i=0,j=0,k=0;
    long sum=1;
    for (i=10;i>=1;i=i-1)
    {
        cout<<"i="<<i;
        sum=sum*i;
        cout<<"\tsum="<<sum<<endl;
        for (j=1;j<=5500;j=j+1)
            for (k=1;k<=10000;k=k+1);
    }
    cout<<"10!="<<sum<<endl;
    return 0;
}

 

//计算n的阶乘
#include <iostream>
using namespace std;
int main()
{
    int i,n;
    long int t;
    t=1;
    cout<<"n=";
    cin>>n;
    for (i=1;i<=n;i++)
        t=t*i;
    cout<<"n!="<<t<<endl;
    return 0;
}








/*百鸡问题。已知公鸡每只5元,母鸡每只3元,小鸡每3只1元。现要用完100来元买100只鸡,问公鸡、母鸡和小鸡各为多少?*/

#include <iostream>
using namespace std;
int main()
{
    int x,y,z;
    cout<<"cock\t"<<"hen\t"<<"chick\t"<<endl;
    for (x=0;x<=19;x++)
        for (y=0;y<=33;y++)
        {
            z=100-x-y;
            if ((5*x+3*y+z/3.0)==100)
                cout<<x<<'\t'<<y<<'\t'<<z<<endl;
        }
        return 0;
} 
/*求2—100之间的素数。
判断整数m是否为素数,最简单的方法是根据定义,用2,3,4,5,…,m-1逐个去除m,若有一个数可以整除m,则m不是素数。
缩小范围,若所有小于等于√m的数也一定不能整除m,因此只须测试从2—√m之间是否存在m的约数。*/
//
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    int m,i,k,n=0;
    for (m=2;m<=100;m++)
    {
        k=int(sqrt(m));
        i=2;
        while (m%i && i<=k)
            i++;
        if(i>k)
        {cout<<m<<'\t';
        n+=1;
        if(n%5==0) cout<<endl;
        }
    }
    return 0;
}

 

 

while语句
//求输入的所有大于0的数据之和

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

 

 

goto语句
//求a,b之间的较大值

If  (a>b) goto A;
 goto B;
A:max=a;  goto C;
B:max=b;  goto C;
C:cout<<”max=”<<max<<endl;


//求1—100之间奇数的和
I=1;
s=1;
loop:i++;
if (i % 2)  s+=I;
if (i<=100)  goto loop;
cout<<”s=”<<s<<endl;

 

 

数组
//测试一维数值

#include <iostream>
using namespace std;
int main()
{
    int a[5]={1,3,5,7,9};
    for (int i=0;i<5;i++)
        cout<<a[i]<<" ";
    cout<<endl;
    int b[5]={2,4,6};
    for (i=0;i<5;i++)
        cout<<b[i]<<" ";
    cout<<endl;
    return 0;
}



//测试二维数组

#include <iostream>
using namespace std;
int main()
{
    int a[2][2];
    int i,j;
    cout<<"请输入4个数字:"<<endl;
    for (i=0;i<2;i++)
        for (j=0;j<2;j++)
            cin>>a[i][j];
        cout<<endl;
        for (i=0;i<2;i++)
        {
            for (j=0;j<2;j++)
                cout<<a[i][j]<<" ";
            cout<<endl;
        }
        return 0;
}
 
//求一维数组中的最大元素及所在下标

#include <iostream>
using namespace std;
int main()
{
    int a[6]={25,64,38,40,75,66};
    int max=a[0];int j;
    for (int i=1;i<6;i++)
        if (a[i]>max) {max=a[i];j=i;}
        cout<<"max是:a["<<j<<"]="<<max<<endl;
        return 0;
}


//从键盘输入数据给数组初始化

#include <iostream>
using namespace std;
int main()
{
    int i,a[6];
    cout<<"请输入六个数:";
    for (i=0;i<6;i++) cin>>a[i];
    for (i=5;i>=0;i--) cout<<"a["<<i<<"]="<<a[i]<<' ';
    cout<<endl;
    return 0;
}

//求二维数组中最小元素的值及其位置

#include <iostream>
using namespace std;
int main()
{
    int i,j,row=0,col=0,min;
    int a[3][4]={1,-2,0,4,-5,6,2,4};
    min=a[0][0];
    for (i=0;i<3;i++)
        for (j=0;j<3;j++)
            if (a[i][j]<min){min=a[i][j];row=i;col=j;}
            cout<<"a数组的最小元素是:a["<<row<<","<<col<<"]="<<min<<endl;
            return 0;
}

 

 

冒泡排序
//冒泡排序
#include <iostream>
#include <memory>
using namespace std; 
int main()
{
    int i=0,j=0,p=0,a[7];
    memset(a,0,sizeof(a));
    for (i=1;i<=6;i++)
    {
        cout<<"请输入待排序的数a["<<i<<"]=";
        cin>>a[i];
    }
    for (j=1;j<=5;j++)
    {
        for (i=1;i<=6-j;i++)
        {
            if (a[i]<a[i+1]);
            {
                p=a[i];
                a[i]=a[i+1];
                a[i+1]=p;
            }
        }
    }
    for (i=1;i<=6;i++)
    {
        cout<<a[i]<<endl;
    }
    return 0;
}

 

函数
//递归求Hanoi问题

#include <iostream>
using namespace std;
int step=1;
void move(int ,char,char,char);
int main()
{
    int n;
    //char a,b,c;
    cout<<"请输入盘数n=";
    cin>>n;
    cout<<"在3根柱子上移"<<n<<"只盘的步骤为:"<<endl;
    move(n,a,b,c);
    return 0;
}

void move(int m,char p,char q,char r)
{
    if (m==1)
    {
        cout<<"["<<step<<"] move 1# from"<<p<<" to "<<r<<endl;
        step++;
    }
    else 
    {
        move(m-1,p,r,q);
        cout<<"["<<step<<"] move "<<m<<"# from"<<p<<" to "<<r<<endl;
        step++;
        move(m-1,q,p,r);
    }
}

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/wzmmao/archive/2012/07/05/2578383.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值