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