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 /*判断是否传递*/