不懂的程序
一个经典的c程序,是求一个集合的所有子集,并显示出来但其中的红字部分看不懂,好像有点多余,但经典程序里是不会有多余的句子的
求解哦~
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 20
#define LOOP 1
void main(void)
{
char digit[MAXSIZE];
int i, j;
int n;
char line[100];
printf("\nDirect Generation of All Subsets of a Set");
printf("\n=========================================");
printf("\n\nNumber of Elements in the Given Set --> ");
gets(line);//从流中取一字符串 输入的应该是个字符串?
n = atoi(line);//把字符串转换成长整型数 必须是数字?不然输出结果为0
/* ---You'd better check to see if n is too large--- */
for (i = 0; i < n; i++) /* clear all digits to 0 */
digit[i] = '0';
printf("\n{}"); /* outpout empty set {} */
while (LOOP)
{
for (i = 0; i < n && digit[i] == '1'; digit[i] = '0', i++)
; /* find first 0 position */
if (i == n) /* if none, all pos. are 1 */
break; /* thus all elem. are in set*/
else
digit[i] = '1';/* now add one to this pos */ //变成1之后,然后回去又变成0?
for (i = 0; i < n && digit[i] == '0'; i++)
; /* find first 1 position */
printf("\n{%d", i+1); /* show its numner and */
for (j = i + 1; j < n; j++) /* others */
if (digit[j] == '1')
printf(",%d", j + 1);
printf("}");
}