For better understanding of arguments and return type in functions, user-defined functions can be categorised as:

Let's take an example to find whether a number is prime or not using above 4 categories of user defined functions.

## Function with no arguments and no return value.

```// 1.program to check whether a number entered by user is prime or not
// 2.using function with no arguments and no return value

#include <stdio.h>
void prime();
int main(){
prime();      //No argument is passed to prime().
return 0;
}
void prime(){
/* There is no return value to calling function main(). Hence, return type of prime() is void */
int num,i,flag=0;
printf("Enter positive integer enter to check:\n");
scanf("%d",&num);
for(i=2;i<=num/2;++i){
if(num%i==0){
flag=1;
}
}
if (flag==1)
printf("%d is not prime",num);
else
printf("%d is prime",num);
}
```

Function `prime()` is used for asking user a input, check for whether it is prime of not and display it accordingly. No argument is passed and returned form `prime()` function.

## Function with no arguments but return value

```// 1.program to check whether a number entered by user is prime or not
// 2.using function with no arguments but having return value

#include <stdio.h>
int input();
int main(){
int num,i,flag = 0;
num=input();     /* No argument is passed to input() */
for(i=2; i<=num/2; ++i){
if(num%i==0){
flag = 1;
break;
}
}
if(flag == 1)
printf("%d is not prime",num);
else
printf("%d is prime", num);
return 0;
}
int input(){   /* Integer value is returned from input() to calling function */
int n;
printf("Enter positive integer to check:\n");
scanf("%d",&n);
return n;
}
```

There is no argument passed to `input()` function But, the value of n is returned from `input()` to `main()` function.

## Function with arguments and no return value

```// 1.Program to check whether a number entered by user is prime or not
// 2.using function with arguments and no return value

#include <stdio.h>
void check_display(int n);
int main(){
int num;
printf("Enter positive enter to check:\n");
scanf("%d",&num);
check_display(num);  /* Argument num is passed to function. */
return 0;
}
void check_display(int n){
// There is no return value to calling function.
// Hence, return type of function is void. */
int i, flag = 0;
for(i=2; i<=n/2; ++i){
if(n%i==0){
flag = 1;
break;
}
}
if(flag == 1)
printf("%d is not prime",n);
else
printf("%d is prime", n);
}
```

Here, `check_display()` function is used for check whether it is prime or not and display it accordingly. Here, argument is passed to user-defined function but, value is not returned from it to calling function.

## Function with argument and a return value

```// 1.Program to check whether a number entered by user is prime or not
// 2.using function with argument and return value

#include <stdio.h>
int check(int n);
int main(){
int num,num_check=0;
printf("Enter positive enter to check:\n");
scanf("%d",&num);
num_check=check(num); /* Argument num is passed to check() function. */
if(num_check==1)
printf("%d is not prime",num);
else
printf("%d is prime",num);
return 0;
}
int check(int n){
/* Integer value is returned from function check() */
int i;
for(i=2;i<=n/2;++i){
if(n%i==0)
return 1;
}
return 0;
}
```

Here, `check()` function is used for checking whether a number is prime or not. In this program, input from user is passed to function `check()` and integer value is returned from it. If input the number is prime, 0 is returned and if number is not prime, 1 is returned.