C++ 函数部分(1)
1.编写一个求X的n次方的函数
#include <iostream>
using namespace std;
double power(double x, int n);
void main(void)
{
double x;
int n;
cout<<"input x and n to calc the value of the x to the power n"<<endl;
cout<<"x = ";
cin>>x;
cout<<"n = ";
cin>>n;
cout<<x<<" to the power "<<n<<" is " <<power(x,n)<<endl;
fflush(stdin);//清空输入缓冲区中的数据
getchar(); //暂停
}
double power(double x , int n)
{
double val = 1.0;
while (n--)
val *= x;
return (val);
}
注意:如果第16行的fflush(stdin)不加,而保留17行的getchar()语句达不到暂停效果,因为:在用cin(或scanf)输入完后回输入回车键[Enter],表明输入结束,此时[Enter]会留在输入缓冲区中,当程序运行到getchar();语句时就会读入[Enter],从而使控制台闪过,没有达到要控制台停留的效果,所以,在getchar();语句之前要用fflush(stdin);清空输入缓冲区的内容。
2.输入一个8位的二进制数,将其转换为十进制数输出
分析:将二进制转换为10进制,只要讲二进制数的每一位乘以该位的权然后相加即可。
如:000011012 = 0(27)+0(26)+0(25)+0(24)+1(23)+1(22)+0(21)+1(20) = 1310 。
#include <iostream>
using namespace std;
double power(double x, int n);
void main(void)
{
int i,
value = 0;
char ch;
cout<<"Enter an 8 bit binary number: ";
for(i = 7; i >=0; i--)
{
//sizeof(char) = 1
//sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。
cin >> ch; // 注意键盘输入的数字是字符形式,并且采用一个个单独接收,因为char 类型一次只能接收1个字节的长度
if('1' == ch) // 只需要处理字符为'1'的情况
value += int(power(2,i));
}
cout<<"Decimal value is "<<value<<endl;
fflush(stdin);
getchar();
}
double power(double x , int n)
{
double val = 1.0;
while(n--)
val *= x;
return (val);
}
3.编写程序求的π值,公式如下:
其中arctan用如下形式的级数计算:
直到级数的某一项绝对值不大于10-15为止;π和x均为double型。
#include <iostream>
using namespace std;
void main()
{
double a,b;
double arctan(double x);
//注意因为整数相除结果取整,如果参数写1/5,1/239,那么结果都是0
a = 16.0*arctan(1/5.0);
b = 4.0*arctan(1/239.0);
cout<<"PI = "<<a-b<<endl;
getchar();
}
double arctan(double x)
{
int i;
double r,e,f,sqr;
sqr = x*x;
r = 0;
e = x;
i = 1;
while(e/i >1e-15)
{
f = e/i;
r = (i%4 == 1)?r+f : r-f;
e = e*sqr;
i += 2;
}
return r;
}
4.寻找并输出11~999之间的数m,它满足m,m2和m3均为回文数。
所谓回文数是指其各位数字左右对称的整数,如121,676,95259等。满足上述条件的数如m = 11,m2 =121,m3 = 1331.
分析:判断一个数是否为回文,可以用除以10取余的方法,从最低位开始,依次取出该数的各位数字,然后用最低位充当最高位,按反序重新构成新的数,比较与原数是否相等,若相等,则原数为回文。
#include <iostream>
#include <iomanip> // 使用setw()控制宽度函数
using namespace std;
void main()
{
bool symm(long n);
long m;
cout.flags(ios::left); //输出左对齐
for(m = 11; m< 1000; m++)
{
if(symm(m)&&symm(m*m)&&symm(m*m*m))
cout<<"m = "<<setw(5)<<m<<" m*m = "<<setw(7)<<m*m<<" m*m*m = "<<setw(12)<<m*m*m<<endl;
}
getchar();
}
bool symm(long n)
{
long i,m;
i = n;
m = 0;
while(i)
{
m = m*10 + i%10; // m值上升一位 加上i的最低位
i = i/10; // 去掉i的最低位
}
return (m == n);
}
运行结果:
m = 11 m*m = 121 m*m*m = 1331
m = 101 m*m = 10201 m*m*m = 1030301
m = 111 m*m = 12321 m*m*m = 1367631
在C++中
控制输出宽度用iosamp函数库的setw
#include <iomanip>
using namespace std;
cout.setprecision(10); //控制精度
double a = 1.2;
cout<<setw(10)<<a<<endl; //setw()控制宽度
C++中默认是右对齐
cout.flags(ios::left); //左对齐
#include <iostream>
using namespace std;
#define STACK_INIT_SIZE 100
struct Stack{
char *base;
char *top;
}sq;
void initstack(Stack &s)
{
s.base = new char[STACK_INIT_SIZE*sizeof(char)];
s.top = s.base;
}
void push(Stack &s , char e)
{
*s.top = e;
++s.top;
}
char pop(Stack &s)
{
s.top--;
return *s.top;
}
void main()
{
Stack s;
initstack(s);
int a,
j = 0;
char p[100];
char c = 0,
d = 0;
cout<<"这是回文判断程序"<<endl;
cout<<"请输入测试字符串"<<endl;
cin.getline(p,100); //接收一个字符串, 最长长度为100个字符
a = strlen(p); //获取字符串长度
for(int i = 0; i<a;++i)
push(s,p[i]);
do{
c = pop(s);
d = p[j];
if(c != d ) break;
j++;
}while(j<=a/2-1);
if( j == a/2)
cout<<"你输入的测试字符串为回文"<<endl;
else
cout<<"测试字符串不是回文"<<endl;
fflush(stdin);
getchar();
}
6.计算如下公式,并输出结果:
其中r,s的值由键盘输入,sinx的近似值按如下公式计算:
计算精度为10-6.当某项的绝对值小于计算精度时,停止累加,累加和即为该精度下的sinx的近似值。
#include <iostream>
#include <cmath>
using namespace std;
void main()
{
double k,r,s;
double tsin(double x);
cout<<"r = ";
cin>>r;
cout<<"s = ";
cin>>s;
if(r*r <= s*s)
k = sqrt(tsin(r)*tsin(r)+tsin(s)*tsin(s));
else
k = tsin(r*s)/2;
cout<<k<<endl;
fflush(stdin);
getchar();
}
double tsin(double x)
{
double p = 0.000001,
g = 0,
t = x;
int n = 1;
do{
g = g + t;
n++;
t = -t*x*x/(2*n-1)/(2*n-2); //自左至右运算相当于 -t*x*x/[(2*n-1)*(2*n-2)]
}while(fabs(t) >= p);
return g;
}
7.投骰子的随机游戏
游戏规则是:每个骰子有6面,点数分别为1,2,3,4,5,6.游戏者在程序设计开始时输入一个无符号整数,作为产生随机数的种子。每轮投两次骰子,第一轮如果和数为7或11则为胜,游戏结束;和数为2,3或12则为负,游戏结束;和数为其它值则将此值作为自己的点数,继续第二轮,第三轮,……直到某轮的和数等于点数则取胜,若在此前出现和数为7则为负。
#include <iostream>
#include <cstdlib>
using namespace std;
int rolldice(void);
void main()
{
int gamestatus,sum,mypoint;
unsigned seed;
cout<<"Please enter an unsigned integer:";
cin>>seed; // 输入随机数种子
srand(seed); //将种子传递给rand()
sum = rolldice(); //第一轮投骰子,计算和数
switch(sum)
{
case 7: // 如果和数为7或11则为胜,状态为1
case 11:
gamestatus = 1;
break;
case 2: // 和数为2,3或12则为负,状态为2
case 3:
case 12:
gamestatus = 2;
break;
default: // 其它情况,游戏尚无结果,状态为0,记下点数,为下一轮做准备
gamestatus = 0;
mypoint = sum;
cout<<"point is "<<mypoint<<endl;
break;
}
while(gamestatus == 0) // 只有状态仍为0,就继续进行下一轮
{
sum = rolldice();
if(sum == mypoint) //某轮的和数等于点数则取胜,状态置1
gamestatus = 1;
else
if(sum == 7) //出现和数为7则为负,状态置2
gamestatus = 2;
}
//当状态不为0时上面的循环结束,以下程序段输出游戏结果
if(gamestatus == 1)
cout<<"Player wins\n";
else
cout<<"Player loses\n";
fflush(stdin);
getchar();
}
int rolldice(void)
{ //投骰子,计算和数,输出和数
int die1,
die2,
worksum;
die1 = 1+rand()%6;
die2 = 1+rand()%6;
worksum = die1+die2;
cout<<"player rolled "<<die1<<'+'<<die2<<'='<<worksum<<endl;
return worksum;
}
结果:
Please enter an unsigned integer:9
player rolled 3+2=5
point is 5
player rolled 2+1=3
player rolled 5+6=11
player rolled 4+1=5
Player wins
系统函数int rand(void)的功能是产生一个伪随机数,调用rand(void)函数产生随机数需要一个"种子"值,如果设置的种子值相同,则产生相同的随机数,所以叫做伪随机数。如果调用rand()之前不设置"种子"值,则rand总是默认种子为1."种子"值的设置,是在调用rand()之前,通过调用void srand(unsigned int seed)为其设置的。
转载于:https://www.cnblogs.com/AI-Algorithms/p/3355768.html
C++ 函数部分(1)相关推荐
- 数据库中自定义排序规则,Mysql中自定义字段排序规则,Oracle中自定义字段排序规则,decode函数的用法,field函数的用法
数据库中自定义排序 场景:有一张banner表,表中有一个status字段,有0, 1, 2三个状态位,我想要 1,0,2的自定义排序(这里是重点),然后再进行之上对sequence字段进行二次排序( ...
- Mysql函数group_concat、find_in_set 多值分隔字符字段进行数据库字段值翻译
Mysql函数group_concat.find_in_set进行数据库字段值翻译 场景 配方表:记录包含的原料 sources表示原料,字段值之间用逗号分隔 原料表:对应原料id和原料名称 现需要查 ...
- C++ 笔记(34)— C++ exit 函数
当遇到 main 函数中的 return 语句时,C++ 程序将停止执行.但其他函数结束时,程序并不会停止.程序的控制将返回到函数调用之后的位置.然而,有时候会出现一些非常少见的情况,使得程序有必要在 ...
- C++ 笔记(30)— 友元函数与友元类
我们知道类的私有成员只能在类的成员函数内部访问,如果想在别处访问对象的私有成员,只能通过类提供的接口(成员函数)间接地进行.这固然能够带来数据隐藏的好处,利于将来程序的扩充,但也会增加程序书写的麻烦. ...
- 浅显易懂 Makefile 入门 (07)— 其它函数(foreach 、if、call、origin )
1. foreach 函数 foreach 函数定义如下: $(foreach <var>,<list>,<text>) 函数的功能是:把参数 <list&g ...
- 浅显易懂 Makefile 入门 (06)— 文件名操作函数(dir、notdir、suffix、basename、addsuffix、addperfix、join、wildcard)
编写 Makefile 的时候,很多情况下需要对文件名进行操作.例如获取文件的路径,去除文件的路径,取出文件前缀或后缀等等. 注意:下面的每个函数的参数字符串都会被当作或是一个系列的文件名来看待. 1 ...
- Go 学习笔记(65)— Go 中函数参数是传值还是传引用
Go 语言中,函数参数传递采用是值传递的方式.所谓"值传递",就是将实际参数在内存中的表示逐位拷贝到形式参数中.对于像整型.数组.结构体这类类型,它们的内存表示就是它们自身的数据内 ...
- Go 学习笔记(61)— Go 高阶函数、函数作为一等公民(函数作为输入参数、返回值、变量)的写法
函数在 Go 语言中属于"一等公民(First-Class Citizen)"拥有"一等公民"待遇的语法元素可以如下使用 可以存储在变量中: 可以作为参数传递给 ...
- C++ 笔记(26)— 主函数 main(int argc, char *argv[]) 参数说明
带形参的 main 函数,如 int main( int argc, char* argv[], char **env ) 是 UNIX .Linux 以及 Mac OS 操作系统中 C/C++ 的 ...
- OpenCV 笔记(09)— 常用的数据结构和函数(Vec、Point、Scalar、Size、Rect、cvtColor)
1. Vec 对象类型 Vec 是一个主要用于数值向量的模板类.我们可以定义向量的类型和组件的数量: Vec<double, 19> myVector 我们还可以使用任何的预定义类型: t ...
最新文章
- 一次因NAS存储故障引起的Linux系统恢复案例
- js基础--数据类型检测的相关知识
- java mp3播放器 无界面
- tensorflow就该这么学--3
- DeepLearning:环境配置(cuda+cudnn)
- nyoj 998(欧拉定理的运用)
- jzoj3463-军训【双重嵌套二分,随机数据水法】
- IntelliJ IDEA查看方法在哪里被调用(Usage Search/Call Hierarchy)
- 云企业网CEN-TR打造企业级私有网络
- ❤️520要来啦,快去给心仪的她写表白代码趴!(python)❤️
- 训练日志 2019.1.26
- python卸载旧版本后依旧残余的问题
- img src SVG使用CSS更改样式
- 最近做一个新闻类项目,用到调用新浪微博接口,经过研究测试整理步骤如下:先根据此内容获取App Key和Secret Key
- 解决xftp6 要继续使用此程序您必须应用最新的更新或使用新版本
- ArcGIS模拟3D洪水
- TCP/IP协议头部结构与解析
- 【037】PhotoMosh–艺术故障图片在线生成器
- 需要系数 计算机房,计算电流及需要系数表.xls
- 基于TF-IDF的简单搜索引擎的实现