江苏省计算机二级操作题汇编
测试数据
17 24 18 8 15
23 5 7 14 16
4 16 13 20 22
10 12 19 21 3
11 18 25 2 9
屏幕输出
17 24 18 8 15
23 5 7 14 16
4 16 13 20 22
10 12 19 21 3
11 18 25 2 9
yes
//我写的
#include<stdio.h>
#define N 5
int judge(int a[N][N])
{
int i,sum1=0,sum2=0,sum3=0,sum4=0,sum5=0,sum6=0,sum7=0;
for(i=0;i<N;i++)
{
sum1+=a[0][i];
sum2+=a[1][i];
sum3+=a[2][i];
sum4+=a[3][i];
sum5+=a[4][i];
sum6+=a[i][i];
sum7+=a[i][4-i];
}
/* printf("%d\n%d\n%d\n%d\n%d\n%d\n%d\n",sum1,sum2,sum3,sum4,sum5,sum6,sum7);*/
if(sum1==sum2&&sum2==sum3&&sum3==sum4&&sum4==sum5&&sum5==sum6&&sum6==sum7)
{
return 1;
}else{
return 0;
}
}
int main()
{
int a[N][N]={{17,24,1,8,15},{23,5,7,14,16},{4,6,13,20,22},{10,12,19,21,3},{11,18,25,2,9}};
int i,j;
FILE *fp;
fp=fopen("myf2.out","w");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
printf("%d\t",a[i][j]);
fprintf(fp,"%d\t",a[i][j]);
if(j==N-1)
{
printf("\n");
fprintf(fp,"\n");
}
}
}
if(judge(a))
{
printf("yes\n");
fprintf(fp,"yes\n");
}else{
printf("no\n");
fprintf(fp,"no\n");
}
fprintf(fp,"\nMy exam number is B3010124");
fclose(fp);
return 0;
}
//参照答案改进的,比较智能了
#include<stdio.h>
#define N 5
int judge(int a[N][N])
{
int i,j,*p,b[N+N+2]={0};
for(i=0;i<N;i++)
for(j=0;j<N;j++)
b[i]+=a[i][j];
for(i=0;i<N;i++)
for(j=0;j<N;j++)
b[i+N]+=a[j][i];
for(i=0;i<N;i++)
b[N+N]+=a[i][i];
for(i=0;i<N;i++)
b[1+N+N]+=a[i][4-i];
for(i=0;i<N+N+2;i++)
printf("%d\n",b[i]);
/* printf("%d\n%d\n%d\n%d\n%d\n%d\n%d\n",sum1,sum2,sum3,sum4,sum5,sum6,sum7);*/
p=b;
while(p<(b+N+N+2))
{
if(*p==*(p+1))
{
p++;
}else{
break;
}
}
if(p==b+N+N+1)
{
return 1;
}else{
return 0;
}
}
int main()
{
int a[N][N]={{17,24,1,8,15},{23,5,7,14,16},{4,6,13,20,22},{10,12,19,21,3},{11,18,25,2,9}};
int i,j;
FILE *fp;
fp=fopen("myf2.out","w");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
printf("%d\t",a[i][j]);
fprintf(fp,"%d\t",a[i][j]);
if(j==N-1)
{
printf("\n");
fprintf(fp,"\n");
}
}
}
if(judge(a))
{
printf("yes\n");
fprintf(fp,"yes\n");
}else{
printf("no\n");
fprintf(fp,"no\n");
}
fprintf(fp,"\nMy exam number is B3010124");
fclose(fp);
return 0;
}
//编程题2
//编写函数int find(long a[][2])函数的功能是将三位整数中所有满足以上条件的数及其
//平方存入a指向的二维数组中,函数返回满足上述条件的三位数的个数
[运行结构]
屏幕输出:
i power
100 10000
250 62500
376 141376
500 250000
600 360000
625 390625
760 577600
#include<stdio.h>
int long find(long a[][2])
{
int j=0;
long i=0,m,n;
for(i=100;i<1000;i++)
{
n=m=i*i;
while(m>=i)
{
if(m%1000==i)//基本思想就是62500%1000=250,10000%1000=0,1000%1000=0,100%1000=100
{
break;
}
m/=10;
}
if(m>=i)
{
a[j][0]=i;
a[j][1]=n;
j++;
}
}
return j;
}
int main()
{
long a[10][2]={0};//这里不能定义a[][2],必须提供完整的行和列,不然会报错,虽然结果可以出来
int n,i;
FILE *fp;
fp=fopen("myf2.out","w");
printf("i\tpower\n");
fprintf(fp,"i\tpower\n");
n=find(a);
for(i=0;i<n;i++)
{
printf("%d\t%d\n",a[i][0],a[i][1]);
fprintf(fp,"%d\t%d\n",a[i][0],a[i][1]);
}
fprintf(fp,"My Exam number is B16030124\n");
fclose(fp);
return 0;
}
//自写
//编程题3
//编写函数int fun(int m,int n,int a[])
//函数的功能是求出,m到n内所有满足条件的数,
//该条件是,1.该数是素数;2.该数十进制表示的个位与十位数之和的个位数恰好是该数的百位数,如293
//将这些整数从大到小的顺序存放到a指向的数组中,函数返回a数组中整数的个数
//(2)编写main()函数,函数声明包含100个元数据的整型数组a,输入正整数m,n m<n
//以每行5个格式输出到屏幕及文件myf2.out中,最后将考生考号也保存到该文件
int judgeprime(int n)
{
int i;
for(i=2;i<n/2;i++)
{
if(n%i==0)
break;
}
if(i>=n/2)
{
return 1;
}
else
{
return 0;
}
}
int judge2(int n)//需要改进的是求位,比如求各位 int gw=n%10; int sw=n/10%10;
{
int a,b,c,d;
if(n>=100&&n<1000)
{
a=n/100;
b=(n-a*100)/10;
c=n-(a*100+b*10);
}else if(n>=1000&&n<10000)
{
d=n/1000;
a=(n-d*1000)/100;
b=(n-d*1000-a*100)/10;
c=n-(d*1000+a*100+b*10);
}
if((b+c)%10==a)
{
return 1;
}
else{
return 0;
}
}
int fun(int m,int n,int a[])
{
int i,j=0;
for(i=m;i<=n;i++)
{
if(judgeprime(i)&&judge2(i))
{
a[j++]=i;
}
}
return j;
}
int main()
{
int a[100],m,n,k,i;
FILE *fp;
fp=fopen("mf2.out","w");
do{
scanf("%d %d",&m,&n);
}while((m>n)||m<0||n<0);
k=fun(m,n,a);
for(i=k-1;i>=0;i--)
{
printf("%d\t",a[i]);
fprintf(fp,"%d\t",a[i]);
if(i%5==0)
{
printf("\n");
fprintf(fp,"\n");
}
}
fprintf(fp,"\nmy exam number is B1342423\n");
fclose(fp);
return 0;
}
//编程题4
struct stu
{
int num; /学号/
char name[20]; /姓名/
int count; /购书数量/
}
//(1)编写函数int sortcount(struct stu s[],int n)函数功能是将 s指向的数组前n个学生
//按购书数量从大到小排序,并统计n个学生的购书总数,函数返回统计结果
//(2)编写main函数.函数功能是声明一个 struct stu类型的数组s,并用测试数据初始化,调用函数
//[测试数据]
11,li,1
22,zhang,3
33,wang,1
44,zhou,2,
55,liang,4
屏幕输出:
55 liang 4
22 zhang 3
44 zhao 2
11 li 1
33 wang 1
sum=11
#include<stdio.h>
#define N 5
struct stu
{
int num;
char name[20];
int count;
};
int sortcount(struct stu s[],int n)
{
int i,j,sum=0;
struct stu temp;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(s[j].count<s[j+1].count)
{
temp=s[j];
s[j]=s[j+1];
s[j+1]=temp;
}
}
}
for(i=0;i<n;i++)
{
sum+=s[i].count;
}
return sum;
}
int main()
{
struct stu s[N]={{11,"li",1},{22,"zhang",3},{33,"wang",1},{44,"zhou",2,},{55,"liang",4}};
int totalcount,i;
FILE *fp;
fp=fopen("myf2.out","w");
printf("\n");
totalcount=sortcount(s,N);// 发现了一个有趣的现象,数据名不能跟函数名重名
for(i=0;i<N;i++)
{
printf("%d\t%s\t%d\n",s[i].num,s[i].name,s[i].count);
fprintf(fp,"%d\t%s\t%d\n",s[i].num,s[i].name,s[i].count);
}
printf("totalcount=%d\n",totalcount);
fprintf(fp,"totaltount=%d\n",totalcount);
fclose(fp);
return 0;
}
//编程题5//注意从横向和纵向找规律,不要太傻比
//生成一个举证,最外层为1,倒数第二层为2,以此类推,
//要求(1)定义一个符号常量N代表20
//(2)编写函数 void matrix(int (*a)[N],int n)函数功能是生成一个n阶方阵,并
//保存到a指向的二维数组中
//例如 n=5
//1 1 1 1 1
//1 2 2 2 1
//1 2 3 2 1
//1 2 2 2 1
//1 1 1 1 1
//(3)编写main函数,声明N行N列元素,输入n(1<n<=N)
#include<stdio.h>
#define N 20
void matrix(int (*a)[N],int n)
{
int i,j,k,m;
m=(n+1)/2;
for(i=0;i<m;i++)
{
for(j=i;j<n-i;j++)
a[i][j]=a[n-i-1][j]=i+1;
for(k=i;k<n-i;k++)
a[k][i]=a[k][n-i-1]=i+1;
}
}
void main()
{
int i,j;
int a[N][N]={0},n;
FILE *fp;
fp=fopen("myf2.out.","w");
scanf("%d",&n);
matrix(a,n);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%3d",a[i][j]);
fprintf(fp,"%3d",a[i][j]);
}
printf("\n");
fprintf(fp,"\n");
}
fprintf(fp,"My exam number is B16030124\n");
fclose(fp);
}
//编程题6
江苏省计算机二级操作题
#include<stdio.h>
int find(long a[][2])
{
int j=0;
long i,m,n;
for(i=100;i<1000;i++)
{
n=m=i*i;
while(m>=i)
{
if(m%1000==i)
break;
m/=10;
}
if(m>=i)
{
a[j][0]=i;
a[j++][1]=n;
}
}
return j;
}
void main()
{
int i,n;
long a[10][2];
FILE* fp;
fp=fopen("myf2.out","w");
n=find(a);
printf("i\tpower\n");
fprintf(fp,"i\tpower\n");
for(i=0;i<n;i++)
{
printf("%ld\t%ld\n",a[i][0],a[i][1]);
fprintf(fp,"%ld\t%ld\n",a[i][0],a[i][1]);
}
fprintf(fp,"My exam number is:准考证号");
fclose(fp);
}
//编程题7
/去掉一个最高分,去掉一个最低分,再去掉一个最高分,再去掉一个最低分
//取平均分
#include<stdio.h>
#define N 10
double getscore(double score[])
{
double *start=score,*end=score+N;
double max1,max2,min1,min2,aver=0;
max1=max2=min1=min2=*score;
for(score++;score<end;score++)
{
if(max1<*score)
{
if(max2<*score)
{
max2=max1;
max1=*score;
}else
{
max2=*score;
}
}
else if(min2>*score)
{
if(min1>*score)
{
min2=min1;
min1=*score;
}else
{
min2=*score;
}
}
}
for(score--;score>=start;score--)
aver+=*score;
return(aver-max1-max2-min1-min2)/(N-4);
}
int main()
{
int i;
double score[N]={9.34,9.19,9.33,8.43,8.89,7.84,8.23,8.99,9.80,9.33};
double lastscore;
FILE *fp;
fp=fopen("myf2.out","w");
for(i=0;i<N;i++)
{
printf("%4.2f\n",score[i]);
fprintf(fp,"4.2%f\n",score[i]);
}
printf("\n");
fprintf(fp,"\n");
lastscore=getscore(score);
printf("last score=%4.2f\n",lastscore);
fprintf(fp,"last score=%4.2f\n",lastscore);
fprintf(fp,"My exam number is B16030124");
fclose(fp);
return 0;
}
//[点评]对比参考答案之后,发现自己没有算每列元素之和,需要改进的是用数组存放和,循环比较,那样做太不智能了,