2013样卷B《C语言程序设计》(含答案)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言程序设计样卷B
一、单选题(每小题2分,共40分)
1.有以下程序
main()
{ int a[10]={1,2,3,4,5,6,7,8,9,10}, *p=&a[3], *q=p+2;
printf("%d\n", *p + *q);
}
程序运行后的输出结果是_____。
A)16 B)10C)8 D)6
2.以下叙述中正确的是_____
A) 输入项可以是一个实型常量,如:scanf("%f",3.5);
B) 只有格式控制,没有输入项,也能正确输入数据到内存,例如:scanf("a=%d,b=%d");
C) 当输入一个实型数据时,格式控制部分可以规定小数点后的位数,例如:scanf("%4.2f",&f);
D) 当输入数据时,必须指明变量地址,例如:scanf("%f",&f);
3.设int a=12,则执行完语句a+=a-=a*a后,a的值是_____
A) 552 B) 264 C) 144 D) -264
4.设有定义语句
int x[6]={2,4,6,8,5,7},*p=x,i;
要求依次输出x数组6个元素的值,不能完成此操作的语句是_____。
A)for(i=0;i<6;i++)printf("%2d",*(p++));
B)for(i=0;i<6;i++)printf("%2d",*(p+i));
C)for(i=0;i<6;i++)printf("%2d",*p++);
D)for(i=0;i<6;i++)printf("%2d",(*p)++);
5.若一个char型数据在内存中占1个字节,则unsigned char型数据的取值范围为_____。
A) 0~255 B) 0~32767 C) 0~65535 D) 0~2147483647
6.以下程序中,while循环的循环次数是_____。
main()
{ int i=0;
while(i<10)
{ if(i<1) continue;
if(i==5) break;
i++;
}
}
A) 1 B) 10
C) 6 D) 死循环,不能确定次数;
7.下列条件语句中,功能与其他语句不同的是_____。
A) if(a) printf("%d\n",x); else printf("%d\n",y);
B) if(a==0) printf("%d\n",y); else printf("%d\n",x);
C) if (a!=0) printf("%d\n",x); else printf("%d\n",y);
D) if(a==0) printf("%d\n",x); else printf("%d\n",y);
8.以下符合C语言语法的实型常量是_____
A) 1.2E0.5 B) 3.14.159E C) .5E-3 D) E15
9.设变量已正确定义,则以下能正确计算f = n!的程序段是_____
A) f=0; B) f=1;
for(i=1;i<=n;i++) f*=i; for(i=1;i<n;i++) f*=i;
C) f=1; D) f=1;
for(i=n;i>1;i++) f*=i; for(i=n;i>=2;i--) f*=i;
10.有以下程序段
int n,t=1,s=0;
scanf("%d",&n);
do{ s=s+t; t=t-2; }while (t!=n);
为使此程序段不陷入死循环,从键盘输入的数据应该是_____
A)任意正奇数B)任意负偶数C)任意正偶数D)任意负奇数
11.有以下程序
main()
{ int k=4,n=4;
for( ; n<k ;)
{ n++;
if(n%3!=0) continue;
k--; }
printf("%d,%d\n",k,n);
}
程序运行后的输出结果是_____
A) 1,1 B) 2,2 C) 3,3 D) 4,4
12.以下数组定义中错误的是_____
A)int x[][3]={0}; B)int x[2][3]={{l,2},{3,4},{5,6}};
C)int x[][3]={{l,2,3},{4,5,6}}; D)int x[2][3]={l,2,3,4,5,6};
13.下列选项中正确的语句组是_____
A)char s[8]; s={"Beijing"}; B)char *s; s={"Beijing"};
C)char s[8]; s="Beijing"; D)char *s; s="Beijing";
14.下面程序的输出是_____
A)xyzabcABC B)zabcABC C)yzabcABC D)xyabcABC #include<stdio.h>
#include<string.h>
main()
{ char *p1="abc",*p2="ABC",str[50]="xyz";
strcpy(str+2,strcat(p1,p2));
printf("%s\n", str);}
15.在调用函数时,如果实参是数组名,它与对应形参之间的数据传递方式是_____。
A) 地址传递 B) 单向值传递
C) 由实参传给形参,再由形参传回实参 D) 传递方式由用户指定
16.以下叙述中不正确的是_____。
A)在不同的函数中可以使用相同名字的变量
B)函数中的形式参数是局部变量
C)在一个函数内定义的变量只在本函数范围内有效
D)在一个函数内的复合语句中定义的变量在本函数范围内有效
17.下列程序执行后的输出结果是_____。
#define f(x) x*x
main( )
{ int i;
i=f(4+4)/f(2+2);
print f(“%d\n”,i);
}
执行后输出结果是
A) 28B) 22 C) 16 D) 4
18.有以下程序
main()
{
char s[]="159",*p;
p=s;
printf("%c",*p++);
printf("%s",*p++);
}
程序运行后的输出结果是_____
A)159 B)169 C)12 D)59
19.已有定义:int i,a[10],*p;,则合法的赋值语句是_____。
A)p=100; B)p=a[5]; C)p=a[2]+2; D)p=a+2;
20.若有以下说明和语句,则输出结果是_____。
char sp[]="\t\v\\\0will\n";
printf("%d",strlen(sp));
A)14 B)3 C)9 D)字符串中有非法字符
评分标准:每小题2分,不答或答错者均不给分。
二、填空题(每空1分,共10分)
1. 结构化程序设计的三种基本结构为顺序、选择、循环。
2. 设x和y均为int型变量,且x=1,y=2,则表达式 1.0+x/y的值为 1.0,其数据类型是double。
3. 若定义的函数无返回值,则函数类型应该为___void___。
4. 以下程序统计从终端输入的字符中每个大写字母的个数,用#号作为输入结束标志,请填空。
#include <stdio.h>
#include <ctype.h>
main()
{ int num[26],i; char c;
for(i=0; i<26; i++)num[i]=0;
while(c=getchar() !='#')
if(isupper(c))num[c-65]+=1;
for(i=0; i<26; i++)
if(num[i])printf("%c:%d\n”,i+’A’, num[i]);
}
5. 请补充main函数,该函数的功能是:从一个字符串中截取前面若干个给定长度的子字符串。
其中,str1指向原字符串,截取后的字符存放在str2所指的字符数组中,n中存放需截取的字符个数。
例如:当str1=“cdefghij”,然后输入4,则str2=“cdef”。
#include <stdio.h>
#define LEN 80
main()
{ char str1[LEN],str2[LEN]; int n,i;
printf("Enter the string:\n");
gets(str1);
printf("Enter the position of the string deleted:");
scanf(__"%d",&n __);
for(i=0;i<n;i++)
_ str2[i]=str1[i]_
str2[i]='\0';
printf("The new string is:%s\n",str2);
}
评分标准:
(1)每空1分,不答或答错者均不给分。
(2)第1小题各空顺序不限,第二空答“分支”亦可。
(3)第2题答1.000000亦可;答1不给分;第二空答“双精度型”亦可。
(4)第4题第2空填“i+65”“65+i”、“’A’+i”均可。
三、判断题(每小题1分,共15分。
对者标“T”,错者标“F”)
1. 在 C 语言中,逗号既可以作为运算符,也可以作为分隔符。
(T)
2. if (a=0) i=1; 是不合法的C语句。
(F)
3. unsigned 和void 在C中都是保留字。
(T)
4. 7&&3+12的值是15。
( F)
6. C 语言的一个重要特点是能够直接处理物理地址,其指针类型数据就是用来存放变量地
址的。
( T )。
7.对于二维数组a来说,a+1与*(a+1)的值相等,因此二者的含义是一样的。
( F )
8.若程序中对fun函数的说明为: void *fun();则其含义为指针fun指向一个函数,该函数无返回值( T )
9. 语句char *p =“Turbo C”的含义是将字符串赋给字符型指针变量p。
( F )
10. typedef的功能是对数据类型重新定义。
(T)
11. break ,contionue只能用在循环结构程序中,用于改变程序执行流程。
( F )
12. 自定义函数的返回值只能通过return语句实现。
(F)
13. 在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。
(T)
14. 全局变量是在主函数之前定义的变量。
(F)
15. 已定义以下函数:int fun(int *p) {return *p;} fun函数的返回值是一个整数。
(T)评分标准:每小题1分,不答或答错者均不给分。
四、程序分析题(25分)
1.写出以下程序的运行结果。
(3分)
以下程序的输出结果是______
int f()
{
static int i=0;
int s=1;
s+=i; i++;
return s;
}
main()
{
int i,a=0;
for(i=0;i<5;i++) a+=f();
printf("%d\n",a);
}
【运行结果】
15
评分标准:答错或不答不给分。
2.写出下面程序的运行结果。
(3分)
fun(int a, int b)
{ if(a>b) return(a);
else return(b);
}
main()
{ int x=3, y=8, z=6, r;
r=fun (fun(x,y), 2*z);
printf("%d\n", r);
}
【运行结果】
12
评分标准:答错或不答不给分。
3. 写出下面程序的运行结果。
(3分)
void swap(char *x,char *y)
{ char t;
t=*x; *x=*y; *y=t;
}
main()
{ char *s1="abc",*s2="123";
swap(s1,s2);printf("%s,%s\n",s1,s2);
}
【运行结果】
1bc,a23
评分标准:第一数1.5分,第二数1.5分。
答错或不答不给分,漏写逗号扣0.5分。
4. 写出以下程序的运行结果。
(3分)。
void sort(int a[], int n)
{ int i, j ,t;
for (i=0; i<n-1;i++)
for (j=i+1; j<n;j++)
if (a[i]<a[j]){t=a[i];a[i]=a[j];a[j]=t;}
}
main()
{
int aa[10]={1,2,3,4,5,6,7,8,9,10}, i;
sort(aa+2, 5);
for (i=0; i<10; i++)
printf("%d,",aa[i]);
}
【运行结果】
1,2,7,6,5,4,3,8,9,10,
评分标准:答错或不答不给分, 漏写逗号扣0.5分。
5.当输入12345时,写出以下程序的输出结果。
(3分)
void func1(int i);
void func2(int i);
char st[]="hello,friend!";
void func1(int i)
{ printf("%c",st[i]);
if(i<3){i+=2;func2(i);}
}
void func2(int i)
{ printf("%c",st[i]);
if(i<3){i+=2;func1(i);}
}
main()
{ int i=0; func1(i); printf("\n");}
【运行结果】
hlo
评分标准:答错或不答不给分。
6.写出以下程序的输出结果。
(4分)
void fun(char *c,int d)
{ *c=*c+1;d=d+1;
printf(“%c,%c\n”,*c,d);
}
main()
{ char a=’A’,b=’a’;
fun(&b,a); printf(“%c,%c\n”,a,b);
}
【运行结果】
b,B
A,b
评分标准:按行给分,每行2分,答错或不答不给分。
7.写出以下程序的输出结果。
(3分)
main()
{ int i;
for(i=0;i<3;i++)
switch(i)
{ case 1: printf("%d",i);
case 2: printf("%d",i);
default: printf("%d",i);
}
}
【运行结果】
011122
评分标准:答错或不答不给分。
8.写出以下程序的输出结果。
(3分)
main()
{ char a[]="123456789",*p; int i=0;
p=a;
while(*p)
{ if(i%2==0) *p='*";
p++;i++;
}
puts(a);
}
【运行结果】
*2*4*6*8*
评分标准:答错或不答不给分。
五、编程题(10分)
编写程序检查一个字符串是否是回文。
所谓回文即正向与反向的拼写都一样,例如:adgda。
要求:(1)字符串的输入、结果的输出由主函数处理;(2)回文的判断由子函数处理。
#include<stdio.h>
#include<string.h>
int huiwen(char *str)
{ char *p1,*p2;
int i,t=0;
p1=str;p2=strlen(str)-1;
for(i=0;i<=strlen(str)/2;i++)
if(*p1++!=*p2--){t=1;break;}
return t;
}
main()
{ char str[50];
int result;
printf("Input:"); scanf("%s",str);
result=huiwen(str);
if(!result) printf(“yes!”);
else printf(“no!”);
}
评分标准:主函数2分,子函数3分。
编程未用缩进式风格扣1分。
写成一个函数不给分。
使用全局变量或数组不给分。
第一行漏写扣0.5分。