江苏省计算机二级C操作题汇编

江苏省计算机二级操作题汇编

测试数据
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;
}
//[点评]对比参考答案之后,发现自己没有算每列元素之和,需要改进的是用数组存放和,循环比较,那样做太不智能了,

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值