C语言复习习题及答案.ppt_第1页
C语言复习习题及答案.ppt_第2页
C语言复习习题及答案.ppt_第3页
C语言复习习题及答案.ppt_第4页
C语言复习习题及答案.ppt_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

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

文档简介

数组 习题,数组 习题, 单项选择题,1在下列数组定义、初始化或赋值语句中,正确的是. A)int a8; a8=100; B)int x5=1,2,3,4,5,6; C)int x =1,2,3,4,5,6;D)int n=8; int scoren; 2若已有定义:int i, a100; 则下列语句中,不正确的是. A)for ( i=0; i100; i+ ) ai=i; B)for ( i=0; i100; i+ ) scanf ( “%d“, ,C,C,返回目录,数组 习题, 单项选择题,3与定义char c =“GOOD“; 不等价的是. A)char c =G,O,O,D,0; B)char c =“GOOD“; C)char c4=“GOOD“; D)char c5=G,O,O,D,0; 4若已有定义:char c8=“GOOD“; 则下列语句中,不正确的是. A)puts (c); B)for(i=0;ci!=0;i+) printf(“%c“, ci); C)printf (“%s“, c); D)for(i=0;ci!=0;i+) putchar( c );,C,D,数组 习题, 单项选择题,5若定义a 3=0,1,2,3,4,5,6,7; 则a数组中行的大小是. A) 2 B) 3 C) 4 D) 无确定值 6以下程序的运行结果是. #include void f ( int b ) int i=0; while(bi=10) bi+=2; i+; A) 2 7 12 11 13 9 B) 1 7 12 11 13 7 C) 1 7 12 11 13 9 D) 1 7 12 9 13 7,B,B,main( ) int i, a = 1, 5,10, 9,13, 7; f(a+1); for(i=0; i6; i+) printf(“%4d “, ai); ,数组 习题, 单项选择题,7若执行以下程序段,其运行结果是. char c =a, b, 0, c, 0; printf ( “%sn“, c ); A) ab c B) ab C) abc D) ab 8数组名作为参数传递给函数,作为实际参数的数组名被处理为. A)该数组长度 B)该数组元素个数 C)该函数中各元素的值 D)该数组的首地址 11当接受用户输入的含空格的字符串时,应使用函数. A)scanf( ) B)gets( ) C) getchar( ) D)getc( ),D,D,B,数组 习题, 单项选择题,9执行下面的程序段后,变量k中的值为. int k=3, s2=1; s0=k; k=s1*10; A)不定值 B) 33 C) 30 D) 0 10在定义 int a54; 之后;对a的引用正确的是. A)a24 B) a50 C)a00 D)a0,0,D,C,数组 习题, 程序填空题,1以下程序用来检查二维数组是否对称(即:对所有i,j都有aij=aji)。 #include main ( ) int a44=1,2,3,4, 2,2,5,6, 3,5,3,7, 8,6,7,4; int i, j, found=0; for ( j=0; j4; j+ ) for (i=0; i4; i+ ) if ( _ ) found= _ ; break; if (found) break; if (found) printf (“不对称n“); else printf(“对称n“); ,aij!=aji,1,数组 习题, 程序填空题,2以下程序是用来输入5个整数,并存放在数组中,找出最大数与最小数所在的下标位置,并把两者对调,然后输出调整后的5个数。#include main( ) int a5, t, i, maxi, mini; for ( i=0; iamaxi ) _【5】_ ; printf ( “最小数的位置是:%3dn“, mini ); printf ( “最大数的位置是:%3dn“, maxi ); t=amaxi; _【6】_ ; amini=t; printf ( “调整后的数为: “ ); for ( i=0; i5; i+ ) printf ( “%d “, ai ); printf (“n“); ,0,amini ai,maxi=i,amaxi=amini,数组 习题, 程序填空题,3给定一3 x 4的矩阵,求出其中的最大元素值,及其所在的行列号: main( ) int i,j,row=0,colum=0,max; static int a34=1,2,3,4,9,8,7,6,10,-10,-4,4; _【7】_; for(i=0;i=2;i+) for(j=0;j=3;j+) _【8】_; _【9】_; printf(“%d%d“,row,colum); ,max=a00,if(aijmax), max=aij; row=i; colum=j; ,数组 习题, 程序填空题,4下述函数用于确定给定字符串的长度,请完成程序。 strlen ( char s ) int i=0; while (_【10】_ ) +i; return (_【11】_ ); ,si!=0,i,数组 习题, 程序填空题,5以下程序的功能是从键盘上输入若干个字符(以回车键作为结束)组成一个字符数组,然后输出该字符数组中的字符串,请填空! #include main ( ) char str81; int i; for ( i=0; i80; i+ ) stri=getchar( ); if (stri=n) break; stri=0; _【12】_; while ( stri!=0 ) putchar(_【13】_); ,i=0,stri+,数组 习题, 阅读程序并写出运行结果,1写出下列程序的运行结果并分析之: #include main( ) static int a45=1,2,3,4,0,2,2,0,0,0,3,4,5,0,0,6,0,0,0,0; int j,k; for (j=0;j4;j+) for(k=0;k5;k+) if (ajk=0) break; printf(“ %d“,ajk); printf(“n“); ,数组 习题, 阅读程序并写出运行结果,2写出下列程序的运行结果并分析之: #include main ( ) int a66,i,j; for (i=1 ;i6 ; i+) for ( j=1;j6;j+) aij= i*j; for (i=1 ;i6 ; i+) for ( j=1;j6;j+) printf( “ %-4d “ ,aij ) ; printf(“n“); ,数组 习题, 阅读程序并写出运行结果,3写出下列程序的运行结果并分析之: #include main ( ) int a =1,2,3,4,i,j,s=0; j=1; for ( i=3;i=0;i- ) s=s+ai*j; j=j*10; printf(“s=%dn“,s); ,数组 习题, 阅读程序并写出运行结果,4写出下列程序的运行结果并分析之: #include main( ) int a=0,2,5,8,12,15,23,35,60,65; int x=15,i,n=10,m; i=n/2+1; m=n/2; while(m!=0) if(xai) i=i+m/2+1; m=m/2; else break; printf(“place=%d“,i+1); ,数组 习题, 阅读程序并写出运行结果,5写出下列程序的运行结果并分析之: #include main( ) int a=1,2,3,4,i,j,s=0; j=1; for(i=3;i=0;i-) s=s+ai*j; j=j*10; printf(“s=%dn“,s); ,数组 习题, 阅读程序并写出运行结果,6写出下列程序的运行结果并分析之: #include main( ) char str=“1a2b3c“; int i; for(i=0;stri!=0;i+) if(stri=0 ,数组 习题, 编程题,1编一程序用简单选择排序方法对10个整数排序(从大到小)。排序思路为:首先从n个整数中选出值最大的整数,将它交换到第一个元素位置,再从剩余的n-1个整数中选出值次大的整数,将它交换到第二个元素位置,重复上述操作n次后,排序结束。 2编写一程序,实现两个字符串的连接(不用strcat( )函数)。 3编写一个把字符串转换成浮点数的函数。 4若有说明:int a34 1, 2, 3, 4 , 5, 6, 7, 8 , 9, 10, 11, 12 ;现要将a的行和列的元素互换后存到另一个二维数组b中。试编程。 5n皇后问题:在n*n的方阵棋盘上,试放n个皇后,每放一个皇后,必须满足该皇后与其它皇后互不攻击(即不在同一行、同一列、同一对角线上),求出所有可能解。 6背包问题:有一个背包,能装入的物品总重量为S,设有N件物品,其重量分别为W1,W2,WN。希望从N件物品中选择若干件物品,所选物品的重量之和恰能放入该背包,即所选物品的重量之和等于S。试编程求解。,数组 习题, 编程题,参考源码:,函数 习题,函数习题, 单项选择题,C语言中函数形参的缺省存储类型是 . A)静态(static) B)自动(auto) C)寄存器(register) D)外部(extern) 函数调用语句function(exp1,exp2), 18)中含有的实参个数为. A)0 B)1 C)2 D)3,B,C,返回目录,函数习题, 单项选择题,下面函数返回值的类型是 . square(float x) return x*x; A)与参数x的类型相同 B)是void型 C)无法确定 D)是int型 C语言规定,程序中各函数之间 . A)不允许直接递归调用,也不允许间接递归调用 B)允许直接递归调用,但不允许间接递归调用 C)不允许直接递归调用,但允许间接递归调用 D)既允许直接递归调用,也允许间接递归调用,D,D,函数习题, 单项选择题,一个函数返回值的类型取决于 . A)return语句中表达式的类型 B)调用函数时临时指定 C)定义函数时指定或缺省的函数类型 D)调用该函数的主调函数的类型 下面叙述中,错误的是 . A)函数的定义不能嵌套,但函数调用可以嵌套 B)为了提高可读性,编写程序时应该适当使用注释 C)变量定义时若省去了存储类型,系统将默认其为静态变量 D)函数中定义的局部变量的作用域在函数内部,C,C,函数习题, 单项选择题,7) 在一个源程序文件中定义的全局变量的有效范围为 . A)一个C程序的所有源程序文件 B)该源程序文件的全部范围 C)从定义处开始到该源程序文件结束 D)函数内全部范围 某函数在定义时未指明函数返回值类型,且函数中没有return语句,现若调用该函数,则正确的说法是 . A)没有返回值 B)返回一个用户所希望的值 C)返回一个系统默认值 D)返回一个不确定的值,C,D,函数习题, 单项选择题,9)函数swap(int x, int y)可实现对x和y值的交换。在执行如下定义及调用语句后,a和b的值分别为 . int a=10, b=20; swap (a,b ); A)10和10 B)10和20 C)20和10 D)20和20 下面错误的叙述是 . A)在某源程序不同函数中可以使用相同名字的变量 B)函数中的形式参数是局部变量 C)在函数内定义的变量只在本函数范围内有效 D)在函数内的复合语句中定义的变量在本函数范围内有效,B,D,函数习题, 程序填空题,1求s=1!+2!+3!+10!之和。 程序如下: #include long int factorial(int n) int k=1; long int p=1; for(k=1; k=n; k+) _; return p; ,main( ) int n; float sum=0; for(n=1;n=10;n+) _; printf(“%6.3fn“,sum); ,p=p*k,sum+=factorial(n),或sum=sum+factorial(n),函数习题, 程序填空题,2以下函数用以求x的y次方。 double fun (double x, int y) int i; double m=1; for ( i=1; i_; i+ ) m=_; return m; ,=y,或y+1,m*x,函数习题, 程序填空题,3下面定义了一个函数pi,其功能是根据以下的近似值公式来求值:,#include #include double pi(long n) double s=_; long k; for(k=1; k=n; k+) s=s+ _; return (_); ,0,1/(k*k),sqrt(6*s),答案不唯一,因为若初值不同,则有不同的答案组合。,函数习题, 阅读程序并写出运行结果,1下面程序运行的结果是_: #include #define MAX_COUNT 4 void fun( ); main( ) int n; for(n=1; n=MAX_COUNT; n+) fun( ); ,void fun( ) static int k; k=k+2; printf (“%d,“, k); ,2,4,6,8,函数习题, 阅读程序并写出运行结果,2下面程序运行的结果是_: #include int fun(int x) int s; if(x=0|x=1) return 3; s=x-fun(x-3); return s; main( ) printf (“%dn“, fun(3); ,0,函数习题, 阅读程序并写出运行结果,3下面程序运行的结果是_: #include unsigned int fun(unsigned num) unsigned int k=1; do k=k*num%10; num=num/10; while(num); return k; ,main( ) unsigned n=25; printf (“%un”, fun(n); ,0,函数习题, 阅读程序并写出运行结果,4下面程序运行的结果是_: #include int fun(int x, int y) static int m=0, n=2; n+=m+1; m=n+x+y; return m; ,main( ) int j=4, m=1, k; k=fun(j, m); printf (“%d,“, k); k=fun(j,m); printf(“%dn“, k); ,8,17,函数习题, 阅读程序并写出运行结果,5下面程序运行的结果是_: #include void t(int x, int y, int p, int q) p=x*x+y*y; q=x*x-y*y; main( ) int a=4, b=3, c=5, d=6; t(a, b, c, d); printf (“%d, %dn“, c, d); ,5,6,函数习题, 编程题,1编程实现从键盘输入一整数,如果该整数为素数,则返回1,否则返回0。要求单独编写一个求素数的自定义函数。,函数习题, 编程题,2编写一函数change(x,r),将十进制整数x转换成r(1r10)进制后输出。,int change(int x,int r) int temp, result=0,count=0; do temp=x%r; printf(“%dn“, temp); /*结果的逆序输出*/ result=result+temp*pow(10,count+); x=x/r; while(x); return result; ,函数习题, 编程题,3求1000以内的亲密数对。亲密数对的定义为:若正整数a的所有因子(不包括a本身)之和为b,b的所有因子(不包括b本身)之和为a,且ab,则称a与b为亲密数对。,函数习题, 编程题,4试用递归的方法编写一个返回长整型的函数,以计算斐波纳契数列的前20项。该数列满足:F(0)=1,F(1)=1,F(n)=F(n-1)+F(n-2) (n2)。,函数习题, 编程题,5. 如果一个数等于其所有真因子(不包括其本身)之和,则该数为完数,例如6的因子有1、2、3,且6=1+2+3,故6为完数,求21000中的完数。,指针习题,指针习题, 单项选择题,1若已定义int a=8, *p=则数组第2个元素“2”不可表示为 A)a1 B)p1 C)*p+1 D)*(p+1),返回目录,D,C,C, 单项选择题,4若已定义int a,*p=“,其中的p和q分别是 10个指向整型变量的指针 指向具有10个整型变量的函数指针 一个指向具有10个元素的一维数组的指针 具有10个指针元素的一维数组 A)、 B)、 C)、 D)、,C,D,指针习题, 单项选择题,6若已定义int a24= 80, 81, 82, 83 , 84, 85, 86, 87 , (*p)4=a;则执行p+;后,*p代表的元素是 A)80 B)81 C)84 D)85 7执行语句“char a10=“abcd“;*p=a;后,(p+4)的值是 A)“abcd“ B)0 C)d D)不能确定 8设已定义int a32=10,20,30,40,50,60;和语句(*p)2=a;则*(*(p+2)+1)的值为 A)60 B)30 C)50 D)不能确定,C,B,A,指针习题, 单项选择题,9以下程序的运行结果是 #include main( ) int a43= 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12; int *p4, i; for(i=0; i4; i+) pi=ai; printf(“%2d,%2d,%2d,%2dn“, *p1, (*p)1, p32, *(p3+1); A)4, 4, 9, 8 B)程序出错 C)4, 2,12,11 D)1, 1, 7, 5,C,指针习题, 单项选择题,10以下各语句或语句组中,正确的操作是 A)char s4=“abcde“; B)char *s; gets(s); C)char *s; s=“abcde“; D)char s5; scanf(“%s“, ,C,指针习题, 单项选择题,11以下程序的运行结果是 #include main ( ) char *s=“xcbc3abcd“; int a, b, c, d; a=b=c=d=0; for ( ; *s ; s+ ) switch ( *s ) case c: c+; case b: b+; default : d+; break; case a: a+; printf(“a=%d,b=%d,c=%d,d=%dn“, a, b, c, d); (a=a的个数、b=b,c的个数、c=c的个数、d=非a的个数) A)a=1,b=5,c=3,d=8 B)a=1,b=2,c=3,d=3 C)a=9,b=5,c=3,d=8 D)a=0,b=2,c=3,d=3,A,指针习题, 单项选择题,12若有以下程序: #include main ( int argc, char *argv ) while ( -argc ) printf ( “%s“, argvargc ); printf ( “n“ ); 该程序经编译和连接后生成可执行文件S.EXE。现在如果在DOS提示符下键入S AA BB CC后回车,则输出结果是: A)AABBCC B)AABBCCS C)CCBBAA D)CCBBAAS,C,指针习题, 单项选择题,13若有定义char *language =“FORTRAN“, “BASIC“, “PASCAL“, “JAVA“, “C“; 则language2的值是: A)一个字符 B)一个地址 C)一个字符串 D)不定值 14若有以下定义和语句,则对a数组元素地址的正确引用是: int a23, (*p)3; p=a; A)*(p+2) B)p2 C)p1+1 D)(p+1)+2,B,C,指针习题, 单项选择题,15若有int max( ), (*p)( ); 为使函数指针变量p指向函数max,正确的赋值语句是: A)p=max; B)*p=max; C)p=max(a, b); D)*p=max(a, b); 16若有定义int a35, i, j; (且0i3, 0j5),则aij不正确的地址表示是: A)&aij B)ai+j C)*(a+i)+j D)*(*(a+i)+j),A,D,指针习题, 单项选择题,17设先有定义: char s10; char *p=s; 则下面不正确的表达式是: A)p=s+5 B)s=p+s C)s2=p4 D)*p=s0 18设先有定义: char *s; 则下面正确的表达式是: A)s=“computer“ B)*s=“computer“ C)*s=“computer“ D)*s=c,B,B,指针习题, 程序填空题,1定义compare ( char *s1, char *s2 )函数,实现比较两个字符串大小的功能。以下程序运行结果为-32,选择正确答案填空。 #include main ( ) printf ( “%dn“, compare ( “abCd“, “abc“ ); compare ( char *s1, char *s2 ) while ( *s1 ,*s1 = = *s2,指针习题, 程序填空题,2以下程序用来输出字符串。 #include main ( ) char *a =“for“, “switch“, “if“, “while“; char *p; for ( p=a; pa+4; p+ ) printf ( “%sn“, _【2】_ ); ,*p,指针习题, 程序填空题,3以下程序的功能是从键盘上输入若干个字符(以回车键作为结束)组成一个字符数组,然后输出该字符数组中的字符串,请填空! #include main ( ) char str81,*p; int i; for (i=0;i80;i+) stri=getchar( ); if (stri=n) break; stri=0; _【3】_; while(*p) putchar(*p_【4】_); ,p=str,+,指针习题, 程序填空题,4下面是一个实现把t指向的字符串复制到s的函数,请完成之。 strcpy ( char *s, char *t ) while ( (_【5】_ ) !=0 ); ,*s+=*t+,指针习题, 程序填空题,5下面count函数的功能是统计子串substr在母串str中出现的次数。 count(char *str, char *substr) int i,j,k,num=0; for (i=0; _【6】_ ; i+) for ( _【7】_, k=0 ; substrk=strj; k+, j+) if (substr _【8】_ =0) num+; break; return(num); ,stri!=0,j=i,k+1,指针习题, 程序填空题,6下面connect函数的功能是将两个字符串s和t连接起来。 connect (char *s, char *t) char *p=s; while (*s) _【9】_; while (*t) *s=_【10】_; s+; t+; *s=0; _【11】_ ,s+,*t,return(p);,指针习题, 阅读程序并写出运行结果,1运行如下程序并分析其结果: #include main ( ) void fun ( char *s ); static char str =“123“; fun ( str ); void fun ( char *s ) if ( *s ) fun ( +s ); printf ( “%sn“, -s ); ,指针习题, 阅读程序并写出运行结果,2运行如下程序并分析其结果: #include void sub ( int *x, int y, int z ) *x = y - z; main ( ) int a, b, c; sub ( , 阅读程序并写出运行结果,3下列程序的功能是保留给定字符串中小于字母n的字母。请写出其结果并分析: #include void abc ( char *p ) int i, j; for ( i=j=0; *(p+i)!=0; i+ ) if ( *(p+i)n ) *(p+j)=*(p+i); j+; *(p+j)=0; main ( ) char str =“morning“; abc ( str ); puts ( str ); ,4运行如下程序并分析其结果: #include main ( ) char *a4=“Tokyo“,“Osaka “,“Sapporo “ ,“Nagoya “; char *pt; pt=a; printf(“%s“,*(a+2); , 阅读程序并写出运行结果,5设如下程序的文件名为myprogram.c,编译并连接后在DOS提示下键入命令:myprogram one two three,则执行结果是: #include main (int argc, char *argv ) int i; for (i=1; iargc; i+) printf (“%s%c“,argvi,(iargc-1)? : n); , 编程题,编一程序,求出从键盘输入的字符串的长度。 编一程序,将字符串中的第m个字符开始的全部字符复制到另一个字符串。要求在主函数中输入字符串及m的值并输出复制结果,在被调用函数中完成复制。 输入一个字符串,按相反次序输出其中的所有字符 输入2个字符串,将其连接后输出 编写一个密码检测程序,程序执行时,要求用户输入密码(标准密码预先设定),然后通过字符串比较函数比较输入密码和标准密码是否相等若相等,则显示“口令正确”并转去执行后继程序;若不相等,重新输入,三次都不相等则终止程序的执行。 编写一程序,求出某个二维数组中各行的最大值,并指明其位置。 编写一程序,求某个字符串的子串。, 编程题,参考解答:,结构体习题,结构体习题, 单项选择题,1下面正确的叙述的是( )。 A)结构一经定义,系统就给它分配了所需的内存单元 B)结构体变量和共用体变量所占内存长度是各成员所占内存长度之和 C)可以对结构类型和结构类型变量赋值、存取和运算 D)定义共用体变量后,不能引用共用体变量,只能引用共用体变量中的成员 2结构体类型变量在程序执行期间( )。 A)所有成员驻留在内存中 B)只有一个成员驻留在内存中 C)部分成员驻留在内存中 D)没有成员驻留在内存中,返回目录,D,A,结构体习题, 单项选择题,3设有以下定义 struct date int cat; char c; int a4; long m; mydate; 则在Turbo C中执行语句: printf(“%d“, sizeof(struct date); 的结果是( )。 A)25 B)15 C)18 D)8,B,结构体习题, 单项选择题,4在说明一个共用体变量时系统分配给它的存储空间是( ) A)该共用体中第一个成员所需存储空间 B)该共用体中最后一个成员所需存储空间 C)该共用体中占用最大存储空间的成员所需存储空间 D)该共用体中所有成员所需存储空间的总和 5共用体类型变量在程序执行期间的某一时刻( )。 A)所有成员驻留在内存中 B)只有一个成员驻留在内存中 C)部分成员驻留在内存中 D)没有成员驻留在内存中,C,B,结构体习题, 单项选择题,6对于下面有关结构体的定义或引用,正确的是( )。 struct student int no; int score; student1; A)student.score=99; B)student LiMing; LiMing.score=99; C)stuct LiMing; LiMing.score=99; D)stuct student LiMing; LiMing.score=99;,D,结构体习题, 单项选择题,7以下说法错误的是( )。 A)结构体变量的名称为该结构体变量的存储首地址 B)Turbo C中,结构体变量占用空间的大小为各成员项占用空间大小之和,而共用体占用空间大小为其成员项中占用空间最大的成员项所需存储空间大小 C)结构体定义时不分配存储空间,只有在结构体变量说明时,系统才分配存储空间 D)结构体数组中不同元素的同名成员项具有相同的数据类型,A,结构体习题, 单项选择题,8若有以下说明和语句: struct teacher int no; char *name; xiang, *p= 则以下引用方式不正确的是( )。 A)xiang.no B)(*p).no C)p-no D)xiang-no,D,结构体习题, 程序填空题,1以下程序段的作用是统计链表中结点的个数,其中first为指向第1个结点的指针。 struct node char data; struct node *next; *p, *first; . int c=0; p=first;

温馨提示

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

评论

0/150

提交评论