• 判断


      1 #include  <stdio.h>
      2 #include  <stdlib.h>
      3 #include  <math.h>
      4 
      5 void Reflexive(int a[100][100], int n)
      6 {
      7   int i;
      8   for(i = 0; i  < n; i++)
      9     if(a[i][i] == 0)
     10     {
     11       printf("not reflexive, ");/*主对角线有一个为0即输出不是自反,跳出循环*/
     12       break;
     13     }
     14   if(i == n)
     15     printf("reflexive, ");/*如果循环全作一遍,则为自反*/
     16 }
     17 /*判断自反*/
     18 
     19 void Reflexiveness(int a[100][100], int n)
     20 {
     21   int i;
     22   for(i = 0; i  < n; i++)
     23     if(a[i][i] == 1)
     24     {
     25       printf("not reflexiveness, ");/*主对角线有一个为q即输出不是反自反,跳出循环*/
     26       break;
     27     }
     28   if(i == n)
     29   printf("reflexiveness, ");/*如果循环全作一遍,则为反自反*/
     30 } 
     31 /*判断反自反*/
     32 
     33 void Symmetry(int a[100][100], int n)
     34 {
     35   int i, j;
     36   for(i = 0; i  < n; i++)
     37   {
     38     for(j = 0; j  < n; j++)
     39     {
     40       if(a[i][j] == a[j][i])/*如果关于主对角线对称的元素相等,则跳过下面的语句,继续循环*/
     41         continue;
     42       printf("not symmetry, ");/*上面的条件不符,即关于主对角线对称的元素不等,则输出不是对称,跳出循环*/
     43       break;
     44     }
     45     if(j != n)
     46       break;/*不是对称,跳出循环*/
     47     else if(i == n-1 && j == n)
     48       printf("symmetry, ");/*所有的元素都遍历了,没有不合对称条件的,输出对称*/
     49   }
     50 }
     51 /*判断是否对称*/
     52 
     53 void Antisymmetry(int a[100][100], int n)
     54 {
     55   int i, j, s = 1;/*用s作为不合条件时的标记*/
     56   for(i = 0; i  < n; i++)
     57   {
     58     for(j = 0; j  < n; j++)
     59     {
     60       if((a[i][j] == 1 && a[j][i] == 1) && (i != j))
     61       {
     62         s = 0;/*s = 0 时,不是反对称,跳出循环*/
     63         break;
     64       }
     65     }
     66     if(s == 0)
     67     {
     68       printf("not antisymmetry, ");/*判断s的值,为0,则输出不是反对称*/
     69       break;
     70     }
     71   }
     72   if(s == 1)/*s = 1时,输出反对称*/
     73     printf("antisymmetry, ");
     74 }
     75 /*判断是否反对称*/
     76 
     77 void Transitive(int a[100][100], int n)
     78 {
     79   int i, j, k;
     80   for(i = 0; i  < n; i++)
     81   {
     82     for(j = 0; j  < n; j++)
     83       if(a[i][j] == 0)/*对所有元素一一遍历,等于0时作下面的工作*/
     84       {
     85         for(k = 1; k  < n; k++)
     86           if(a[i][k] == 1 && a[k][j] == 1)/*不是传递的判断,输出不是传递,推出整个程序*/
     87           {
     88             printf("not transitive.
    ");
     89             exit(0);
     90           }
     91       }
     92   }
     93   printf("transitive.
    ");/*否则,输出传递*/
     94 }
     95 /*判断是否传递*/
     96 
     97 /*
     98  * 带命令行参数的 main: argc 参数个数, argv 各个参数的值(字符串)
     99 void main()
    100  */
    101 int main(int argc,char *argv[])
    102 {
    103   FILE *fp;
    104   int i = 0, j, n, k, s = 0;
    105   int b[10000], a[100][100];
    106 
    107 /*
    108  * 添加命令行参数处理
    109  */
    110   if(argc < 2){
    111     printf("Usage :
    <程序名> <input-file-name>
    
    ");
    112     exit(1);
    113   }
    114   fp = fopen(argv[1], "r");
    115 
    116   if(!fp)
    117   {
    118     printf("Can not open !");
    119     exit(0);
    120   }
    121   while(!feof(fp))
    122   {
    123     b[i] = fscanf(fp, "%d", &k);
    124     i = i + 1;
    125   }
    126 
    127   n = (int)sqrt(i);
    128 
    129 /*
    130  * 如果要从头再次读取,不必这样关闭再打开
    131   fclose(fp);
    132   fp = fopen("a.txt", "r");
    133  */
    134   fseek(fp,0,SEEK_SET); /* 这样就可以从头再读 */
    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:
    ");
    143   for(i = 0; i  < n; i++)
    144   {
    145     for(j = 0; j  < n; j++)
    146       printf("%-3d", a[i][j]);
    147     printf("
    ");
    148   }
    149 /*
    150  * 这里的循环是做什么的?
    151  * 判断关系集合是否为空?
    152  */
    153   for(i = 0; i  < n; i++)
    154   {
    155     for(j = 0; j  < n; j++)
    156       if(a[i][j] == 1)
    157       {
    158         s = 1;
    159         break;
    160       }
    161     if(j != n)
    162       break;
    163   }
    164 /*
    165  * 如果前面是判断关系集是否为空
    166  * 那么这里要改一下
    167  */
    168   if(s)//if(!s)
    169     printf("<Empty Set>
    ");
    170   else{ // 这里需要放在一对“{}”中
    171     Reflexive(a, n);
    172     Reflexiveness(a, n); 
    173     Symmetry(a, n);
    174     Antisymmetry(a, n); 
    175     Transitive(a, n);
    176   }
    177 }
      1 #include  <stdio.h>
      2 #include  <stdlib.h>
      3 #include  <math.h>
      4 
      5 
      6 /*
      7  * 判断自反
      8  */
      9 bool Reflexive(int a[100][100], int n)
     10 {
     11   int i;
     12   for(i = 0; i < n; i++)
     13     if(a[i][i] == 0)
     14       return false;
     15   return true;
     16 }
     17 
     18 /*
     19  * 判断反自反
     20  */
     21 bool Reflexiveness(int a[100][100], int n)
     22 {
     23   int i;
     24   for(i = 0; i < n; i++)
     25     if(a[i][i] == 1)
     26       return false;
     27   return true;
     28 } 
     29 
     30 /*
     31  * 判断是否对称
     32  */
     33 bool Symmetry(int a[100][100], int n)
     34 {
     35   int i, j;
     36   for(i = 0; i < n - 1; i++){
     37     for(j = i + 1; j < n; j++){
     38       if(a[i][j] != a[j][i])
     39         return false;
     40     }
     41   }
     42   return true;
     43 }
     44 
     45 /*
     46  * 判断是否反对称
     47  */
     48 bool Antisymmetry(int a[100][100], int n)
     49 {
     50   int i, j;
     51   for(i = 0; i < n - 1; i++){
     52     for(j = i + 1; j < n; j++){
     53       if((a[i][j] == 1 && a[j][i] == 1) && (i != j))
     54         return false;
     55     }
     56   }
     57   return true;
     58 }
     59 
     60 /*
     61  * 判断是否传递
     62  */
     63 bool Transitive(int a[100][100], int n)
     64 {
     65   int i, j, k;
     66   for(i = 0; i < n; i++){
     67     for(j = 0; j < n; j++){
     68       if(a[i][j] == 1){ /* 若ij存在关系,则对所有与 j 存在关系的必与 i 存在关系,是为传递 */
     69         for(k = 0; k < n;k++){
     70           if(a[j][k] == 1 && a[i][k] != 1)
     71             return false;
     72         }
     73       }
     74     }
     75   }
     76   return true;
     77 }
     78 
     79 /*
     80  * 判断是否为空
     81  */
     82 bool isEmptySet(int a[100][100], int n){
     83   int i,j;
     84   for(i = 0;i < n;i++){
     85     for(j = 0;j < n;j++)
     86       if(a[i][j])
     87         return false;
     88   }
     89   return true;
     90 }
     91 
     92 
     93 int main(int argc,char *argv[])
     94 {
     95   FILE *fp;
     96   int i = 0, j, n;
     97   int b[10000], a[100][100];
     98 
     99   if(argc < 2){
    100     printf("Usage :
    <程序名> <input-file-name>
    
    ");
    101     exit(0);
    102   }
    103   fp = fopen(argv[1], "r");
    104 
    105   if(!fp){
    106     printf("Can not open !");
    107     exit(0);
    108   }
    109   
    110   while(!feof(fp)){
    111     fscanf(fp, "%d", b + i++);
    112   }
    113   fclose(fp);
    114 
    115   n = (int)sqrt(i);
    116 
    117 /* 直接用坐标映射,不需要再次读取文件 */
    118   for(j = 0;j < i;j++){
    119     a[j/n][j % n] = b[j];
    120   }
    121 
    122   printf("The relation is:
    ");
    123   for(i = 0; i  < n; i++){
    124     for(j = 0; j  < n; j++)
    125       printf("%-3d", a[i][j]);
    126     printf("
    ");
    127   }
    128 
    129   if(isEmptySet(a,n))
    130     printf("<Empty Set>
    ");
    131   else{
    132     if(!Reflexive(a, n))    printf("not "); printf("reflexive, ");
    133     if(!Reflexiveness(a, n))printf("not "); printf("reflexiveneww, ");
    134     if(!Symmetry(a, n))     printf("not "); printf("symmetry, ");
    135     if(!Antisymmetry(a, n)) printf("not "); printf("antisymmetry, ");
    136     if(!Transitive(a, n))   printf("not "); printf("transitive.
    ");
    137   }
    138   return 1;
    139 }
  • 相关阅读:
    JavaFX编程第三小题源代码
    JavaFX编程第一小题源代码
    一款云端神器,拯救你的数学建模
    带你建模带你飞Updation(四)常见方法
    带你建模带你飞Updation(三)视频学习篇
    关于学术论文中引用文献的书目信息查询
    计算机仿真软件NetLogo
    免费的在线文档转换器
    带你建模带你飞Updation(二)论文篇
    C. Timofey and a tree
  • 原文地址:https://www.cnblogs.com/Zblogs/p/3372898.html
Copyright © 2020-2023  润新知