2018 年浙江宁波大学 C 程序设计考研真题
一、选择题(共 25 题,每题 3 分,共 75 分)
)
(1)以下叙述正确的是(
A) do-while 语句构成的循环不能用其它语句构成的循环来代替。
B) do-while 语句构成的循环只能用 break 语句退出。
C)用 do-while 语句构成的循环,在 while 后的表达式为非零时结束循环。
D)用 do-while 语句构成的循环,在 while 后的表达式为零时结束循环。
)
D) 9
C) 8
B) 7
(2)下列程序执行后的输出结果是(
A) 6
void func(int *a,int b[])
{
int main()
{
b[0]=*a+6;
}
int a,b[5];
a=0; b[0]=3;
func(&a,b); printf("%d\n",b[0]);
return 0;
}
)
(3) 下列程序的输出结果是(
int b=2;
int func(int *a)
{
int main()
{
b += *a; return(b); }
int a=2, res=2;
res += func(&a);
printf("%d\n",res);
return 0;
}
A) 4
B) 6
C) 8
D) 10
)
(4)下列程序执行后的输出结果是(
void func1(int i);
void func2(int i);
char st[]="hello,friend!";
void func1(int i)
{
printf("%c",st[i]);
while (i<3){i+=2; printf("%c",st[i]);
}
}
int main()
{
A) hello
(5)以下选项中,与 k=n++完全等价的表达式是(
int i=0; func1(i);
printf("\n");
C) hlo
B) hel
return 0; }
D) hlm
)
A) k=n,n=n+1
B) n=n+1,k=n
C) k=++n
D) k+=n+1
(6) 有以下程序
int f(int n)
{
if (n==1) return 1;
else return f(n-1)+1;
}
main()
{ int i,j=0;
for(i=1;i<3;i++)
printf("%d\n",j);
return 0;
j+=f(i);
}
程序运行后的输出结果是(
A) 4
B) 3
)
C) 2
(7) 有以下程序
main()
{
char *p="abcde\0fghjik\0";
printf("%d\n",strlen(p));
return 0;
D) 1
}
程序运行后的输出结果是(
A) 12
B) 15
)
C) 6
D) 5
(8) 有以下程序
struct STU
{ char num[10]; float score[3]; };
main()
{ struct STU s[3]={{"20021",90,95,85},
{"20022",95,80,75},
{"20023",100,95,90}},*p=s;
int i; double sum=0;
for(i=0;i<3;i++)
sum=sum+p->score[i];
printf("%6.2lf\n",sum);
return 0;
}
程序运行后的输出结果是(
A) 260.00
(9)设有语句 int a=2,b=3,c=-2,d=2; 则逻辑表达式“a>0&&b&&c<0&&d>0”的值是(
A)1
C) 280.00
D) 285.00
B) 270.00
)
B)0
C)-1
D)出错
(10)在循环语句的循环体中,break 语句的作用是(
)
)
A)继续执行 break 语句之后的循环体内其他各语句;
B)提前结束本层循环,接着执行该循环体后续的语句;
C)结束本次循环;
D)暂停程序的运行.
(11)若用数组名作为函数调用的实参,传递给形参的是(
A)数组的首地址
C)数组中全部元素的值
B)数组第一个元素的值
D)数组元素的个数
)
(12)已定义以下函数;
fun(int *p)
{ return *p; }
该函数的返回值是(
A)不确定的值
C)形参 p 所指存储单元中的值
)
(13)有以下程序
main( )
{ int i,s=0;
for(i=1;i<10;i+=2) s+=i+1;
printf("%d\n",s); return 0;
B)形参 p 中存放的值
D)形参 p 的地址值
}
程序执行后的输出结果是(
A)自然数 1~9 的累加和
C)自然数 1~9 中的奇数之和 D)自然数 1~10 中的偶数之和
B)自然数 1~10 的累加和
)
(14) 若有定义:int aa[8];,则不能代表数组元素 aa[1]地址的是( )
A)&aa[0]+1
C)&aa[0]++
B)&aa[1]
D)aa+1
(15)若有如下定义,则 b 的值是(
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b=p[5];
A)5
C)8
)
B)6
D)9
B) 7
C)11
D)12
(16)设有定义:char s[12]="string";则 printf("%d",strlen(s));的输出结果是( )
A)6
(17)若有如下定义,则正确的叙述为( )
char x[]="abcdefg";
char y[]={’a’,’b’,’c’,’d’,’e’,’f’,’g’};
A)数组 x 和数组 y 等价
C)数组 x 的长度大于数组 y 的长度 D)数组 y 的长度大于数组 x 的长度
B)数组 x 和数组 y 的长度相同
(18)以下与库函数 strcpy(char *p1,char *p2)功能不相等的程序段是(
A)strcpy1(char *p1,char *p2)
)
{ while ((*p1++=*p2++)!=’\0’) ; }
B)strcpy2(char *p1,char *p2)
{ while ((*p1=*p2)!=’\0’) { p1++; p2++ } }
C)strcpy3(char *p1,char *p2)
{ while (*p1++=*p2++) ; }
D)strcpy4(char *p1,char *p2)
{ while (*p2) *p1++=*p2++ ; }
(19) 若有定义:int (*p)[4];则标识符 p 是(
A)是一个指向整型变量的指针
B)是一个指针数组名
C)是一个指针,它指向一个含有四个整型元素的一维数组
D)定义不合法
)
(20)下面程序应能对两个整型变量的值进行交换。以下正确的说法是(
)
swap(int p,int q)
{
int t;
t=p;p=q;q=t;
}
Int
{
}
main()
int a=10,b=20;
pirntf("(1) a=%d,b=%d\n",a,b);
swap(&a,&b);
printf("(2) a=%d,b=%d\n",a,b);
return 0;
(A) 该程序完全正确
(B) 该程序有错,只要将语句 swap(&a,&b); 中的参数改为 a,b 即可
(C) 该程序有错,只要将 swap()函数中的形参 p 和 q 以及 t 均定义为指针(执行语句不变)
即可
(D) 以上说法都不正确
B) 3,4
C) 3, 3
(21)当变量 i=3 时,表达式++i 和表达式 i++的值分别是(
A) 4,3
(22)下列说法不正确的是()
A)形式参数是局部变量。
B)不同的函数中,可以使用相同名字的变量。
C)在一个函数的内部,可以在复合语句中定义变量。
D) 4, 4
)
D)主函数 main 中定义的变量在整个文件或者程序中都有效
(23)为了避免嵌套的 if-else 语句的二义性,C 语言规定 else 总是与(
系。
A) 缩排位置相同的 if
C) 在其之前尚未配对的最近的 if
B) 在其之前未配对的 if
D) 同一行上的 if
)组成配对关
(24)以下符合语法规则的用户标识符是(
A) 1st
C) B757
B) break
)
D) Two Words
(25)sizeof(float)是(
A)一个双精度型表达式
C)一种函数调用
)
B)一个整型表达式
D)一个不合法的表达式
二、程序阅读题(共 6 题,每题 5 分,共 30 分)
(1)下列程序执行后的输出结果是
int main()
{ int i, j;
for(i=0; i<10 ; i++)
{
j=i*10+6;
if( i%3!=0 ) continue;
printf("%d",j);
}
return 0;
}
(2)以下程序运行后的输出结果是
main()
{ int x=15;
while(x>10 && x<50)
{ x++;
if(x/3){x++;break;}
else continue;
}
printf("%d\n",x);
return 0;
}
(3)以下程序运行后的输出结果是
main()
{ int i,m=0,n=0,k=0;
for(i=9; i<=11;i++)
switch(i/10)
{ case 0: m++;n++;break;
case 10: n++; break;
default: k++;n++;
}
printf("%d %d %d\n",m,n,k);
return 0;
}
(4)写出下面程序的运行结果
func(char *s,char a,int n)
{
int j;
*s=a; j=n ;
while (*s
题目 2:统计单词个数
【问题描述】统计一个英文句子(长度不大于 80)中含有英文单词的个数,单词之间用空格
隔开。
【样例输入】
Hello World!
【样例输出】
num=2
题目 3:三位数加法
【问题描述】两组三位整数数据链表,用结构体 ListNode 表示,每个节点只放一位数字:
struct ListNode {
int val;
struct ListNode *next;
};
要求建立如下例的链表,并利用链表实现加法运算。
//说明:表示 342+465
【样例输入】
(2->4->3)+(5->6->4)
(5->6->7)+(7->8->9)
【样例输出】
(7->0->8)
(2->5->7->1)