对称自反传递

  1 int main(int argc, char *argv[])
  2 {
  3   FILE *fp;
  4   fp = ("argv[1]", "r");
  5 }
  6 是这样写的吗??
  7 
  8 
  9 #include <stdio.h>
 10 #include <stdlib.h>
 11 #include <math.h>
 12 
 13 
 14 
 15 void Reflexive(int a[100][100], int n)
 16 {
 17 int i;
 18 for(i = 0; i < n; i++)
 19 if(a[i][i] == 0)
 20 {
 21 printf("not reflexive, ");/*主对角线有一个为0即输出不是自反,跳出循环*/
 22 break; 
 23 }
 24 if(i == n)
 25 printf("reflexive, ");/*如果循环全作一遍,则为自反*/
 26 }
 27 /*判断自反*/
 28 
 29 void Reflexiveness(int a[100][100], int n)
 30 {
 31 int i;
 32 for(i = 0; i < n; i++)
 33 if(a[i][i] == 1)
 34 {
 35 printf("not reflexiveness, ");/*主对角线有一个为q即输出不是反自反,跳出循环*/
 36 break;
 37 }
 38 if(i == n)
 39 printf("reflexiveness, ");/*如果循环全作一遍,则为反自反*/
 40 } 
 41 /*判断反自反*/
 42 
 43 void Symmetry(int a[100][100], int n)
 44 {
 45 int i, j;
 46 for(i = 0; i < n; i++)
 47 {
 48 for(j = 0; j < n; j++)
 49 {
 50 if(a[i][j] == a[j][i])/*如果关于主对角线对称的元素相等,则跳过下面的语句,继续循环*/
 51 continue;
 52 printf("not symmetry, ");/*上面的条件不符,即关于主对角线对称的元素不等,则输出不是对称,跳出循环*/
 53 break;
 54 }
 55 if(j != n)
 56 break;/*不是对称,跳出循环*/
 57 else if(i == n-1 && j == n)
 58 printf("symmetry, ");/*所有的元素都遍历了,没有不合对称条件的,输出对称*/
 59 }
 60 
 61 }
 62 /*判断是否对称*/
 63 
 64 
 65 
 66 void Antisymmetry(int a[100][100], int n)
 67 {
 68 int i, j, s = 1;/*用s作为不合条件时的标记*/
 69 for(i = 0; i < n; i++)
 70 {
 71 for(j = 0; j < n; j++)
 72 {
 73 if((a[i][j] == 1 && a[j][i] == 1) && (i != j))
 74 {
 75 s = 0;/*s = 0 时,不是反对称,跳出循环*/
 76 break;
 77 }
 78 }
 79 if(s == 0)
 80 {
 81 printf("not antisymmetry, ");/*判断s的值,为0,则输出不是反对称*/
 82 break;
 83 }
 84 }
 85 if(s == 1)/*s = 1时,输出反对称*/
 86 printf("antisymmetry, ");
 87 }
 88 /*判断是否反对称*/
 89 
 90 void Transitive(int a[100][100], int n)
 91 {
 92 int i, j, k;
 93 for(i = 0; i < n; i++)
 94 {
 95 for(j = 0; j < n; j++)
 96 if(a[i][j] == 0)/*对所有元素一一遍历,等于0时作下面的工作*/
 97 {
 98 for(k = 1; k < n; k++)
 99 if(a[i][k] == 1 && a[k][j] == 1)/*不是传递的判断,输出不是传递,推出整个程序*/
100 {
101 printf("not transitive.\n");
102 exit(0); 
103 }
104 }
105 }
106 printf("transitive.\n");/*否则,输出传递*/
107 }
108 /*判断是否传递*/
109 
110 void main()
111 {
112 FILE *fp;
113 int i = 0, j, n, k, s = 0;
114 int b[10000], a[100][100];
115 
116 
117 fp = fopen("a.txt", "r");
118 
119 if(!fp)
120 {
121 printf("Can not open !");
122 exit(0);
123 }
124 while(!feof(fp))
125 {
126 b[i] = fscanf(fp, "%d", &k);
127 i = i + 1;
128 }
129 
130 n = (int)sqrt(i);
131 
132 fclose(fp);
133 
134 fp = fopen("a.txt", "r");
135 while(!feof(fp))
136 {
137 for(i = 0; i < n; i++)
138 for(j = 0; j < n; j++)
139 fscanf(fp, "%d", &a[i][j]);
140 }
141 
142 printf("The relation is:\n");
143 for(i = 0; i < n; i++)
144 {
145 for(j = 0; j < n; j++)
146 printf("%-3d", a[i][j]);
147 printf("\n");
148 }
149 for(i = 0; i < n; i++)
150 {
151 for(j = 0; j < n; j++)
152 if(a[i][j] == 1)
153 {
154 s = 1;
155 break;
156 }
157 if(j != n)
158 break;
159 }
160 if(!s)
161 printf("reflexive, ");
162 else
163 Reflexive(a, n);
164 Reflexiveness(a, n); 
165 Symmetry(a, n);
166 Antisymmetry(a, n); 
167 Transitive(a, n);
168 
169 }

 

  1 #include<stdio.h>
  2 void z();
  3 int main()
  4 {
  5     int a[30][30];
  6     int m,n,i,j,c,b,d;
  7     c=d=0,b=0;
  8     d=1;
  9     while(d)
 10     {
 11         printf("欢迎使用关系性质判断系统:1,对称关系的判断,2.自反关系的判断\n\n请输入选项:");
 12             scanf("%d",&d);
 13         switch(d)
 14         {
 15         case 1:
 16             printf("请输入矩阵的行数");
 17             scanf("%d",&m);
 18             printf("请输入矩阵的列数");
 19             scanf("%d",&n);
 20             for(i=0;i<m;i++)
 21             {
 22                 for(j=0;j<n;j++)
 23                 {
 24                     printf("请输入矩阵关系中第%行第%d列的数字:",i,j);
 25                     scanf("%d",&a[i][j]);
 26                 }
 27             }
 28             printf("关系矩阵M为:\n");
 29             for(i=0;i<m;i++)
 30             {
 31                 for(j=0;j<n;j++)
 32                     printf("%d",a[i][j]);
 33                 printf("\n");
 34             }
 35             for(i=0;i<m;i++)
 36             {
 37                 for(j=0;j<n;j++)
 38                 {
 39                     if(a[i][j]!=a[j][i])
 40                     {
 41                         c=1;
 42                     break;
 43                     }
 44                 }
 45             }
 46         if(c==0)
 47         {
 48             for(i=0;i<m;i++)
 49             {
 50                 for(j=0;j<n;j++)
 51                 {
 52                     if(a[i][j]==1)
 53                     {
 54                         if(a[j][i]!=0)
 55                         {
 56                             c=2;
 57                             break;
 58                         }
 59                     }
 60                 }
 61             }
 62             if(c==2)
 63                 printf("该矩阵是对称的\n");
 64             else if(c==0)
 65                 printf("该矩阵既是对称又是反对称的\n");
 66         }
 67         else if(c==1)
 68         {
 69             for(i=0;i<m;i++)
 70             {
 71                 for(j=0;j<n;j++)
 72                 {
 73                     if(a[i][j]==1)
 74                     {
 75                         if(a[j][i]!=0)
 76                         {
 77                             c=2;
 78                             break;
 79                         }
 80                     }
 81                 }
 82             }
 83             if(c==2)
 84                 printf("该矩阵不是对称的又不是反对称的\n");
 85             else
 86             {
 87                 printf("该矩阵是反对称性的\n");
 88             }
 89         }
 90         break;
 91         case 2:
 92             z();
 93             break;
 94         case 0:
 95             break;
 96     }
 97     printf("\n");
 98     printf("是否还继续?是请输入1,否请输入2:");
 99     scanf("%d",&d);
100     printf("\n\n");
101 }
102 return 0;
103 }
104 void z()
105 {
106     int m,n,i,j,a[80][80],c;
107     c=0;
108     printf("请输入矩阵的行数");
109     scanf("%d",&m);
110     printf("请输入矩阵的列数");
111     scanf("%d",&n);
112     for(i=0;i<m;i++)
113     {
114                 for(j=0;j<n;j++)
115                 {
116                     printf("请输入矩阵的第%d行第%d列的数字:",i,j);
117                     scanf("%d",a[i][j]);
118                 }
119     }
120     printf("关系矩阵M为:\n");
121     for(i=0;i<m;i++)
122     {
123         for(j=0;j<n;j++)
124             printf("%d",a[i][j]);
125         printf("\n");
126     }
127     for(i=0;i<m;i++)
128     {
129         if(a[i][i]!=0)
130         {
131             c=1;
132             break;
133         }
134     }
135     if(c==1)
136         printf("该矩阵是自反性的\n");
137     if(c==0)
138         printf("该矩阵是反自反性的\n");
139 }
140 
141 void Transitive(int a[100][100], int n)
142 {
143 int i, j, k;
144 for(i = 0; i < n; i++)
145 {
146 for(j = 0; j < n; j++)
147 if(a[i][j] == 0)/*对所有元素一一遍历,等于0时作下面的工作*/
148 {
149 for(k = 1; k < n; k++)
150 if(a[i][k] == 1 && a[k][j] == 1)/*不是传递的判断,输出不是传递,推出整个程序*/
151 {
152 printf("not transitive.\n");
153 exit(0); 
154 }
155 }
156 }
157 printf("transitive.\n");/*否则,输出传递*/
158 }
159 /*判断是否传递*/

 

posted @ 2013-10-16 20:44  herizai007  阅读(819)  评论(0编辑  收藏  举报