|   | 
              
                65樓                巨大八爪鱼
                2016-1-16 16:50
                                                  
			  为了降低编译失败的次数,写好代码后我必须仔细检查代码才编译。一定要争取一次编译通过。             | 
                
          |   | 
              
                66樓                巨大八爪鱼
                2016-1-16 18:58
                                                  
			  #include <stdio.h>
 int decompose(int num, int m[])
 {
 int i, j, count = 0;
 for (i = 2; i <= num; i++) // 寻找2~num之间的质数
 {
 // 判断i是不是质数
 for (j = 2; j < i; j++)
 {
 if (i % j == 0)
 break;
 }
 if (i == j)
 {
 // 如果是质数
 // 判断这个数是否能被这个质数整除
 // 把原本的if改为while就能判断有多少个当前质数相乘
 while (num % i == 0)
 {
 m[count++] = i;
 num /= i;
 }
 }
 }
 return count;
 }
 
 void main()
 {
 int i, n, count, a[100];
 scanf("%d", &n);
 count = decompose(n, a);
 printf("%d = ", n);
 for (i = 0; i < count; i++)
 {
 printf("%d", a[i]);
 if (i + 1 < count)
 putchar('*');
 else
 putchar('\n');
 }
 }
 | 
                
          |   | 
              
                67樓                巨大八爪鱼
                2016-1-16 18:58
                                                  
			  楼上是第五章的最后一题——【15】             | 
                
          |   | 
              
                68樓                巨大八爪鱼
                2016-1-16 19:00
                                                  
			  由于15题比较难,所以再做一遍。             | 
                
          |   | 
              
                69樓                巨大八爪鱼
                2016-1-16 19:32
                                                  
			  #include <stdio.h>
 int decompose(int n, int q[])
 {
 int i, count = 0;
 for (i = 2; i <= n; i++)
 {
 while (n != i && n % i == 0)
 {
 q[count++] = i;
 n /= i;
 }
 }
 q[count++] = n;
 return count;
 }
 
 void main()
 {
 int q[255], n, m, i;
 printf("Please input a positive integer: ");
 scanf("%d", &n);
 m = decompose(n, q);
 printf("m = %d\n", m);
 printf("%d = ", n);
 for (i = 0; i < m - 1; i++)
 printf("%d*", q[i]);
 printf("%d\n", q[m - 1]);
 }
 这是经过标准答案修改过的程序。
 因为在考虑2的时候已经把2的所有倍数除尽了,到了最后不能再被2整除的时候才开始考虑3 。所以4根本就不可能出现,因此也就无需一个一个地去找质数了。
 
 | 
                
          |   | 
              
                70樓                巨大八爪鱼
                2016-1-16 19:33
                                                  
			  至于为什么要在while里面多加一句n!=i,主要是为了确保当输入的n为质数时,返回的数组q至少有一个元素,不至于是空数组。             | 
                
          |   | 
              
                71樓                巨大八爪鱼
                2016-1-16 19:34
                                                  
			  因此,这个程序还可以这样改:int decompose(int n, int q[])
 {
 int i, count = 0;
 for (i = 2; i <= n; i++)
 {
 while (n % i == 0)
 {
 q[count++] = i;
 n /= i;
 }
 }
 if (count == 0)
 q[count++] = n;
 return count;
 }
 
 | 
                
          |   | 
              
                72樓                巨大八爪鱼
                2016-1-16 19:44
                                                  
			  第五章已复习完毕。接下来先复习简单一点的:第九章——文件。
 
 | 
                
          |   | 
              
                73樓                巨大八爪鱼
                2016-1-16 19:53
                                                  
			  【9-1】#include <stdio.h>
 #include <stdlib.h>
 
 void fun(int nums[])
 {
 int count = 0;
 int i;
 for (i = 0; count < 10; i++)
 {
 if (i % 2 == 1 && i % 3 == 1 && i % 5 == 1)
 nums[count++] = i;
 }
 }
 
 void main()
 {
 int nums[10];
 int i;
 FILE *fp;
 if ((fp = fopen("tmp.txt", "w")) == NULL)
 {
 printf("文件打不开。\n");
 exit(0);
 }
 
 fun(nums);
 for (i = 0; i < 10; i++)
 {
 printf("%d ", nums[i]);
 fprintf(fp, "%d ", nums[i]);
 }
 printf("\n");
 fclose(fp);
 }
 注意fprintf不要忘了第一个参数fp。
 
 | 
                
          |   | 
              
                74樓                巨大八爪鱼
                2016-1-16 19:58
                                                  
			  【9-2】#include <stdio.h>
 #include <stdlib.h>
 
 void main()
 {
 char str[100];
 int i;
 FILE *fp;
 if ((fp = fopen("tmp2.txt", "w")) == NULL)
 {
 printf("文件打不开\n");
 exit(0);
 }
 printf("Please enter a string:\n");
 gets(str);
 for (i = 0; str[i] != '\0'; i++)
 {
 printf("%c(%d)", str[i], str[i]);
 fprintf(fp, "%c(%d)", str[i], str[i]);
 }
 printf("\n");
 fclose(fp);
 }
 
 |