‘壹’ C语言的三大区域是什么
1、循环,函数,指针。
2、C语言其他重要规则:
(1)C源程序是由一个主函数和若干个其它函数组成的。
(2)函数名后必须有小括号,函数体放在大括号内。
(3)C程序必须用小写字母书写。
(4)每句的末尾加分号。
(5)可以一行多句。
(6)可以一句多行。
(7)可以在程序的任何位置加注释。
一个完整的C语言程序,是由一个main()函数(又称主函数)和若干个其它函数结合而成的,或仅由一个main()函数构成。
‘贰’ C语言中总是从main函数开始执行,那执行好main函数后,是按照从上到下的顺序执行吗
C语言中总是从main函数开始执行,执行好main函数后,是按照从上到下的顺序执行的。
遇到一些结构遵循结构的语法进行,但是整体顺序就是由上到下。
‘叁’ C语言程序设计(12)
第一处填空,是个三重循环:
for(i=0;i<N;i++)
for(j=0;j<N+1;j++)
for(k=j+1;k<N;k++)
这里,i是数组的行标号,第一重循环表示依次对N行数组分别排序
然后j和k是列下标,一个二重循环排序的过程,其原理如下:
比如2 3 5 1 0 按从小到大排序
首先,j=0 k=1~4,就是数字2分别与3 5 1 0比较,把小的放到2的位置来
一轮之后,就变成 0 3 5 2 1
第二轮,j=1 k=2~4 ,就是数字3分别与5 2 1比较,把最小的放到3的位置
就是依次找出最小的放在最前,找出第二小的,放第二个位置……
依次这样循环到最后,就能完成排序
第二个填空,是要完成“第0行从小到大排序,第1行从大到小排序,第2行从小到大排序,第3行从大到小排序”这样的功能,这样填:
if(i%2==1?a[i][j]<a[i][k]:a[i][j]>a[i][k])
表示,如果i%2==1(即i是奇数行标),则采用a[i][j]<a[i][k]这个判断条件,否则就采用a[i][j]>a[i][k]这个判断条件
这样就能实现偶行从小到大排序,奇行从大到小排序咯
=============================================
1
outarr(aa);
这样是把数组的地址当作实参传递过去,而,形参是这样
void outarr(int a[N][N])
这说明白形参是接受的数组的值啊???
这是怎么回事?
这里不是按地址传递,定义void outarr(int a[N][N])表示的是按数组整个传递,并且数组做为参数传递有个特点,就是一定是按引用传递
知道什么是按引用传递吗?简单理解,就是在函数里面,对该参数的修改,会影响主函数中该参数的值
====================================================
2
在主函数中
数组的定义是这样的
int aa[N][N]
表示未知行和列
但初始化又是这样
int aa[N][N]={{2,3,4,1},{8,6,5,7},{11,12,10,9},{15,14,16,13}};
这样能算对吗?
这里数组的定义不是未知行和列
我们语庋规则规定,数组定义,必须用明确定义行列的数目
其实这里的N不是一个变量,而已经变成一个数字了,看上面的定义:
#define N 4
这一句定义,等于告诉编译器,每逢碰到N,就把它换成4的意思
那么其实数组定义就是int aa[4][4]
=====================================================
3
第一个被调函数
void sort(int a[][N])
它里面省略的行,我知道,二维数组可以这么写,但,在这个被调函数中,要使用到行数啊,它不给出,后面,怎么计算呢?
这个程序中,行数N在前面已经定义了
在整个程序的过程中,N不是一个变量,而是表示数字4!!
‘肆’ C语言运行的内存要求是哪三个是不是程序代码区,静态存储区和动态存储区。求高人路过
一个由c/C++编译的程序占用的内存分为以下几个部分
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放 4、文字常量区—常量字符串就是放在这里的。 程序结束后由系统释放5、程序代码区—存放函数体的二进制代码。