构造型数据类型练习题.docx
《构造型数据类型练习题.docx》由会员分享,可在线阅读,更多相关《构造型数据类型练习题.docx(11页珍藏版)》请在冰点文库上搜索。
![构造型数据类型练习题.docx](https://file1.bingdoc.com/fileroot1/2023-5/10/766b0412-86d9-4777-bf7f-26e86b7a507e/766b0412-86d9-4777-bf7f-26e86b7a507e1.gif)
构造型数据类型练习题
构造型数据类型练习题
(一)选择题
1.下面程序段的运行结果是_________.
chara[7]="abcdef";
charb[4]="ABC";
strcpy(a,b);
printf("%c",a[5]);
a)空格b)\0c)ed)f
2.判断字符串s1是否大于字符串s2,应当使用_______.
a)if(s1>s2)b)if(strcmp(s1,s2))
c)if(strcmp(s2,s1)>0)d)if(strcmp(s1,s2)>0)
3.若二维数组a有m列,则计算任一元素a[i][j]在数组中位置的公式为______.
(假设a[0][0]位于数组的第一个位置上。
)
a)i*m+jb)j*m+ic)i*m+j-1d)i*m+j+1
4.若二维数组a有m列,则在a[i][j]前的元素个数为________.
a)j*m+ib)i*m+jc)i*m+j-1d)i*m+j+1
5.25.若有以下程序段:
。
。
。
。
。
。
inta[]={4,0,2,3,1},i,j,t;
for(i=1;i<5;i++)
{t=a[i];j=i-1;
while(j>=0&&t>a[j])
{a[j+1]=a[j];j--;}
a[j+1]=t;}
......
则该程序段的功能是_________.
a)对数组a进行插入排序(升序)
b)对数组a进行插入排序(降序)
c)对数组a进行选择排序(升序)
d)对数组a进行选择排序(降序)
6.有两个字符数组a、b,则以下正确的输入语句是_______.
a)gets(a,b);b)scanf("%s%s",a,b);
c)scanf("%s%s",&a,&b);d)gets("a"),gets("b");
7.以下为一维整型数组a的正确说明是_________.
a)inta(10);b)intn=10,a[n];
c)intn;d)#defineSIZE10;
scanf("%d",&n);inta[SIZE];
inta[n];
8.以下对二维数组a的正确说明是________.
a)inta[3][];b)floata(3,4);
c)doublea[1][4]d)floata(3)(4);
9.下面程序的功能是从键盘输入一行字符,统计其中有多少个单词,单词之间用
空格分隔,请选择填空。
#include
main()
{
chars[80],c1,c2='';
inti=0,num=0;
gets(s);
while(s[i]!
='\0')
{c1=s[i];
if(i==0)c2='';
elsec2=s[i-1];
if(___)num++
i++;
}
printf("Thereare%dwords.\n",num);
}
a)c1==''&&c2==''b)c1!
=''&&c2==''
c)c1==''&&c2!
=''d)c1!
=''&&c2!
=''
10.下面程序的运行结果是________.
#include
main()
{charstr[]="SSSWLIA",c;
intk;
for(k=2;(c=str[k])!
='\0';k++)
{switch(c)
{case'I':
++k;break;
case'L':
continue;
default:
putchar(c);continue;
}
putchar('*');
}
}
a)SSW*b)SW*c)SW*Ad)SW
11.C语言结构体类型变量在程序执行期间_________.
a)所有成员一直驻留在内存中
b)只有一个成员驻留在内存中
c)部分成员驻留在内存中
d)没有成员驻留在内存中
12.下面程序的运行结果是___________.
main()
{
structcmplx{intx;
inty;
}cnum[2]={1,3,2,7};
printf("%d\n",cnum[0].y/cnum[0].x*cnum[1].x);
}
a)0b)1c)3d)6
13.设有如下定义:
structsk
{intn;
floatx;
}data,*p;
若要使p指向data中的n域,正确的赋值语句是_______.
a)p=&data.n;
b)*p=data.n;
c)p=(structsk*)&data.n;
d)p=(structsk*)data.n;
14.以下对结构体变量stu1中成员age的非法引用是________.
structstudent
{intage;
intnum;
}stu1,*p;
p=&stu1;
a)stu1.ageb)student.age
c)p->aged)(*p).age
15.下面对typedef的叙述中不正确的是______.
a)用typedef可以定义各种类型名,但不能用来定义变量
b)用typedef可以增加新类型
c)用typedef只是将已存在的类型用一个新的标识符来代表
d)使用typedef有利于程序的通用和移植
16.以下scanf函数调用语句中对结构体变量成员的不正确引用是________.
structpupil
{charname[20];
intage;
intsex;
}pup[5],*p;
p=pup;
a)scanf("%s",pup[0].name);
b)scanf("%d",&pup[0].age);
c)scanf("%d",&(p->sex));
d)scanf("%d",p->age);
(二)填空题
1.若有定义:
doublex[3][5];则x数组中行下标的下限为_________,列下标的上限为_________。
2.下面程序以每行4个数据的形式输出a数组,请填空。
#defineN20
main()
{inta[N],i;
for(i=0;ifor(i=0i{if(_____________)_____________
printf("%3d",a[i]);
}
printf("\n");
}
3.下面程序可求出矩阵a的主对角线上的元素之和,请填空。
main()
{inta[3][3]={1,3,5,7,9,11,13,15,17},sum=0,i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(_____)sum=sum+_______;
printf("sum=%d\n",sum);
}
4.当从键盘输入18并回车后,下面程序的运行结果是________.
main()
{intx,y,i,a[8],j,u,v;
scanf("%d",&x);
y=x;i=0;
do
{u=y/2;
a[i]=y%2;
i++;y=u;
}while(y>=1)
for(j=i-1;j>=0;j--)
printf("%d",a[j]);
}
5.下面程序用插入法对数组a进行降序排序。
请填空。
main()
{inta[5]={4,7,2,5,1};
inti,j,m;
for(i=1;i<5;i++)
{m=a[i];
j=____;
while(j>=0&&m>a[j])
{_______;
j--;
}
_______=m;
}
for(i=0;i<5;i++)
printf("%d",a[i]);
printf("\n");
}
6.下面程序的功能是在三个字符串中找出最小的,请填空。
#include
#include
main()
{chars[20],str[3][20];
inti;
for(i=0;i<3;i++)gets(str[i]);
strcpy(s,_______);
if(strcmp(str[2],s)<0)strcpy(s,str[2]);
printf("%s\n",_______);
}
7.下面程序的运行结果是________.
#include
main()
{chars[]="ABCCDA";
intk;charc;
for(k=1;(c=s[k])!
='\0';k++)
{switch(c)
{case'A':
putchar('%');continue;
case'B':
++k;break;
default:
putchar('*');
case'C':
putchar('&');continue;
}
putchar('#');
}
}
8.以下程序的运行结果是________.
structn{
intx;
charc;
};
main()
{structna={10,'x'};
func(a);
printf("%d,%c",a.x,a.c);
}
func(structnb)
{
b.x=20;
b.c='y';
}
9.若有定义:
structnum
{inta;
intb;
floatf;
}n={1,3,5.0};
structnum*pn=&n;
则表达式pn->b/n.a*++pn->b的值是________,表达式(*pn).a+pn->f的值是________.
10.以下程序的运行结果是________.
structks
{inta;
int*b;
}s[4],*p;
main()
{
intn=1;
printf("\n");
for(i=0;i<4;i++)
{
s[i].a=n;
s[i].b=&s[i].a;
n=n+2;
}
p=&s[0];
p++;
printf("%d,%d\n",(++p)->a,(p++)->a);
}
11.结构数组中存有三人的姓名和年龄,以下程序输出三人中最年长者的姓名
和年龄。
请在_______内填入正确内容。
statistructman{
charname[20];
intage;
}person[]={"li=ming",18,
"wang-hua",19,
"zhang-ping",20
};
main()
{structman*p,*q;
intold=0
p=person;
for(;p_____;p++)
if(oldage)
{q=p;______;}
printf("%s%d",______);
}
12.以下程序段的功能是统计链表中结点的个数,其中first为指向第一个结点
的指针(链表不带头结点)。
请在______内填入正确内容。
structlink
{chardata;
structlink*next;
};
....
structlink*p,*first;
intc=0;
p=first;
while(_____)
{_______;
p=_______;
}
(三)程序设计题
1.输入10个整数存入数组中,找出其中最小数和次小数。
2.有10个数围成一圈,求相邻三个数之和的最小值。
3.对数组A中的N(1例如:
若A数组为{5,3,4,7,3,5,6},则输出为3,1,2,5,1,3,4。
4.将一个数组中的数值按逆序重新存放。
例如,原来顺序为8,6,5,4,1。
要求改为1,4,5,6,8。
5.利用结构体类型编制一程序,实现输入三个学生的学号,数学、语文、英语成绩,然后计算每位学生的总成绩以及平均成绩并按总分由大到小输出成绩表。
6.定义一个包括年月日成员的结构体变量,将其转换成这一年的第几天并输出。
注意闰年问题。
7.定义枚举类型money,用枚举元素代表人民币的面值。
人民币面值包括1、2、5分,1、2、5角,1、2、5、10、20、50、100元。