1、str1=NULL;/杜绝野指针p=head; q=p-next;while(q!=NULL) temp=q-q-next=p;p=q;q=temp; 这样增加个辅助的指针就行乐。ok 通过编译的代码:stdio.hctype.hstdlib.htypedef struct List int data;struct List *next;List;List *list_create(void) struct List *head,*tail,*p;int e;head=(List *)malloc(sizeof(List);tail=head;printf(nList Create,input
2、 numbers(end of 0):);scanf(%d,&e);while(e) p=(List *)malloc(sizeof(List);p-data=e;tail-tail=p;next=NULL;return head;List *list_reverse(List *head) List *p,*q,*r;r=q-q=r;head-head=p;void main(void) struct List *head,*p;int d;head=list_create();nfor(p=head-p;p=p-next) -%d-,p-data);head=list_reverse(he
3、ad);for(p=head; 编写函数数N个BYTE的数据中有多少位是1。解:此题按步骤解:先定位到某一个BYTE数据;再计算其中有多少个1。叠加得解。#incluede#define N 10/定义BYTE类型别名#ifndef BYTEtypedef unsigned char BYTE;#endifint comb(BYTE b,int n)int count=0;int bi,bj;BYTE cc=1,tt;/历遍到第bi个BYTE数据for(bi=0;bin;bi+)/计算该BYTE的8个bit中有多少个1tt=bbi; for(bj=0;bj1;tt=tt/2;return co
4、unt;/测试int main()BYTE b10=3,3,3,11,1,1,1,1,1,1;comb(b,N) iCount) iCount = iTemp, cpDest = cpTemp;if(!*cpSource) break;+cpSource;return cpDest;string.h/ 自定义函数MyAtoI/ 实现整数字符串转换为证书输出/ 程序不检查字符串的正确性,请用户在调用前检查int MyAtoI(char str)int weight = 1; / 权重int rtn = 0; / 用作返回for(i = strlen(str) - 1; i = 0; i-) rt
5、n += (stri - 0)* weight; / weight *= 10; / 增重return rtn;void main()char str32;Input a string :gets(str);%dn, MyAtoI(str);#includevoid reverse(char s) /字符串反转 int c, i=0, j; for(j=strlen(s)-1;ij;j-) c=si; si=sj; sj=c; i+; void IntegerToString(char s,int n) int i=0,sign; if(sign=n)0); /如果是负数,补上负号 if(si
6、gnstatic jmp_buf buf;main() volatile int b; b =3; if(setjmp(buf)!=0) %d , b); exit(0); b=5; longjmp(buf , 1);请问,这段程序的输出是(a) 3(b) 5(c) 0(d) 以上均不是第2题:考查类型转换 struct node int a; int b; int c; ; struct node s= 3, 5,6 ; struct node *pt = &s; , *(int*)pt);这段程序的输出是:(c) 6(d) 7第3题:考查递归调用 int foo ( int x , int
7、 n) int val; val =1; if (n if (n%2 = 1) val = val *x; val = val * foo(x*x , n/2); return val;这段代码对x和n完成什么样的功能(操作)?(a) xn (x的n次幂)(b) x*n(x与n的乘积)(c) nx(n的x次幂)第4题:考查指针,这道题只适合于那些特别细心且对指针和数组有深入理解的人 int a5 = 1,2,3,4,5; int *ptr = (int*)(&a+1);%d %d , *(a+1), *(ptr-1) );(a) 2 2(b) 2 1(c) 2 5第5题:考查多维数组与指针vo
8、id foo(int 3 ); int a 33= 1,2,3 , 4,5,6,7,8,9; foo(a); , a21);void foo( int b3) + b; b11 =9;(a) 8(b) 9(c) 7(d)以上均不对第6题目:考查逗号表达式 int a, b,c, d; a=3; c=a,b; d=(a,b);c=%d ,c);d=%d ,d);(a) c=3 d=3(b) c=5 d=3(c) c=3 d=5(d) c=5 d=5第7题:考查指针数组 int a3 = 1,2,3 ,4,5,6; int (*ptr)3 =a;%d %d ,(*ptr)1, (*ptr)2 );
9、 +ptr;(a) 2 3 5 6(b) 2 3 4 5(c) 4 5 0 0(d) 以上均不对第8题:考查函数指针int *f1(void) int x =10; return(&x);int *f2(void) int*ptr; *ptr =10; return ptr;int *f3(void) int *ptr; ptr=(int*) malloc(sizeof(int);上面这3个函数哪一个最可能引起指针方面的问题(a) 只有 f3(b) 只有f1 and f3(c) 只有f1 and f2(d) f1 , f2 ,f3第9题:考查自加操作(+) int i=3; int j; j
10、= sizeof(+i+ +i);i=%d j=%d, i ,j);(a) i=4 j=2(b) i=3 j=2(c) i=3 j=4(d) i=3 j=6第10题:考查形式参数,实际参数,指针和数组void f1(int *, int);void f2(int *, int);void(*p2) ( int *, int); p0 = f1; p1 = f2; p0(&a , b);%dt %dt , a ,b); p1(&void f1( int* p , int q) int tmp; tmp =*p; *p = q; q= tmp;void f2( int* p , int q)(a)
11、 5 5 5 5(b) 3 5 3 5(c) 5 3 5 3(d) 3 3 3 3第11题:考查自减操作(-)void e(int ); e(a);void e(int n) if(n0) e(-n); , n);(a) 0 1 2 0(b) 0 1 2 1(c) 1 2 0 1(d) 0 2 1 1第12题:考查typedef类型定义,函数指针typedef int (*test) ( float * , float*)test tmp;tmp 的类型是(a) 函数的指针,该函数以 两个指向浮点数(float)的指针(pointer)作为参数(arguments) Pointer to fu
12、nction of having two arguments that is pointer to float(b) 整型(c) 函数的指针,该函数以 两个指向浮点数(float)的指针(pointer)作为参数(arguments),并且函数的返回值类型是整型 Pointer to function having two argument that is pointer to float and return int(d) 以上都不是第13题:数组与指针的区别与联系 char p; char buf10 = 1,2,3,4,5,6,9,8; p = (buf+1)5; , p);(a) 5(
13、b) 6(c) 9(d) 以上都不对第14题: 考查指针数组的指针Void f(char*); char * argv = ab ,cd , efgh, ijkl f( argv );void f( char *p ) char* t; t= (p+= sizeof(int)-1; printf( %s , t);(a) ab(b) cd(c) ef(d) gh第15题:此题考查的是C的变长参数,就像标准函数库里printf()那样,这个话题一般国内大学课堂是不会讲到的,不会也情有可原呵呵,stdarg.hint ripple ( int , .); int num; num = ripple
14、 ( 3, 5,7); %d , num);int ripple (int n, .) int i , j; int k; va_list p; k= 0; j = 1; va_start( p , n); for (; j +j) i = va_arg( p , int); i; i &=i-1 ) +k; return k;(a) 7(c) 5(d) 3第16题:考查静态变量的知识int counter (int i) static int count =0; count = count +i; return (count ); for (i=0; i =5; j = counter(i)
15、;本程序执行到最后,j的值是:(a) 10(b) 15详细参考答案 (b)volatile字面意思是易于挥发的。这个关键字来描述一个变量时,意味着 给该变量赋值(写入)之后,马上再读取,写入的值与读取的值可能不一样,所以说它容易挥发的。这是因为这个变量可能一个寄存器,直接与外部设备相连,你写入之后,该寄存器也有可能被外部设备的写操作所改变;或者,该变量被一个中断程序,或另一个进程改变了.volatile 不会被编译器优化影响,在longjump 后,它的值 是后面假定的变量值,b最后的值是5,所以5被打印出来.setjmp : 设置非局部跳转 /* setjmp.h*/Stores conte
16、xt information such as register values so that the lomgjmp function can return control to the statement following the one calling setjmp.Returns 0 when it is initially called.Lonjjmp: 执行一个非局部跳转 /* setjmp.h*/Transfers control to the statement where the call to setjmp (which initialized buf) was made.
17、 Execution continues at this point as if longjmp cannot return the value 0.A nonvolatile automatic variable might be changed by a call to longjmp.When you use setjmp and longjmp, the only automatic variables guaranteed to remain valid are those declared volatile.Note: Test program without volatile qualifier (result may very)更详细介绍,请参阅 C语言的setjmp和longjmp (a)结构题的成员在内存中的地址是按照他们定义的位置顺序依次增长的。如果一个结构体的指针被看成 它的第一个成员的指针,那么该指针的确指向第一个成员此题目较难.这个程序的非递归版本 int what ( int x , int n) int product; pro