蓝桥备赛--c基础知识(二)

这里只是列举一些知识点,针对哪个点不熟悉可以再去进一步复习

一、数组

1.数组的打印与输入

//打印
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int i = 0;
	for (i = 0;i < 10; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

//输入
int main()
{
	int arr[10] = { 0 };
	int i = 0;
	for (i = 0;i < 10; i++)
	{
		scanf("%d", &arr[i]);
	}
	for (i = 0; i < 10; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

2.求数组长度

int main()
{
	int i = 0;
	int arr[] = { 0 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	for (i = 0; i < sz; i++)
	{
		...
	}
	return 0;
}

sizeof(arr)求出来单位是字节,sizeof(arr【0】)是int类型的字节数,例如,arr【】长度是10,前者求出来是40,后者是4,相除得10。

3.二维数组

①打印与输入

#include<stdio.h>
int main()
{
	int arr[3][5] = { 0 };
	int i = 0;
	for (i = 0; i < 3; i++)
	{
		int j = 0;
		for (j = 0; j < 5; j++)
		{
			scanf("%d", &arr[i][j]);
		}
	}
	for (i = 0; i < 3; i++)
	{
		int j = 0;
		for (j = 0; j < 5; j++)
		{
			printf("%d", arr[i][j]);
		}
		printf("\n");
	}
	return 0;
}

②arr【常量】

③有关字符型数组,我通过一个代码示例为大家演示(多个字符从两端移动,向中间汇聚)

int main()
{
	char arr[] = "welcome to my channel";
	char brr[] = "                     ";
	int left = 0;
	int right = strlen(arr)-1;
	while (left<=right)
	{
		brr[left] = arr[left];
		brr[right] = arr[right];
		printf("%s\n", brr);
		Sleep(100);//时间
		system("cls");//清空这一遍的输出
		left++;
		right--;
	}
	printf("%s\n", brr);
	return 0;
}

④上面的代码显示了字符段数组的表示,他和我们整数数组是有不同的,存字符的时候最后会有一个\0,如果用整数数组的方法,也就会多两个长度出来,所以求字符段数组要用strlen(),下标相应要再减1。

二、函数

1.传参

①普通传参

int add(int x, int y)
{
	return x + y;
}
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int c = add(a,b);
	printf("%d", c);
	return 0;
}

②数组传参

实现数组内容全为负一,并打印

void set_arr(int arr1[],int d)
{
	for (int i = 0; i < d; i++)
	{
		arr1[i] = -1;
	}
}
void print_arr(int arr2[], int l)
{
	for (int i = 0; i < l; i++)
	{
		printf("%d", arr2[i]);
	}
	printf("\n");
}
int main()
{
	int arr[10] = { 0 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	set_arr(arr, sz);
	print_arr(arr, sz);
	return 0;
}

传的时候是(数组名,长度),(数组名不要写arr【10】,这是他的第十个元素)设函数的时候(int数组名【】,int长度)。

2.嵌套与调用

大家要注意,函数里面不可以写其他函数,只能调用!

(哪年哪月有几天)代码演示:调用了判断闰年的函数

int whether_run(int y)
{
	if ((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0))
		return 1;
	else
		return 0;
}
int get_answer(int yearr, int monthh)
{
	int days[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
	int day = days[monthh];
	if (whether_run(yearr) && monthh == 2)
		day = day + 1;
	return day;
}
int main()
{
	int year = 0;
	int month = 0;
	scanf("%d %d", &year, &month);
	int days=get_answer(year, month);
	printf("%d", days);
	return 0;
}

3.函数的声明与定义

如果把我们函数的定义放在main的后面,则需在最前面声明该函数

int get_answer(int yearr, int monthh);
int main()
{
	int year = 0;
	int month = 0;
	scanf("%d %d", &year, &month);
	int days=get_answer(year, month);
	printf("%d", days);
	return 0;
}
int get_answer(int yearr, int monthh)
{
	int days[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
	int day = days[monthh];
	if (whether_run(yearr) && monthh == 2)
		day = day + 1;
	return day;
}

4.static和extern

首先是两个概念,局部变量&&全局变量

局部变量的生命周期与作用域有关;全局变量的生命周期就是main函数的生命周期。

①static修饰局部变量

test()
{
	int i = 0;
	i++;
	printf("%d", i);
}
int main()
{
	int i = 0;
	for (i = 0; i < 5; i++)
	{
		test();
	}
	return 0;
}
test()
{
	static int i = 0;
	i++;
	printf("%d", i);
}
int main()
{
	int i = 0;
	for (i = 0; i < 5; i++)
	{
		test();
	}
	return 0;
}

上面的代码分别对应两个输出结果(11111,12345),本质上是使用static改变了他的生命周期

②static修饰全局变量,这种情况无法实现变量的跨文件使用,外部文件无法调用。

③extern是修饰外部信号的,也就是跨文件声明。

5.递归与迭代

很多时候递归的算力并没有迭代好,最好的例子就是斐波那契数列,如果要用递归,则要调用fib(n-1)+fib(n-2)

fib(int n)
{
	int a = 1;
	int b = 1;
	int c = 1;

	while (n-3 >= 0)
	{
		c = a + b;
		a = b;
		b = c;
		n--;
	}
	return c;
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	int result = fib(n);
	printf("%d", result);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值