c语言试题.docx
《c语言试题.docx》由会员分享,可在线阅读,更多相关《c语言试题.docx(13页珍藏版)》请在冰豆网上搜索。
![c语言试题.docx](https://file1.bdocx.com/fileroot1/2023-2/24/dcbe728f-2904-479e-a5e8-54668876bd42/dcbe728f-2904-479e-a5e8-54668876bd421.gif)
c语言试题
《计算机程序设计C语言》考试试卷
试题总分:
100分考试时限:
120分钟
一、单项选择题(每空2分,共30分)
1.变量均为整型,设a为5,执行下列语句后,b的值不为2的是()。
A.b=a/2B.b=6-(--a)C.b=a%22.若已定义x和y为double类型,则表达式x=1,y=x+3/2的值是()。
A.1B.1.5C.2.03.合法的数组定义是()。
A.inta[]={"string"};B.inta[5]={0,1,2,3,4,5};4.下列标识符错误的是()。
D.b=a>3?
2:
2D.2.5
D.chara[]={0,1,2,3,4,5}D._abD.2D.8
C.chara={"string"};
A.x1yB._123C.2ab5.设整型变量n的值为2,执行语句n+=n-=n*n;后,n的值是()。
A.0B.46.字符串“ABC”在内存占用的字节数是()A.3B.47.下列程序的输出结果是()。
charp1[20]="abcd",*p2="ABCD",str[20]="xyz";
strcpy(str+2,strcat(p1+2,p2+1));printf("%s",str);
A.xyabcABB.abcABzC.ABabcz8.在函数中默认存储类型说明符的变量应该是()存储类型。
A.内部静态B.外部C.自动9.下列字符数组长度为5的是()。
A.chara[]={'h','a','b','c','d'};
C.-4C.6
D.xycdBCDD.寄存器
B.charb[]="habcd";
C.charc[10]={'h','a','b','c','d'};D.chard[6]={'h','a','b','c','\0'}10.设变量a是整型,f是实型,i是双精度型,则表达式10+’a’+i*f值的数据类型是()
A.intB.floatC.doubleD.不确定11.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是()A.floatB.int12.以下不能正确定义二维数组的语句是()
C.long
D.double
D.inta[2][]={{1,2},{3,4}}D.p
A.inta[2][2]={{1},{2}};B.inta[][2]={1,2,3,4};C.inta[2][2]={{1},2,3};13.若有定义:
intx[5],*p=x;,则不能代表x数组首地址的是()A.xB.&x[0]C.&x14.下列定义的字符数组中,printf("%s\n",str[2]);语句的输出是()
charstr[3][20]={"basic","foxpro","windows"};A.basicB.foxproC.windowsD.输出语句出错15.对于如下的结构体,若对变量person的出生年份进行赋值,()是正确的赋值语句。
structdate{
intyear,month,day;};
structworklist{charname[20];charsex;structdatebirthday;}person;
A.person.birthday.year=1980;C.year=1980;
第1页/共6页
B.birthday.year=1980;D.person.year=1980;
二、填空和程序分析(每空2分,共24分)
1.在C语言程序中,对文件进行操作首先要____________;然后对文件进行操作,最后要对文件实行_____________操作,防止文件中信息的丢失。
2.若自定义函数要求返回一个值,则应在该函数体中有一条____________语句,若自定义函数要求不返回一个值,则应在该函数说明时加一个类型说明符________。
3.设x,y,z均为int型变量,请写出描述“x或y中有一个小于z”的表达式_________________________________。
4.若有定义:
inta[3][4]={{1,2},{0},{4,6,8,10}};则初始化后,a[1][2]得到的初值是______________,a[2][2]得到的初值是____________。
5.程序的运行结果是________________________________________。
main()
{inta[]={2,4,6,8,10};
inty=1,x,*p;
p=&a[1];
for(x=0;x<3;x++)y+=*(p+x);
printf("%d\n",y);
}
6.该程序的运行结果是___________________________________。
main()
{inty=9;
for(;y>0;y--)
if(y%3==0){printf(“%d”,--y);continue;}
}
7.该程序的运行结果是___________________________________。
main()
{inta=2,b=3,c;
c=a;
if(a>b)c=1;
elseif(a==b)c=0;
elsec=-1;
printf("%d\n",c);
}
8.执行以下程序段后a的值是______________________,b的值是______________________。
inta,b;
for(b=1,a=1;b<=50;b++)
{
if(a>=10)break;
if(a%2==1)
{
a+=5;
continue;
}
a-=3;
}
三、阅读程序并根据题意完成程序(每空2分,共16分)
1.从键盘上输入10个浮点数,求其平均值。
main()
{
inti;
floatf,sum;
for(i=1,sum=0.0;i<11;i++)
{
________________________;
_______________________;
}
printf(“average=%f\n”,sum/10);
}
2.下面程序段是输入n个实数,输出其中的最大值和最小值。
floatx,nmax,nmin;
第2/6页
intn,i;
scanf("%d",&n);
scanf("%f",&x);
nmax=x;
nmin=x;
for(i=1;_______________________;i++)
{
scanf("%f",&x);
if(x>nmax)_______________________;
if(_______________________)nmin=x;
}
printf("MAX=%f,MIN=%f",nmax,nmin);
3.函数sort使用冒泡法将一维整型数组中各元素按值从大到小排序。
voidsort(inta[],intn)
{intk,j,t;
for(k=1;kfor(___________;jif(_______________)
________________
}
四、程序设计(共30分)
1.请编一个函数intfun(inta),它的功能是:
判断a是否是素数,若a是素数,返回1;若不是素数,返回0。
a的值由主函数从键盘读入。
(6分)
2.求3X3矩阵的主对角线元素之和,矩阵的数据从键盘输入。
(5分)
3.编写程序,利用格里高利公式计算π。
111=1-...4357
精度要求:
若某一项的绝对值小于10则不再计入,停止计算。
(8分)
4.已知有一个大小为5*5的二维数组,从键盘为所有元素输入数据并编写程序求出数组外围元素的累加和。
(6分)
5.编写程序:
把文本文件f1.txt复制到f2.txt,并且去除所有空格,其它字符复制。
(5分)
-5
第3/6页
试题参考答案及评分标准
第4/6页
第5/6页
2013年计算机二级考试C语言程序设计实战题1
2012-09-3021:
44:
09我来说两句
收藏
我要投稿
题目1:
有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?
都是多少?
1.程序分析:
可填在百位、十位、个位的数字都是1、2、3、4。
组成所有的排列后再去掉不满足条件的排列。
2.程序源代码:
main()
{
inti,j,k;
printf("n");
for(i=1;i<5;i++) /*以下为三重循环*/
for(j=1;j<5;j++)
for(k=1;k<5;k++)
{
if(i!
=k&&i!
=j&&j!
=k) /*确保i、j、k三位互不相同*/
printf("%d,%d,%dn",i,j,k);
}
}
题目2:
企业发放的奖金根据利润提成。
利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
1.程序分析:
请利用数轴来分界,定位。
注意定义时需把奖金定义成长整型。
2.程序源代码:
main()
{
longinti;
intbonus1,bonus2,bonus4,bonus6,bonus10,bonus;
scanf("%ld",&i);
bonus1=100000*0.1;bonus2=bonus1+100000*0.75;
bonus4=bonus2+200000*0.5;
bonus6=bonus4+200000*0.3;
bonus10=bonus6+400000*0.15;
if(i<=100000)
bonus=i*0.1;
elseif(i<=200000)
bonus=bonus1+(i-100000)*0.075;
elseif(i<=400000)
bonus=bonus2+(i-200000)*0.05;
elseif(i<=600000)
bonus=bonus4+(i-400000)*0.03;
elseif(i<=1000000)
bonus=bonus6+(i-600000)*0.015;
else
bonus=bonus10+(i-1000000)*0.01;
printf("bonus=%d",bonus);
}
题目3:
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
1.程序分析:
在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。
请看具体分析:
2.程序源代码:
#include"math.h"
main()
{
longinti,x,y,z;考试用书
for(i=1;i<100000;i++)
{x=sqrt(i+100); /*x为加上100后开方后的结果*/
y=sqrt(i+268); /*y为再加上168后开方后的结果*/
if(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/
printf("n%ldn",i);
}
}
题目4:
输入某年某月某日,判断这一天是这一年的第几天?
1.程序分析:
以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
2.程序源代码:
main()
{
intday,month,year,sum,leap;
printf("npleaseinputyear,month,dayn");
scanf("%d,%d,%d",&year,&month,&day);
switch(month)/*先计算某月以前月份的总天数*/
{
case1:
sum=0;break;
case2:
sum=31;break;
case3:
sum=59;break;
case4:
sum=90;break;
case5:
sum=120;break;
case6:
sum=151;break;
case7:
sum=181;break;
case8:
sum=212;break;
case9:
sum=243;break;
case10:
sum=273;break;
case11:
sum=304;break;
case12:
sum=334;break;
default:
printf("dataerror");break;
}
sum=sum+day; /*再加上某天的天数*/
if(year@0==0||(year%4==0&&year0!
=0))/*判断是不是闰年*/
leap=1;
else
leap=0;
if(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/
sum++;中华考试网
printf("Itisthe%dthday.",sum);}
题目5:
输入三个整数x,y,z,请把这三个数由小到大输出。
1.程序分析:
我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。
2.程序源代码:
main()
{
intx,y,z,t;
scanf("%d%d%d",&x,&y,&z);
if(x>y)
{t=x;x=y;y=t;}/*交换x,y的值*/
if(x>z)
{t=z;z=x;x=t;}/*交换x,z的值*/
if(y>z)
{t=y;y=z;z=t;}/*交换z,y的值*/
printf("smalltobig:
%d%d%dn",x,y,z);
}
3.请编写一个函数voidfun(charm,intk,intxx[]),该函数的功能是:
将大于整数m且紧靠m的k个素数存入xx所指的数组中。
例如,若输入17和5,则应输出:
19,23,29,31,37。
注意:
部分源程序存在PROG1.C中,请勿改动主函数和其他函数中的内容,仅在函数fun的指定的部位填入你编写的若干语句。
试题源程序如下:
#include<stdio.h>
voidfun(intm,intk,intxx[])
{
}
main()
{intm,n,zz[100];
printf("\nPleaseentertwointegers(m&n):
");
scanf("%d%d",&m,&n);
fun(m,n,zz);
for(m=0;m<n;m++)printf("%d",zz[m]);
printf("\n\n");
}
分析:
(1)本题的基本算法是求素数。
假设有整数i,若i不能被2到i之间的任意一个数除尽,则i就是素数;若一旦能被某个数除尽就不是素数。
(2)以下是求i是否为素数的基本算法:
变量ok用作i是素数的标志,ok为1,则i是素数。
ok=1;
for(p=2;p<i/2;p++)
if(i%p==0){ok=0;break;}
if(ok)……
(3)本题要求把大于m的k个素数存入xx所指的数组中。
所以,i的值应大于m;取大于m的值逐一进行判断,若是素数就放入xx所指数组中。
把以上语句放入一个循环中:
for(i=m+1,j=0;?
;i++)
{ok=1;
for(p=2;p<=i/2;p++)
if(i%p==0){ok=0;break;}
if(ok){xx[j]=i;j++;}
}
此处,变量i统计存入数组中元素的个数,同时作为下标。
(4)按本题的要求,外循环结束的条件应当是:
j<k(j的值从0到k-1)。
只要求得了k个素数,就可退出循环。
因此在?
处应填入j<k。
编程题
请编写函数fun,它的功能是:
求出1到1000之内能被7或11整除、但不能同时被7或11整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。
注意:
部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include
#include
voidfun(int*a,int*n)
{
}
main()
{
intaa[1000],n,k;
FILE*out;
fun(aa,&n);
out=fopen("out.dat","w");
for(k=0;k if((k+1)%10==0)
{
printf("%5d\n",aa[k]);
fprintf(out,"%d\n",aa[k]);
}
else
{
printf("%5d,",aa[k]);
fprintf(out,"%d,",aa[k]);
}
fclose(out);
}
答案:
voidfun(int*a,int*n)
{
inti,j=0;
for(i=2;i<1000;i++)
if((i%7==0||i%11==0)&&i%77!
=0)
a[j++]=i;
*n=j;
}
4.