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;
}