2007年真題
阿新 • • 發佈:2020-11-28
二、
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); 31for(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 }
執行結果: