这里只是列举一些知识点,针对哪个点不熟悉可以再去进一步复习
一、数组
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;
}