C语言函数调用

猜数字游戏

#define _CRT_SECURE_NO_WARNINGS
#include 
#include 
#include 
void menu()
{
	printf("------------------------\n");
	printf("-----1.开始 2.退出------\n");
	printf("------------------------\n");

}

void game()
{
	int ret = rand() % 100 + 1;
	int guess = 0;
	while (1)
	{
		printf("请猜数字>");
		scanf("%d", &guess);
		if (guess < ret)
		{
			printf("猜小了!\n");
		}
		else if(guess > ret)
		{
			printf("猜大了!\n");
		}
		else
		{
			printf("恭喜你,猜中了\n");
			break;
		}
	}
}
int main()
{
	srand((unsigned int)time(NULL));//生成随机数
	int input = 0;
	do
	{
		menu();
		printf("请选择>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏!\n");
			break;
		default:
			printf("选择错误,请重新选择!\n");
			break;
		}
	} while (input);
	return 0;
}

1、一个工程中可以有多个.c,多个.c中只有一个main函数,函数改变实参需要使用指针变量传参

#include 
int main()
{
	int* p = 1;//*是解引用,P是地址
	return 0;
}

 取地址p

C语言函数调用_第1张图片

C语言函数调用_第2张图片 

0x0000003EB156FB28就是p的地址啦 

2、函数参数

真实传成函数的参数叫实参,参数可以是函数,常量,变量,指针变量,表达式,函数为参数是必须有明确的返回值

形式参数是指函数各后括号中的变量,形式参数只有在调用的时候,形式参数开辟空间,函数结束自动销毁(形式参数只有在函数中有效)

形参实例化相当于实参临时改变

2.1、函数调用

  1;传值调用   Swap(a,b)  传的是值本身   形参实参占用不同的内存块,相互不影响

  2;传址调用   Swap(&a,&b) 传的是地址         形参和实参建立某种联系

3、下列函数判断是否为素数

if  m = a*b

so      a和b一定有一个数字==sqrt(m);

偶数不能为素数      

#include 
#include 
int is_prime(int n)
{
	for (int i = 2; i < sqrt(n); i++)
	{
		if (n%i == 0)
		{
			return 0;
		}
	}
	return 1;
}
int main()
{
	int count = 0;
	for (int i = 1; i < 200; i+=2)
	{
		if (is_prime(i)) 
		{
			printf("%d ", i);
			count++;
		}
	}
	printf("\n count = %d\n", count);
	return 0;
}

  4、函数判断是否为闰年

#include 
int main()
{

	for (int year = 1000; year <= 2000; year++)
	{
		//判断year是不是闰年
		if (year % 4 == 0)
		{
			if (year%100 != 0)
			{
				printf("%d ", year);
			}
		}if (year%400 == 0)
		{
			printf("%d ", year);

		}
	}
	return 0;
}

5、函数有序数组二分法查找

#include 
int binary_search(int arr[],int find,int size)
{
	int left = 0;
	int right = size - 1;

	while (left <= right)
	{
		int mid = (left + right) / 2;
		if (arr[mid] > find)
		{
			right = mid - 1;
		}if (arr[mid] < find)
		{
			left = mid + 1;
		}
		else if(arr[mid] == find)
		{
			return mid;
		}
	}
	return -1;//自定义函数可以返回-1
}
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,11 };
	int find = 7;
	int size = sizeof(arr) / sizeof(arr[0]);
	int ret = binary_search(arr, find, size);
	if (ret == -1)
	{
		printf("找不到\n");
	}
	else
	{
		printf("找到了,下标是%d\n",ret);
	}
	return 0;
}

数组传参只是把数组首元素指针传过去,所以在函数内部计算函数部分的数组的元素个数不靠谱的,arr看上去是数组,本质上是指针

6、函数调用num加1

#include 
void Add(int *p)
{
	(*p)++;
}
int main()
{
	int num = 0;
	Add(&num);
	printf("%d\n", num);
	return 0;
}

7、函数嵌套调用

函数可以互相调用,但是不能嵌套定义

//链式访问,以来函数返回值

#include 
#include 
int main()
{
	int len = strlen("asdfg");//5
	printf("%d\n", len);//返回打印符号
	printf("%d", printf("%d", printf("%d", 43)));
   //        1    -<     2    <-     43
	return 0;
}

函数不写返回值时,默认返回int,不写返回值,默认最后一条的返回值

void test(void)   表示函数不接受参数

int main(void)  //明确的说明,main函数不需要参数

                        //本质上是有3个参数

int main(int argc,char* argv[],char *envp[])

你可能感兴趣的:(c语言,c++)