#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//int main()
//{
// char input[20] = { 0 };
// system("shutdown -s -t 60");
//again:
// printf("请注意,你的电脑将在60秒内关机,如果输入:我是猪,就取消关机\n");
// scanf("%s", input);
// if (strcmp(input, "我是猪") == 0)
// {
// system("shutdown -a");
// }
// else
// {
// goto again;
// }
// return 0;
//}
//https://encppreference.com C/C++官网查找函数
//写一个可以两个两个整数变量的内容
//形式参数
//void Swap(int *px, int *py) //用到了指针
//{
// int z = *px;//z=a
// *px = *py; //a=b
// *py = z; //b=z
//}
当实参传给形参时,形参是实参的一份临时拷贝,对形参的修改不会影响实参
//int main()
//{
// int a = 0;
// int b = 0;
// scanf("%d%d", &a, &b);
//
// printf("交换前:a=%d b=%d\n", a, b);
// //a和b叫实参
// Swap(&a, &b);//如果要改变a和b的值就用地址,如果不改变a和b的值就不必用地址
// printf("交换后: a=%d b=%d\n", a, b);
// return 0;
//}
//实参:真实传给函数的参数,可以是常量,变量,表达式,函数等,无论实参是何种类型的量,在进行函数调用时,都必须有确定的值,以便把这些值传给形参。
//形参:指函数名后括号的变量,因为形式参数只在函数被调用过程中才实例化,当函数调用完后形参就自动销毁了,因此形参只在函数中有效。
//一工程里可以有多个.c,但是只能有一个main函数,要运行下一个代码注释掉上一个代码。
//函数的调用:
//1.传值调用:函数的形参和实参分别占用不同的内存块,对形参的修改不会影响实参。如下:
//void Swap1(int x, int y)
//{
// int z = 0;
// z = x;
// x = y;
// y = z;
//}
//int main()
//{
// int a = 0;
// int b = 0;
// scanf("%d%d", &a, &b);
// printf("交换前:a=%d b=%d\n", a, b);
//
// //传值调用
// Swap1(a, b);
// printf("交换后: a=%d b=%d\n", a, b);
// return 0;
//}
//2.传址调用:把函数外部创建变量的内存地址传递函数参数的一种调用函数的方式;
// 这种传参方式可以让函数和函数外边的变量建立起联系,也就是函数内部可以直接操作函数外部变量。
//void Swap2(int* px, int* py)
//{
// int z = *px;//z=a
// *px = *py; //a=b
// *py = z; //b=z
//}
//int main()
//{
// int a = 0;
// int b = 0;
// scanf("%d%d", &a, &b);
// printf("交换前:a=%d b=%d\n", a, b);
//
// //传址调用
// Swap2(&a, &b);
// printf("交换后: a=%d b=%d\n", a, b);
// return 0;
//}
//写一个函数可以判断一个数是不是素数(只能被1和它本身整除的数)
//#include <math.h> //函数sqrt的头文件
//int is_prime(int n)
//{
// int j = 0;
// for (j = 2; j <= sqrt(n); j++)
// {
// if (n % j == 0)
// {
// return 0; //不是素数返回0
// }
// }
// return 1; //是素数返回1
//}
//int main()
//{
// int i = 0;
// int count = 0;
// for (i = 101; i <= 200; i += 2)
// {
// if (is_prime(i))
// {
// printf("%d ", i);
// count++;
// }
// }
// printf("\ncount=%d\n", count);
//
// return 0;
//}
//写一个函数判断一年是不是闰年(判断闰年的两个条件:1.能被4整除,且不能被100整除;2.能被400整除)
//是闰年返回1
//不是闰年返回0
//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 (is_leap_year(year))
// {
// printf("%d ", year);
// }
// }
// return 0;
//}
//写一个函数,实现一个整型有序数组的二分查找
//int binary_search(int arr[], int k, int sz)
//{
// int left = 0;
// int right = sz - 1;
//
// while (left < right)
// {
// int mid = left + (right -left) / 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,10 };
// int k = 6;
// int sz = sizeof(arr) / sizeof(arr[0]);
// int ret = binary_search(arr, k, sz); //找到了返回下标,找不到返回-1
// if (ret == -1)
// {
// printf("找不到\n");
// }
// else
// {
// printf("找到了,下标是:%d", ret);
// }
// return 0;
//}
//写一个函数,每调用一次这个函数,就会将num的值增加1
//void Add(int* p)
//{
// (*p)++;
//}
//int main()
//{
// int num = 0;
// Add(&num);
// printf("%d\n", num);
// Add(&num);
// printf("%d\n", num);
// Add(&num);
// printf("%d\n", num);
// Add(&num);
// printf("%d\n", num);
// return 0;
//}