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

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; 
 } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值