#include
int is_prime(int n)
{
int j = 0;
for (j = 2;j < n;j++)
{
if (n % j == 0)
return 0;
}
//if(j==0)
return 1;
}
int main()
{
int i = 0;
for (i = 100;i <= 200;i++)
{
//判断i是否为素数
if (is_prime(i) == 1)
printf("%d", i);
printf("\n");
}
return 0;
}
自定义函数,如果定义的函数在main函数下的话,在main中要进行声明
补充说明:
质数又称素数),指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两个正因数的数)
//定义一个函数,判断是不是闰年
#include
int is_leap_year(int y)
{
if (y % 4 == 0 && y % 100 != 0 || (y % 400 == 0))
return 1;
else
return 0;
}
int main()
{
int year = 0;
for (year = 1000;year <= 2000;year++)
{
if (1== is_leap_year(year))
{
printf("%d\n", year);
}
}
return 0;
}
//利用指针来计算
void swap(int* pa, int* pb)//在函数调用的时候才实体化
{
int temp = 0;
temp = *pa;
*pa = *pb;
*pb= temp;
}
int main()
{
int a = 10;
int b = 20;
//使用这个函数就是调用函数,传值调用
//但是下面是传地址调用
swap(&a, &b);//&a,&b为实参,为真实,确定的值
printf("a=%d b=%d\n", a, b);
return 0;
}
补充说明
当实参传给形参的时候,形参是实参的一份临时拷贝
对形参的修改是不会改变实参的,则不会改变有作用,
什么时候用传值和传地址调用
比较大小不用改变变量,所以直接用传值调用,改变时用传址调用
int binary_search(char arr[], int k,int sz)//主动传一个sz
{
//不能在里面算,那在外面算
int left = 0;
int right = sz - 1;
//要进行循环的查找才行
while (left <= right)
{
int mid = (left + right) / 2;//空间元素的下标
if (arr[mid] < k)
{
left = mid + 1;
}
else if (arr[mid] > k)
{
right = mid - 1;
}
else
{
return mid;
}
}
return -1;
}
int main()
{
//如果找到了返回这个数的下标否则返回-1
char arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 7;
int sz = sizeof(arr) / sizeof(arr[0]);
int ret = binary_search(arr, k,sz);
if (ret == -1)
{
printf("找不到指定的数字\n");
}
else
{
printf("找到了,下标是:%d\n", ret);
}
return 0;
和数学中的二分法一样
注意在sz=sizeof(arr)/sizeof(arr[0])不能在定义的函数中去计算,因为在函数中arr是看做首元素的地址,看做一个指针变量,所以在函数中这个计算结果为1
void Add(int* p)
{
(*p)++;//++是作用于p的,所以要用括号给括起来
}
int main()
{
int num = 0;
//执行一次就会增加一
Add(&num);
printf("num=%d\n", num);//1
Add(&num);
printf("num=%d\n", num);//2
Add(&num);
printf("num=%d\n", num);//3
return 0;
}
#include
int main()
{
printf("%d", printf("%d", printf("%d",43)));
printf("%d", printf("%d", 2))
return 0;
}
补充说明:printf计算完后返回值计算的是字符串的个数,所以计算结果为4321
//1234 1 2 3 4
void print(int n)
{
if (n > 9)
{
print(n / 10);
}
printf(" %d", n % 10);
}
int main()
{
unsigned int num = 0;
scanf_s("%d", &num);
//递归
print(num);
}
补充说明1.递归中注意必要加上限制条件
2.每次递归中都加入这个条件
第一种方式
#include
int main()
{
char arr[] = "bit";
int len = strlen(arr);//求字符串的长度
printf("%d\n", len);
return 0;
}
第二种方式
#include
int my_strlen(char* str)
{
int count = 0;
//计算字符串的长度
//找到\0字符串的结束标志
while (*str != '\0')
{
count++;
str++;//调到i
}
return count;
}
int main()
{
char arr[] = "bit";
int len = my_strlen(arr);//数组传参,传的是首元素的地址b
printf("len=%d\n", len);
return 0;
}//创建一个临时变量计时器count
第三种方式
#include
int my_strlen(char* str)
{
if (*str != '\0')
return 1 + my_strlen(str + 1);
else
return 0;
}
int main()
{
char arr[] = "bit";
int len = my_strlen(arr);//数组传参,传的是首元素的地址b
printf("len=%d\n", len);
return 0;
补充说明计算字符串的长度
找到\0字符串的结束标志
数组传参,传的是首元素的地址,然后可以依次的增加后面数字的地址str++
方法一函数定义方式
#include
int main()
{
int Facl(int n);
int n = 0;
int ret = 0;
scanf_s("%d", &n);
ret = Facl(n);//循环的方式
printf("%d\n", ret);
return 0;
}
int Facl(int n)
{
int i = 0;
int ret = 1;
for (i = 1;i <=n;i++)
{
ret *= i;
}
return ret;
}
函数递归
//递归的方式
int Fac2(int n)
{
if (n <= 1)
return 1;
else
return n * Fac2(n - 1);
}
函数递归
int Fib(int n)
{
if (n <= 2)
return 1;
else
return Fib(n - 1) + Fib(n - 2);
}
int main()
{
int ret = 0;
int n = 0;
scanf_s("%d", &n);
ret = Fib(n);
printf("ret=%d\n", ret);
return 0;
}
斐波那契数是1 1 2 3 5 8 13 21 34 55…找出函数中内部自己和自己的关系,递归的本质就是自己用自己
方法二:用循环的方式进行计算
```c
int Fib(int n)
{
int a = 1;
int b = 1;
int c = 1;
while (n > 2)
{
c = a + b;
a = b;
b = c;
n--;
}
return c;
}
int main()
{
int ret = 0;
int n = 0;
scanf_s("%d", &n);
ret = Fib(n);
printf("ret=%d\n", ret);
return 0