if(*i<*j)
temp=*i,*i=*j,*j=temp;
}
1.编写一个求积分的函数,该函数的原型如下:
floatIntegral(inta,intb,float(*fun)(float));
该函数返回值为积分结果,形参a,b分别为积分上下限,fun是被积函数。
要求:
1)积分算法:
将积分区域划分为若干个小区间,求出所有小区间中被积函数下的面积之和即为函数在积分区域内的积分值;小区间面积可用梯形近似;
2)用积分函数分别求解y=x2和y=2x+1两个函数在[0,1]区域内的积分值。
*/
#include
floatf1(floatx){
returnx*x;
}
floatf2(floatx){
return(2*x+1);
}
floatIntegral(inta,intb,float(*fun)(float));
voidmain(){
cout<<"第一个积分值:
"<cout<<"第二个积分值:
"<}
floatIntegral(inta,intb,float(*fun)(float)){
floath,y;
inti;
y=(fun(a)+fun(b))/2;
h=(b-a)/1000.0;
for(i=1;i<1000;i++)y+=fun(h*i);
return(y*h);
}
2.编程题(20分)
【编程要求】
1)编写函数intfun(long*x),找出所有满足以下特性的六位整数:
它是一个完全平方数(完全平方数是指该数是某个整数的平方);该数同时也是回文数(回文数是指该数等于它的反序数)。
例如,698896是836的平方并且698896是回文数,因此698896是满足所给条件的六位整数。
将所有满足上述条件的六位整数存入x指向的数组中,函数返回x指向的数组中整数的个数。
2)编写main函数,声明result数组,调用fun函数将所有满足条件的六位整数存入result数组中,将result数组中的数据输出到屏幕。
【测试数据与运行结果】
运行结果:
698896
#include
#include
intfun(long*x);
voidmain(){
longresort[10];
intn=fun(resort);
cout<<"六位整数中完全平方数有:
"<for(inti=0;icout<}
intfun(long*x){
longn,n1,n2,n3=0;
long*px=x;
for(n2=n=100000;n<999999;n++,n2=n,n3=0){
n1=sqrt(n);
if(n1*n1==n){
while(n2>0){
n3=n3*10+n2%10;
n2/=10;
}
}
if(n3==n)*px++=n;
}
returnpx-x;
}
3.改错题
【程序功能】
对于s数组中保存的五个字符串,删除其中不符合下列组成规则的字符串,输出s数组中剩余的字符串。
字符串组成规则:
由字母、数字、下划线组成,首字符非数字。
【测试数据与运行结果】
s数组中五个字符串:
a%1,_a12,aaa,$ss,1sss
输出:
_a12,aaa
【含有错误的源程序】
#include
#include
#defineM20
#defineN10
intisident(chars[][N],intn){
inti,j,k,flag;
for(j=0;jflag=0;
if(s[j][0]!
='_'||-(s[j][0])==0)
flag=1;
else
for(i=1;s[j][i]!
='\0';i++)
if(s[j][i]!
='_'&&!
isalpha(s[j][i])&&!
isdigit(s[j][i]))
flag=1;
if(flag==1){
for(k=0;kstrcpy(s[k],s[k+1]);
n--;
j--;
}
}
returnn;
}
voidmain(){
chars[M][]={"a%1","_a12","aaa","$ss","1sss"};
inti,n=5;
n=isident(s,n);
cout<<"ThecorrectCidentifiersis:
\n";
for(i=0;icout<
}
1)根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。
2)改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预处理命令,但不能增加其它语句,也不能删去整条语句。
#include
#include
#include
#defineM20
#defineN10
intisident(chars[][N],intn){
inti,j,k,flag;
for(j=0;jflag=0;
if(s[j][0]!
='_'&&!
isalpha(s[j][0]))//if(s[j][0]!
='_'||-(s[j][0])==0)
flag=1;
else
for(i=1;s[j][i]!
='\0';i++)
if(s[j][i]!
='_'&&!
isalpha(s[j][i])&&!
isdigit(s[j][i]))//#include
flag=1;
if(flag==1){
for(k=j;kstrcpy(s[k],s[k+1]);
n--;
j--;
}
}
returnn;
}
voidmain(){
chars[M][N]={"a%1","_a12","aaa","$ss","1sss"};//s[M][N]
inti,n=5;
n=isident(s,n);
cout<<"ThecorrectCidentifiersis:
\n";
for(i=0;icout<
}
第六周上机题目
一、编程题
1.编写函数intprime_m(intn,intx[],longy[]),在2~n范围内查找同时符合以下条件的整数m:
2m-1是素数、2m-1的反序数是奇数、2m-1的十进制表示中包含数字1。
将2~n范围内符合上述条件的所有整数m依次保存到x指向的数组中,将与m对应的整数2m-1依次保存到y指向的数组中。
函数返回x数组中保存的整数个数。
2.编写main函数,接收键盘输入的n值,调用prime_m函数找到2~n范围内所有符合给定条件的整数m及整数2m-1并将它们分别保存在两个一维数组中.
3.【测试数据与运行结果】
测试数据:
n=20
输出结果:
531
7127
17131071
#include
#include
intprime_m(intn,intx[],longy[]);
voidmain(){
intn1,n,x[10],*px=x;
longy[10],*py=y;
cout<<"测试数据:
n=";
cin>>n;
n1=prime_m(n,x,y);
cout<<"输出结果:
\n";
while(n1-->0)cout<<*px++<<'\t'<<*py++<<'\n';
}
intprime_m(intn,intx[],longy[])
{
intm,p=0,n1,*px=x;
longk=2,*py=y;
for(m=2;mk*=2;
for(inti=2;i<=sqrt(k-1);i++){//判断k是不是素数
if((k-1)%i==0)break;}
if(in1=k-1;//2.判断k的反序数是不是奇数
while(n1>10)n1/=10;
if(n1%2==0)continue;
n1=k-1;//判断k中有无数字1
while((n1%10)!
=1&&n1>10)n1/=10;
if(n1%10!
=1)continue;
*px++=m,*py++=k-1;
}
returnpx-x;
}
二、编程题
接收从键盘输入的若干个字符串,为每一个字符串动态申请一块存储区,将字符串复制到该