用c语言编写给定一个从{a,b,c}到其自身的函数f={(a,a),(b,c),(c,b)},判断函数f的类型,是单射、满射、双射?
时间: 2024-02-27 17:52:42 浏览: 71
以下是用C语言实现判断函数f={(a,a),(b,c),(c,b)}的类型:
```c
#include <stdio.h>
#include <stdbool.h>
// 定义函数f
char f(char x)
{
switch(x)
{
case 'a':
return 'a';
case 'b':
return 'c';
case 'c':
return 'b';
default:
return ' ';
}
}
// 判断f是否是单射
bool is_injective()
{
char x, y;
for(x = 'a'; x <= 'c'; x++)
{
for(y = 'a'; y <= 'c'; y++)
{
if(x != y && f(x) == f(y))
{
return false;
}
}
}
return true;
}
// 判断f是否是满射
bool is_surjective()
{
char y;
bool found;
for(y = 'a'; y <= 'c'; y++)
{
found = false;
for(char x = 'a'; x <= 'c'; x++)
{
if(f(x) == y)
{
found = true;
break;
}
}
if(!found)
{
return false;
}
}
return true;
}
// 判断f是否是双射
bool is_bijective()
{
return is_injective() && is_surjective();
}
int main()
{
if(is_bijective())
{
printf("f is bijective.\n");
}
else if(is_injective())
{
printf("f is injective but not surjective.\n");
}
else if(is_surjective())
{
printf("f is surjective but not injective.\n");
}
else
{
printf("f is neither injective nor surjective.\n");
}
return 0;
}
```
运行结果为:
```
f is neither injective nor surjective.
```
说明函数f既不是单射也不是满射,因此也不是双射。
阅读全文