中国航信杯C语言程序设计 答案解析版Word格式文档下载.docx
《中国航信杯C语言程序设计 答案解析版Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《中国航信杯C语言程序设计 答案解析版Word格式文档下载.docx(115页珍藏版)》请在冰豆网上搜索。
(一)C语言的结构
1)程序的构成,main函数和其他函数
2)头文件、数据说明、函数的开始和结束标志
3)源程序的书写格式
4)C语言的风格
(二)数据类型及其运算
1)C的数据类型(基本类型、构造类型、指针类型、空类型)及其定义方法
2)C运算符的种类、运算优先级和结合性
3)不同类型数据间的转换与运算
4)C表达式类型(赋值表达式、算术表达式、关系表达式、逻辑表达式、条件表达式、逗号表达式)和求值规则
(三)基本语句
1)表达式语句,空语句,复合语句
2)数据的输入与输出,输入输出函数的调用
3)复合语句
4)goto语句和语句标号的使用
(四)选择结构程序设计
1)用if语句实现选择结构
2)用switch语句实现多分支选择结构
3)选择结构的嵌套
(五)循环结构程序设计
1)for循环结构
2)While和dowhi1e循环结构
3)continue语句和break语句
4)循环的嵌套
(六)数组的定义和引用
1)一维数组和多维数组的定义、初始化和引用
2)字符串与字符数组
(七)函数
1)库函数的正确调用
2)函数的定义方法
3)函数的类型和返回值
4)形式参数与实在参数,参数值的传递
5)函数的正确调用,嵌套调用,递归调用
6)局部变量和全局变量
7)变量的存储类别(自动,静态、寄存器、外部),变量的作用域和生存期
8)内部函数与外部函数
(八)编译预处理
1)宏定义:
不带参数的宏定义;
带参数的宏定义
2)“文件包含”处理
(九)指针
1)指针与指针变量的概念,指针与地址运算符
2)变量、数组、字符串、函数、结构体的指针以及指向变量、数组、字符串、函数、结构体的指针变量。
通过指针引用以上各类型数据
3)用指针作函数参数
4)返回指针值的指针函数
5)指针数组,指向指针的指针,main函数的命令行参数
(十)结构体(即“结构”)与共用体(即“联合”)
1)结构体和共用体类型数据的定义方法和引用方法
2)用指针和结构体构成链表,单向链表的建立、输出、删除与插入
(十一)位运算
1)位运算符的含义及使用
2)简单的位运算
(十二)文件操作
1)文件类型指针(FILE类型指针)
2)文件的打开与关闭(fopen,fclose)
3)文件的读写(fputc,fgetc,fputs,fgets,fread,fwrite,fprintf,fscanf函数)
4)文件的定位(rewind,fseek函数)
复赛部分
复赛为编程操作题,主要考察参赛者使用C语言进行综合程序设计及解决实际问题的能力。
要求参赛者除了能够熟练掌握预赛所考察的外,还应掌握下列内容:
1)熟悉WinTC等软件的集成环境,能够在该环境下进行程序设计、纠错及调试。
2)熟练掌握结构化程序设计的方法,具有良好的程序设计风格。
3)熟悉ANSIC常用库函数的使用方法。
4)掌握程序设计中常用的数据结构和算法。
5)熟练掌握C语言程序设计的基本技能,并能利用C语言解决实际问题。
决赛部分
决赛为编程操作题,在全面考察C语言应掌握的基本语法和基本编程技能的基础上,重点考察参赛者对问题的抽象、分解、转化能力和对C语言的理解和综合运用能力,考察参赛者在软件建模方面的基本能力和问题陈述能力。
附注
参赛者在比赛准备期间,可以参考由人民邮电出版社出版的《C语言程序设计:
现代方法(第2版)》,本次比赛的参赛,是以此书作为基础蓝本,同时对教材知识体系加以适当扩展进行考题设计的。
第一届全国信息技术应用水平大赛模拟题------C语言程序设计
注意:
在指定的保存路径下创建以准考证号和姓名共同命名的文件夹,并将试题答案存放在以题号命名的子文件夹中。
1、输入一个五位整数,将它反向输出。
例如输入12345,输出应为54321。
(15分)
#include"
stdio.h"
voidmain()
{
printf("
请输入一个五位整数:
"
);
intnum;
scanf("
%d"
&
num);
if(num<
10000)
{
printf("
%d不是一个五位数"
num);
}
else
inttemp;
intnumarr[5];
temp=num;
for(inti=0;
i<
5;
i++)//将用户输入的数字倒转存入数组
{
numarr[i]=temp%10;
temp/=10;
}
转换后的数字为:
for(i=0;
i++)
printf("
numarr[i]);
//输出转换结果
\n"
}
2、用两种循环结构分别编程计算1+2+3…+100的值。
运行结果为“1+2+…+100=5050”(15分)
//方法1,for循环
intsum=0;
for(inti=1;
=100;
sum+=i;
if(i!
=100)printf("
%d+"
i);
elseprintf("
%d=%d\n"
i,sum);
//方法2,while循环
sum=0;
i=1;
while(i<
=100)
i++;
3、从终端读入20个数据到数组中,统计其中正数的个数,并计算它们之和。
longsum=0;
//存放结果
intarr[20];
for(inti=0;
20;
请输入%d第个数:
i+1);
scanf("
arr[i]);
//将用户输入的数读入数组中
sum+=arr[i];
//计算结果
这20个数的和是:
%d\n"
sum);
//输出结果
4、利用指针实现将5个整数输入到数组a中,然后将a逆序复制到数组b中,并输出b中各单元的值。
(20分)
5、要将五张100元的大钞票,换成等值的50元,20元,10元,5元一张的小钞票,要求换成30张小钞票,每种面值的至少一张,编程输出所有可能的换法,程序应适当考虑减少重复次数。
(25分)
//500块钱,分成30张零钱
#include<
iostream>
usingnamespacestd;
intmain()
for(inta=1;
a<
10;
a++)
for(intb=1;
b<
25;
b++)
for(intc=1;
c<
28;
c++)
for(intd=1;
d<
d++)
{
if((a*50+b*20+c*10+d*5)==500&
&
(a+b+c+d==30))
cout<
<
50元"
张,20元"
张,10元"
张,5元"
张。
"
endl;
}
return0;
6、求n以内(不包括n)同时能被3和7整除的所有自然数之和的平方根s,并作为函数值返回,最后结果s输出到文件out.dat中。
例如若n为1000时,函数值应为:
s=153.909064。
(30分)
stdlib.h"
math.h"
intn;
doublesum=0;
FILE*fp;
请输入n:
n);
n;
if(i%3==0&
i%7==0)
sum+=i;
sum=sqrt(sum);
结果为:
%f\n"
fp=fopen("
out"
"
wb"
fwrite(&
sum,sizeof(double),1,fp);
fclose(fp);
第四届全国ITAT教育工程就业技能大赛
预赛试题------C语言
一、单选题(共60小题,每题1分,共60分)
1.执行下列程序中的输出语句后,x的值是______.(3.10)
main()
{intx;
printf(“%d\n”,(x=5*6,x*2,x+20));
A)30B)60C)50D)80
解析:
题中问的是x的值,并非输出结果。
答案:
A
2.下列程序的输出结果是_______.(3.8)
{intx=1,y=0,z;
z=(x<
=0)&
(y-->
=0);
printf(“%d%d%d%\n”,z,x,y);
A)0-1-1B)0-10C)010D)01-1
x<
=0为假,&
且运算,一个为假结果为假,产生逻辑判断短路,不会再判断y-->
=0
C
3.在C语言中,下列选项属于合法的长整型常数的是_______.(3.3)
A)0LB)1234567C)0.0234567D)3.14159e3
考察概念,长整型会在数值后加L或l
4.下列选项中属于不正确的赋值语句的是_____.(3.6)
A)t++;
B)n1=(n2=(n3=0));
C)k=i==j;
D)a=b,c=1;
5.若有定义:
inta,b;
charx,y;
并有以下输入数据:
1422XxYy(回车)
则能给a赋整数14,给b赋整数22,给x赋字符x,给y赋字符y的正确程序段是________.(4.2)
A)scanf(“%d%d”,&
a,&
b);
x=getchar();
y=getchar();
B)scanf(“%d%d%c%c”,&
a,&
b,&
x,&
y,&
y);
C)scanf(“%d%d%c%c%c%c”,&
D)scanf(“%d%d%c%c”,&
6.下列转义字符不正确的是_______.(3.5)
A)'
\\'
B)'
\'
C)'
\053'
D)'
\0'
7.下列选项可作为C语言赋值语句的是_______.(4.2)
A)x=3,y=5B)a=b=6C)i--;
D)y=int(x);
8.当c的值不为0时,下列选项中能正确将c的值赋给变量a、b的是_______.(5.2)
A)c=b=a;
B)(a=c)‖(b=c);
C)(a=c)&
(b=c);
D)a=c=b;
9.有以下程序:
{unsignedinta;
intb=-1;
a=b;
printf(“%u”,a);
该程序运行后的输出结果是_______.(4.5)
A)-1B)65535C)32767D)-32768
10.若x、b、m、n均为int型变量,执行下面语句后b的值为_______.(3.10)
m=20;
n=6;
x=(--m==n++)?
--m:
++n;
b=m++;
A)11B)6C)19D)18
11.有以下程序:
{inta=111,b=222;
printf(“%d\n”,a,b);
}
A)错误信息B)111C)222D)111,222
12.以下程序的输出结果是_______.(4.5)
{inta=2,c=5;
printf(“a=%%%d,b=%%%d\n”,a,c);
A)a=%2,b=%5B)a=2,b=5C)a=%%%d,b=%%%dD)a=%%d,b=%%d
13.对于浮点型变量f,能实现对f中的值在小数点后第三位进行四舍五入的表达式是_______.(3.8)
A)f=(f*100+0.5)/100.0B)f=(f*100+0.5)/100
C)f=(int)(f*100+0.5)/100.0D)f=(f/100+0.5)*100
14.设a=5,b=6,c=7,d=8,m=2,n=2,执行(m=a>
b)&
(n=c>
d)后m,n的值为______.(5.2)
A)2,2B)2,0C)0,2D)0,0
15.语句printf(“%d\n”,strlen(“asd\n\x12\1\\”));
的输出结果是______.(7.3)
A)9B)11C)7D)8
16.有以下程序:
main()
{
inty=1234;
printf(“y=%6d”,y);
printf(“y=%+06d\n”,y);
该程序的运行结果是______.(4.5)
A)y=1234y=001234B)y=1234y=+01234
C)y=1234y=+01234D)y=1234y=1234
17.语句:
printf(“%d”,!
9);
的输出结果是______.(5.2)
A)0B)1C)有语法错误,不能执行D)-9
18.已有定义语句:
intx=6,y=4,z=5;
执行以下语句后,能正确表示x、y、z值的选项是______.(5.3)
if(x<
y)z=x;
x=y;
y=z;
A)x=4,y=5,z=6B)x=4,y=6,z=6
C)x=4,y=5,z=5D)x=5,y=6,z=4
19.下列选项中属于正确的switch语句的是______.(5.4)
A)switch(1.0)B)swicth
(1)
{case1.0:
printf(“A\n”);
{case1:
case2.0:
printf(“B\n”);
}case2:
C)switch((int)(1.0+2.5))D)switch(“a”);
{case1:
{case“a”:
case1+2:
}case“b”:
20.若k为int型变量,以下语句段执行后的输出结果是______.(5.3)
k=-3;
if(k<
=0)printf(“####”)
elseprintf(“****”);
A)####B)****C)####****D)有语法错误,不能执行
21.当a=2,b=3,c=4,d=5时,执行下面一段程序后x的值为_____.(5.3)
if(a>
b)
if(c<
d)x=1;
else
if(a<
c)
if(b>
d)x=2;
elsex=3;
elsex=4;
elsex=5;
A)2B)3C)4D)5
22.下列程序的运行结果是________.(6.3)
{inty=10;
do{y--;
}while(--y);
printf(“%d\n”,y--);
A)-1B)1C)8D)0
23.下列程序的运行结果是________.(6.5)
#include<
stdio.h>
inti;
for(i=1;
=5;
{if(i%2)printf(“*”);
elsecontinue;
printf(“#”);
printf(“$\n”);
A)*#*#$B)#*#*#*$C)*#*#*#$D)***#$
24.若x是int型变量,且有下面的程序片段:
(6.5)
for(x=5;
8;
x++)
printf((x%2)?
(“**%d”):
(“##%d\n”),x);
该程序片段的输出结果是_______.
A)**5##6B)##5C)##5**6##7D)**5##6**7**7**6##7
25.有以下程序:
{inta=1,b=0;
switch(a)
{case1:
switch(b)
{case0:
printf(“****”);
break;
case1:
printf(“####”);
case2:
printf(“$$$$”);
该程序的输出结果是________.(5.4)
A)****B)****$$$$C)****####$$$$D)####$$$$
26.下列程序段的输出结果是_______.(6.4)
intx=3;
do{printf(“%3d”,x-=2);
while(!
(——x));
A)1B)30C)1-2D)死循环
27.有以下程序,其中x、y为整型变量;
for(x=0,y=0;
(x<
=1)&
(y=1);
x++,y——);
printf(“x=%d,y=%d”,x,y);
该程序的输出结果是_____.(6.5)
A)x=2,y=0B)x=1,y=0C)x=1,y=1D)x=0,y=0
28.有以下程序段:
intn=0,p;
do{scanf(“%d”,&
p);
n++;
}while(p!
=12345&
n<
3);
此处do-while循环的结束条件是_____.(6.4)
A)p的值不等于12345并且n的值大于3
B)p的值等于12345并且n的值大于等于3
C)p的值不等于12345或者n的值小于3
D)p的值等于12345或n的值大于等于3
29.在下述程序中,if(i>
j)语句共执行的次数是_____.(6.5)
{inti=0,j=10,k=2,s=0;
for(;
;
)
{i+=k;
if(i>
j)
{printf(“%d”,s);
break;
s+=i;
A)4B)7C)5D)6
30.以下程序的功能是:
按顺序读入10名学生和4门课程的成绩,计算出每位学生的平均分进行输出,但运行结果不正确。
{intn,k;
floatscore,ave;
ave=0.0;
for(n=1;
=10;
n++)
{for(k=1;
k<
=4;
k++)
{scanf(“%f”,&
score);
ave+=score/4;
printf(“NO%d:
%f\n”,n,ave);
}造成程序计算结果错误的语句行是_____.(6.6)
A)ave=0.0;
B)for(n=1;
C)ave+=score/4;
D)printf(“NO%d:
31.若有以下定义:
chars[10]={'
a'
,'
b'
c'
0'
2'
\x32'
};
执行语句printf(“%d”,strlen(s));
的结果是_____.(7.3)
A)3B)4C)8D)10
32.设有数组定义:
chararray[]=“abcdef”;
则数组array所占的空间为_____.(7.3)
A)4个字节B)5个字节C)6个字节D)7个字节
33.有以下程序:
{charstr[][10]={“China”,“Beijing”},*p=str;
printf(“%s\n”,p+10);
该程序运行后的输出结果是_____.(10.4)
A)ChinaB)BeijingC)ngD)ing
34.阅读下面程序,该程序段的功能是_____.(7.1)
#include<
{intc[]={23,1,56,234,7,0,34},i,j