return和exit的区别
return和exit函数都是正常中断时所调用的函数。
1.exit函数结束的是当前进程/当前程序,在整个程序中,只要调用exit就结束了。
int fun()
{
printf("now fun started\n");
printf("\n");
int arr[10] = { 12, 23, 34, 45, 56, 67, 78, 89, 90, 3 };
int len = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i < len - 1; ++i)
{
int temp = i;
for (int j = i + 1; j < len; ++j)
{
if (arr[j] > arr[i])
{
temp = j;
}
}
int a = arr[temp];
arr[temp] = arr[i];
arr[i] = a;
}
//exit(0);
return 0;
for (int w = 0; w < len; ++w)
{
printf("%d ", arr[w]);
}
printf("now fun ended\n");
}
void main()
{
printf("now main start\n");
fun();
int sum = 10;
for (int i = 1; i < sum; ++i)
{
printf("1 ");
printf("\n");
}
}
我编写了一个简单的fun函数,分别在该函数中调用eixt(0)和return 0这两句,并在main函数中的最后一个大括号下加断点,发现:
当调用exit(0)时,程序并不在断点处停留,直接退出程序,但是换成return 0 后,程序会运行到断点处停留。
这就是第一条所说的exit直接结束进程。
2.return()是当前函数返回,如果当前函数是main函数,自然也就结束当前进程了,如果不是,就退回到上一层调用。通常在递归调用时,只会使用return函数,而不是exit()函数。
杨辉三角
void main()
{
int sum = 10;//行数
int arr[10][10] = { 0 };
for (int i = 0; i < sum; ++i)//遍历每一行
{
for (int k = 0; k < sum - i; ++k)//加入空格,便于观看
{
printf(" ");
}
arr[i][0] = 1;//每一行的第一个为1
printf("%6d", arr[i][0]);
for (int j = 1; j <= i; ++j)//计算每一行的从第二列开始的每个系数
{
arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
printf("%6d", arr[i][j]);
}
printf("\n");
}
}
对杨辉三角做一个简单的复习,使用的是二维数组。规律如下:
1.每一行的第一个数字都为0.
2.每一行的元素个数等于改行的行数(行从1开始)。
3.每一行除了第一个数字,其他数字值为上一行该列的值加上一行后退一列值。
1
1 1
1 2 1
1 3 3 1
是这样的规律。