2023年数组和结构题库_第1页
2023年数组和结构题库_第2页
2023年数组和结构题库_第3页
2023年数组和结构题库_第4页
2023年数组和结构题库_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四章数组和结构一、选择题1.有结构型定义如下:structperson{ charname[20]; intage; intsex;}w[5],*p=w;那么下面scanf语句中对结构变量成员不对的的引用是()。A.scanf(“%s”,w[0].name);B.scanf(“%d”,&w[0].age);C.scanf(“%d”,&(p->sex));D.scanf(“%d”,p->age);答:D2.解决字符串必须调用(1),且一方面要声明预编译命令(2)。不能用赋值运算符“=”对字符串赋值,应调用(3)函数;也不能用关系运算符“==”、“>”、“<”对字符串进行比较,应调用(4)函数。答案:(1)字符串库函数(2)#include<string.h>(3)strcpy(4)strcmp3.有如下程序段:charstr[14]={"Iam"};strcat(str,"sad!");scanf("%s",str);printf("%s",str);当输入为happy!<CR>时,输出的结果是()。(A)Iamsad!(B)happy!(C)Iamhappy!(D)happy!ad!答案:(B)4.以下对二维数组a进行不对的初始化的是。A.inta[][3]={3,2,1,1,2,3};B.inta[][3]={{3,2,1},{1,2,3};C.inta[2][3]={{3,2,1},{1,2,3}};D.inta[][]={{3,2,1},{1,2,3}};答案:D5.以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。#defineN10voidarrin(intx[N]){ inti=0; while(i<N) scanf("%d",);}在下划线处应填入的是。(2023年4月)A)x+iB)&x[i+1]C)x+(i++)D)&x[++i]答案:C6.下列描述中不对的的是。A)字符型数组中可以存放字符串B)可以对字符型数组进行整体输入、输出C)可以对整型数组进行整体输入、输出D)不能在赋值语句中通过赋值运算符“=”对字符型数组进行整体赋值答案:C7.以下程序的输出结果是。#include<stdio.h>#include<string.h>voidmain(){ charb[30]; strcpy(&b[0],"CH"); strcpy(&b[1],"DEF"); strcpy(&b[2],"ABC"); printf("%s\n",b);}A)CHDEFB)DEFABCC)CDABCD)CHABC答案:C8.下面能对的定义一维数组的选项是。A)intnum[]B)#defineN100C)intnum[0..100]D)intN=100intnum[N]intnum[N]答案:B9.下面对的的数组定义语句是。A)inty[1][4]={1,2,3,4,5};B)floatx[3][]={{1},{2},{3}};C)longs[2][3]={{1},{1,2},{1,2,3}};D)doublet[][3]={0};答案:D10.执行下列程序时,输入123<空格>456<空格>789<回车>,输出结果是。#include<stdio.h>voidmain(){ chars[100]; intc,i; scanf("%c",&c);scanf("%d",&i);scanf("%s",s); printf("%c,%d,%s\n",c,i,s);}A)123,456,789B)1,456,789C)1,23,456,789D)1,23,456答案:D11.下面程序的输出结果为()。#include<stdio.h>voidmain(){ inta[3],i,j,k=2; for(i=0;i<3;i++) a[i]=0; for(i=0;i<k;i++) for(j=0;j<k;j++) a[j]=i*j; printf("%d\n",a[2]);}A)0B)1C)2D)3答案:A12.下面程序的输出结果是()。#include<stdio.h>voidmain(){ inti,j,k; charstr[5]; for(i=0;i<5;i++)str[i]='A'; k=4; for(i=0;i<k;i++) for(j=0;j<k;j++) str[j]=str[i]+32; printf("%c\n",str[k]);}A)aB)AC)BD)不拟定的值答案:B13.下面程序的输出结果是()。#include<stdio.h>voidmain(){ chars[4][20]; inti; scanf("%s%s",s[0],s[1]); gets(s[2]);gets(s[3]); for(i=0;i<4;i++) puts(s[i]);}输入数据如下:(此处<CR>代表回车符)aabb<CR>ccdd<CR>A)aaB)aaC)aaD)aabbbbbbbbccccccddddccdddd答案:A14.假定int类型变量占用两个字节,其有定义:intx[10]={0,2,4};,则数组x在内存中所占字节数是。(A)3(B)6(C)10(D)20答案:D15.以下程序的输出结果是。#include<stdio.h>#include<string.h>voidmain(){ charst[20]="hello\0\t\\"; printf("%d%d\n",strlen(st),sizeof(st));}(A)99(B)520(C)1320(D)2020答案:B16.以下对结构体类型变量td的定义中,错误的是。(A)typedefstructaa(B)structaa{intn;{intn;floatm;floatm;}AA;}td;AAtd;structaatd;(C)struct(D)struct{intn;{intn;floatm;floatm;}aa;}td;structaatd; 答案:C17.下列程序的输出结果为。#include<stdio.h>voidmain(){ intk=0,i,s[]={1,-9,7,2,-10,3}; for(i=0;i<6;i++) if(s[i]>s[k]) k=i; printf("\n%d\n",k);}(A)4(B)2(C)3(D)1答案:B18.有如下定义:structdate{intyear,month,day;};structworklist{charname[20];charsex;structdatebirthday;}personone;对结构体变量personone的出生年份进行赋值时,下面对的的赋值语句是。(A)year=1968(B)birthday.year=1968(C)personone.birthday.year=1968(D)personone.year=1968答案:C19.若程序中有如下的说明和定义:structexep{intx,y;}structexepx,y;…则会发生的情况是。(A)编译时犯错(B)能通过编译、连接、执行(C)能通过编译但连接犯错(D)能通过编译、连接,但不能执行答案:A20.设有以下语句typedefstructS{intg;charh;}T;则下面叙述中对的的是。A)可用S定义结构体变量B)可以用T定义结构体变量C)S是struct类型的变量D)T是structS类型的变量答案:B21.有结构定义如下:struct{intk:2;int:0;unsignedintm:5;}st;那么变量st所占用的字节数是()。A.3B.2C.1D.4答:B22.以下对结构类型变量的定义中,不对的的是。A)typedefstructaaB)#defineAAstructaa{ intn;AAAA{intn; floatm;floatm;}AA;}tdl;AAtdl;C)structD)struct{intn;{intn;floatm;floatm;}aa;}tdl;structaatd1;答案:C23.当执行下面的程序时,假如输入ABC,则输出结果是。(2023年4月)#include<stdio.h>#include<string.h>voidmain(){ charss[10]="12345"; gets(ss); strcat(ss,"6789"); printf("%s\n",ss);}A)ABC6789B)ABC67C)12345ABC6D)ABC456789答案:A24.给出以下定义charx[]="abcdefg";chary[]={'a','b','c','d','e','f','g'};则对的的叙述为。A)数组x和数组y等价B)数组x和数组y的长度相同C)数组x的长度大于数组y的长度D)数组x的长度小于数组y的长度答案:C25.下面程序的输出是

A)0 B)1 C)3 D)6

#include<stdio.h>voidmain(){ structcmplx{ intx;inty; }cnum[2]={1,3,2,7}; printf("%d\n",cnum[0].y/cnum[0].x*cnum[1].x);}答案:D26.下列程序的输出结果是A)5 B)6 C)7 D)8#include<stdio.h>structabc{ inta,b,c;};voidmain(){ structabcs[2]={{1,2,3},{4,5,6}}; intt; t=s[0].a+s[1].b; printf("%d\n",t);}答案:B27.设有以下说明语句structex{ intx;floaty;charz;}example;则下面的叙述中不对的的是A)struct是结构体类型的关键字 B)example是结构体类型名C)x,y,z都是结构体成员名 D)structex是结构体类型名答案:B28.设有如下说明typedefstruct{intn;charc;doublex;}STD;则以下选项中,能对的定义结构体数组并赋初值的语句是A)STDtt[2]={{1,'A',62},{2,'B',75}};B)STDtt[2]={1,"A",62},2,"B",75};

C)structtt[2]={{1,'A'},{2,'B'}};

D)structtt[2]={{1,"A",62.5},{2,"B",75.0}};答案:A29.有以下程序#include<stdio.h>voidmain(){ inti,test,p[17],head; for(i=0;i<16;i++) p[i]=i+1; p[16]=0; test=0; while(test!=p[test]) { for(i=1;i<3;i++) { head=test; test=p[test]; } p[head]=p[test]; test=p[head]; } printf("\n%5d",test);}程序执行后的输出结果是_______。A)1,2,3 B)2,3,4C)10 D)4答案:C30.有以下程序#include<stdio.h>voidmain(){ intnum[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}},i,j; for(i=0;i<4;i++) { for(j=0;j<=i;j++)printf("%4c",''); for(j=_____;j<4;j++)printf("%4d",num[i][j]); printf("\n"); }}若要按以下形式输出数组右上半三角1234678111216则在程序下划线处应填入的是______。A)i-1 B)i C)i+1 D)4-i答案:B31.有以下程序#include<stdio.h>voidmain(){ intp[8]={11,12,13,14,15,16,17,18},i=0,j=0; while(i++<7) if(p[i]%2) j+=p[i]; printf("%d\n",j);}程序运营后的输出结果是______。A)42 B)45 C)56 D)60答案:B32.有以下程序#include<stdio.h>voidmain(){ charp[]={'a','b','c'},q[]="abc"; printf("%d%d\n",sizeof(p),sizeof(q));}程序运营后的输出结果是______。A)44 B)33 C)34 D)43答案:C33.有以下程序#include<stdio.h>#include<string.h>voidmain(){ charp[]={'a','b','c'},q[10]={'a','b','c'}; printf("%d%d\n",strlen(p),strlen(q));}以下叙述中对的的是______。A)在给p和q数组置初值时,系统会自动添加字符串结束符,故长度都为3B)由于p数组中没有字符串结束符,长度不能拟定;但q数组中字符串长度为3C)由于q数组中没有字符串结束符,长度不能拟定;但p数组中字符串长度为3D)由于p和q数组中都没有字符串结束符,故长度都不能拟定答案:B34.有以下程序#include<stdio.h>#include<string.h>voidmain(){ chara[7]="a0\0a0\0";inti,j; i=sizeof(a);j=strlen(a); printf("%d%d\n",i,j);}程序运营后的输出结果是______。A)22 B)76 C)72 D)62答案:C35.设有如下说明typedefstructST{longa;intb;charc[2];}NEW;则下面叙述中对的的是______。A)以上的说明形式非法 B)ST是一个结构体类型C)NEW是一个结构体类型 D)NEW是一个结构体变量答案:C36.以下对结构体类型变量td的定义中,错误的是______。A)typedefstructaa B)structaa{intn; {intn;floatm; floatm;}AA; }td;AAtd; structaatd;C)struct D)struct{intn; {intn;floatm; floatm;}aa; }td;structaatd;答案:C37.表达式strcmp("box","bottle")的值是。A)正整数B)负整数C)0D)不拟定的数答案:A二、填空题1.有如下程序段:#include<stdio.h>voidmain(){ chars[]="SSSWiLTECH1\1\11W\1WALLMP1"; intj; charch; for(j=2;(ch=s[j])!='\0';j++) { switch(ch) { case'A': putchar('a');continue; case'1': break; case1: while((ch=s[++j])!='\n'&&ch!='\0'); case9: putchar('#'); case'E': case'L': continue; default: putchar(ch);continue; } putchar('*'); } printf("\n");}此程序段的输出结果是。答案:SwiTCH*#2.定义结构类型如下:structa{charc;chars[20];intm;};请使用此类型定义一个结构变量b1,并在定义时给各成员变量赋初值,使c的值为‘n’,s中存放字符串“person”,m的值为3:。答案:structab1={'n',"person",3};3.以下sum函数的功能是计算下列级数之和。(2023年4月)s=1+x+x2/2!+x3/3!+……+xn/n!请给函数中的各变量对的赋初值。doublesum(doublex,intn){ inti;doublea,b,s; for(i=1;i<=n;i++) { a=a*x;b=b*i;s=s+a/b; } returns;}答案:a=b=s=1.04.以下程序用来输出结构体变量ex所占存储单元的字节数:#include<stdio.h>structst{charname[20];doublescore; };voidmain(){structstex; printf(“exsize:%d\n”,sizeof());}答案:ex或structst5.由25人围坐成圆圈,先从任意一人出发,用1到25顺时针依次编号,然后从1号开始顺时针报数(1、2、3、…),凡报5的倍数者出圈,剩下者继续报数,求出最后出圈者的编号。#include<stdio.h>voidmain(){inta[26],j,n,count;for(=1;j<=25;j++)a[j]=j;j=1;count=0;n=【1】;do{if(a[j]!=0){n++;if(n%5==0){【2】;if(count==24)printf("%d\n,",j);count++;}}j++;if(j>25)j=1;}while(【3】);}答案:【1】0【2】a[j]=0【3】count<256.有一个已排好序的数组,现输入一个数,规定按本来的顺序规律,将它插入到数组中。采用的算法是:假设排序为从小到大,对输入的数,检查它在数组中哪一个数之后,然后将比这个数大的数顺序后移一个位置,在空出的位置上将该数插入。请填空。#include<stdio.h>#defineN100voidmain(){floata[N+1],x;inti,p;printf(“输入已排好序的数列:”);for(i=0;i<N;i++)scanf("%f",&a[i]);printf(“输入要插入的数:”);scanf("%f",&x);for(i=0,P=N;i<N;i++)if(x<a[i])/*找到一个大于x的元素a[p],即在a[p]之前插入x*/{1;break;}for(i=N-1);2;i--)/*将a[p]~a[ N-1]元素后移一个位置*/a[i+1]=a[i];a[p]=x;/*在a[p]处插入x*/for(i=0;3;i++)/*输出a数组的所有元素*/{printf("%8.2f",a[i]);if(i%5==0)printf(“\n”);}}答案:1p=i2i>=p3i<=N7.以下程序运营后的输出结果是。#include<stdio.h>voidmain(){ inti,j,a[][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++) for(j=i+1;j<3;j++)a[j][i]=0; for(i=0;i<3;i++) { for(j=0;j<3;j++)printf("%d",a[i][j]); printf("\n"); }}答案: 1230560098.下面程序对输入的字符串中每一个数字出现的次数进行计数。请补全程序。#include<stdio.h>voidmain(){intj,ch,【1】;for(j=0;j<10;++j)digit[j]=0;while((ch=getchar())!='\n')if(ch>='0'&&ch<='9')【2】;for(j=0;j<10;++j)printf("%d:%d\n",j,digit[j]);}答案:【1】digit[10]【2】digit[ch-'0']++9.以下程序运营后的输出结果是。#include<stdio.h>voidmain(){ inta[4][4]={{1,2,3,4},{5,6,7,8,},{11,12,13,14},{15,16,17,18}}; inti=0,j=0,s=0; while(i++<4) { if(i==2||i==4)continue; j=0; do{ s+=a[i][j];j++; }while(j<4); }printf("%d\n",s);}答案:9210.下述程序的功能是:从键盘中输入n个整数,使用冒泡法对这n个整数从小到大进行排序并输出。请在横线上填上相应的内容。#include<stdio.h>voidmain(){ inti,j,temp,a[100],n; scanf("%d",&n); for(i=0;i<n;i++)scanf("%d",&a[i]); for(i=1;i<n;i++) for(j=0;j<(1);j++) if((2)){temp=a[j];a[j]=a[j+1];a[j+1]=temp;} for(i=0;i<n;i++)printf("%d",a[i]); printf("\n")}答案:(1)n-i(2)a[j]>a[j+1]11.以下程序记录从终端输入的字符中每个大写字母的个数,num[0]中记录字母A的个数,其他依次类推。用#号结束输入,请填空。#include<stdio.h>#include<ctype.h>voidmain(){ intnum[26]={0},i;charc;while(【1】!='#') if(isupper(c))num[【2】)+=1; for(i=0;i<26;i++) if(num[i])printf("%c:%d\n",i+'A',num[i]);}答案:【1】(c=getchar())【2】c-'A'12.以下程序的功能是将字符串s中的数字字符放入d数组中,最后输出d中的字符串。例如,输入字符串abc123edf456gh,执行程序后输出123456。请填空。(2023年9月)#include<stdio.h>#include<ctype.h>voidmain(){ chars[80],d[80]; inti,j; gets(s); for(i=j=0;s[i]!='\0';i++) if(){d[j]=s[i];j++;} d[j]='\0'; puts(d);}答案:s[i]>='0'&&s[i]<='9'或s[i]>=48&&s[i]<=57三、编程题1.编写一个程序,使用下面的结构,以结构数组的形式存储颜色编码,规定程序输出数组的各颜色值,把每种颜色的编码和颜色名按行显示在屏幕上。structcolor_table{intcolor;/*colorcodenumber*/charcol_name[10];/*colorname*/}答:程序如下:#include<stdio.h>structcolor_table{ intcode; charcol_name[11];};voidmain(){ structcolor_tablecol_array[]={ 0,"BLACK", 1,"BLUE", 2,"GREEN", 3,"CYAN", 4,"RED", 5,"MAGENTA", 6,"BROWN", 7,"LIGHTGRA", 8,"DARKGRAY", 9,"LIGHTBLUE", 10,"LIGHTGREEN", 11,"LIGHTCYAN", 12,"LTGHTRED" }; inti; for(i=0;i<=12;i++) printf("%d%s\n",col_array[i].code,col_array[i].col_name);}2.编写一个程序,在一维数组里输入一句英文,记录该句里出现的单词个数(单词之间是用空格分隔的)。答:程序编写如下:#include<stdio.h>voidmain(){ charstr[80]; intj,n=0,w=0; printf("Pleaseinputasentence:\n"); gets(str);/*ÊäÈëÒ»¾äÓ¢ÎÄ*/ for(j=0;str[j]!='\0';j++) if(str[j]=='') w=0; elseif(w==0) { w=1; n++; } printf("Thereare%dwordsinthisline.\n",n);}这里,开辟一个长为80个字符的一维数组str,由它存放输入的英文句子。输入后,从前往后扫视数组中的每一个元素,直到碰见字符串结束符‘\0’时停止。扫视时,对字符的性质加以判别。假如是空格就跳过去;假如是字符,则表达进入了一个单词,需要记数。但有两个问题需要考虑:一是不能光用空格数来反映单词数,由于有时也许会出现连续几个空格。比如下图第2次运营时,单词banner与on之间出现了3个空格;二是不能碰到字符就记数,对于每一个单词,只能记数一次。因此,在程序里设立了一个标志w,碰到空格时,就把w置为0,表达在单词之外。一旦碰到字符且w等于0,则表达是进入一个新的单词,于是让变量n记数,同时把w改置为1,表达现在位于单词之内。3.定义一个结构,有3个成员:姓名、基本工资、岗位工资。说明一个该结构的结构数组。对其元素按下表初始化。然后打印每个人的姓名和工资总额。姓名基本工资岗位工资Lihuaqiu8451800Liumingshang9202400答:程序编写如下:#include<stdio.h>structperson{ charname[20]; intwages; intsubsidy;};voidmain(){ structpersons[4]={{"Lihuaqiu",845,1800},{"liumingshang",920,2400}}; intk; for(k=0;k<2;k++) printf("%s:%d\n",s[k].name,s[k].wages+s[k].subsidy);}4.在上题结构定义的基础上,于主函数main里输入10个人员信息,然后输出应发放的工资总额、工资数最大者和最小者信息。答:程序编写如下:#include<stdio.h>structperson{ charname[20]; intwages; intsubsidy;};voidmain(){ intk,pmax,pmin; intsum; structpersons[10]; printf("Pleaseenterinformation:\n"); for(k=0;k<10;k++) scanf("%s%d",s[k].name,&s[k].wages,&s[k].subsidy); sum=s[0].wages+s[0].subsidy; pmax=s[0].wages+s[0].subsidy; pmin=s[0].wages+s[0].subsidy; for(k=1;k<10;k++) { sum+=s[k].wages+s[k].subsidy;/*求总工资*/ if(pmax<s[k].wages+s[k].subsidy)/*求最高工资*/ pmax=s[k].wages+s[k].subsidy; if(pmin>s[k].wages+s[k].subsidy)/*求最低工资*/ pmin=s[k].wages+s[k].subsidy; } printf("sum=%1d,max=%d,min=d\n",sum,pmax,pmin);}5.让用户输入一系列的整数,先将其按从小到大的顺序排列并去掉反复的数据,再请用户输入一个任意的整数,在整数序列中查找该数,若找到,反馈给用户关于已经找到的提醒和此数在数组中的位置,否则,将此数插入到这一整数序列中保证不破坏有序性的位置上,反馈给用户有关未找到此数和已经将此数插入到序列中的位置信息。解析:排序是程序设计中的重要内容之一,据不完全记录,在一般的数据解决程序中,排序占去了解决机时间的四分之一,而在典型的应用程序中,一半以上的时间用在对表的排序上。内排序大都使用数组作为存储结构,是对数组的直接应用方式之一。#include"stdio.h"voidmain(){ intdata[200],sdata; //data[200]用于存放输入的数据序列 inti,j,k,n; //用于存放将输入的数据的个数 printf("amountofdatas(1-100):\n"); scanf("%d",&n); printf("inputdatasonebyone:\n"); for(i=0;i<n;) //以下为逐个输入数据并同时排序和去掉反复 { inttemp; scanf("%1d",&temp); for(j=i-1;j>=0;j--) if(data[j]<=temp) break; if(data[j]<temp||j==-1) { for(k=i-1;k>j;k--) data[k+1]=data[k]; data[j+1]=temp; i++; } elsen--; } printf("datatosearchorinsert:\n"); scanf("%1d",&sdata); //输入将要插入或者查找的数据 if(sdata<data[0])//输入的数据比原序列中最小的还要小,插到原序列的第一位置上 { printf("Nofindandinsertat1th.\n"); for(i=n-1;i>=0;i--) data[i+1]=data[i]; data[0]=sdata; } elseif(sdata>data[n-1])//输入的数据比原序列中最大的还要大,插到原序列的末尾 { printf("Nofindandinsertat%dth.\n",n+1); data[n]=sdata; } elseif(da

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论