资源描述
高考c语言复习题(5)#include void main() char s=”2473”, c, i; for(i=0;c=si;i+) switch(c-0) case 2: case 3: putchar(c+4); continue; case 4: putchar(c+4); break; case 5: putchar(c+3); default: putchar(c+2); putchar(n); 16.写出程序的输出结果(假定类型unsigned int 的字长为16位)。( )#include void main() unsigned int u1=0x958,u2,u3; u2=(u1 & 0xff)4; printf(“%x %x %xn”,u2,u3,u2/u3);17.设一维数组a的4个输入整数是1,2,3,4,则程序的输出是( )#include #define M 4void main( ) int i, j, k, m, a4; printf(“Enter 4 numbers: “); for(i=0; i0; i-) k=M-1; for(j=M-1; j0; j-) aj=aj-1; a0=k; for(m=0; mM; m+) printf(“%d”,am); printf(“n”); 18.以下isprime函数的功能是判断形参a是否为素数,是素数,函数返回1,否则返回0。请填空 int isprime(int a) int i; for(i=2; ;i+) if(a%i=O) _ _; _; 19.程序的作用是将字符串s1复制到字符串s2中。main() char s=”China”,s220;int i; for(i=0; _ _;i+) *(s2+i)= ;_ _;printf(“s1=%sn”,s1);printf(“s2=%sn”,s2);20.以下程序的功能是输入任意整数给n后,输出n行由大写字母A开始构成的三角形字符阵列图形例如,输入整数5时(注意:n不得大于10),程序运行结果如下; ABCDE FGHI JKL MN O请填空完成该程序。 main() int i,j,n; char ch=A; scanf(%d,&n); if(n11) for(i=1;i=n;i+) for(j=1;j ;j+) printf(%2c,ch); ; ; else printf(n is too large!n); printf(n); 21、改错题(每处5共15分)下列程序各有三个错误,请用波浪线标出错误部分,并在旁边更正。输入10个正整数,计算其中的素数之和并输出结果(不考虑溢出情况)。#01 #include #02 int sum(int *b, int m) #03 int s=0, is_prime(long);#04 while(m-)#05 if(is_prime(*b+) s+=*b;#06 return s;#07 #08 is_prime(long m) #09 int k;#10 if(m=1) return 0;#11 if(m=2|m=3) return 1#12 for(k=2; k*k=m; k+)#13 if(m%k=0) return 0;#14 else return 1;#15 #16 void main() #17 int x10, i;#18 for(i=0; i10; i+) scanf(“%d”, x+);#19 printf(“sum=%dn”, sum(x,10); #20 22.编程题(15分)要求利用到递归法和函数求1+2+3+4+5+100的值23.给定程序中函数fun的功能是:求整数x的y次方的低3位值。例如5的6次方为12625,此值的低3位值为625。请改正函数fun中的三处错误,使它能得出正确的结果。#include “stdio.h”long fun(int x,int y, long *p) int i;long t=1; for (i=1;iy;i+)t=t*x;*p=t; t=t/1000;return t;main() logn t,r;int x,y;printf(“n input x and y:”); scanf(“%ld%ld”,&x,&y);t=fun(x,y,r);printf(“nnx=%d,y=%d,r=%d,last=%ldnn”,x,y,r,t);24、编程题(15分)求出任意一个数m(设4=mbc;r2=ac;printf(“r1=%d,r2=%d”,r1,r2);(2) 执行下列程序后,输出( ) #include void main() int *a10, b, c;a0=&b;*a0=5;c=(*a0)+;printf(“%d %dn”, b, c); (3) 设有如下程序: #include void main() int clock; float f; char cpu20;scanf(“%4d%f%s”, &clock, &f, cpu);printf(“%d %.0f %sn”, clock, f, cpu); 假设输入数据流为200015.0 P4 is GOOD!,请写出执行该程序后的输出结果( )。(4)输出结果( ) #include main() union int a; char b2; c; c.a=65;puts(c.b); printf(%dn,sizeof(c);(5)输出结果( ) main() union struct int x,y; in;int a,b; e; e.a=1; e.b=2; e.in.x=e.a*e.b; e.in.y=e.a+e.b; printf(%d %d,e.in.x,e.in.y); (6)输出结果( ) struct w char low ; char high ; ;union u struct w byte ; int word ; uu;main ( ) uu.word = 0x1234 ; printf(“%04xn”, , uu.word); printf(“%02xn”, , uu.byte.high) ; printf(“%02xn”, , uu.byte.low); uu.byte.low = 0xff ; printf(“%04xn”, , uu.word) ;26. 下面的函数是将p所指的结点插入head(形参中)所指的单向链表中。设链表已按学号(num)从小到大顺序排列,要求将p(形参)所指的结点插入后链表保持有序,函数返回插入后的链表的头指针。 结点结构为: typedef struct node int num; struct node *next; NODE; 函数为: NODE *insert(NODE *head ,NODE * p) NODE *front,*rear; front=head; while (front!=NULL & front-num num) rear=front; ; if (front=NULL ) if (head=NULL) ; else rear-next=p; ; else if (head=front) head=p; else rear-next=p; ; ; 27. 下面的函数strcpy1是将源串src拷贝到目的串dest中,并返回目的串的首地址。 char *strcpy1(char *dest,const char *src) char *temp=dest; while ( ); return ; 28. 下面的str_count函数计算串substring在母串string中出现的次数,并将次数返回。 int str_count(char *string,char *substring) int i,j,k;int count=0;for (i=0; stringi!= ; i+) for (j= ,k=0; substringk=stringj; k+,j+) if (substring =0) count+; break; return ; 29 下面函数的功能是用递归法求数组中的最大值及下标值,请填空使程序完整。void findmax(int *a,int n,int i,int *pk) if (ia*pk) ; findmax( ) ; 30. 运行结果( )void del (char *s,char c ) int i,j;for (i=j=0; si!=0; i+) if ( si = = c) sj+=si;sj=0; main() char s=the c language;del(s,a); puts(s);31.运行结果( ) #include #include void fun(char *p,int n) char *i,*j,t;for (i=p,j=p+n-1; i=0; j-) printf(“%sn”,*(p-) ;33. 下面程序用“插入法”对数组a进行由小到大的排序,请填(3)空使程序完整。经典算法提示:简单插入排序算法的基本思想使将数组处理n-1次,第k次处理是将第k个元素插入到目前的位置。第k次的元素是这样插入的:在第k次处理时,前面的元素a0,a1,ak-1必定已排成了升序,将ak与ak-1,ak-2,a0逐个比较(由后向前),若有ajak,则ak插入到aj之后,否则ak维持原位不变。main ( ) int a10=191,3,6,4,11,7,25,13,89,10 ;int i,j,k ; for (i=1; i=0 & kaj ) 【2 】;j-;【3 】=k ;for (i=0; i10; i+) printf(“%d”,ai);34.下面程序用“两路合并法”把两个已按升序(由小到大)排列的数组合并成一个新的升序数组,请填(3)空使程序完整。main ( ) int a3=5,9,10 ;int b5=12,24,26,37,48 ;int c10,i=0,j=0,k=0 ;while (i3 & i5)if (【1 】) ck=bj ; k+ ; j+ ; else ck=aj ; k+ ; i+ ;while (【2 】) ck=aj ; i+ ; k+ ; while (【3 】) ck=bj ; j+ ; k+ ; for (i=0; ik; i+) printf(“%d ”,ci);35. 下面程序用“顺序查找法”查找数组a中是否存在某一关键字,请填(2)空使程序完整。main ( ) int a10=25,57,48,371,123,291,18,22,44;int i=0,x ;scanf(“%d”,&x);【1 】;while (ai!=x) i+ ;if (【2 】) printf(“found=%dn”,i);else printf(“cant found!n”);36. 下面函数用“折半查找法”从有10个数的a数组中对关键字m查找,若找到,返回其下标值,否则返回1,请填(2)空使程序完整。经典算法提示:折半查找法的思路是先确定待查元素的范围,将其分成两半,然后比较位于中间点元素的值。如果该待查元素的值大于中间点元素的值,则将范围重新定义为大于中间点元素的范围,反之亦反。int search(int a10,int m) int x1=0,x2=0,mid ;while (x1=x2) mid = (x1+x2)/2;if (mamid) 【2 】;else return (mid) ;return (-1) ;37. 写出下面程序的运行结果。func (int a,int b) static int m=0,i=2;i+=m+1;m=i+a+b;return (m);main ( ) int k=4,m=1,p1,p2;p1=func(k,m) ; p2=func(k,m) ;printf(“%d,%dn”,p1,p2) ;38.写出下面程序的运行结果。# define MAX 10int aMAX, i ;sub1 ( ) for (i=0; iMAX; i+) ai=i+i ;sub2 ( ) int aMAX, i ,max ;max=5;for (i=0; iMAX; i+) ai=i ;sub3 (int a ) int i ;for (i=0; iMAX; i+) printf(“%d ”,ai);printf(“n”);main ( ) sub1( ); sub3(a); sub2( ); sub3(a);39.若输入的值是125,写出下面程序的运行结果。#include fun (int n) int k,r ;for (k=2; k1) printf(“*”);r = n % k ;if (n!=1) printf(“%dn”,n); main ( ) int n ; scanf(“%d”,&n);printf(“%d=”,n);if (n0) printf(“-”);n = fabs(n); fun(n);40.写出下面程序的运行结果。int i=0;fun1 (int i) i = (i%i)*(i*i)/(2*i)+4 ;printf(“i=%dn”,i);return (i) ;fun2(int i) i = i=2 ? 5 : 0 ;return (i) ;main ( ) int i = 5 ;fun2(i/2) ; printf(“i=%dn”,i) ;fun2(i=i/2) ; printf(“i=%dn”,i) ;fun2(i/2) ; printf(“i=%dn”,i) ;fun1(i/2) ; printf(“i=%dn”,i) ;41.写出下面程序的功能。func (int n) int i,j,k;i=n/100; j=n/10-i*10 ; k=n%10 ;if (i*100+j*10+k) = i*i*i+j*j*j+k*k*k) return n ;return 0;main ( ) int n,k ;for (n=100; n0) ;43. 以下程序输出结果是 。main ( ) int x=1,y=0,a=0,b=0;switch(x) case 1:switch (y) case 0 : a+ ; break ;case 1 : b+ ; break ;case 2:a+; b+; break;case 3:a+; b+;printf(“a=%d,b=%d”,a,b);44.写出下面程序运行的结果。main ( ) int i,j,k=19;while (i=k-1) k-=3 ;if (k%5=0) i+ ; continue ; else if (k5) break ; i+;printf(“i=%d,k=%dn”,i,k);45.表达式 ( 102 ) 的值为_。 46.下列程序段的输出结果是_。 int k, a=4, b=3 ; k = ( a=+ b) ?0 :1 ; printf(%d,k);47.表达式 (71)&1 ) 的值为_。 48.下列程序段的输出结果是_。 #define T 16 #define S (T+10)-7 printf(%d,S*2);49.下列程序段的输出结果是_。 int k = -1 ; if (! ( k=0 ) ) printf (*) ; else printf (#) ;50对于以下递归函数f,调用 f (3) 的返回值是_。 int f(int k) return (k0) ? 1 : f(k-2)+2); 51. 表达式 ( 5=5=5 ) 的值为_。 52下列程序段的输出结果是_。 int k, a=3, b=2 ; k = ( a-= b)?0: 1 ; printf(%d,k);53. 表达式 (21)|2 ) 的值为_。 54. 下列程序段的输出结果是_。 #define M(x,y) (x*y) printf(%d, M(2, 3+4);55. 表达式 (4/5*(float)3+(float)3*4/5) 的值为_。56下列程序段的输出结果是_。 #include printf(%d,NULL);57. 表达式 (4|1)&3 ) 的值为_。58下列程序段的输出结果是_。 int k = 10 ; if ( k0 ) printf (“%d”,k=0) ;59对于以下递归函数f,调用 f (4) 的返回值是_。 int f(int n) if (n) return f(n-1)+n; else return n; 60下列程序段的输出结果是_。 static char s =window; printf(%s,s+3);61. 表达式 (5-1 & 3+5/2)的值是_。 62下列程序段的输出结果是_。 #include printf(%d,EOF);63. 表达式 (3&4|2 ) 的值为_。64. 下列程序段的输出结果是_。 #define M(x,y) (x/y) printf(%d, M(3+4, 6);65.对于以下递归函数f,调用 f (3) 的返回值是_。 int f(int x) return (x0)? f(x-1)+f(x-2):1); 66.表达式 (2-5 | (5=4)的值是_。67用八位二进制表示带符号的整数,则能表示数的范围是从_ 到127。 68. 表达式 (3&7 ) 的值为_。 69.下列程序段的输出结果是_。 #define DD(x,y) (x*x-y*y) printf(%d, DD(2*3, 2+3);70以下程序段的输出结果是_。 int k; for(k=10;k=0;k-); printf(”%d”,k);
展开阅读全文