安徽理工大学2023年C语言程序设计复习题

本试卷为安徽理工大学2023年C语言程序设计复习题,题目包括:理论基础,控制结构,循环结构,数组/指针数组,字符串/字符串指针,函数/函数指针,指针,结构体,程序题。

覆盖的内容包括:理论题,基础知识,控制结构,循环结构,数组/指针数组,字符串/字符串指针,函数/函数指针,指针,结构体,程序题。

C语言程序设计复习题

一、理论基础 (共20题,每题1分,共计10分)

(  A  )
1、若变量已正确定义,在语句"if(w)printf("%d\n",k);"中,以下不可替代w的是________。
A、a<>b+c
B、ch=getchar()
C、a==b+C
D、a++
(  C  )
2、执行语句"x=(a=3,b=a--)"后,x,a,b的值依次为________。
A、3, 3, 2
B、3,2,2
C、3,2,3
D、2,3,2
(  B  )
3、设x为int型变量,则执行语句x=10和x+=x-=x-x后,x的值为:
A、10
B、20
C、40
D、30
(  C  )
4、以下选项中可作为c语言合法整数的是________。
A、10110B
B、0386
C、0Xffa
D、x2a2
(  B  )
5、设int a=10,b= 11,c=12; 表达式( a + b) < c & &b==c的值是________。
A、2
B、0
C、-2
D、1
(  C  )
6、执行下列语句后,i和n的值为 ( ) int i=10; int n=i++%5;
A、10,0
B、10,1
C、11,0
D、11,1
(  B  )
7、条件语句________。
A、不可以嵌套使用
B、可以嵌套使用
C、在一条件下可以嵌套使用
D、嵌套语句中不能使用else子句
(  A  )
8、以下不能用于实型数据的运算符是________。
A、%
B、/
C、*
D、+
(  B  )
9、设ch是char型变量,其值为a,且有下面的表达式ch=(ch>='a'&&ch<='z')?(ch+32):ch 。上面表达式的值是______。
A、A
B、a
C、Z
D、z
(  C  )
10、下列描述中,正确的是________。
A、每个C程序必须在开头使用预处理命令
B、预处理命令必须位于C程序的开头
C、在C语言中,预处理命令都以<开头
D、语言的预处理命令只能实现宏定义和条件编译的功能
(  A  )
11、若x是double型变量,n是int型变量,执行以下语句( ),并输入3 1.25后,x的值是1.25,n的值是3。。
A、scanf("%d%lf", &n, &x);
B、scanf("%lf%d", &x, &n);
C、scanf("%lf%d", &n, &x);
D、scanf("%d, %lf", &n, &x);
(  B  )
12、运行下述程序段后, i 值为4 的是________。
A、int i=1,j=0;
B、inti=1 ,j=1;I=j=((i=3)++); i+=i+=2;
C、int i==0,j=0;
D、int i=0 , j=1;15(i=2,i+(j=2)); (j==1)?i+=3:i=2;
(  B  )
13、已有定义: int x=3,y=4,z=5;
则表达式 !(x+y)+z-1&&y+z/2 的值是________。
A、0
B、1
C、2
D、-1
(  A  )
14、已知 int i,a; 执行语句"i=(a=2*3,a*5),a+6; "后,变量a的值是________。
A、6
B、12
C、30
D、36
(  B  )
15、c 语言 double 中类型数据占字节数为________。
A、4
B、8
C、12
D、16
(  A  )
16、以下数据中,不正确的数值或字符常量是________。
A、8.9e1.2
B、10
C、0xff00
D、82.5
(  A  )
17、char a1[]="abc",a2[80]="1234"; 将a1串连接到a2串后面的语句是________。
A、strcat(a2,a1);
B、strcpy(a2,a1);
C、strcat(a1,a2);
D、strcpy(a1,a2);
(  D  )
18、在c语言中,char型数据在内存中的存储形式是________。
A、补码
B、反码
C、原码
D、ASCII码
(  B  )
19、执行以下语句后,a,b,c 的值分别为________。
int a,b,c;
a=b=c=1;
++a||++b&&++c;
A、1,1,1
B、2,1,1
C、2,2,1
D、2,2,2
(  A  )
20、以下叙述中错误的是
A、用户所定义的标识符允许使用关键字
B、用户所定义的标识符应尽量做到"见名知意"
C、用户所定义的标识符必须以字母或下划线开头
D、用户定义的标识符中,大、小写字母代表不同标识

二、控制结构 (共10题,每题1分,共计10分)

(  D  )
1、当把以下四个表达式用作if语句的控制表达式时,有一个选项与其它三个选项含义不同,这个选项是________。
A、k%2
B、k%2==1
C、(k%2)!=0
D、!k%2==1
(  C  )
2、设a、b、e、d、m、n均为int型变量,且a=5、b=6、c=7、d=8、m=2、n=2,则逻辑表达式(m=a>b)&&(n=c>d)运算后,n的值是________。
A、0
B、1
C、2
D、3
(  C  )
3、设变量a、b、c、d和y都已正确定义并赋值。若有以下if语句: if(a<b) if(c==d)y=0; else y=1; 该语句所表示的含义是________。
A、y=0,a
y=1,a≥b
B、y=0,a
y=1,a≥b且c≠d
C、y=0,a
y=1,a<B且C≠D
D、y=0,a
y=1,c≠d
(  A  )
4、下列程序的输出结果是________。
main()
{
int a=0,i;
for(i=1;i<5;i++)
{
switch(i)
{
case 0: case 3:a+=1;
case 1;
case 2:a+=2;
default:a+=3;
}
}
printf("%d",a);
}
A、19
B、1
C、6
D、8
(  D  )
5、若int i=10;
执行下列程序后,变量i的正确结果是________。 switch (i)
{
case 0: i+=1;
case 10: i+=1;
case 11: i+=1;
default: i+=1;
}
A、10
B、11
C、12
D、13
(  A  )
6、在c程序中,判逻辑值时,用"非0"表示逻辑值"真",又用"0"表示逻辑值"假"。在求逻辑值时,逻辑真和逻辑假可分别表示为
A、1 0
B、0 1
C、非0非0
D、1 1
(  D  )
7、若a和b均是整型变量并已正确赋值,正确的switch语句是________。
A、switch(a+b);……
B、switch(a+b*3.0)……
C、switch a……
D、switch(a%b)……
(  A  )
8、下列程序的运行结果是________。
main()
{
int a=-5,b=1,c=1;
int x=0,y=2,z=0;
if(c>0)x=x+ y;
if(a<=0)
{
if(b>0) if(c<=0)y=x-y;
}
else if(c>0)y=x-y;
else z=y;
printf("%d,%d,%d\n",x,y,z);
}
A、2,2,0
B、2,2,2
C、0,2,0
D、2,0,2
(  A  )
9、以下程序的输出结果是________。
#include<stdio.h>
main()
{
int a=4,b=3,c=2,d=1;
printf("%d",a<b?a:d<c?d:b);
}
A、1
B、3
C、2
D、4
(  B  )
10、以下叙述中正确的是________。
A、在 C 语言中,逻辑真值和假值分别对应 1 和 0
B、关系运算符两边的运算对象可以是语言中任意合法的表达式
C、对于浮点变量 x 和 y,表达式:x==y 是非法的,会出编译错误
D、分支结构是根据算术表达式的结果来判断流程走向的

三、循环结构 (共10题,每题1分,共计10分)

(  C  )
1、下列叙述中正确的是________。
A、break语句只能用于switch语句体中
B、continue语句的作用是使程序的执行流程跳出包含它的所有循环
C、break语句只能用在循环体内和switch语句体内
D、在循环体内使用break语句和continue语句的作用相同
(  C  )
2、以下说法中不正确是________。
A、使用while循环时,循环变量初始化的操作应在循环语句之前完成
B、while循环是先判断表达式,后执行循环体语句
C、do-while和for循环均是先执行循环体语句,后判断表达式
D、for,while和for-while循环中的循环体均可以由空语句构成
(  C  )
3、若a和b均是整型变量并已正确赋值,正确的switch语句是________。
A、15
B、50
C、55
D、5
(  A  )
4、下列程序是死循环的是________。
A、for(;;)
B、int s=36;
while(s)=s;
C、int m=10;
dom--;while(m>0);
D、int n=5;
while(n>1)
n--;
if(n<0)break;
(  B  )
5、若变量已正确定义,要求程序段完成求5!的计算,不能完成此操作的程序段是________。
A、for(i=1,p=1;i<=5;i++) p*=i;
B、for(i=1;i<=5;i++) { p=1; p*=i; }
C、i=1;p=1; while(i<=5) { p*=i; i++ };
D、i=1;p=1;do { p*=i; i++; } while(1<=5)
(  A  )
6、若有以下程序
#include<stdio.h>
main() {
int a=6,b=0,c=0;
for(;a;) {
b+=a;
a-=++c;
}
printf("%d,%d,%d\n",a,b,c);
}
则程序的输出结果是______。
A、0,14,3
B、1,14,3
C、0,18,3
D、0,14,6
(  D  )
7、以下程序的输出结果是______。
main()
{
int a,b;
for(a=1,b=1;a<=100;a++)
{
if(b>=10) break;
if(b%3==1)
{
b+=3;
continue;
}
}
printf("%d\n",a);
}
A、101
B、6
C、5
D、4
(  D  )
8、以下的 for 循环次数是多少次? for(x=0,y=0;(y!=123)|| (x<4);x++) ;
A、执行 3 次
B、执行 4 次
C、循环次数不定
D、是无限循环
(  D  )
9、下列语句哪些不属于循环语句?
A、for
B、while
C、do while
D、if
(  C  )
10、下面程序的运行结果是________。
main( )
{
int cl=2,c2=0;
while(!c2--)printf(''%d%d'',cl--,c2);
}
A、陷入死循环
B、不输出任何内容
C、输出2 -1
D、输出20

四、数组/指针数组 (共10题,每题1分,共计10分)

(  C  )
1、以下函数按每行8个输出数组中的数据
void fun( int *w, int n)
{
int i;
for(i=0;i<n;i++)
{
________ printf("%d",w[i]);
}
printf("\n");
}
下列划线处应填入的语句是________。
A、if(i/8==0)printf(“\n”);
B、if(i/8==0)continue;
C、if(i%8==0)printf(“\n”);
D、if(i%8==0)continue;
(  C  )
2、若在某函数内部有定义:int a[3][4]; 则数组a中各元素________。
A、可在程序的运行阶段得到初值0
B、可在程序的编译阶段得到初值0
C、不能得到确定的初值
D、可在程序的编译或运行阶段得到初值0
(  D  )
3、已知3个字符为:a、x和5,按它们的ascii码值升序排序,结果是________。
A、5<a<X
B、a<5<X
C、X<a<5
D、5<X<a
(  A  )
4、下面程序的运行结果是
#include<stdio.h>
main()
{
static char a[]="languagef" ,b[]="programe";
char *p1,*p2;
int k;
p1=a;
p2=b;
for(k=0;k<=7;k++) if(*(p1+k)==*(p2+k))
printf("%c",*(p1+k));
}
A、gae
B、ga
C、LanSuage
D、有语法错
(  C  )
5、下面程序的运行结果是
#include<stdio.h>
main()
{
int a=28,b;
char s[10],*p;
p=s;
do
{
b=a%16;
if(b<10) *p=b+48;
else *p=b+55;
p++;
a=a/5;
}
while(a>0);
*p='\0';
puts(s);
}
A、10
B、C2
C、C51
D、\0
(  D  )
6、若有说明语句 char a[ ]="it is mine";
char *p="it is mine";
则以下不正确的叙述是________。
A、a+1表示的是字符t的地址
B、p指向另外的字符串时,字符串的长度不受限制
C、p变量中存放的地址值可以改变
D、a中只能存放10个字符
(  C  )
7、阅读下列程序段: char s[18] = "a book!"; printf("%.4s\n", s);
其输出结果为________。
A、a book!
B、a book
C、a bo
D、a
(  A  )
8、以下程序中的函数reverse的功能是将a所指数组中的内容进行逆置。
void reverse(int a[],int n)
{
int i,t;
for(i=0;i<n/2;i++)
{
t=a[i];
a[i]=a[n-1-i];
a[n-1-i]=t;
}
}
main()
{
int b[10]={1,2,3,4,5,6,7,8,9,10};
int i,s=0;
reverse(b,8);
for(i=6;i<10;i++) s+=b[i];
printf("%d\n",s);
}
程序运行后的输出结果是______。
A、22
B、10
C、34
D、30
(  A  )
9、下面说法正确的是________。
A、char *x,y,**str 同时定义了三个变量,符合语法规范
B、数组说明符的一对方括号中只能使用常量数值
C、单精度浮点值也可以作为数组下标
D、若有定义 float arr[2]则 printf("%2.1f", array[0.5])是合法的语句
(  B  )
10、对长度为 8 的数组进行快速排序,最多需要的比较次数为________。
A、8
B、28
C、56
D、64

五、字符串/字符串指针 (共10题,每题1分,共计10分)

(  D  )
1、s1和s2已正确定义并分别指向两个字符串。若要求:当s1所指串大于s2所指串时,执行语句s; 则以下选项中正确的是________。
A、if(s1>s2)S;
B、if(strcmp(s1,s2))S;
C、if(strcmp(s2,sl)>O)S;
D、if(stremp(s1,s2)>O)S;
(  A  )
2、下列字符串是标识符的是________。
A、aa
B、a-class
C、int
D、LINE 1
(  D  )
3、以下选项中能表示合法常量的是________。
A、整数:1,200
B、实数:1.5E2.0
C、字符斜杠:"\"
D、字符串:"\007"
(  D  )
4、以下正确的字符串常量是________。
A、“╲╲╲”
B、‘abc’
C、Olympic
D、**
(  A  )
5、下列字符串是标识符的是: 。
A、_HJ
B、9_student
C、long
D、LINE 1
(  D  )
6、表达式x+1>x是________。
A、算术表达式
B、非法表达式
C、字符串表达式
D、关系表达式
(  C  )
7、以下能将字符串,you are luck!正确读入的语句组是________。
A、char s[80]; scanf("%s",s);
B、char *s: scanf("%s",s);
C、char s[80]; gets(s);
D、char *s; gets(3);
(  B  )
8、下列数据中属于"字符串常量"的是________。
A、ABC
B、"ABC"
C、'ABC'
D、'A'
(  D  )
9、在宏定义#define PI 3.14159中,用宏名代替一个________。
A、常量
B、单精度数
C、双精度数
D、字符串
(  A  )
10、下面不能正确进行字符串赋值操作的语句是________。
A、char s[5]={"ABCDE"};
B、char s[5]={'A','B','C','D','E'};
C、char *s;s="ABCDEF";
D、char *s; scanf("%s",s);

六、函数/函数指针 (共10题,每题1分,共计10分)

(  C  )
1、设fun()函数的定义形式为 void fun(char ch,float x) {…}则下列对函数fun的调用语句中,正确的是________。
A、fun(”ahc”,3.0);
B、t=fun('D',16.5):
C、fun('65',2.8);
D、fun(32,32);
(  A  )
2、c程序的执行是从( )开始执行的
A、main函数
B、程序的第一行
C、<iostream.h>
D、<stdio.h>
(  A  )
3、在下列原型所示的c++函数中,按"传值"方式传递参数的是________。
A、void f1(int x);
B、void f2(int*x);
C、void f3(const int*x);
D、void f4(int&x);
(  B  )
4、有以下程序
#include<stdio.h>
#define N 4
void fun(int a[][N],int b[]) {
int i;
for(i=0;i<N;i++) {
b[i]=a[i][i]-a[i][N-1-i];
}
}
void main() {
int x[N][N]=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,y[N],i;
fun(x,y);
for(i=0;i<N;i++)printf("%d,",y[i]);
printf("\n");
}
程序运行后的输出结果是________。
A、-12,-3,0,0,
B、-3,-1,1,3,
C、0,1,2,3,
D、-3,-3,-3,-3,
(  B  )
5、有以下程序:
void ss(char *s,char t)
{
while(*s)
{
if(*s==t)
*s=t-''a''+''a'';
s++;
}
}
main()
{
char strl[100]="abcddfefdbd",c=''d'';
ss(strl,c);
printf("%s\n",strl);
}
程序运行后的输出结果是________。
A、ABCDDEFEDBD
B、abcDDfefDbD
C、abcAAfefAbA
D、Abcddfefdbd
(  A  )
6、设有以下函数
f(int a) {
int b=0;
static int c=3;
b++;
c++;
return(a+b+c);
}
如果在下面的程序中调用该函数,则输出结果是______。
main() {
int a=2,i;
for(i=0;i<3;i++)printf("%d\n"f(a));
}
A、7
8
9
B、7
9
11
C、7
10
13
D、7
7
7
(  B  )
7、凡是函数中未指定存储类别的局部变量,其隐含的存储类别为________。
A、静态(static)
B、自动(auto)
C、外部(extern)
D、寄存器(register)
(  D  )
8、对于 if(表达式)语句,以下说法正确的是________。
A、“表达式”的值只能是整数值
B、在“表达式”中不能调用返回整数的函数
C、在“表达式”中不能含有函数调用
D、“表达式”可以是算术表达式
(  D  )
9、c语言函数的隐含存储类别是________。
A、static
B、auto
C、register
D、extern
(  A  )
10、如果在一个复合语句中定义了一个变量,则有关该变量正确的说法是________。
A、只在该复合语句中有效
B、只在该函数中有效
C、在本程序范围内均有效
D、为非法变量

七、指针 (共10题,每题1分,共计10分)

(  B  )
1、以下能正确定义一维数组的选项是________。
A、int a[5]={
0.1,2.3.4,5);
B、char a[]={
0,1,2,3,4,5);
C、char a={'A’,'B','C');
D、int a[5]=”0123”;
(  B  )
2、若已定义实参数组 int a[3][4]= { 2,4,6,8,10 }; 则在被调用函数 f 的下述定义中,对形参数组 b 定义正确的选项是 __________.
A、f(int b[ ][6])
B、f(b) int b[ ][4];
C、f(int b[3][ ]);
D、f(b) int b[4][5];
(  D  )
3、下列函数原型声明中错误的是________。
A、void Fun(int x=0,int y=0);
B、void Fun(int x,int y);
C、void Fun(int x,int y=0);
D、void Fun(int x=0,int y);
(  C  )
4、若定义了int m,n=0,*p1=&m; 则与m=n等价的语句是________。
A、m=*p1
B、*p1=&*n
C、*p1=*&n
D、*&p1=&*n
(  D  )
5、在c语言中,关于变量的作用域,下列描述中错误的是________。
A、局部变量只在整个函数的运行周期中有效
B、全局变量的作用域为整个程序的运行周期
C、当全局变量与局部变量重名时,局部变量会屏蔽掉全局变量
D、全局变量会覆盖掉所有与它重名的局部变量
(  D  )
6、假定int类型变量占用4个字节,若有定义:int x[10]= {0,2,4}则数组x在内存中所占字节数是______。
A、4
B、12
C、20
D、40
(  D  )
7、若有int *p1, *p2,k; 不正确的语句是________。
A、p1=&k
B、p2=p1
C、*p1=k+12
D、k=p1+p2
(  A  )
8、若有 int a[10], *p=a;
,且 a 数组已赋值,则与 a[4]不等价的表达式为________。
A、p+4
B、*(p+4)
C、*(a+4)
D、p[4]
(  C  )
9、以下叙述中错误的是________。
A、C语言是一种结构化程序设计语言
B、结构化程序由顺序、分支、循环三种基本结构组成
C、使用三种基本结构构成的程序只能解决简单问题
D、结构化程序设计提倡模块化的设计方法
(  D  )
10、若调用 fputc 函数输出字符成功,则其返回值是()。
A、EOF
B、1
C、0
D、输出的字符

八、结构体 (共10题,每题1分,共计10分)

(  B  )
1、已知有如下结构体:
struct sk
{
int a;
float b;
}
data,*p;
若有p = &data,则对data的成员a引用正确的是________。
A、(*p).data.a
B、(*p).a;
C、p->data.a
D、P.data.a
(  C  )
2、以下对结构体类型变量的定义中,不正确的是________。
A、typedef struct aa {
int n;
float m;
} AA;
AA tdl;
B、#define AA struct aa AA{
int n;
float m;
} tdl;
C、struct {
int n;
float m;
} aa;
struct aa tdl;
D、struct {
int n;
float m,
} tdl;
(  D  )
3、在16位pc机上使用c语言,若有如下定义
struct data {
int i;
char ch;
double f;
} b;
则结构变量b占用内存的字节数是________。
A、1
B、2
C、7
D、11
(  D  )
4、若有下面的说明和定义,则sizeof(struct aa)的值是________。
struct aa {
int rl;
double r2;
float r3;
union uu {
char u1[5];
long u2[2];
} ua;
} mya;
A、30
B、29
C、24
D、22
(  A  )
5、设有以下语句
typedef struct s
{
int g;
char h;
}
t;
则下面叙述中正确的是________。
A、可用S定义结构体变量
B、可以用T定义结构体变量
C、S是struct类型的变量
D、T是struct S类型的变量
(  D  )
6、表达式 *((int *)(p+1)+2)的值时_______.
static struct
{
int x, y[3];
}
a[3] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}}, *p;
p = a+1;
A、3
B、7
C、10
D、11
(  B  )
7、c语言中,定义结构体的保留字是________。
A、union
B、struct
C、enum
D、typedef
(  A  )
8、定义共用体的关键字是________。
A、union
B、enum
C、struct
D、typedef
(  C  )
9、有以下程序
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;
int i;
float sum=0;
p=s+2;
for(i=0;i<3;i++)sum=sum+p->score[i];
printf("%6.2f\n",sum);
}
程序运行后的输出结果是________。
A、250.00
B、250
C、285.00
D、285
(  D  )
10、当定义一个结构体变量时,系统为它分配的内存空间是________。
A、结构中一个成员所需的内存容量
B、结构中第一个成员所需的内存容量
C、结构体中占内存容量最大者所需的容量
D、结构中各成员所需内存容量之和

九、程序题 (共10题,每题1分,共计10分)

(  C  )
1、有以下程序:
main()
{
int x=102,y=012;
printf("%2d,%2d\n",x,y);
}
执行后输出结果是________。
A、10,01
B、02,12
C、102,10
D、02,10
(  D  )
2、读出以下语句的输出结果是________。 int x=10,y=10;printf("%d %d\n",x--,--y);
A、10 10
B、9 9
C、9 10
D、10 9
(  C  )
3、有以下程序 int a=2;
int f(int n)
{
static int a=3;
int t=0;
if(n%2)
{
static int a=4;
t += a++;
}
else
{
static int a=5;
t += a++;
}
return t+a++;
}
main()
{
int s=a, i;
for( i=0; i<3; i++) s+=f(i);
printf("%d\n", s);
}
程序运行后的输出结果是________。
A、26
B、28
C、29
D、24
(  C  )
4、以下程序
#include <stdio.h>
#define SUB(a) (a)-(a)
main()
{
int a=2,b=3,c=5,d;
d=SUB(a+b)*c;
printf("%d\n",d);
}
程序运行后的结果是________。
A、0
B、-12
C、-20
D、10
(  A  )
5、有以下程序
main( )
{
unsigned char a,b;
a=4|3;
b=4&3;
printf("%d %d\n",a,b);
}
执行后输出结果是________。
A、7 0
B、0 7
C、1 1
D、43 0
(  D  )
6、以下程序的输出结果是
#include <stdio.h>
#include <string.h>
main()
{
char b1[8]="abcdefg",b2[8],*pb=b1+3;
while (--pb>=b1) strcpy(b2,pb);
printf("%d\n",strlen(b2));
}
A、8
B、3
C、1
D、7
(  A  )
7、下列语句执行后的结果是______。 y=5; p=&y; x=*p++;
A、x=5,y=5
B、x=5,y=6
C、x=6,y=5
D、x=6,y=6
(  C  )
8、有如下程序
main( )
{
int a=7,b=5,c=9;
if(a<b)if(b<0) c=0;
else c++;
printf("%d\n",c);
}
该程序的输出结果是______。
A、0
B、10
C、9
D、7
(  A  )
9、以下程序的输出结果是______。
#include <stdio.h>
#include <string.h>
main()
{
char str[12]={'s','t','r','i','n','g'};
printf("%d\n",strlen(str) );
}
A、6
B、7
C、11
D、12
(  B  )
10、下面程序的运行结果是________。
fun(int p)
{
int k=1;
static t=2;
k=k+1;
t=t+1;
return(p*k*t);
}
main( )
{
int x=4;
fun(x);
printf(''%d\n'',fun(x));
}
A、4
B、32
C、30
D、16