int main()
{
char arr1[20] = {0};
char arr2[] = "hello bit";
//strcpy(arr1, arr2);//把arr2的内容拷贝到arr1
//printf("%s\n", arr1);
memset(arr2,'x', 3);
printf("%s\n",arr2);
return 0;
}
int gatmax(int x,int y)
{
return (x > y ? x : y);//三目运算符,也称为条件运算符。它的意思是:x>y?x:y如果 x 大于 y,则返回 x 的值,否则返回 y 的值
}
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int m= gatmax(a,b);
printf("%d\n", m);
return 0;
}
void swap(int* x,int* y)//形式参数
{
int z = 0;
z = *x;//a=z
*x = *y;//a=b
*y = z;//b=a
}
//当实参传递给形参的时候,形参是实参的一份临时拷贝
//对实参的修改不会影响实参
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
//交换a和b
printf("交换前:a=%d,b=%d\n", a, b);//a和b叫实际参数
swap(&a, &b);
printf("交换后:a=%d,b=%d\n", a, b);
return 0;
}
函数参数
1.实际参数(实参):
2.形式参数(形参):
函数调用
1.传值调用
函数的形参和实参分别占有不同的内存块,对形参的修改不会影响实参。
2.传址调用
传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式.
这种传参方式可以让函数和函数外边的函数建立起真正的联系,也就是函数内部可以直接操作函数外部的变量.
//打印100~200之间的素数(之能被1和他整除的的素数)
int main()
{
int i = 0;
for (i = 100;i < 200;i++)
{
//判断i是否为素数,是素数就打印,拿2~i-1之间的数字去除
int j = 0;
int flag = 1;//是素数
for (j = 2;j<(i - 1);j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag == 1)
printf("%d\n", i);
}
return 0;
}
//打印100~200之间的素数(之能被1和他整除的的素数)
#include<math.h>
int main()
{
int i = 0;
for (i = 101;i < 200;i+=2)//偶数不可能是素数,所以直接跳过
{
//判断i是否为素数,是素数就打印,拿2~i-1之间的数字去除
int j = 0;
int flag = 1;//是素数
for (j = 2;j<sqrt(i); j++)//sqrt是数学库函数,开平方,math.h
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag == 1)
printf("%d\n", i);
}
return 0;
}
//打印100~200之间的素数(只能被1和他整除的的素数)
#include<math.h>
int is_prime(int n)
{
//是素数返回1,不是素数返回0.
int j = 0;
for (j = 2;j <= sqrt(n);j++)//产生2~sqrt(n)之间的数字
{
if (n % j == 0)
{
return 0;
}
}
return 1;
}
int main()
{
int i = 0;
int count = 0;
for (i = 101;i < 200;i+=2)//偶数不可能是素数,所以直接跳过
{
if (is_prime(i))//如果是1,打印i
{
printf("%d\n", i);
count++;
}
}
printf("count=%d\n", count);
return 0;
}
int judge(int n)
{
if ((n % 4 == 0) && (n % 100 != 0) || (n % 400 == 0))
return 1;
else
return 0;
}
int main()
{
int year = 0;
int i = 0;
for (year = 1000; year <= 2000; year++)
{
if (judge(year))
{
printf("%d ", year);
i++;
}
}
printf("有%d个闰年\n", i);
return 0;
}
int binary_search(int arr[],int k,int sz)//int arr[]在这里看上去是数组本质上是指针
{
int left = 0;
int right = sz - 1;
while (left <= right)
{
int mid = left + (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()
{
int arr[] = { 1,2,3,4,5,6,7,8,9 };
int k = 7;//假设要找的数是7
int sz = sizeof(arr) / sizeof(arr[0]) - 1;//求出元素个数
int ret=binary_search(arr,k,sz);//数组传参实际上传递的是数组首元素的地址,而不是整个数组。所以在函数内部计算一个函数参数部分的数组的元素个数是不靠谱的
if (ret == -1)
{
printf("找不到\n");
}
else
{
printf("找到了,下表是:%d\n", ret);
}
void add(int* p)
{
(* p)++;
}
int main()
{
int num = 0;
add(&num);
printf("%d", num);
return 0;
}
void add(void)//表明这个函数不接受传参
{
}
int main()
{
printf("%d", printf("%d", printf("%d", 43)));
return 0;
}
1.函数声明:告诉编译器有一个函数叫什么,参数是什么,返回类型是什么,但具体存不存在,函数的声明决定不了
2.函数的声明一般出现在函数的是用之前,一般满足先声明,后使用
3.函数的声明一般要放在头文件中
int add(int x, int y);//函数的声明
int main()
{
return 0;
}
int add(int x, int y)//函数的定义
{
}
#pragma comment(lib,"add.lib")//导入静态库
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int num = add(a, b);
printf("%d\n", num);
return 0;
}
递归的两个必要条件
1.存在限制条件,当满足这个条件的时候,递归便不再继续
2.每次递归调用之后越来越接近这个限制条件
void print(unsigned int n)//1234,123
{
//if (n > 9)//至少是两位数
{
print(n / 10);
}
printf("%d ", n % 10);
}
int main()
{
unsigned int num = 0;
scanf("%u", &num);
print(num);//接受一个整形值(无符号),按照顺序打印他的每一位
return 0;
}
模拟实现strlen
int my_strlen(char* str)
{
int count = 0;
while (*str != '\0')
{
str++;
count++;
}
return count;
}
int main()
{
char arr[] = "abc";
int len = my_strlen(arr);
printf("%d", len);
return 0;
}
int fet(int n)
{
int a = 1;
int b = 1;
int j = 1;
while (n >= 3)
{
j = a + b;
a = b;
b = j;
n--;
}
return j;
}
int main()
{
int i = 0;
scanf("%d", &i);
int ret = fet(i);
printf("%d\n", ret);
return 0;
}
汉诺塔,青蛙跳台阶