#include
int max(int x, int y)
{
return x > y ? x : y;
}
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int ret = max(a,b);
printf("%d", ret);
return 0;
}
#include
int main()
{
int a = 0;
int b = 0;
int c = 0;
scanf("%d %d %d", &a, &b,&c);
printf("%d",(a > b ? a : b) > c ? (a > b ? a : b) : c);
return 0;
}
思路:核心逻辑是把三个数的求最大值转换为求两个数的最大值
本题则是通过三目操作符求出a和b的最大值,再拿这个值与c进行比较
#include
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
if (a > b)
{
printf("%d", a);
}
else
{
printf("%d", b);
}
return 0;
}
int main()
{
int arr[10] = {0};
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
for (i = 0; i < sz; i++)
{
scanf("%d", &arr[i]);
}
int max = arr[0];
for (i = 1; i < sz; i++)
{
if (arr[i] > max)
{
max = arr[i];
}
}
printf("%d\n", max);
return 0;
}
#include
#include
int main()
{
char ch1[] = "abcedf";
char ch2[20] = { 0 };
strcpy(ch2, ch1);
printf("%s", ch2);
char* ret = strcpy(ch2, ch1);
printf("%s\n", ret);
return 0;
}
#include
int main()
{
char ch1[] = "abcedf";
memset(ch1, '*',5);
printf("%s", ch1);
return 0;
}
#include
int change(int* x, int* y)
{
int temp = 0;
temp = *x;
*x = *y;
*y = temp;
printf("%d %d\n", *x, *y);
}
int main()
{
int a = 3;
int b = 5;
printf("%d %d\n", a, b);
change(&a, &b);
return 0;
}
题目:将5,3,7,6,9这一串数字排序
思路:
假如一共有n个数字,那我是要进行n-1次比较的,因为把大的排到后面之后,剩下的那个自然是最小的,不需要再一次排序。
而在我比较的那一趟数中,我要从第一个数开始,与相邻的进行比较,但是比完一次之后,要比的数字就会少一个,因为那个刚刚比较好的那个数字已经找到了自己的正确位置,下一次的比较不需要把它算上
#include
void sort(int* arr[], int x)
{
int i = 0;
for (i = 0; i < x-1; i++)
{
int j = 0;
for (j = 0; j < x - 1-i; j++)
{
int temp = 0;
if (arr[j] > arr[j + 1])
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main()
{
int arr[] = { 5,3,7,6,9 };
int sz = sizeof(arr) / sizeof(arr[0]);
sort(arr, sz);
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
#include
int main()
{
int a = 10;
int b = 5;
printf("%d %d\n", a, b);
a = a + b;
b = a - b;
a = a - b;
printf("%d %d\n",a,b);
return 0;
}
因为可读性差,只能应用于整数而且效率没有3.2好,所以仅仅作为了解
#include
int main()
{
int a = 5;
int b = 3;
printf("%d %d\n", a, b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("%d %d\n", a, b);
return 0;
}
与函数那边结合,常常会出现一个逻辑,如果满足这个条件,就返回什么
注意判断里面的if是函数的返回值
#include
#include
int is_leap_number(int x)
{
int i = 0;
for (i = 2; i <= sqrt(x); i++)
{
if (x % i == 0) //如果一直到平方根那边都没有办法被除
{ //那后面大概率也不会被整除
return 0;
}
}
return 1;
}
int main()
{
//是素数就返回1,不是返回0
int i = 0;
for (i = 100; i <= 200; i++)
{
if (is_leap_number(i) == 1) //直接用返回值判断是不是素数
{
printf("%d ", i);
}
}
return 0;
}
#include
int is_leap_year(int x)
{
if ((x % 4 == 0 && x % 100 != 0) || x % 400 == 0)
{
return 1;
}
else
return 0;
}
int main()
{
//是闰年返回1,不是返回0
int i = 0;
for (i = 1000; i <= 2000; i++)
{
int ret = is_leap_year(i);
if (ret == 1)
{
printf("%d ", i);
}
}
return 0;
}
ps:额外的return方法
表达式如果是真,返回的就是1,其实不需要多此一举
return (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0));
#include
#include //布尔类型需要引用的头文件
bool is_leap_year(int y)
{
if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))
return true;
else
return false;
}
int main()
{
if (is_leap_year(2048))
{
printf("是闰年\n");
}
else
{
printf("不是闰年\n");
}
return 0;
}
✨bool也可以写成_Bool
活用下标
#include
int search(int* arr,int x,int y)
{
int left = 0;
int right = x - 1;
while (left <= right)
{
int middle = (left + right) / 2;
if (arr[middle] < y)
{
left = middle + 1;
}
else if (arr[middle] > y)
{
right = middle - 1;
}
else if (arr[middle] == y)
{
return middle;
}
}
return 0;
}
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int len = sizeof(arr) / sizeof(arr[0]);
int k = 0;
scanf("%d", &k);
int ret = search(arr,len,k);
if (ret != 0)
{
printf("找到了,下标是%d", ret);
}
else
printf("没有这个数");
return 0;
}
注意事项:
求数组的长度必须要在main函数里面,因为传过去的是首元素地址,放在调用函数里面求,结果是1
注意,middle是小标,arr[middle]是该下标对应的数值
#include
int Add(int* num)
{
return *num += 1; //不能写成*num+1
}
int main()
{
int num = 0;
Add(&num);
printf("%d\n", num);
Add(&num);
printf("%d\n", num);
Add(&num);
printf("%d\n", num);
return 0;
}
用%和/这个操作
void Print(unsigned int n)
{
if (n > 9) //控制在十位数
{
Print(n/10);
}
printf("%d ", n % 10);
}
int main()
{
unsigned int num = 0;
scanf("%u", &num);
Print(num);
return 0;
}
为什么这边不能用while:
递归是通过自己调用自己,从而省去一些动作的函数,可以理解为好几个这个函数要执行,只不过里面所传的数值hi不一样的。
如果输入12,确实会在第二个调用函数中打印出来一,然后回到第一个递归,n是12,因为while,它是没有办法退出程序的,然后就又是传进去12,然后与之前一样的循环,从而循环打印1
结论
while里面不能放递归,很容易死循环,如果递归要与循环结合,循环只能是作为限制数的作用
#include
void Print(unsigned int n)
{
while (n) //控制在个位数,当个位数都没有的时候,就会退出循环
{
printf("%d ", n % 10);
n = n / 10;
}
}
int main()
{
unsigned int num = 0;
scanf("%u", &num);
//写一个函数打印num的每一位
Print(num);
return 0;
}
#include
int is_my_strlen(char* ch)
{
int count = 0;
while (*ch != '\0')
{
count++;
*ch++; //这边涉及了指针
}
return count;
}
int main()
{
char ch[] = "abcdef";
int ret = is_my_strlen(ch);
printf("%d", ret);
return 0;
}
#include
int is_my_strlen(char* ch)
{
if (*ch != '\0')
{
return 1 + is_my_strlen(ch + 1);
}
else
{
return 0;
}
}
int main()
{
char ch[] = "abcdef";
int ret = is_my_strlen(ch);
printf("%d", ret);
return 0;
}
//int my_strlen(char* str)
//{
// char* start = str;
// while (*str != '\0')
// {
// str++;
// }
// return str - start;
//}
int my_strlen(char* str)
{
char* start = str;
while (*str++ != '\0')
;
return str - start - 1;
}
int main()
{
char arr[] = "abcdef";
int len = my_strlen(arr);
printf("%d\n", len);
return 0;
}
#include
int mul(int x)
{
int i = 0;
int ret = 1;
for (i = 1; i <= x; i++)
{
ret *= i;
}
return ret;
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = mul(n);
printf("%d", ret);
return 0;
}
#include
int mul(int x)
{
if (x >= 2)
{
return x * mul(x - 1);
}
else
{
return 1;
}
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = mul(n);
printf("%d", ret);
return 0;
}
#include
int Fib(int x)
{
int a = 1;
int b = 1;
int c = 1;
int temp = 0;
while (x>2)
{
c = a + b;
temp = a;
a = b;
b = c;
x--;
}
return c;
}
int main()
{
int num = 0;
scanf("%d", &num);
int ret = Fib(num);
printf("%d", ret);
return 0;
}
#include
int Fib(int x)
{
if (x == 1 || x == 2)
{
return 1;
}
else
{
return Fib(x - 1) + Fib(x - 2);
}
}
int main()
{
int num = 0;
scanf("%d", &num);
int ret = Fib(num);
printf("%d", ret);
return 0;
}
int main()
{
int i = 0;
int line = 0;
scanf("%d", &line);
for (i = 1; i <= line; i++)
{
//打印一行
int j = 0;
for (j = 1; j <= i; j++)
{
printf("%d*%d=%-2d ", i, j, i * j);
}
printf("\n");
}
return 0;
}
int main()
{
int i = 0;
double sum = 0.0;
int flag = 1;
for (i = 1; i <= 100; i++)
{
sum = sum + flag*(1.0 / i);
flag = -flag;
}
printf("%lf\n", sum);
return 0;
}
int main()
{
int i = 0;
double sum = 0.0;
int flag = 1;
for (i = 1; i <= 100; i++)
{
if(i%2==1)
sum = sum + (1.0 / i);
else
sum = sum - (1.0 / i);
}
printf("%lf\n", sum);
return 0;
}