二级C语言分类模拟题516
(总分51, 做题时间90分钟)
选择题
1.
下列程序的输出结果是______。
#include<stdio.h>
main()
{int a[2][3]={{1, 2, 3}, {4, 5, 6}}, (*p)[3], i; p=a;
for(i=0; i<3; i++)
{ if(i<2)
p[1][i]=p[1][i]-1;
else
p[1][i]=1;
#include<stdio.h>
main()
{int a[2][3]={{1, 2, 3}, {4, 5, 6}}, (*p)[3], i; p=a;
for(i=0; i<3; i++)
{ if(i<2)
p[1][i]=p[1][i]-1;
else
p[1][i]=1;
}
printf("%d\n", a[0][1]+a[1][1]+a[1][2]);
}
printf("%d\n", a[0][1]+a[1][1]+a[1][2]);
}
A 8
B 7
C 12
D 9
分值: 2.5
答案:B
[解析] 本题考查for循环及if…else语句嵌套,第1次执行for循环,p[1][0]=p[1][0]=p[1][0]-1=3;
第2次执行for循环,p[1][1]=p[1][1]-1=4;第3次执行for循环,p[1][2]=1,最后输出的是a[0][1]+a[1][1]+a[1][2]=2+4+1=7。
2.
以下叙述中正确的是______。
A 使用break语句可以使流程跳出switch语句体
B break语句不能用于提前结束for语句的本层循环
C continue语句使得整个循环终止
D 在for语句中,continue与break的效果是一样的,可以互换
分值: 2
答案:A
[解析] break跳出switch语句或循环语句,contiune结束本次循环,继续进行剩余的循环。所以答案选择A。
3.
有以下程序:
#include<stdio.h>
void fun(int*s, int n1, int n2)
{ int i, j, t;
i=n1; j=n2;
while (i<j)
{ t=*(s+i); *(s+i)=*(s+j); *(s+j)=t; i++; j--; }
}
main()
{ int a[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, i, *p=a;
fun(p, 0, 3); fun(p, 4, 9); fun(p, 0, 9);
#include<stdio.h>
void fun(int*s, int n1, int n2)
{ int i, j, t;
i=n1; j=n2;
while (i<j)
{ t=*(s+i); *(s+i)=*(s+j); *(s+j)=t; i++; j--; }
}
main()
{ int a[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, i, *p=a;
fun(p, 0, 3); fun(p, 4, 9); fun(p, 0, 9);
for(i=0; i<10; i++) printf("%d", *(a+i));
程序的输出结果是
程序的输出结果是
A 0987654321
B 4321098765
C 5678901234
D 0987651234
分值: 1
答案:C
4.
以下叙述中正确的是______。
A 只要适当地修改代码,就可以将do-while与while相互转换
B 对于"for(表达式1;表达式2;表达式3)循环体"首先要计算表达式2的值,以便决定是否开始循环
C 对于"for(表达式1;表达式2;表达式3)循环体",只在个别情况下才能转换成while语句
D 如果根据算法需要使用无限循环(即通常所称的“死循环”),则只能使用while语句
分值: 2
答案:A
[解析] do-while与while可以相互转换,所以选择A。
5.
有以下程序:
# include <stdio.h>
main()
{ char a="H";
a=(a>="A"&&a<="Z")?(a-"A"+"a"):a;
printf("%c\n",a);
}
程序运行后的输出结果是______。
main()
{ char a="H";
a=(a>="A"&&a<="Z")?(a-"A"+"a"):a;
printf("%c\n",a);
}
程序运行后的输出结果是______。
A .A
B .a
C .H
结构体数组不能作为参数传递给函数D .h
分值: 1
答案:D
[解析] 多元运算符问号前面表达式为真,所以(a-"A"+"a")赋值给a,括号里的运算是把大写字母变成小写字母,所以答案应为选项D。
6.
以下定义数组的语句中错误的是______。
A int num[]={1,2,3,4,5,6};
B int num[][3]={{1,2},3,4,5,6};
C int num[2][4]={{1,2},{3,4},{5,6}};
D int num[][4]={1,2,3,4,5,6};
分值: 1
答案:C
[解析] C选项中定义的数组为2行4列,而赋值时赋成了3行,因此出错。
7.
设有某函数的说明为:
int*func(int a[10],int n);
则下列叙述中,正确的是______。
int*func(int a[10],int n);
则下列叙述中,正确的是______。
A 形参a对应的实参只能是数组名
B 说明中的a[10]写成a[]或*a效果完全一样
C func的函数体中不能对a进行移动指针(如a++)的操作
D 只有指向10个整数内存单元的指针,才能作为实参传给a
分值: 1
答案:B
[解析] 本题重点考查返回指针值的函数的相关知识。返回指针值的函数,一般定义形式为:类型名*函数名(参数列表)。fune函数被定义为指针型函数,它的一个形参为整型数组a,形参a对应的实参可以是数组名和指针,A、D错误。实参传递给形参a的是地址值,实参和形参指向同一段内存单元,在fune函数体内对形参a进行移动指针操作,可以改变实参的值,C错误。
8.
有以下程序:
#include <stdio.h>
#define N 5
#define M N+1
#define f(x) (x*M)
#include <stdio.h>
#define N 5
#define M N+1
#define f(x) (x*M)
main( )
{int i1,i2;
i1=f(2);
i2=f(1+1);
printf("%d%d\n",i1,i2);
}
程序的运行结果是______。
{int i1,i2;
i1=f(2);
i2=f(1+1);
printf("%d%d\n",i1,i2);
}
程序的运行结果是______。
A 12 7
B 12 12
C 11 11
D 11 7
分值: 2
答案:D
[解析] 本题考查宏定义。宏定义只是做简单的替换,所以本题中执行语句f(2)=(2*N+1)=11,执行语句f(1+1)=(1+1*N+1)=7。因此选项D正确。
9.
有以下程序
#include<stdio.h>
main()
{int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;
for(i=0;i<3;i++)
for(j=i;j<=i;j++)t+=b[i][b[j][i]];
printf("%d\n",t);
}
程序运行后的输出结果是______。
#include<stdio.h>
main()
{int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;
for(i=0;i<3;i++)
for(j=i;j<=i;j++)t+=b[i][b[j][i]];
printf("%d\n",t);
}
程序运行后的输出结果是______。
A 3
B 4
C 1
D 9
分值: 1
答案:B
[解析] 每次内循环只循环一次就结束,第一次外循环时t=t+b[0][b[0][0]]=1+b[0][0]=1+0=1;第二次外循环时t=t+b[1][b[1][1]]=1+b[1][1]=1+1=2;第三次外循环时t=1+b[2][b[2][2]]=2+b[2][2]=2+2=4。故本题答案为B。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论