|   | 
              
                85樓                巨大八爪鱼
                2016-1-16 21:53
                                                  
			  【9-10】#include <stdio.h>
 #include <stdlib.h>
 
 void main()
 {
 int n, sum = 0;
 FILE *fp;
 if ((fp = fopen("int.txt", "r")) == NULL)
 {
 printf("文件打不開\n");
 exit(0);
 }
 while (!feof(fp))
 {
 fscanf(fp, "%d", &n);
 sum += n;
 }
 fclose(fp);
 if ((fp = fopen("int.txt", "a")) == NULL)
 {
 printf("文件打不開\n");
 exit(0);
 }
 fprintf(fp, " %d", sum);
 fclose(fp);
 }
 
 | 
                
          |   | 
              
                86樓                巨大八爪鱼
                2016-1-16 21:53
                                                  
			  第九章複習完畢!             | 
                
          |   | 
              
                87樓                巨大八爪鱼
                2016-1-17 14:57
                                                  
			  【7-1】#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 
 char *insert(char *s1, char *s2, int n)
 {
 int len1, len2;
 int i;
 char *s3;
 
 len1 = strlen(s1);
 len2 = strlen(s2);
 s3 = (char *)calloc(len1 + len2 + 1, sizeof(char));
 for (i = len1; i >= n; i--) // 這裡i--不要寫錯了
 {
 s3[i + len2] = s1[i];
 }
 
 for (i = 0; i < len2; i++)
 {
 s3[i + n] = s2[i];
 }
 
 for (i = 0; i < n; i++)
 s3[i] = s1[i];
 return s3;
 }
 
 void main()
 {
 char *s1 = "abcdef";
 char *s2 = "ghi";
 char *s3 = insert(s1, s2, 5); // 這裡不要漏寫第三個參數5
 puts(s3);
 free(s3);
 }
 
 | 
                
          |   | 
              
                88樓                巨大八爪鱼
                2016-1-17 15:21
                                                  
			  【7-2】這個沒有用指針,所以不符合題目要求。
 #include <stdio.h>
 #include <stdlib.h>
 
 #define N 10
 
 void shift(int a[], int m)
 {
 int *b, i, j;
 b = (int *)calloc(m, sizeof(int));
 for (i = 0; i < m; i++)
 b[i] = a[N - 4 + i];
 
 for (i = N - m - 1; i >= 0; i--)
 a[m + i] = a[i];
 for (i = 0; i < m; i++)
 a[i] = b[i];
 free(b);
 }
 void main()
 {
 int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
 int i;
 shift(a, 8);
 for (i = 0; i < N; i++)
 printf("%d ", a[i]);
 printf("\n");
 }
 
 | 
                
          |   | 
              
                89樓                巨大八爪鱼
                2016-1-17 15:25
                                                  
			  不過要用指針很簡單,把所有的a[i]換成*(a+i)就行了             | 
                
          |   | 
              
                90樓                巨大八爪鱼
                2016-1-17 15:32
                                                  
			                【7-2】 這個沒有用指針,所以不符合題目要求。 #include <stdio.h> #include <stdlib.h> #define N 10...
			  這裡N - 4 + i應該改成N - m + i             | 
                
          |   | 
              
                91樓                巨大八爪鱼
                2016-1-17 15:35
                                                  
			  改成指針:#include <stdio.h>
 #include <stdlib.h>
 
 #define N 10
 
 void shift(int a[], int m)
 {
 int *b, i, j;
 if (m >= N)
 return;
 b = (int *)calloc(m, sizeof(int));
 for (i = 0; i < m; i++)
 *(b + i) = *(a + N - m + i);
 
 for (i = N - m - 1; i >= 0; i--)
 *(a + m + i) = *(a + i);
 for (i = 0; i < m; i++)
 *(a + i) = *(b + i);
 free(b);
 }
 void main()
 {
 int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
 int i;
 shift(a, 6);
 for (i = 0; i < N; i++)
 printf("%d ", a[i]);
 printf("\n");
 }
 
 | 
                
          |   | 
              
                92樓                巨大八爪鱼
                2016-1-17 15:40
                                                  
			  這是參考答案:#include <stdio.h>
 
 void print(int *a)
 {
 int i;
 for (i = 0; i < 10; i++)
 printf("%d ", a[i]);
 printf("\n");
 }
 
 void shift(int *p, int m)
 {
 int i, j, t;
 for (i = 0; i < m; i++)
 {
 t = p[9];
 for (j = 8; j >= 0; j--)
 p[j + 1] = p[j];
 p[0] = t;
 print(p);
 }
 }
 
 void main()
 {
 int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
 int i;
 shift(a, 6);
 }
 
 運行結果:
 10 1 2 3 4 5 6 7 8 9
 9 10 1 2 3 4 5 6 7 8
 8 9 10 1 2 3 4 5 6 7
 7 8 9 10 1 2 3 4 5 6
 6 7 8 9 10 1 2 3 4 5
 5 6 7 8 9 10 1 2 3 4
 
 --------------------------------
 Process exited after 0.01482 seconds with return value 6
 Press any key to continue . . .
 
 | 
                
          |   | 
              
                93樓                巨大八爪鱼
                2016-1-17 15:42
                                                  
			  【文件相關函數的參數位置回憶】FILE *fp;
 rewind(fp);
 fseek(fp, 10, 0);
 fputc('c', fp);
 fgetc(fp);
 fputs("sss", fp);
 
 | 
                
          |   | 
              
                94樓                巨大八爪鱼
                2016-1-17 15:53
                                                  
			  #include <stdio.h>
 #define N 10
 
 void print(int *a)
 {
 int i;
 for (i = 0; i < 10; i++)
 printf("%d ", a[i]);
 printf("\n");
 }
 
 void shift(int *a, int m)
 {
 int i, j, temp;
 for (i = 0; i < m; i++)
 {
 temp = a[9]; // 注意這裡不是a[0]
 for (j = N - 2; j >= 0; j--)
 a[j + 1] = a[j];
 a[0] = temp;
 }
 }
 
 void main()
 {
 int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
 int i;
 shift(a, 6);
 print(a);
 }
 |