110年關務人員四等程式設計概要
四、請仔細觀察下列程式碼,請問 function 之功能為何?(25分) #include <stdio.h> #include <stdlib.h> void function(int* p, int input1, int input2) { int* p1; int* p2 = p; for(p1 = p+input1-1; p1 > p-1; p1--) { *(p1+input2) = *p1; } for(p1 = p+input1; p2 < p+input2; p1++) { *p2++ = *p1; } } int main( ) { int array[5] = {103, 45, 99, 38, 76}; int* p1 = array; int var1 = 0; int var2 = 5; int var3 = 2; for(p1 = array; p1 < array+var2;) { printf("%d, ", *p1++); } function(array, var2, var3); printf("\n"); for(p1 = array; p1 < array+var2;) { printf("%d, ",*p1++); } return 0; } |
答:
#include <stdio.h> #include <stdlib.h> void function(int* p, int input1, int input2) { int* p1; int* p2 = p; for(p1 = p+input1-1; p1 > p-1; p1--) { *(p1+input2) = *p1; } for(p1 = p+input1; p2 < p+input2; p1++) { *p2++ = *p1; } } int main( ) { int array[5] = {103, 45, 99, 38, 76}; int* p1 = array; int var1 = 0; int var2 = 5; int var3 = 2; for(p1 = array; p1 < array+var2;) { printf("%d, ", *p1++); } function(array, var2, var3); printf("\n"); for(p1 = array; p1 < array+var2;) { printf("%d, ",*p1++); } return 0; } |
執行結果:
103, 45, 99, 38, 76,
38, 76, 103, 45, 99,
說明:
第一個迴圈:
for(p1 = p+input1-1; p1 > p-1; p1--) { *(p1+input2) = *p1; } |
p1 指向4:
0 |
1 |
2 |
3 |
4 |
5 |
6 |
103 |
45 |
99 |
38 |
76 |
|
76 |
p1 指向3:
0 |
1 |
2 |
3 |
4 |
5 |
6 |
103 |
45 |
99 |
38 |
76 |
38 |
76 |
p1 指向2:
0 |
1 |
2 |
3 |
4 |
5 |
6 |
103 |
45 |
99 |
38 |
99 |
38 |
76 |
p1 指向1:
0 |
1 |
2 |
3 |
4 |
5 |
6 |
103 |
45 |
99 |
45 |
99 |
38 |
76 |
p1 指向0:
0 |
1 |
2 |
3 |
4 |
5 |
6 |
103 |
45 |
103 |
45 |
99 |
38 |
76 |
第二個迴圈:
for(p1 = p+input1; p2 < p+input2; p1++) { *p2++ = *p1; } |
p1 指向5:
0 |
1 |
2 |
3 |
4 |
5 |
6 |
38 |
45 |
103 |
45 |
99 |
38 |
76 |
p1 指向6:
0 |
1 |
2 |
3 |
4 |
5 |
6 |
38 |
76 |
103 |
45 |
99 |
38 |
76 |
留言列表