5、注意a和a[0] 、a[1]、a[2]是不同的,它们的基类型是不同的。前者是一行元素,后三者是一列元素。
2) 二维数组做题目的技巧:
如果有a[3][3]={1,2,3,4,5,6,7,8,9}这样的题目。
步骤一:把他们写成: 第一列 第二列 第三列 a[0]à 1 2 3 ->第一行 a[1]à 4 5 6 —>第二行 a[2]à 7 8 9 ->第三行 步骤二:这样作题目间很简单:
*(a[0]+1)我们就知道是第一行的第一个元素往后面跳一列,那么这里就是a[0][1]元素,所以是1。
*(a[1]+2)我们就知道是第二行的第一个元素往后面跳二列。那么这里就是a[1][2]元素,所以是6。
一定记住:只要是二维数组的题目,一定是写成如上的格式,再去做题目,这样会比较简单。 3) 数组的初始化,一维和二维的,一维可以不写,二维第二个一定要写
int a[]={1,2} 合法。 int a[][4]={2,3,4}合法。 但int a[4][]={2,3,4}非法。 4) 二维数组中的行指针 int a[1][2];
其中a现在就是一个行指针,a+1跳一行数组元素。 搭配(*)p[2]指针
a[0],a[1]现在就是一个列指针。a[0]+1 跳一个数组元素。搭配*p[2]指针数组使用 5) 还有记住脱衣服法则:
a[2] 变成 *(a+2) a[2][3]变成 *(a+2)[3]再可以变成 *(*(a+2)+3) 这个思想很重要!
其它考试重点 文件的复习方法:
把上课时候讲的文件这一章的题目要做一遍,一定要做,基本上考试的都会在练习当中。 1)字符串的 strlen() 和 strcat() 和strcmp() 和strcpy()的使用方法一定要记住。他们的参数都是地址。其中strcat() 和strcmp()有两个参数。
2)strlen 和 sizeof的区别也是考试的重点;
3)define f(x)(x*x) 和 define f(x) x*x 之间的差别。一定要好好的注意这写容易错的地方,替换的时候有括号和没有括号是很大的区别。
4)int *p;
p = (int *)malloc(2);
p = (int *)malloc(sizeof(int));以上两个等价 当心填空题目,malloc的返回类型是 void *
5)还有main(int argc,char **argv) {} 这种含有参数的题目,是很呆板的题目。第一个参数是表示输入的字符串的数目,第二个参数是指向存放的字符串。
6)函数的递归调用一定要记得有结束的条件,并且要会算简单的递归题目。要会作递归的题目
7)结构体和共用体以及链表要掌握最简单的。typedef考的很多,而且一定要知道如何引用结构体中的各个变量,链表中如何填加和删除节点,以及何如构成一个简单的链表,一定记住链表中的节点是有两个域,一个放数值,一个放指针。
8)函数指针的用法(*f)()记住一个例子: int add(int x, int y) {....} main()
{ int (*f)(); f=add; }
赋值之后:合法的调用形式为1、add(2,3); 2、f(2,3); 3、(*f)(2,3)
9)两种重要的数组长度:
char a[]={?a?,?b?,?c?}; 数组长度为3,字符串长度不定。sizeof(a)为3。 char a[5]={ ?a?,?b?,?c?} 数组长度为5,字符串长度3。sizeof(a)为5。 10)scanf 和 gets的数据:
如果输入的是 good good study!
那么scanf(“%s”,a); 只会接收 good. 考点:不可以接收空格。 gets(a); 会接收 good good study! 考点:可以接收空格。 11)共用体的考查: union TT { int a;
char ch[2];}
考点一: sizeof (struct TT) = 2; 考点二: TT t1 ; t1=0x1234;
那么 ch[0]=0x 34; ch[1]=0x12
12)“文件包含”的考查点:
no1.c no2.c #include”no2.c” main()
{ add(29 , 33); ……. }
int add(int a,int b) {
return a+b; }
这里一个C语言程序是有两个文件组成,分别是no1.c, no2.c。那么no1.c中最开始有个#include”no2.c”他表示把第二个文件的内容给包含过来,那么no1.c中调用add()函数的时候就可以了把数值传到no2.c中的被调用函数add()了。
一个文件必须要有main函数。 这句话错了。 例如:no2.c就没有。
头文件一定是以.h结束的。 这句话错了。例如:no1.c中就是#include”no2.c”以.c结尾的。
****************************第一题目******************************* 对应的代码:
For(i=3;i<=n;i++)
for (j=2; j
if (i%j == 0) 如果碰到有个数字j可以被i整除,那么表break; 示这个数不是素数,要用break直接结束循
环,这个时候我们的j肯定是小于i的。 /**********found**********/
if (j>=i) j>=i,表示在上面if (i%j == 0)没有成功,所以会循环执行for (j=2; j=i,这样可以知道该数字i就是素数。 /**********found**********/
{ count++; printf( count? \
****************************第二题目******************************* 填空题: 代码:
/**********found**********/
for (i=0; i t=a[i]; /**********found**********/ a[i] = a[n-1-i]; //将前面的数组与后面的数组进行对换。当i=0的时候,表示是第一个数组元素,所以要和最后一个数组元素互换,所以是a[n-1-i] /**********found**********/ a[n-1-i] = t; //将前面的数组元素放到后面去。直接将上面的代码抄下来就可以了 } } ****************************第三题目******************************* 代码: 分析: int fun(STU *std, STU *k, int year) { int i,n=0; for (i=0; i /**********found**********/ if( std[i].year = =year) 由于要比较的是相同的年数,所以要将每次循环的结构体中的year都要比较一次,当我们指定的参数year和我们结构体中某个元素的year相同的时候,就执行下面的“把这个结构体数据保存到数组k中” /**********found**********/ k[n++]= std[i]; 要注意,n++,之后那么下次新得到的数据就放到了后面,例如,第一个放到了k[0],由于进行了n++,那么下次符合条件的新的结构体就放到了k[1]中了。这里注意:进行的是结构体的整体复制,所以是填写std[i]这个结构体的名称。 /**********found**********/ return (n);} 根据题目的要求,是要求返回符合条件的结构的数目,很多人会写成n-1,这个地方应该是填写n。带入法则:假定有一个符合题目的要求,那么我们知道就执行一次k[n++]= std[i].由于k的初始值是0,所以这个地方是进行n++之后变成了1,返回的就是n,现在为1。不是能n-1得到的0。 ****************************第四题目******************************* 代码: 分析: #define M 5 #define N 20 int fun(char (*ss)[N], int *n) { int i, k=0, len= N; /**********found**********/ for(i=0; i< M; i++) 题目要求:求字符串数组中长度最短的字符数串所在的行下标,所以这里循环的时候,一定是循环字符串的个数,也就是字符数组中表示存放字符个数的数组的行的个数(上课时强调的重点)。这个地方明显就是M,表示的是五行,作五次的循环判断,每次将字符串最短的给保存下来。 { len=strlen(ss[i]); if(i==0) *n=len; //第一个字符串判断时要,初始化len, /**********found**********/ if(len < *n) 注意:*n是已经保存了前面判断出来的最短的字符串中字符的个数,len的数值是现在判断的这个字符串的字符个数。如果现在len的数值比前面所有字符串中最短的字符串(*n存放)还要短,那么就要把len的数值代替*n中去,因为 *n是表示最短的字符串的个数。 { *n=len; k=i; 题目要求返回的是最短字符串的行下标,也就是这里要保存的是循环的中的i,它表示正在判断第几个字符串的长度。这里保存的就是最短字符串的行下标。 } } /**********found**********/ return(i;); 所以这里根据题目意思是返回 i,它表示最短字符串的行下标。 } ****************************第五题目******************************* 代码: 分析: typedef struct { int num; char name[9]; char sex; struct { int year,month,day ;} birthday; float score[3]; }STU; //一个结构体的定义 /**********found**********/ void show(STU tt) 注意:这里是被调用函数的行参的考察,我们学习的主要是传地址和传数值名称两种,这个地方是传名称,看到下面打印的时候使用的是tt.num,很明显行参的名称是tt,并且是传递的是参数的名称,如果传递的是地址,下面的引用应该是tt->num. 或 (*tt).num. { int i; printf(\ tt.birthday.year, tt.birthday.month, tt.birthday.day); for(i=0; i<3; i++) /**********found**********/ printf(\根据观察我们可以发现该结构体成员中有个浮点型的score[3]的成员,这个地方是通过循环依次把这三个成绩数出来,所以填写的是tt.score[i],(上课时强调如何使用过)。 printf(\} main( ) { STU std={ 1,\ printf(\/**********found**********/ show(std); 这里填写的是调用函数,这个地方是实参,我们呢可以看到上面定义了一个结构体变量,std,所以这个地方就是填写std。(too simply) } ****************************第六题目******************************* 代码: 分析: void fun( SLIST *p) { SLIST *t, *s; t=p->next; s=p; 两个指针,t和s,我们要注意,s是在t前面的一个指针, —> s t while(t->next != NULL) 当t没有到末尾的时候(我要大家背了这句话)。 { s=t; /**********found**********/ t=t->next; 这里也是我上课要大家背的,表示将指针往后挪一个位置。填写的是next。 } /**********found**********/ 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库C语言最重要的知识点复习资料(2)在线全文阅读。
相关推荐: