若当堂没做完,下周四之前上交也可。
至
用户名和密码:stu
C语言程序设计练习题——数组
一、选择题
77、以下对一维数组a的正确说明是_d ___
A、char a(10);
B、int a[ ];
C、int k=5,a[k];
D、char a[ ]={'a' , 'b' , 'c'};
78、若有说明语句:int a[2][4];,则对a数组元素的正确引用是_a___
A、a[0][3]
B、a[0][4]
C、a[2][2]
D、a[2][2+1]
79、以下能对二维数组y进行初始化的语句是_b__
A、static int y[2][ ]={{1,0,1}, {5,2,3}};
B、static int y[ ][3]={{1,2,3}, {4,5,6}};
C、static int y[2][4]={{1,2,3}, {4,5} , {6}};
D、static int y[ ][3]={{1,0,1,0}, { }, {1,1}};
80、若有说明语句:int y[ ][4]={0,0};则下面叙述不正确的是_d___
A、数组y的每个元素都可得初值0
B、二维数组y的行数为1
C、该说明等价于int y[ ][4]={0};
D、只有元素y[0][0]和y[0][1]可得到初值0,其余元素均得不到初值0
81、以下各组选项中,均能正确定义二维实型数组s的选项是_c___
A、float s[3][4];
B、float s(3,4);
float s[ ][4]; float s[ ][ ]={{0};{0}};
float s[3][ ]={{1},{0}}; float s[3][4];
C、 float s[3][4];
D、float s[3][4];
static float s[ ][4]={{0},{0}}; float s[3][ ];
auto float s[ ][4]={{0},{0},{0}}; float s[ ][4];
82、若有说明语句:int a[ ][3]={1,2,3,4,5,6,7,8}; ,则a数组的行数为__a__
A、3
B、2
C、无确定值
D、1
83、若二维数组y有m列,则在y[i][j]前的元素个数为_B___
A、j*m+i
B、i*m+j
C、i*m+j-1
D、i*m+j+1
84、下面程序中有错误的行是__D__
1、 main( )
2、 {
3、 int x[3]={1};
4、 int k;
5、 scanf("%d", &x);
6、 for (k=1; k<3; k++)
7、 x[0]=x[0]+x[i];
8、 printf("x[0]=%d\n", x[0]);
9、 }
A、3
B、6
C、7
D、5
85、若有以下语句,则正确的描述是__b__
char x[ ]="12345";
char y[ ]={'1', '2', '3', '4', '5'};
A、x数组与y数组的长度相同
B、x数组长度大于y数组长度
C、x数组长度小于y数组长度
D、x数组等价于y数组
86、以下不正确的数组定义语句是__b__
A、double x[5]={2.0, 4.0, 6.0, 8.0, 10.0};
B、int y[5]={0, 1, 3, 5, 7, 9};
C、char ch1[ ]={'1', '2', '3', '4', '5'};
D、char ch2[ ]={'\x10', '\xa', '\x8'};
87、以下正确的数组定义语句是_c___
A、char a[5]={'1', '2', '3', '4', '5', '\0'};
B、int b[2][ ]={{1}, {2}};
C、float c[ ][3]={1, 2, 3, 4, 5};
D、char d[5]="CHINA";
88、判断字符串str1是否大于字符串str2,应当使用__d__
A、if (str1>str2)
B、if (strcmp(str1, str2))
C、if (strcmp(str2, str1)>0)
D、if (strcmp(str1, str2)>0)
89、下面程序段的运行结果是_c___
char x[5]={'a', 'b', '\0', 'c', '\0'};
printf("%s", x);
A、'a''b'
B、ab
C、ab└┘c
D、abc
90、有两个字符数组a,b,则以下能正确为a,b进行赋值的语句是_d___
A、gets(a, b);
B、scanf("%s%s", &a, &b);
C、getchar(a); getchar(b);
D、gets(a); gets(b);
91、有字符数组s1[80]和s2[80],则以下能正确对s1, s2进行输出的语句是___b_
A、puts(s1, s2)
B、printf("%s, %s", s1, s2);
C、putchar(s1, s2);
D、puts(s1), puts(s2);
92、以下程序段的运行结果是_c___
char a[7]="abcdef";
char b[4]="ABC";
strcpy(a, b);
printf("%c", a[5]);
A、└┘
B、\0
C、e
D、f
93、以下描述正确的是_d___
A、两个字符串所包含的字符个数相同时,才能比较字符串
B、字符个数多的字符串比字符个数少的字符串大
C、字符串"STOP└┘"与"STOP"相等
D、字符串"That"小于字符串"The"
94、以下对字符数组的描述中错误的是_c___
A、字符数组中可以存放字符串
B、字符数组中的字符串可以整体输入、输出
C、可以在赋值语句中通过赋值运算符"="对字符数组整体赋值
D、不可以用关系运算符对字符数组中的字符串进行比较
95、若有语句:char s1[10], s2[10]={"books"},则能将字符串books赋给数组s1的正确语句是_b___
A、s1={"books"};
B、strcpy(s1, s2);
C、s1=s2;
D、strcpy(s2, s1);
96、以下printf语句的输出结果是__A__
printf("%d\n", strlen("school");
A、7
B、6
C、存在语法错误
D、不定值
97、下面程序的功能是将字符串s中所有的字符c删除。请选择填空。____
#include
main( )
{ char s[80];
int i, j ;
gets(s);
for (i=j=0; s[i]!='\0'; i++)
if (s[i]!='c') _a ___
s[j]='\0';
puts(s);
}
A 、s[j++]=s[i]
B 、s[++j]=s[i]
C 、s[j]=s[i];
D 、s[j]=s[i];
98、当运行以下程序时候,从键盘输入:
ab<回车>
c<回车>
def<回车>
则下面程序的运行结果是_d _
#include
#define N 6
main( )
{ char ch1[N];
int k=0;
for ( ; k for (k=0; k } 99、下面程序的运行结果是_b ___ #include #include main( ) { char x[80]="AB", y[80]="LMNP"; (98题答案:) int n=0; strcat(x, y); while (x[n++]!='\0') y[n]=x[n]; puts(y); } A 、L B B 、ABLMNP C 、AB D 、LBLMNP 二、填空题 50、在C 语言中,二维数组元素在内存中的存放顺序是_按行储存_______。 51、若有定义:double x[3][5];,则x 数组中行下标的下限为_2___,列下标的上限为__4__。 A 、abcdef B 、 a C 、 b D 、 ab b c c c d d d e f 52、若二维数组a有m列,则计算任一元素a[i][j]在数组中相对位置的公式为_i*m+j+1_______。(设a[0][0]是数组的第一个元素) 53、若有定义:int a[3][4]={{1, 2}, {0}, {4, 6, 8, 10}};,则初始化后,a[1][2]得到的初值是__0__,a[2][1]得到的初值是__6__。 54、若有说明:char s[20];,如果想从键盘上把字符串:This is a book. 输入到数组s中,应当调用的函数是_gets()_____,函数调用语句的形式是__gets(s)_____。 55、请写出下面各printf语句的结果。 ①、printf("%s\n", strcat("school", "student")); __schoolstudent__________ ②、printf("%d\n", strlen("CHINA")+strlen("C")); __6__ ③、printf("%d\n", strcmp("The", "The")); __0__ 56、根据下面说明和要求,完成对应的填空。 ①、若有:char str1[10],str2[ ]={"student"};能把str2中的字符串赋给str1的串函数调用语句是____strncpy(str1,str2)___________ ②、若有:char str1[20]={"a good"}, str2[ ]= {"student"};能把str2中的字符串接到str1中的字符串后面的串函数调用语句是_strncat__ 57、下面程序将二维数组a的行和列元素互换后存到另一个二维数组b中。请填空。 main( ) { int a[2][3]={{1, 2, 3}, {4, 5, 6}}; int b[3][2], i, j; printf("array a:\n"); for (i=0; i<=1; i++) { for (j=0;_j<=2___; j++) { printf("%5d", a[i][j]); __b[j][i]=a[i][j]__________; } printf("\n"); } printf("array b:\n"); for (i=0;_i<=2___; i++) { for (j=0; j<=1; j++) printf("%5d", b[i][j]); printf("\n"); } } 58、下面程序可求出矩阵a的两条对角线上的元素之和。请填空。 main( ) { static int a[3][3]={1, 3, 6, 7, 9, 11, 14, 15, 17}; int sum1=0, sum2=0, i, j; for (i=0; i<3; i++) for (j=0; j<3; j++) if (i= =j) sum1+=a[i][j]; for (i=0; i<3; i++) for (_j=3___;_j>=0___; j--) if (i+j= =2) sum2+=a[i][j]; printf("sum1=%d, sum2=%d\n", sum1, sum2); } 59、下面程序的功能是将二维数组a 中每个元素向右移一列,最右一列换到最左一列,移后的数组存到另一个二维数组b 中,并按矩阵形式输出a 和b 。请填空。例如: 321654 =a 213546=b main( ) { static int a[2][3]={4, 5, 6, 1, 2, 3}; int b[2][3], i, j ; printf("array a:\n"); for (i=0; i<=1; i++) { for (j=0; j<3; j++) { printf("%5d", a[i][j]); If(j<=1)b[i][j+1]=a[i][j]____________; } printf("\n"); } for (i=0____; i<=2____; i++) b[i][0]=a[i][2]; printf("array b:\n"); for (i=0; i<2; i++) { for (j=0; j<3; j++) printf("%5d", b[i][j]); _if(j=3)printf(“\n”)_______; } } 60、下面程序的功能是检查一个二维数组是否对称(即对所有的a[i][j]=a[j][i])。请填空。 main( ) { static int a[4][4]={1,2,3,4,2,2,5,6,3,5,3,7,4,6,7,4}; int i, j, found=0; for (j=0; j<4; j++) for (i=0____; i<4; i++) if (a[i][j]!=a[j][i]) { found=1______; break ; } if (found) printf("No"); else printf("Yes"); } 61、下面程序段将输出computer ,请填空。 char c[ ]="It's a computer"; for (i=0; c[i]!=’\0’______; i++) { if(i<=8)continue ______; printf("%c", c[j]); } 62、以下程序的功能是对从键盘输入的两个字符串进行比较,并输出两个字符串中第一个不相同字符的ASCII码之差。例如:输入的两个字符串分别为these和there,则输出是1。请填空。 #include main( ) { char s1[100], s2[100]; int x, y; printf("\nInput string1:\n"); gets(s1); printf("\nInput string2:\n"); gets(s2); x=0; while ((s1[x]= =s2[x])&&(s1[x]!=‘\n’ ____)) x++; y=s1[x]-s2[x]________; printf("%d\n", y); } 63、以下程序的输出结果是_1110___ main( ) { int x[6], a=0, b, c=14; do { x[a]=c%2; a++; c=c/2; }while(c>=1); for (b=a-1; b>=0; b--) printf("%d", x[b]); printf("\n"); } 64、下面程序的功能是在一个字符数组中查找一个指定的字符,若数组中含有该字符则输出该字符在数组中第一次出现的位置(下标值);否则输出-1。 #include #include main( ) { char c='a', t[50]; int n, k, j; gets(t); n=_strlen(t)_____; for (k=0; k if (_t[k]=_____) { j=k; break; } else j=-1; printf("%d", j); } 65、下面程序的功能是把以下给定的字符按其矩阵格式读入数组str1中,并输出行列号之和是3的数组元素。请填空。 main( ) { char str1[4][3]={'A', 'b', 'C', 'd', 'E', 'f', 'G', 'h', 'I', 'j', 'K', 'l'}; int x, y, z; for (x=0; x<4; x++) for (y=0;_y<3___; y++) { z=x+y; if (___z==3___) printf("%c\n", str[x][y]); } } 66、下面程序的功能是输出两个字符串中较短串的长度。请填空。 #include main( ) { char str1[20], str2[20]; int i, k, num; gets(str1); gets(str2); i=strlen(str1); k=strlen(str2); num=_i>=k_____?_k___: _i___; printf("%d\n", num); } 67、下面程序的功能是在三个字符串中找出最小的串。 #include #include main( ) { char s[20], str[3][20]; int i; for (i=0; i<3; i++) gets(str[i]); strcpy(s, __strcmp(str1,str0)<0?str1:str0_____________); if (strcmp(str[2], s)<0) strcpy(s, str[2]); printf("%s\n", _s___); } 68、当运行以下程序时,从键盘输入: GOOD<回车> TEACH<回车> SET<回车> ROOM<回车> 则程序的运行结果是_SETCHter_____ #include #include main( ) { int i; char str[10], temp[10]="Computer"; for (i=0; i<4; i++) { gets(str); if (strcmp(temp, str)<0) strcpy(temp, str); } puts(temp); } C语言程序设计练习题——指针 一、选择题 133、设有定义:int a=1, *p=&a; float b=2.0; char c='A';,以下不合法的运算是__a__ A、p++; B、a--; C、b++; D、c--; 134、以下程序执行后a的值为____ main( ) { int a, m=2, k=1, *p=&k; a=p==&m; printf("%d\n",a); } A、-1 B、0 C、1 D、2 135、以下对指针变量的操作中,不正确的是_d__ A、int p, *q; q=&p; B、int *p, *q; q=p=NULL; C、int a=5, *p; *p=a; D、int a=5, *p, *q=&a; *p=*q; 136、以下对指针变量的操作中,不正确的是_d__ A、int a, *p, *q; p=q=&a; B、int a=6, *p, *q=&a; p=q; C、int a=b=6, *p; p=&a; b=*p; D、int a, *p, *q; q=&a; p=*q; 137、设有语句:int k=1, *p1=&k, *p2=&k;,以下不能正确执行的赋值语句是_a___ A、p1=k B、p1=p2 C、*p1=*p2 D、k=*p1+*p2 138、若有语句:int a=4, *p=&a;,下面均代表地址的一组选项是_c___ A、a, p, &*a B、*&a, &a, *p C、&a, p, &*p D、*&p, *p, &a 139、设已有说明语句:int i=5, *q;,若要建立如图所示的存储结构,以下正确的赋值语句是____(无图) A、q=i; B、*q=i; C、q=&i; D、*q=&i; 140、若有说明语句:char c='9', *sp1, *sp2;,以下均正确的一组赋值语句是_a___ A、sp1=&c; sp2=sp1; B、sp1=&c; sp2=&sp1; C、sp1=&c; sp2=*sp1; D、sp1=&c; *sp2=*sp1; 141、以下判断正确的是_c___ A、char *s="string";等价于char *s; *s="string"; B、char str[10]={"string"};等价于:char str[10]; str={"string"}; C、char *s="string";等价于char *s; s="string"; D、char str[10]={"string"};等价:char str[10]; *str={"string"}; 142、以下能正确进行字符串赋值操作的是__d__ A、char s[5]={"ABCDE"}; B、char s[5]={'A', 'B', 'C', 'D', 'E'}; C、char *s; *s="ABCDE"; D、char *s="ABCDE"; 143、下面程序段的运行结果是__d__ char *s="abcde"; s+=1; printf("%d", s); A、bcde B、字符'b'的地址 C、字符'c'的地址 D、字符'b'的ASCII值 144、以下能正确读入字符串的程序段是___c_ A、char *p; scanf("%s", p); B、char str[10]; scanf("%s", &str); C、char str[10], *p; p=str; scanf("%s", p); D、char str[10], *p=str; scanf("%s", p[1]); 145、设有说明语句: char *str="\t\'c\\Language\n";,则指针str所指字符串的长度为___a_ A、13 B、15 C、17 D、说明语句不合法 146、以下运算正确的程序段是_c___ A、char str1[ ]="12345", str2[ ]="abcdef";strcpy(str1, str2); B、char str[10], *st="abcde"; strcat(str, st); C、char *st1="12345", *st2="abcde"; strcat(st1,st2); D、char str[10]="", *st="abcde"; strcat(str, st); 147、下面程序段的运行结果是__c__ char str[ ]="xyz", *p=str; printf("%d\n", *(p+3) ); A、字符'z'的地址 B、0 C、字符'z'的ASCII码 D、字符'z' 148、以下程序段的运行结果是__c__ char a[ ]="program", *p; p=a; while (*p!='g') { printf("%c", *p-32); p++; } A、PROgram B、PROGRAM C、PRO D、proGRAM 149、下面程序段的运行结果是__b__ main( ) { char c1, c2; c1='A'+'5'-'3'; c2='A'+'6'-'3'; printf("%d, %c\n", c1, c2); } A、C,D B、67,D C、无确定值 D、B,C 150、以下程序段的运行结果是___a_ char b[ ]="Basic", *p; for (p=b; p printf("%s\n", p); A Basic B B C C D Basic asic a Ic sic s sic ic i asic c c Basic 151、若有语句:char s1[ ]="Beijing", s2[8], *s3, *s4="Shanghai"; 则对库函数strcpy调用正确的是____ A、strcpy(s1, s4); B、strcpy(s2, s4); C、strcpy(s3, s1); D、strcpy(s4, s1); 152、以下与库函数strcpy(char *s1, char *s2)功能不相等的程序段是__c__ A、strcpy1(char *s1, char *s2) { while ((*s1++=*s2++)!='\0') ; } B、strcpy2(char *s1, char *s2) { while (*s2) *s1++=*s2++; } C、strcpy3(char *s1, char *s2) { while (*s1++=*s2++) ; } D、strcpy4(char *s1, char *s2) { while ((*s1=*s2)!='\0') { s1++; s2++; } } 153、以下程序段的输出结果是__b__ char a[ ]="Program", *ptr; ptr=a;