C程序设计试卷
一、单选题(本题共20分,每小题2分)
(1 ) 以下C语言常量中,表达错误的是___(1)___。
[A] 0FF [B] [C] [D] ‘\n’
(2)C程序的基本结构有___(2)___。
[A] 选择、重复和模块[B] 顺序、选择和模块
,
[C] 顺序、选择和循环[D] 逻辑、物理和程序
(3)在C语言程序中,关于字符串的描述正确的是___(3)___。
[A] 可定义一个字符串变量存储字符串;
[B] 可定义一个字符变量存储任意字符串;
[C] 可定义一个字符数组存储字符串;
[D] 可定义一个字符指针存储字符串;
(4)@
在C语言中,用关键字___(4)___定义双精度类型变量。
[A] single [B] double [C] float [D] int
(5)下面叙述中不正确的是___(5)___。
[A] 不同函数中可以使用相同名字的变量
[B] 形式参数是局部变量
[C] 在一个函数内部的复合语句中定义的变量在本函数范围内有效
[D] 在一个函数内部定义的变量只能在本函数范围内有效
& (6)下面程序段的输出结果是___(6)___。
int i=100;
while(i>120)
i=i+1;
printf(″%d″,i);
[A] 100 [B] 101 [C] 120 [D] 121
(7)&
以下定义语句中正确的是___(7)___。
[A] char a='A' b='B';
[B] float a=b=;
[C] int a=10, *b=&a;
[D] float *a,b=&a;
(8)已有定义:int i, a[10], *p;,则合法的赋值语句是___(8)___。
[A] p=100; [B] p=a[5]; [C] p=a[2]+2; [D]p=a+2;
-(9)设有定义:int a,*p1=&a; 以下scanf语句中能正确为变量a读入数据的是___(9)___。
[A] scanf(“%d”,p1);
[B] scanf(“%d”,a);
[C] s canf(“%d”,&p1);
[D] scanf(“%d”,*p1);
(10 )以下程序段中与语句=a>b(b>c10)0;功能等价的是___(10)___。
`
[A] if((a>b)&&(b>c)) =1 else =0;
[B] if((a>b)||(b>c)) =1 else =0;
[C] if(a<=b) =0;
[D] if(a>b) =1;
二、程序填空题(本题共30分,每小题2分)
阅读下列程序说明和程序代码,在每小题提供的若干可选项中,挑选一个最佳的选项。
(1)【程序说明】
输入整数n,输出共有n层的金字塔图形。例如:
$
【程序代码】
# include <>
void main() {
int i,j,n;
char c='*';
printf("输入层数:");
scanf("%d",&n);
?
for(i=1; (11);i++){
for(j=1;j<=n-i; (12))
printf(" ");
for(j=1; (13);j++){
printf( (14),c);
}
printf("\n");
,
.
n");
}
【选项】
(16)[A] year [B] &year [C] &n [D] &leap
(17)[A] else if [B]else; [C] else [D] else if(leap==1)
》
[A] leap=0 [B] leap=1 [C] year=0 [D] year=1
(18)
(19)[A]year=1 [B] leap [C] leap =0 [D]以上选项都不正
确
(20)[A]leap [B] &leap [C]year [D]&year
(3)【程序说明】输入十个整数并保存在一维数组中,使数组中每个元素都增加10。
【程序代码】
!
#include <>
main() {
int a[10],i;
(21)
p=a;
for (i=0;i<10;i++){
scanf("%d", (22));
(23);
,
}
for (p=a;p<(a+10);p++)
(24)
printf("\n");
(25);
for (;p<(a+10);p++)
printf("%d ",*p);
}
…
【选项】
(
2
1
)
[A] int p[10] [B] int *p; [C] int p; [D] int a;
(
2
2
)
[A] a++ [B] a[p] [C] *p [D] p
(
2
3
)
[A] p++ [B] a++ [C]*p++ [D] *a++
( 2 4 )>
[A] *a=*a+10; [B] *p=*(p+10); [C] *p=*p+10; [D] *a=*(a+i);
(
2
5
)
[A] p=a[0] [B] p=*a [C] p=a [D] *p=&a
三、程序阅读题(本题共20分,每小题2分)
阅读下列程序并回答问题,在每小题提供的若干可选答案中,挑选一个正确的答案。
(1)【程序说明】运行程序并回答问题。
【程序代码】
#include <>
《
#include <>
void main()
{ int n,s=0;
scanf("%d",&n);
n=fabs(n);
while(n>1) {
s=s+n%10;
n=n/10;
$
}
printf("%d\n",s); }
【选项】
(26 )程序运行时输入312,输出___(26)__。
[A] 213 [B] 6 [C] 312 [D] 3为。
(27 )—
程序运行时输入-5104,输出___(27)__。
[A]-5104 [B]–4015 [C]10 [D]
(2)【程序说明】运行程序并回答问题。【程序代码】
# include <>
void main(){
int a,b,c,temp;
a=5;b=12;c=6;
!
printf("a=%d,b=%d,c=%d\n",a,b,c);
if(a
if(a printf("a=%d,b=%d,c=%d\n",a,b,c); if(b printf("a=%d,b=%d,c=%d\n",a,b,c); } void swap(int *,int *y){ … int temp; temp=*; *=*y; *y=temp; } 【选项】 (28 )程序运行时,第1行输出___(28)__。 — [A] a=5,b=12,c=6 [B] a=%d,b=%d,c=%d [C] a=,b=,c= [D] a=12,b=5,c=6 (29 )程序运行时,第2行输出___(28)__。 [A] a=5,b=12,c=6 [B] a=6,b=12,c=5 [C] a=12,b=5,c=6 [D] a=12,b=6,c=5 (30 )程序运行时,第3行输出___(30)__。 ~ [A] a=5,b=12,c=6 [B] a=6,b=12,c=5 [C]a=12,b=5,c=6 [D] a=12,b=6,c=5 (3)【程序说明】运行程序并回答问题。【程序代码】 #include <> void main() { char s1[40]; , int i=0; printf("\nInput a string"); scanf("%s",s1); while (s1[i] !='\0'){ if (s1[i]>='A' && s1[i] <='') s1[i]=s1[i]+32; i++;} printf("\n%s\n",s1); … } 【选项】 (31 )程序运行时,输入abc30DCA,输出___(31)__。 [A] 62 [B] abc30dca [C] abc [D] DCA (32 )程序运行时,输入Face,输出___(32)__。 [A] Face32 [B] FACE [C] face [D] f < (4)【程序说明】运行程序并回答问题。【程序代码】 #include <> void main(){ FILE *fp; int i,j,,,y; scanf("%d%d",&i,&j); fp=fopen("","w"); ~ fprintf(fp,"%d\n",i); if (i =j; else if(i>j) =i; else =i+j; fprintf(fp,"%d\n",); — fclose(fp); fp=fopen("","r"); fscanf(fp,"%d%d",&,&y); printf("=%d,y=%d\n",,y); fclose(fp); } 【选项】 (33 )( 程序运行时,输入20 12 输出___(33)__。 [A] =20,y=20 [B] =20,y=12 [C] =12,y=20 [D] =12,y=12 (34 )程序运行时,输入10 35输出___(34)__。 [A] =45,y=45 [B] =10,y=10 [C] =10,y=35 [D] =35,y=35 (35 )程序运行时,输入12 12输出___(35)__。 [A] =24,y=24 [B] =12,y=12 [C] =24,y=12 [D] =12,y=24 — 四、 程序设计题(本题共30分,每小题10分) (1)编写程序,要求从键盘上输入一个数给,计算并输出分段函数y 的值。 +10 10< 1 5++x e x x 0≤≤10 5-3 <0 提示:平方根函数为:sqrt( ),指数函数为: ep( ),正切函数为: tan( ),正弦函数为: sin( ),所有这些函数在 头文件中。 】 (2)从键盘输入一个正整数n ,编写程序计算1/1!+1/2!+1/3!+……+1/n!的值并输出结果, 要求 定义和调用函数fact (n)计算n 的阶乘。 (3)随机产生20个大于等于1小于等于100的数,并按从大到小排序。请输出排序后的数,要求每行输出5个数。 浙江理工大学2005/2006下学期期末考试---C 程序设计试题 参考答案与评分标准 一、单选题(本题共20分,每小题2分) 二、程序填空题(本题共30分,每小题2分) 三、程序阅读题(本题共20分,每小题2分) 四、编程题(本题共30分,每小题10分)1、 # include <> # include <> void main(){ > float ,y; scanf("%f",&); if(>10) y=+10; else if(>=0) y=(sqrt(5*)+ep())/(+1); else y=tan()*sin(); printf("y=%f\n",y); } < 2、 #include<> float fact(int n){ float t=;int i=1; while (i<=n) t=t*i++; return(t); } void main(){ int n,i ;float sum=; scanf("%d",&n); for (i=2;i<=n;i++) sum=sum+fact(i); printf("%f\n",sum); } 3、 #include<> #include<> void main(){ int i,j,n=0,temp,[20]; srand(time(NULL)); printf("原始数据:\n"); for(i=0;i<=19;i++){ [i]=rand()%100+1; //产生20个随机数 if(i%5==0)printf("\n"); printf("%-6d",[i]); } printf("\n"); for(i=0;i<19;i++){ //从大到小排序 for(j=0;j<19-i;j++) if([j]<[j+1]){ temp=[j]; [j]=[j+1]; [j+1]=temp; } } printf("排序后数据:\n"); for(i=0;i<20;i++){ if(i%5==0)printf("\n"); printf("%-6d",[i]); } printf("\n"); }