7.8---函数入口、求pi、裴波那契、素数、密码、水仙花

来源:互联网 发布:nc数据库 编辑:程序博客网 时间:2024/05/01 12:30

c语言函数四大体:返回值类型,函数名,参数列表,函数体。缺一不可。
main函数没特权,都是有规律的。不一定非得是程序入口。
1. 任何函数都可以作为程序入口

/*11在已给出的程序中允许添加代码的地方添加任意代码,完成向屏幕输出打印“Hello World!”的功能,未允许添加代码的地方(如main函数内部)不允许修改*/#include <stdio.h>#include <stdlib.h>int hello ( void ) //自定义函数{    //此处可以添加代码#pragma comment ( linker ,"/ENTRY:hello" )     //加了%,是一个预处理命令,在代码进行编译之前已经执行过了,所以写在程序任何地方都是一样的    //功能:把指示传给链接器,入口是hello函数。    //对于一个程序而言,先要对每一个部分进行编译,然后链接。    puts ( "Hello World!" );//这个函数输出可以自动换行;    system ("pause");//暂停    return 0;}int main ( void )//习惯作为程序入口的main函数    {   //常规的 输出写在这里,但是不允许    puts ( "in main now!" );//不显示 说明这个函数没有实现    system ("pause");//暂停    return 0;//退出    //这样写是有原因的额。规范化程序。表明函数的一般性。主函数规范:返回0告诉操作系统,正常退出。    //c是规律的公式,利用规律解题。求知和质疑。}

//2. 用公式求近似pi的值:π/4 = 1-1/3+1/5-1/7…,直到最后一项绝对值小于exp(-7)

#include <iostream>#include <iomanip>#include <cmath>#include <stdlib.h>//using namespace std;int main (){       int s=1;    double n=1,t=1,pi=0;    while (fabs(t)>1e-7)    {    pi=pi+t;    n=n+2;    s=-s;//采用-1方法进行符号转换    t=s/n;    }    pi=pi*4;    cout<<"pi=" <<setiosflags(ios::fixed)<<setprecision(6)<<pi<<endl;    system ("pause");//    return 0;}

include [ iomanip ]

#include <iomanip>    // io   流控制头文件, 主要是一些操纵用法如setw(int n),setprecision(int n) ,setbase(int   n),setfill(char c)的.

setw(n)用法: 通俗地讲就是预设宽度

 cout<<setw(5)<<255<<endl; //结果是: (空格)(空格)255 //如果你要输出的字符宽度超出了setw(n)的n值,就按输出字符的宽度输出。 cout<<setw(4)<<12.3456<<endl; //输出12.3456

▲setfill(char c) 用法 : 就是在预设宽度中如果已存在没用完的宽度大小,则用设置的字符c填充

cout<<setfill('@')<<setw(5)<<255<<endl;//结果是:@@255

▲setbase(int n) : 将数字转换为 n 进制.

    cout<<setbase(8)<<setw(5)<<255<<endl;    cout<<setbase(10)<<setw(5)<<255<<endl;    cout<<setbase(16)<<255<<endl;  // 结果是:   //(空格)(空格)377   //(空格)(空格) 255   //(空格)(空格) ff

setprecision用法
使用setprecision(n)可控制输出流显示浮点数的数字个数。C++默认的流输出数值有效位是6。
如果setprecision(n)与setiosflags(iOS::fixed)合用,可以控制小数点右边的数字个数。setiosflags(ios::fixed)是用定点方式表示实数。
如果与setiosnags(ios::scientific)合用, 可以控制指数表示法的小数位数。setiosflags(ios::scientific)是用指数方式表示实数。

cout<<"pi=" <<setiosflags(ios::fixed)<<setprecision(6)<<pi<<endl;//输出3.141592

3. 裴波那契数列前四十个数字

//求裴波那契数列前四十个数#include <iostream>#include <iomanip>#include <stdlib.h>//using namespace std;int main (){    long f1,f2;    int i ;    f1 = f2 = 1;    for (i=1 ;i<= 20;i++)    {        cout << setw(12)<<f1<<setw(12)<<f2;//设备输出字段控制为12,每次输出两个数        if (i%2==0) cout<<endl;?//每输出完****四个数*****时换行,使得每行输出四个数。        f1=f1+f2;        f2=f2+f1;    }        system ("pause");//    return 0;}

错误1:有多个重载函数 “sqrt” 实例与参数列表匹配 。
定义的m是Int型,而sqrt()中m应为double或浮点型,所以改为sqrt(m*1.0)即可。
错误2:{}不对应。

4. 找出100-200之间的全部素数m
算法:m不能被2-sqrt(m)之间所有数整除,则为素数。

//找出100-200之间的全部素数#include <iostream>#include <cmath>//函数运算#include <iomanip>//io数据流的一些基本操作#include <stdlib.h>//暂停using namespace std;int main (){    int m,k,i,n=0;    bool prime ;//定义布尔型变量    for (m=101;m<= 200;m=m+2)//判断m是否为素数,增量为2    {        prime =true;//bool的取值为true或false        k=int (sqrt(m*1.0)) ;//用k代表sqrt(m)的整数部分     定义的m是Int型,而sqrt()中m应为double或浮点型,所以改为sqrt(m*1.0)即可。        //检查m是否能被2-sqrt(m)的数整除        for (i=2;i<=k;i++)            if (m%i==0)           {            prime=false;            break;//能被2 整除的话,跳出循环,进行下一个。             //break好处:发现不是素数后立马跳出,提前结束循环            }        if (prime)//是素数        {            cout<<setw(5)<<m;            n=n+1;//n累计素数的个数        }        if(n%10==0)  cout<<endl;//输出10个后换行    }    cout<<endl;    system ("pause");//    return 0;}

5.翻译密码
问题:只转换大小写的字母(相应的ascii码加4),不转换非字母。
思路:原来字符为c,转换可用c=c+4实现。
while ((c=getchar())!=’\n’)//
功能:判断字符串中是否有回车符,括号输入错误,运算级别问题颠倒导致程序运行不对。
c=getchar()!=’\n’
((c=getchar()!=’\n’))
while ((c=getchar()!=’\n’))
逻辑判断!=优先级高于赋值语句,所以先进行逻辑判断得到bool型的0或1,赋值给char型的c,然后进行判断是0不执行了,是1直接输出对应的ascii码——笑脸。
思考:不同类型间字符或者数可以进行相互转化,赋值或者强制转换。如:sqrt(int a*1.0);double a=b;int a=b;char a=bool b

//译密码#include <iostream>#include <stdlib.h>using namespace std;int main (){char c;//while ((c=getchar()!='\n'))//严重输入有问题while ((c=getchar())!='\n')//{    if ((c>='a'&&c<='z')||(c>='A'&&c<='Z'))//判断是否为英文字符    {        //进行加密操作        c=c+4;        if (c>'Z'&&c<='Z'+4||c>'z') //判断是否加密操作后超出范围,必须有c<='Z'+4,因为大写字母对应的ascii码都小于小写字母,否则会误操作。        c=c-26;    }    cout << c;}cout<<endl;system ("pause");return 0;}

6.水花数的输出
各位数字立方之和等于其本身
关键在于各位数字的获取

//输出所有的水仙花数#include <iostream> #include<stdlib.h>using namespace std; int main () {int i,j,k,n;  cout<<"narcissus numbers are:"<<endl;      for (n=100;n<1000;n++)       {i=n/100;        j=n/10-i*10;        k=n%10; //关键就在于各位数字的获取       if (n == i*i*i + j*j*j + k*k*k)          cout<<n<<" ";       }     cout<<endl;     system ("pause"); return 0;  } 
原创粉丝点击