1. 程式人生 > 實用技巧 >2007年真題

2007年真題

二、

3、

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 union ww{
 5     char s[4];
 6     int k;
 7 };
 8 
 9 struct node{
10     int a,*b;
11     union ww c;
12 };
13 
14 int main()
15 {
16     int a[5],i,n=0x6162;
17     struct node s[5],*p;
18     for(i=0,p=s;i<5;i++,p++){
19         p->b=a+i;
20 s[i].c.k=n++; 21 } 22 for(i=0;i<5;i++) 23 a[i]=i*10+10; 24 p=s; 25 printf("%d,",++*p->b); 26 printf("%d,",*++p->b); 27 printf("%c,",p++->c.s[0]); 28 printf("%d,",*++p->b); 29 printf("%c,",p->c.s[1]++); 30 printf("%x,",p++->c.k); 31
for(i=0,p=s;i<5;i++,p++) 32 printf("%d,",*p->b); 33 return 0; 34 }

執行結果:

醜就醜一點。。。有時間再整理

7、

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 int main()
 5 {
 6     int k;
 7     char c='A';
 8     do{
 9 
10         switch(c++){
11             default : k=k*2;break
; 12 case 'A':k++;break; 13 case 'B':k--; 14 case 'C':k+=2;break; 15 case 'D':k=k%2;continue; 16 } 17 k++; 18 }while(c<'F'); 19 printf("k=%d\n",k); 20 return 0; 21 }

執行結果:

注意:

break語句在迴圈和switch語句中使用,用於終止最近的封閉程式碼塊,如果在巢狀迴圈中,則只終止最近的迴圈。

continue語句在迴圈中使用,不能單獨在switch中使用,可以在迴圈內的switch中使用,用於跳過當次迴圈,直接進入下一次迴圈。

比如:本題中continue後沒經過k++;而是直接開始繼續判斷。而break;後是經過k++;的再進行判斷。

8、

分析程式碼:

sub函式的功能是找陣列中的最大整數的位置,這個位置是用陣列的首元素的地址與偏移量*j來確定的,而這個偏移量儲存在變數m中,所以main函式輸出陣列的最大元素為*(a+*n)<=>*(a+m)

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #define N 10
 4 int a[N];
 5 
 6 int main()
 7 {
 8     void sub(int *,int *);
 9     int i,*n,m=0,*t=a;
10     for(i=0;i<N;i++)
11         scanf("%d",a+i);
12     n=&m;
13     sub(t,n);
14     printf("%d",*(a+*n));
15     return 0;
16 }
17 
18 void sub(int *k,int *j){
19     if(k<a+N){
20         if(*k>*(a+*j))
21             *j=k-a;
22         sub(k+1,j);
23     }
24 }

執行結果: