}
6、判断素数(质数)
数学定义:
“凡是只能被1和自身整除的大于1的整数,就称为质数,即素数。
”
【换句话,即“不能被‘2~自身-1’整除”】
例1.任意读入一个大于1的整数,判断其是否为素数。
【法一:
紧扣数学定义】
#include
usingnamespacestd;
voidmain()
{intx;
do
{cout<<"x>1:
\n";
cin>>x;
}while(x<=1);
intk;
for(k=2;k<=x-1;k++)//穷举的思维
if(x%k==0)break;
if(x==k)//判断难点
cout<else
cout<}
【用一个小技巧:
借助一个“逻辑型”变量:
“是素数时为true,否则为false”】
#include
usingnamespacestd;
voidmain()
{intx;
do
{cout<<"x>1:
\n";
cin>>x;
}while(x<=1);
intk;
boolflag;
flag=true;//首先假设x是素数!
for(k=2;k<=x-1;k++)//穷举的思维
if(x%k==0)
{flag=false;break;}
if(flag==true)
cout<else
cout<}
【用while改写】
#include
usingnamespacestd;
voidmain()
{intx,k;
cin>>x;
k=2;
while(x%k!
=0)k++;
if(k==x)
cout<else
cout<}
【变形一:
用sqrt函数,求平方根】
#include
#include
usingnamespacestd;
voidmain()
{intx,k;
cin>>x;
boolflag=true;
for(k=2;k<=sqrt(x);k++)
if(x%k==0){flag=false;break;}
if(flag==true)
cout<else
cout<}
7、插入、删除
三、数值计算经典算法:
1、辗转相除法求两正整数的最大公约数
例:
任意读入2个正整数,输出其最大公约数。
#include
usingnamespacestd;
voidmain()
{intx,y,r;
do
{cout<<"输入x>0、y>0:
\n";
cin>>x>>y;
}while(!
(x>0&&y>0));
r=x%y;
while(r!
=0)
{x=y;y=r;r=x%y;}
cout<}
【改写:
用do……while】
#include
usingnamespacestd;
voidmain()
{intx,y,r;
do
{cout<<"输入x>0、y>0:
\n";
cin>>x>>y;
}while(!
(x>0&&y>0));
do
{r=x%y;
x=y;
y=r;
}while(r!
=0);
cout<}
2.级数计算(展开式的求解)
例1、求1+1/2!
+1/3!
+…+1/n!
+…,直到某项的值小于10-6为止。
【法一:
直接法(略)】
【法二:
间接法(递推法)前项/项次=后项】
#include
usingnamespacestd;
voidmain()
{floats,t;
inti;//表示项次
s=0;t=1;i=1;
while(t>=1e-6)
{s=s+t;
i++;
t=t/i;
}
cout<
}
例2、读入0【法一:
直接法:
直接利用项次描述通项。
】
#include
#include
usingnamespacestd;
voidmain()
{floatx,s,t;
inti;//能用整数,不用实数
do
{cout<<"0cin>>x;
}while(x>=1||x<=0);
i=1;
s=0.0;
t=x;
while(t>=1e-6)
{s=s+t;
i++;
t=pow(x,i);
}
cout<
}
3、间接法求通项
例1、读入0【法二:
递推法(间接法)求通项:
利用前项求后项。
】
【分析:
本题中若前一项值为t,则后一项的值为t*x】
#include
usingnamespacestd;
voidmain()
{floatx,s;
do
{cout<<"0cin>>x;
}while(x>=1||x<=0);
floatt;//用t表示通项
s=0.0;t=x;
while(t>=1e-6)
{s=s+t;
t=t*x;}
cout<
}
例2、求斐比利斯数列的前20项。
1、1、2、3、5、8、13……(制定前两项,第三项开始总是前两项之和。
)
【分析:
本题只能有间接法(递推法),利用前2项求后1项。
】
#include
usingnamespacestd;
voidmain()
{intf1,f2,f3;
f1=f2=1;
cout<inti;
for(i=3;i<=20;i++)
{f3=f1+f2;
f1=f2;
f2=f3;
cout<}
}
例3、编程输出形如上图的等腰三角形(行数灵活读入)。
*
***
*****
*******
#include
usingnamespacestd;
voidmain()
{inth;
cout<<"读入行数>=1"<cin>>h;
inti=1,j;//用二重循环完成(循环的嵌套)
while(i<=h)//外循环控制行数
{for(j=1;j<=h-i;j++)//第一个循环输出每行的空格
cout<<'';
for(j=1;j<=2*i-1;j++)//第二个循环输出每行的星号
cout<<'*';
cout<i++;
}
}
4、矩阵转置
矩阵转置的算法要领是:
将一个m行n列矩阵(即m×n矩阵)的每一行转置成另一个n×m矩阵的相应列。
例、将以下2×3矩阵转置后输出。
即将123转置成14
45625
36
#include
#include
usingnamespacestd;
voidmain()
{inta[2][3],b[3][2],i,j,k=1;
for(i=0;i<2;i++)
for(j=0;j<3;j++)
a[i][j]=k++;
//将a转置到b中,穷举
for(i=0;i<2;i++)//以a为基准
for(j=0;j<3;j++)
b[j][i]=a[i][j];
for(i=0;i<3;i++)
{for(j=0;j<2;j++)
cout<cout<}
5、杨辉三角形
杨辉三角形的每一行是(x+y)n的展开式各项的系数。
例如第一行是(x+y)0,其系数为1;第二行是(x+y)1,其系数为1,1;第三行是(x+y)2,其展开式为x2+2xy+y2,系数分别为1,2,1;……直观形式如下:
1
11
121
1331
14641
15101051
……
分析以上形式,可以发现其规律:
是n阶方阵的下三角,第一列和主对角线均为1,其余各元素是它的上一行、同一列元素与上一行、前一列元素之和。
例、编程输出杨辉三角形的前10行。
#include
#include
usingnamespacestd;
voidmain()
{constintN=10;
inta[N][N],i,j;
//给主对角线、第一列元素赋值
for(i=0;ia[i][i]=a[i][0]=1;
//以下双循环完成其他元素赋值
for(i=2;i<=N-1;i++)
for(j=1;j<=i-1;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=0;i{for(j=0;j<=i;j++)
附件
(二):
cout<9、如果你亲戚朋友送你一件DIY手工艺制品你是否会喜欢?
cout<动漫书籍□化妆品□其他□}
}
十几年的学校教育让我们大学生掌握了足够的科学文化知识,深韵的文化底子为我们创业奠定了一定的基础。
特别是在大学期间,我们学到的不单单是书本知识,假期的打工经验也帮了大忙。
6、求最值(最大、最小)
(二)上海的人口环境对饰品消费的影响例、任意读入10个整数,输出其中的最大值。
#include
(一)创业机会分析usingnamespacestd;
(一)上海的经济环境对饰品消费的影响voidmain()
{constintN=10;
朋友推荐□宣传广告□逛街时发现的□上网□inta[N],i;
intmax;
for(i=0;i>a[i];
max=a[0];//假设第一个获最后一个最大
for(i=1;iif(a[i]>max)max=a[i];
图1-1大学生月生活费分布cout<<"MAX="<培养动手能力□学一门手艺□打发时间□兴趣爱好□}