全国大学生信息技术应用水平大赛C语言复赛试题及答案1.docx

上传人:b****5 文档编号:28577487 上传时间:2023-07-19 格式:DOCX 页数:25 大小:24.20KB
下载 相关 举报
全国大学生信息技术应用水平大赛C语言复赛试题及答案1.docx_第1页
第1页 / 共25页
全国大学生信息技术应用水平大赛C语言复赛试题及答案1.docx_第2页
第2页 / 共25页
全国大学生信息技术应用水平大赛C语言复赛试题及答案1.docx_第3页
第3页 / 共25页
全国大学生信息技术应用水平大赛C语言复赛试题及答案1.docx_第4页
第4页 / 共25页
全国大学生信息技术应用水平大赛C语言复赛试题及答案1.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

全国大学生信息技术应用水平大赛C语言复赛试题及答案1.docx

《全国大学生信息技术应用水平大赛C语言复赛试题及答案1.docx》由会员分享,可在线阅读,更多相关《全国大学生信息技术应用水平大赛C语言复赛试题及答案1.docx(25页珍藏版)》请在冰豆网上搜索。

全国大学生信息技术应用水平大赛C语言复赛试题及答案1.docx

全国大学生信息技术应用水平大赛C语言复赛试题及答案1

第六届全国信息技术应用水平大赛复赛试题

请仔细阅读并严格遵守以下要求:

请创建以“准考证号_用户名”命名的文件夹(形式如:

433034683_xxxx),将考试结果严格按试题上的要求进行命名并直接保存在该文件夹下。

注意:

文件夹的保存路径请听从监考老师的安排。

请不要在该文件夹下创建任何子文件夹,所有考试结果直接保存即可。

答卷完毕后,请将该文件夹用Winrar压缩工具打包,再通过《复赛考试结果上传系统》将压缩包上传到指定服务器,并在原机器上保留备份。

注意:

压缩打包时,请务必选中文件夹(如前面创建的“433034683_xxxx”文件夹)进行压缩,而不是选中文件夹下的考试结果进行压缩。

请务必按照试卷要求提交指定的文件,不得包含非题目要求的过程文件和临时文件,不得包含本试题文件和试题素材。

注意:

凡违反上述规定的考生,其成绩一律按零分处理。

题目命名要求:

请将编写好的源程序以题号命名,例如第1题的源程序保存为“1.C”。

重要提示:

由于时间有限,请考生首先保证编写的程序在Wintc环境下可以编译通过并执行,在此基础上完成考题要求的全部功能,以免因编译不通过影响考生的考试。

--------------------------------------------------------------------------------------------

1.编程解决如下问题(50分)。

有一个数学等式:

AB*CD=BA*DC,式中的一个字母代表一位数字,试找出所有符合上述要求的乘积式并打印输出。

2.编程解决如下问题(50分)。

请在整数n=742683613984中删除8个数字,使得余下的数字按原次序组成的新数最小。

要求如下:

(1)整数n和删除数字的个数“8”在源程序中完成赋值,程序直接输出运行结果;

(2)程序结果输出先后被删除的数字(之间以逗号分隔)和删除后所得的最小数。

(提示:

整数n可以以字符数组的方式定义、赋值和处理)

#include"stdio.h"

#defineN12

voidmain()

{

inti,n1,n2,n3,n4,min1,min2,min3,min4,a[12]={7,4,2,6,8,3,6,1,3,9,8,4};

min1=a[0];

n1=0;

for(i=0;i

if(min1>a[i+1]){

min1=a[i+1];

n1=i+1;}}

min2=a[n1+1];

n2=n1+1;

for(i=n1+1;i

if(min2>a[i+1]){

min2=a[i+1];

n2=i+1;}}

min3=a[n2+1];

n3=n2+1;

for(i=n2+1;i

if(min3>a[i+1]){

min3=a[i+1];

n3=i+1;}}

min4=a[n3+1];

n4=n3+1;

for(i=n3+1;i

if(min4>a[i+1]){

min4=a[i+1];

n4=i+1;}}

for(i=0;i

if(i!

=n1&&i!

=n2&&i!

=n3&&i!

=n4)

printf("%d",a[i]);}

printf("\n");

printf("%d%d%d%d",min1,min2,min3,min4);

getch();

}

3.附加题:

编程解决如下问题(50分)。

(1)已知平面上三个点:

(7,1)、(4,6)、(5,8),判断这三点组成的三角形是何种三角形(锐角,直角,钝角)(10分);

#include"stdio.h"

#include"math.h"

voidmain()

{

intx[3]={7,4,5},y[3]={1,6,8},i,k;

doubleA=0,q=0,s[3],max,w=1,cos;

s[0]=sqrt((x[0]-x[1])*(x[0]-x[1])+(y[0]-y[1])*(y[0]-y[1]));

s[1]=sqrt((x[1]-x[2])*(x[1]-x[2])+(y[1]-y[2])*(y[1]-y[2]));

s[2]=sqrt((x[0]-x[2])*(x[0]-x[2])+(y[0]-y[2])*(y[0]-y[2]));

if(s[0]<=s[1]){

max=s[1];

k=1;}

else{

max=s[0];

k=0;}

if(max<=s[2]){

max=s[2];

k=2;}

for(i=0;i<3;i++)

if(i!

=k){

A=A+s[i]*s[i];

q=q+s[i];

w=2*w*s[i];}

cos=(A-max*max)/w;

if(q<=max){

printf("错误!

");getch();}

if(cos==0){

printf("直角!

");getch();}

else

if(cos>0){

printf("锐角!

");getch();}

else{

printf("钝角!

");getch();}

}

(2)对

(1)问中的三角形,给出它的外接圆半径(20分);

#include

#include

voidmain()

{

inta[3][2]={{7,1},{4,6},{5,8}};

floatl[3],r,m,n;

l[0]=sqrt(pow((a[0][0]-a[1][0]),2)+pow((a[0][1]-a[1][1]),2));

l[1]=sqrt(pow((a[1][0]-a[2][0]),2)+pow((a[1][1]-a[2][1]),2));

l[2]=sqrt(pow((a[0][0]-a[2][0]),2)+pow((a[0][1]-a[2][1]),2));

m=pow((pow(l[0],2)-pow(l[1],2)-pow(l[2],2))/(2*l[1]*l[2]),2);

n=sqrt(1-m);

r=l[0]/(2*n);

printf("%f\n",r);

getch();

}

(3)已知平面上6个点的坐标为:

(7,1)、(4,6)、(5,8)、(6,2)、(3,9)、(2,7),试求覆盖这6个点的覆盖圆最小半径(20分)。

(要求:

点坐标数据在程序初始化中赋值完成,程序运行后直接输出结果,不进行数据输入;点坐标数据和题目要求完全一致,否则导致的结果不正确视为程序编写错误。

第六届全国信息技术应用水平大赛复赛试题C语言程序设计(B卷)

1.编程解决如下问题(50分)。

有一个数学等式:

ABCD*E=DCBA,式中的一个字母代表一位数字,试找出所有符合上述要求的乘积式并打印输出。

2.编程解决如下问题(50分)。

请在整数n=92081346718538中删除10个数字,使得余下的数字按原次序组成的新数最大。

要求如下:

(1)整数n和删除数字的个数“10”在源程序中完成赋值,程序直接输出运行结果;

(2)程序结果输出先后被删除的数字(之间以逗号分隔)和删除后所得的最大数。

#include"stdio.h"

#defineN14

voidmain()

{

inti,n1,n2,n3,n4,max1,max2,max3,max4,a[14]={9,2,0,8,1,3,4,6,7,1,8,5,3,8};

max1=a[0];

n1=0;

for(i=0;i

if(max1

max1=a[i+1];

n1=i+1;}}

max2=a[n1+1];

n2=n1+1;

for(i=n1+1;i

if(max2

max2=a[i+1];

n2=i+1;}}

max3=a[n2+1];

n3=n2+1;

for(i=n2+1;i

if(max3

max3=a[i+1];

n3=i+1;}}

max4=a[n3+1];

n4=n3+1;

for(i=n3+1;i

if(max4

max4=a[i+1];

n4=i+1;}}

for(i=0;i

if(i!

=n1&&i!

=n2&&i!

=n3&&i!

=n4)

printf("%d",a[i]);}

printf("\n");

printf("%d%d%d%d",max1,max2,max3,max4);

getch();

}

 

(提示:

整数n可以以字符数组的方式定义、赋值和处理)

3.附加题:

编程解决如下问题(50分)。

在小于10的素数中有3、5、7组成的等差数列,在小于30的素数中有11、17、23、29组成的等差数列。

试找出区间[100,1000]内的素数构成的最大等差数列(即等差数列包含的素数个数最多)并打印输出。

第六届全国信息技术应用水平大赛决赛试题C语言程序设计

1.求某正整数插入乘号后乘积的最大值。

(50分)

(1)描述:

编程实现在一个9位数的正整数n中插入4个乘号,使分得的5个整数的乘积最大;

(2)输入:

正整数n;

(3)输出:

被分得的5个整数、得到的最大乘积值。

例如:

Pleaseinputn:

734019862(回车)

屏幕输出:

73*401*9*8*62=130674672

#include"stdio.h"

#definen9

voidmain()

{

inti,k,x,j,s1,s2,s3,s4,x1,x2,x3,x4;

intm1[3],m2[3],m3[3],m4[3],a[n];

longn=734019862,k=100000000;

for(i=0;i<9;i++){

a[i]=n/k;

n=n-k*a[i];

k=k/10;}

if(a[0]>a[4]&&a[5]!

=0){

for(i=0,x=0;i<=4;i++,x++)

m1[x]=a[i];

for(i=5,j=0;i<9;i++,j++)

m3[j]=a[i];}

else{

for(i=0,x=0;i<=3;i++,x++)

m1[x]=a[i];

for(i=4,j=0;i<9;i++,j++)

m3[j]=a[i];}

if(x!

=4)

if(m1[0]>m1[x/2]&&m1[x/2]!

=0)

for(i=0,x1=0;i<=x/2;i++,x1++)

m1[x1]=m1[i];

for(i=x/2+1,x2=0;i<5;i++,x2++)

m2[x2]=a[i];}

else{

for(i=x/2-1,x1=0;i<=3;i++,x1++)

m1[x1]=a[i];

for(i=x/2,x2=0;i<=4;i++,x2++)

m2[x2]=a[i];}

 

if(m3[0]>m3[j/2]&&m3[j/2+1]!

=0)

for(i=0,x3=0;i

m3[x3]=m3[i];

for(i=j/2,x4=0;i

m4[x4]=a[i];}

else{

for(i=j/2-1,x3=0;i<=j/2;i++,x3++)

m3[x3]=a[i];

for(i=j/2,x4=0;i<=4;i++,x4++)

m4[x4]=a[i];}

for(i=0;i<=x1;i++)

s1=s1*10+m1[i];

for(i=0;i<=x2;i++)

s2=s2*10+m2[i];

for(i=0;i<=x3;i++)

s3=s3*10+m3[i];

for(i=0;i<=x4;i++)

s4=s4*10+m4[i];

printf("%d*%d*%d*%d*%d%=ld%",s1,s2,s3,s4,s1*s2*s3*s4);

}

2.求西瓜均分问题。

(70分)

描述:

地面上有12个西瓜,它们的重量(单位为“两”,为计算方便已全部转化为整数,如98即为9斤8两)如下:

98,93,57,64,50,82,18,34,69,56,16,61

(1)设计程序:

实现对以上12个瓜“二堆均分”(每堆6个,两堆重量相等),要求打印输出均分的各种可能方案;

#include"stdio.h"

voidmain()

{

inti,j,k,l,m,n,a[12]={98,93,57,64,50,82,18,34,69,56,16,61};

longs;

for(i=0;i<12;i++)

for(j=i+1;j<12;j++)

for(k=j+1;k<12;k++)

for(l=k+1;l<12;l++)

for(m=l+1;m<12;m++)

for(n=m+1;n<12;n++)

{

s=a[i]+a[j]+a[k]+a[l]+a[m]+a[n];

if(s==349)

printf("%d%d%d%d%d%d\n",a[i],a[j],a[k],a[l],a[m],a[n]);

}

}

(a)输入:

数据输入由程序完成,执行程序后不需要任何数据输入;

(b)输出:

程序执行后输出以下格式,X分别代表一个西瓜重量的数字,如下:

No1:

XXXXXX,XXXXXX

No2:

XXXXXX,XXXXXX

……

注:

均分的两堆如果只有摆放顺序不一样,算一种输出结果。

(30分)

(2)设计程序,实现对以上12个西瓜,拟实现“三堆均分”(每堆4个,三堆重量相等)。

考虑到上述西瓜总重量不能为3所整除,这里另有几个西瓜,重量分别为:

70,71,72,73,74,75可供挑选,从12个西瓜中替换掉其中一个,是否可以实现“三堆均分”?

如果可以,设计程序实现,要求打印输出均分的各种可能方案;

(a)输入:

数据输入由程序完成,执行程序后不需要任何数据输入;

(b)输出:

输出结果为以下格式,X分别代表一个西瓜重量的数字,A、B、C、D、E分别代表替换原来西瓜的新重量数字70、71、72、73、74、75,如下:

No1(AreplacesX):

XXXX,XXXX,XXXX

No2(BreplacesX):

XXXX,XXXX,XXXX

……注:

均分的三堆如果只有摆放顺序不一样,算一种输出结果。

(40分)

第四届全国ITAT教育工程就业技能大赛复赛试题C语言程序设计(A卷)

1、编写一个程序,让它有以下功能:

从键盘上输入一个五位数,对此整数中的五个数值进行从大到小排序,形成一个新的五位数,输出这个整数。

(15分)

#include"stdio.h"

voidmain()

{

inti,j,a[5],b[5],y=0;

longx,k=10000;

printf("请输入一个五位数:

");

scanf("%ld",&x);

for(i=0;i<5;i++){

a[i]=x/k;

x=x-a[i]*k;

if(x>10)

k=k/10;

else

a[++i]=x%10;

}

for(j=9;j>=0;j--){

for(i=0;i<5;i++)

if(j==a[i])

{

b[y++]=j;

}}

for(i=0;i<5;i++){

printf("%d",b[i]);}

getch();

}

2、输入年、月、日,输出该日期是该年的第几天。

(25分)

#include"stdio.h"

voidmain()

{

inti,tian,x,y,z,yue=0,a[13];

a[0]=0;

a[1]=a[3]=a[5]=a[7]=a[8]=a[10]=a[12]=31;

a[4]=a[6]=a[9]=a[11]=30;

printf("请输入年,月,日:

");

scanf("%d,%d,%d",&x,&y,&z);

if(x%400==0||x%4==0&&x%100!

=0)

a[2]=29;

else

a[2]=28;

for(i=0;i

yue=yue+a[i];

tian=yue+z;

printf("%d年%d月%d日是该年的第%d天!

",x,y,z,tian);

getch();

}

3、利用数组实现数据的存储。

将学生的学号和成绩存储在数组中,利用循环计算出数组中存储学生的平均成绩,找出高于平均分的学生信息并输出。

(20分)

4、输入五个国家的名字,按字母顺序(即按ASCII码从小到大的顺序)排列输出。

(20分)

5、用指针实现:

任意输入20个数,将它们按照从大到小的顺序输出。

(20分)

附加题

6、编写一个简单的通讯录管理系统。

通讯录包括:

姓名、通讯地址、邮编、联系电话,现编写一个通讯录管理系统,可以对通讯录进行输入、显示、查找,通讯录保存到一个文件中。

(50分)

(提示:

可能用到以下库函数:

malloc(),功能:

分配size字节的存储区,

用法:

(类型*)malloc(size*sizeof(你要定义的类型));包含于库中

feof(),功能:

检测文件是否结束

用法:

intfeof(fp)

FILE*fp;包含于库中。

第四届全国ITAT教育工程就业技能大赛复赛试题C语言程序设计(B卷)

1、编程完成数据加密。

数据是五位的整数,加密规则为:

每位数字都加上6,然后用和除以8的余数代替该数字,再将第一位和第五位交换,第二位和第四位交换。

(15分)

#include"stdio.h"

voidmain()

{

inti,t,a[5];

longn,k=10000;

printf("请输入一个五位数:

");

scanf("%ld",&n);

for(i=0;i<5;i++)

{

a[i]=n/k;

n=n-a[i]*k;

if(n>10)

k=k/10;

else

a[++i]=n%10;

}

for(i=0;i<5;i++)

printf("%d",a[i]);

printf("\n");

for(i=0;i<5;i++)

a[i]=(a[i]+6)%8;

t=a[0];

a[0]=a[4];

a[4]=t;

t=a[1];

a[1]=a[3];

a[3]=t;

for(i=0;i<5;i++)

printf("%d",a[i]);

getch();

}

 

2、请猜数字,该数字由系统随即产生。

要求:

用户最多有10次猜测的机会,如果在10次内猜对数字,则程序显示祝贺信息,如果连续10次都没有猜中数字,则游戏自动退出。

(25分)

(提示:

可能用到以下库函数:

randomize();用系统的时间作为随机种子;包含于stdlib.h库中

random(100):

随机产生0-99之间的一个随机数;包含于stdlib.h库中

toupper():

将字符c转换为大写英文字母,包含于ctype.h库中)

3、有一个3×4的矩阵,要求编写程序找出每一行中最大值并与第一列交换。

(20分)

#include"stdio.h"

voidmain()

{

inti,j,k,x,y,t,max,a[3][4]={39,25,52,44,31,43,15,23,66,44,22,11};

for(i=0;i<3;i++){

for(j=0;j<4;j++){

if(max<=a[i][j]){

max=a[i][j];

x=i;

y=j;}

}

a[x][y]=a[i][0];

t=a[i][0];

a[i][0]=max;

max=t;

for(k=0;k<4;k++)

printf("%4d",a[i][k]);

printf("\n");

}

}

4、输入五个字符串,要求按照字母顺序(即按ASCII码从小到大的顺序)输出这五个字符串。

(20分)

5、用指针实现:

把一个整数插入到由小到大排列的数列中,插入后仍然保持由小到大的顺序。

(20分)

附加题

6、编写一个简单的通讯录管理系统。

通讯录包括:

姓名、通讯地址、邮编、联系电话,现编写一个通讯录管理系统,可以对通讯录进行输入、显示、查找等,通讯录保存到一个文件中。

(50分)

(提示:

可能用到以下库函数:

malloc(),功能:

分配size字节的存储区,

用法:

(类型*)malloc(size*sizeof(你要定义的类型));包含于库中

feof(),功能:

检测文件是否结束

用法:

intfeof(fp)

FILE*fp;包含于库中。

第五届全国ITAT教育工程就业技能大赛复赛试题C语言程序设计(A卷)

1、编程解决如下数学问题:

有12升水,怎样利用一个8升和一个5升的容器将水分为两个6升?

要求以如下格式打印出分水步骤。

(20分)

a12b8c5

1200

***(“*”表示当前状态下每个容器的盛水量)

......

066

2、编程实现:

有二维数组a[3][3]={{5.4,3.2,8},{6,4,3.3},{7,3,1.3}},将数组a的每一行元素均除以该行上的主对角元素(第1行同除以a[0][0],第2行同除以a[1][1],...),按行输出新数组。

(20分)

#include"stdio.h"

voidmain()

{

inti,j;

floata[3][3]={{5.4,3.2,8},{6,4,3.3},{7,3,1.3}},b[3][3];

for(i=0;i<3;i++)

for(j=0;j<3;j++)

b[i][j]=a[i][j]/a[i][i];

for(i=0;i<3;i++)

{

for(j=0;j<3;j++)

{

printf("%10f",b[i][j]);}

printf("\n");}

}

3、编程:

设x取值为区间[1,20]的整数,求函数f(x)=x-sin(x)-co

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1