if(*i<*j)
temp=*i,*i=*j,*j=temp;
}
4.【程序功能】
生成一个n阶螺旋方阵,将其存放到一个二维数组中并输出。
【测试数据与运行结果】
当n为5时,输出如下螺旋方阵:
1)编写函数voidrot(intmat[N][N],intn)生成一个n阶螺旋方阵,并存放到一个二维数组mat中;
2)编写主函数,由主函数调用rot函数完成上述功能,并按行输出结果。
#include
#include
#defineN7
voidrot(intmat[N][N],intn);
voidmain(){
inta[N][N]={0},k=1;
rot(a,N);
int*p=a[0];
intn=1;
for(;p<=&a[N-1][N-1];p++){
cout<if(k++%N==0)cout<}
}
voidrot(intmat[N][N],intn){
inti,j,num=1,x=-N,y=-1,z;
int*p1=mat[0];
while(n>0){
for(i=1;i<=4&&n>0;i++){
if(i%2==1){x=-x;z=x;}//(上下移动)向下-指针每次移动N位向上-指针每次移动-N位向左指针每次移动-1位
else{n--;y=-y;z=y;}//(左右移动)向右-指针每次移动+1位,向左-指针每次移动-1位
for(j=0;j*p1=num++;
p1-=z;
if(i%2==1){p1-=y;}//调整起点位置
else{p1-=x;}
}
}
}
第五周上机题目
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),找出所有满足以下特性的六位整数:
它是一个完全平方数(完全平方数是指该数是某个整数的平方);该数同时也是回文数(回文数是指该数等于它的反序数)。
例如,是836的平方并且是回文数,因此是满足所给条件的六位整数。
将所有满足上述条件的六位整数存入x指向的数组中,函数返回x指向的数组中整数的个数。
2)编写main函数,声明result数组,调用fun函数将所有满足条件的六位整数存入result数组中,将result数组中的数据