为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

C语言题库数组和结构题库

2018-09-05 21页 doc 467KB 48阅读

用户头像

is_158743

暂无简介

举报
C语言题库数组和结构题库第四章 数组和结构 一、选择题 1. 有结构型定义如下: struct person { char name[20]; int age; int sex; }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); 答:D 2. 处理字符串必须调用 (1...
C语言题库数组和结构题库
第四章 数组和结构 一、选择题 1. 有结构型定义如下: struct person { char name[20]; int age; int sex; }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); 答:D 2. 处理字符串必须调用 (1) ,且首先要声明预编译命令 (2) 。不能用赋值运算符“=”对字符串赋值,应调用 (3) 函数;也不能用关系运算符“= =”、“>”、“<”对字符串进行比较,应调用 (4) 函数。 答案:(1)字符串库函数 (2)# include (3)strcpy (4)strcmp 3. 有如下程序段: char str[14]={"I am "}; strcat(str, "sad !"); scanf("%s", str); printf("%s", str); 当输入为happy!时,输出的结果是( )。 (A)I am sad! (B)happy! (C)I am happy! (D)happy!ad! 答案:(B) 4. 以下对二维数组a进行不正确初始化的是 。 A.int a[ ] [3]={3,2,1,1,2,3}; B.int a[ ] [3]={{3,2,1},{1,2,3}; C.int a[2] [3]={{3,2,1},{1,2,3}}; D.int a[ ] [ ]={{3,2,1},{1,2,3}}; 答案:D 5. 以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。 #define N 10 void arrin(int x[N]) { int i=0; while (i #include void main( ) { char b[30]; strcpy (&b[0],"CH"); strcpy (&b[1],"DEF"); strcpy (&b[2],"ABC"); printf ("%s\n",b); } A)CHDEF B)DEFABC C)CDABC D)CHABC 答案:C 8. 下面能正确定义一维数组的选项是 。 A)int num[ ] B)#define N 100 C)int num[0..100] D)int N=100 int num[N] int num[N] 答案:B 9. 下面正确的数组定义语句是 。 A)int y[1][4]={1,2,3,4,5}; B)float x[3][ ]={{1},{2},{3}}; C)long s[2][3]={{1},{1,2},{1,2,3}}; D)double t[ ][3]={0}; 答案:D 10. 执行下列程序时,输入123<空格>456<空格>789<回车>,输出结果是 。 #include void main( ) { char s[100]; int c,i; scanf ("%c",&c);scanf("%d",&i);scanf("%s",s); printf("%c,%d,%s\n",c,i,s); } A)123,456,789 B)1,456,789 C)1,23,456,789 D)1,23,456 答案:D 11. 下面程序的输出结果为( )。 #include void main( ) { int a[3],i,j,k=2; for(i=0;i<3;i++) a[i]=0; for(i=0;i void main( ) { int i,j,k; char str[5]; for(i=0;i<5;i++)str[i]='A'; k=4; for(i=0;i void main( ) { char s[4][20]; int i; scanf ("%s%s",s[0],s[1]); gets(s[2]);gets(s[3]); for(i=0;i<4;i++) puts(s[i]); } 输入数据如下:(此处回车符) aa bb cc dd A)aa B)aa C)aa D)aa bb bb bb bb cc cc cc dd dd cc dd dd 答案:A 14. 假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是 。 (A)3 (B)6 (C)10 (D)20 答案:D 15. 以下程序的输出结果是 。 #include #include void main( ) { char st[20]="hello\0\t\\"; printf("%d %d \n",strlen(st),sizeof(st)); } (A)9 9 (B)5 20 (C)13 20 (D)20 20 答案:B 16. 以下对结构体类型变量td的定义中,错误的是 。 (A)typedef struct aa (B)struct aa { int n; { int n; float m; float m; }AA; }td; AA td; struct aa td; (C)struct (D)struct { int n; { int n; float m; float m; }aa; }td; struct aa td; 答案:C 17. 下列程序的输出结果为 。 #include void main() { int k=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 答案:B 18. 有如下定义: struct date {int year,month,day;}; struct worklist{char name[20];char sex;struct date birthday;}personone; 对结构体变量personone的出生年份进行赋值时,下面正确的赋值语句是 。 (A)year=1968 (B)birthday.year=1968 (C)personone.birthday.year=1968 (D)personone.year=1968 答案:C 19. 若程序中有如下的说明和定义: struct exep { int x,y;} struct exep x,y; … 则会发生的情况是 。 (A)编译时出错 (B)能通过编译、连接、执行 (C)能通过编译但连接出错 (D)能通过编译、连接,但不能执行 答案:A 20. 设有以下语句 typedef struct S { int g; char h;} T; 则下面叙述中正确的是 。 A)可用S定义结构体变量 B)可以用T定义结构体变量 C)S是struct类型的变量 D)T是struct S类型的变量 答案:B 21. 有结构定义如下: struct { int k:2; int:0; unsigned int m:5; }st; 那么变量st所占用的字节数是( )。 A.3 B.2 C.1 D.4 答:B 22. 以下对结构类型变量的定义中,不正确的是 。 A)typedef struct aa B)# define AA struct aa { int n;AA AA{ int n; float m; float m; }AA; }tdl; AA tdl; C)struct D)struct { int n; { int n; float m; float m; }aa; }tdl; struct aa td1; 答案:C 23. 当执行下面的程序时,如果输入ABC,则输出结果是 。(2001年4月) #include #include void main() { char ss[10]= "12345"; gets(ss); strcat(ss, "6789"); printf("%s\n",ss); } A)ABC6789 B)ABC67 C)12345ABC6 D)ABC456789 答案:A 24. 给出以下定义 char x[ ]="abcdefg"; char y[ ]={'a','b','c','d','e','f','g'}; 则正确的叙述为 。 A)数组x和数组y等价 B)数组x和数组y的长度相同 C)数组x的长度大于数组y的长度 D)数组x的长度小于数组y的长度 答案:C 25. 下面程序的输出是 A) 0 B) 1 C) 3 D) 6 #include void main ( ) { struct cmplx{ int x; int y; }cnum[2]={1,3,2,7}; printf("%d\n",cnum[0].y /cnum[0].x * cnum[1].x); } 答案:D 26. 下列程序的输出结果是  A) 5 B) 6 C) 7 D) 8 #include struct abc { int a, b, c; }; void main() { struct abc s[2]={{1,2,3},{4,5,6}}; int t; t=s[0].a+s[1].b; printf("%d \n",t); } 答案:B 27. 设有以下说明语句 struct ex { int x ; float y; char z ; }example; 则下面的叙述中不正确的是 A) struct是结构体类型的关键字 B) example是结构体类型名 C) x,y,z都是结构体成员名 D) struct ex是结构体类型名 答案:B 28. 设有如下说明 typedef struct { int n; char c; double x; }STD; 则以下选项中,能正确定义结构体数组并赋初值的语句是 A) STD tt[2]={{1,'A',62},{2, 'B',75}}; B) STD tt[2]={1,"A",62},2, "B",75}; C) struct tt[2]={{1,'A'},{2, 'B'}}; D) struct tt[2]={{1,"A",62.5},{2, "B",75.0}}; 答案:A 29. 有以下程序 #include void main() { int i,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,4 C)10 D)4 答案:C 30. 有以下程序 #include void main() { int num[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"); } } 若要按以下形式输出数组右上半三角 1 2 3 4  6 7 8  11 12  16 则在程序下划线处应填入的是______。 A)i-1 B)i C)i+1 D)4-i 答案:B 31. 有以下程序 #include void main() { int p[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 答案:B 32.有以下程序 #include void main() { char p[]={'a', 'b', 'c'}, q[]="abc"; printf("%d %d\n", sizeof(p),sizeof(q)); } 程序运行后的输出结果是______。  A)4 4 B)3 3 C)3 4 D)4 3 答案:C 33. 有以下程序 #include #include void main() { char p[ ]={'a', 'b', 'c'}, q[10]={'a', 'b', 'c'}; printf("%d %d\n", strlen(p), strlen(q)); } 以下叙述中正确的是______。  A)在给p和q数组置初值时,系统会自动添加字符串结束符,故长度都为3  B)由于p数组中没有字符串结束符,长度不能确定;但q数组中字符串长度为3  C)由于q数组中没有字符串结束符,长度不能确定;但p数组中字符串长度为3  D)由于p和q数组中都没有字符串结束符,故长度都不能确定 答案:B 34. 有以下程序 #include #include void main() { char a[7]="a0\0a0\0"; int i,j; i=sizeof(a); j=strlen(a); printf("%d %d\n",i,j); } 程序运行后的输出结果是______。 A)2 2 B)7 6 C)7 2 D)6 2 答案:C 35.设有如下说明  typedef struct ST  {long a;int b;char c[2];}NEW; 则下面叙述中正确的是______。 A)以上的说明形式非法 B)ST是一个结构体类型 C)NEW是一个结构体类型 D)NEW是一个结构体变量 答案:C 36.以下对结构体类型变量td的定义中,错误的是______。 A)typedef struct aa B)struct aa  { int n; { int n;  float m; float m;  }AA; }td;  AA td; struct aa td; C)struct D)struct  { int n; { int n;  float m; float m;  }aa; }td;  struct aa td; 答案:C 37. 表达式strcmp ("box", "bottle") 的值是 。 A) 正整数 B) 负整数 C) 0 D) 不确定的数 答案:A 二、填空题 1. 有如下程序段: #include void main( ) { char s[ ]= "SSSWiL TECH1\1\11W\1WALLMP1"; int j; char ch; for (j=2;(ch=s[j])!='\0';j++) { switch (ch) { case'A': putchar('a');continue; case'1': break; case 1: while ((ch=s[++j])!='\n'&&ch!='\0'); case 9: putchar('#'); case'E': case'L': continue; default : putchar(ch);continue; } putchar('*'); } printf ("\n"); } 此程序段的输出结果是 。 答案:Swi TCH * # 2. 定义结构类型如下: struct a { char c; char s[20]; int m; }; 请使用此类型定义一个结构变量b1,并在定义时给各成员变量赋初值,使c的值为‘n’,s中存放字符串“person”,m的值为3: 。 答案:struct a b1={'n',"person",3}; 3. 以下sum函数的功能是计算下列级数之和。(2004年4月) s=1+x+x2/2!+x3/3!+……+xn/n! 请给函数中的各变量正确赋初值。 double sum (double x,int n) { int i; double a,b,s; for (i=1;i<=n;i++) { a=a*x;b=b*i;s=s+a/b; } return s; } 答案:a=b=s=1.0 4. 以下程序用来输出结构体变量ex所占存储单元的字节数: #include struct st { char name[20];double score; }; void main ( ) { struct st ex; printf (“ex size:%d\n”,sizeof ( )); } 答案:ex或struct st 5. 由25人围坐成圆圈,先从任意一人出发,用1到25顺时针依次编号,然后从1号开始顺时针报数(1、2、3、…),凡报5的倍数者出圈,剩下者继续报数,求出最后出圈者的编号。 # include void main ( ) { int a[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<25 6. 有一个已排好序的数组,现输入一个数,要求按原来的顺序规律,将它插入到数组中。采用的算法是:假设排序为从小到大,对输入的数,检查它在数组中哪一个数之后,然后将比这个数大的数顺序后移一个位置,在空出的位置上将该数插入。请填空。 # include # define N 100 void main ( ) { float a[N+1],x; int i,p; printf (“输入已排好序的数列:”); for (i=0;i=p 3 i<=N 7. 以下程序运行后的输出结果是 。 #include void main( ) { int i,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"); } } 答案: 1 2 3 0 5 6 0 0 9 8. 下面程序对输入的字符串中每一个数字出现的次数进行计数。请补全程序。 #include void main( ) { int j,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 void main( ) { int a[4][4]={{1,2,3,4},{5,6,7,8,}, {11,12,13,14},{15,16,17,18}}; int i=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); } 答案:92 10. 下述程序的功能是:从键盘中输入n个整数,使用冒泡法对这n个整数从小到大进行排序并输出。请在横线上填上相应的内容。 #include void main( ) { int i,j,temp,a[100],n; scanf("%d",&n); for(i=0;ia[j+1] 11. 以下程序统计从终端输入的字符中每个大写字母的个数,num[0]中统计字母A的个数,其他依次类推。用#号结束输入,请填空。 #include #include void main() { int num[26]={0}, i; char c; 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。请填空。(2003年9月) #include #include void main( ) { char s[80],d[80]; int i,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. 编写一个程序,使用下面的结构,以结构数组的形式存储颜色编码,要求程序输出数组的各颜色值,把每种颜色的编码和颜色名按行显示在屏幕上。 struct color_table { int color; /* color code number*/ char col_name[10]; /* color name*/ } 答: 程序如下: #include struct color_table { int code; char col_name[11]; }; void main ( ) { struct color_table col_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" }; int i; for (i=0;i<=12;i++) printf ("%d %s\n",col_array[i].code,col_array[i].col_name); } 2. 编写一个程序,在一维数组里输入一句英文,统计该句里出现的单词个数(单词之间是用空格分隔的)。 答:程序编写如下: #include void main( ) { char str[80]; int j,n=0,w=0; printf("Please input a sentence:\n"); gets(str);/*ÊäÈëÒ»¾äÓ¢ÎÄ*/ for(j=0;str[j]!='\0';j++) if(str[j]==' ') w=0; else if(w==0) { w=1; n++; } printf("There are %d words in this line.\n",n); } 这里,开辟一个长为80个字符的一维数组str,由它存放输入的英文句子。输入后,从前往后扫视数组中的每一个元素,直到遇见字符串结束符‘\0’时停止。扫视时,对字符的性质加以判别。如果是空格就跳过去;如果是字符,则表示进入了一个单词,需要记数。但有两个问题需要考虑:一是不能光用空格数来反映单词数,因为有时可能会出现连续几个空格。比如下图第2次运行时,单词banner与on之间出现了3个空格;二是不能遇到字符就记数,对于每一个单词,只能记数一次。因此,在程序里设置了一个标志w, 遇到空格时,就把w置为0,表示在单词之外。一旦遇到字符且w等于0,则表示是进入一个新的单词,于是让变量n记数,同时把w改置为1,表示现在位于单词之内。 3. 定义一个结构,有3个成员:姓名、基本工资、岗位工资。说明一个该结构的结构数组。对其元素按下表初始化。然后打印每个人的姓名和工资总额。 姓名 基本工资 岗位工资 Li hua qiu 845 1800 Liu ming shang 920 2400 答:程序编写如下: #include struct person { char name[20]; int wages; int subsidy; }; void main( ) { struct person s[4]={{"Li hua qiu",845,1800},{"liu ming shang",920,2400}}; int k; for(k=0;k<2;k++) printf("%s:%d\n",s[k].name,s[k].wages+s[k].subsidy); } 4.在上题结构定义的基础上,于主函数main里输入10个人员信息,然后输出应发放的工资总额、工资数最大者和最小者信息。 答:程序编写如下: #include struct person { char name[20]; int wages; int subsidy; }; void main( ) { int k,pmax,pmin; int sum; struct person s[10]; printf("Please enter information:\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(pmaxs[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" void main ( ) { int data[200],sdata; //data[200]用于存放输入的数据序列 int i,j,k,n; //用于存放将输入的数据的个数 printf ("amount of datas(1-100):\n"); scanf ("%d",&n); printf ("input datas one by one:\n"); for (i=0;i=0;j--) if (data[j]<=temp) break; if (data[j]j;k--) data [k+1]=data[k]; data[j+1]=temp; i++; } else n--; } printf ("data to search or insert:\n"); scanf ("%1d",&sdata); //输入将要插入或者查找的数据 if (sdata=0;i--) data[i+1]=data[i]; data[0]=sdata; } else if(sdata>data[n-1])//输入的数据比原序列中最大的还要大,插到原序列的末尾 { printf ("No find and insert at %dth.\n",n+1); data[n]=sdata; } else if(data[0]==sdata) //等于原序列的最小数,返回找到消息和此数的位置 printf ("find,location at 1th\n"); else if(data[n-1]==sdata)//等于原序列的最大数,返回找到消息和此数的位置 printf ("find ,location at %dth\n",n); else //不是上述的各种情况,则用折半法在序列中查找 { int front=0,hind=n-1,middle; while (hind-front>1) { middle=(hind+front)/2; if (data[middle]==sdata) break; //找到,退出循环 else if(data[middle]>sdata) hind=middle; else front=middle; } if(data[middle]==sdata)//找到,则打印找到的位置 printf ("find,location at %dth\n",middle+1); else //没找到,执行插入 { for(i=n-1;i>front;i--) data[i+1]=data[i]; data[front+1]=sdata; printf ("No find and insert at %dth\n",front+2); } } } 6. 编写一个程序,采用二分查找法从有序数列{0,2,5,8,12,15,23,35,60,65}中查找指定元素的位置。 解:用i、j分别存放查找区间的低端序号和高端序号,m=(i+j)/2,如果a[m]= =x,则找到了元素;若x>a[m],则i=m+1;若x=j为止。程序如下: #include void main( ) { int a[ ]={0,2,5,8,12,15,23,35,60,65}; int x,i=0,j=9,m; printf ("输入元素:"); scanf ("%d",&x); while (ia[m]) i=m+1; else break; } if (a[m]==x) printf ("序号:%d\n",m); else printf ("不存在%d元素\n",x); } 7. 编写一个程序,它读进一行字符,把它们存放在有80个元素的字符数组中。如果在读完80个字符前遇到行结束符‘\n’,也应停止输入。然后把所有空格和数字移出后,显示所有字符。 【解】程序编写如下: #include #include void main( ) { int k; char line[80]; printf("Please enter a string:\n"); for(k=0;k<80&&(line[k]=getchar( ))!='\n';k++); for(k=0;k<80&&(line[k]!= '\n');k++) if(line[k]!=' '&& line[k]< '0'|| line[k]> '9') putchar(line[k]); putchar('\n'); } 题目中的要求:“如果在读完80个字符前遇到行结束符‘\n’,也应停止输入”,是由程序中的条件: k<80&&(line[k]=getchar( ))!='\n' 来控制的。打印输出时,由条件: line[k]!=' '&& line[k]< '0'|| line[k]> '9' 来跳过空格和数字。 下图所示的是一次运行的结果。
/
本文档为【C语言题库数组和结构题库】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索