主题:[原创]C语言程序设计考试心得
来自冰蓝的Blog:http://blog.sina.com.cn/u/1268019991
由于自学考试的社会性,为了体现公正和公平,试题不能像本科院校中常见的那样重复使用。自学考试的试卷内容有广泛且分散的特点,这要求考生必须全面地复习教材的内容。
1.单项选择题
试题中的单项选择题中的多数试题涉及整本教材介绍的概念和知识点。为解答这类试题,要求考生要熟练地掌握和熟记大纲中指出的“识记”和“领会”的内容。考生应摘出教材中有关C语言的重要概念、定义、有关语言成分性质的叙述,对它们深入的理解和熟记,并对语言的一些基本规定能作简单的应用。清考生注意,理解、熟记和大段地背诵的区别。由于考题表现形式的多样性,理解是最重要的,仅对关键性的概念才有准确熟记的必要,多数的概念因是理解,并要求能熟练应用。试题通常要求对某个概念、术语或计算结果作出判断,或对一些规定作简单的应用等。由于计算机科学是一门新兴学科,许多概念还没有唯一性的定义,不同书籍由于出发点或论述领域不同,同一概念会有不同的说法,为此考生在复习迎考时,不要脱离指定自学考试教材,而从其它教材出发进行复习。
【例1】设有以下代码定义字符数组c和字符指针变量pc:
char c[10]="abed",*pc=c;
问*(pc+4)的值。供选择的答案有:
①”abcd’ ②'\0' ③ ' d' ④不能确定
上述代码使字符数组c的前5个元素依次为:c[0]=’a’c[1]=’b’, c[2]=’c’, c[3]= ’d',c[4]=’\0’。初始化pc=c使字符指针变量pc指向c数组的首元素c[0]。而表达式pc+4的值是c[4]的指针。因此,表达式*(pc+4)就是引用c[4]。所以问题的解答为②。
【例2】指出下列说法中错误的叙述。
①构成数组的所有元素的数据类型必须是相同的
②用指针法引用数组元素允许数组元素的下标越界
③一维数组元素的下标为1,2,3,...
④定义数组时的长度可以是整型常量表达式
由数组的概念知,数组的全部元素有相同的数据类型,另在定义数组时,需指出数组的元素个数,指定数组元素个数的表达式必须在编译时可计算的,即只允许是常量表达式,不可以含有变量。所以①和④是正确的叙述,不是问题要求的解答。在C语言中,当指针指向数组的某元素(不一定是数组的首元素)时,可利用该指针加减一个整表达式,构成指针表达式指向数组的某元素,然后用取内容运算符。间接引用指针表达式所指的数组元素。如有代码:
int a[100],* P;
表达式p=&a「20]使p指向a[20],,通过p引用数组a[l],可用表达式*(p-19)。由C语言的约定,当指针指向数组某元素时,用指针表达式引用它所指的数组的某元素也可写成等价的下标引用形式,如表达式*(p-9)可以等价地写成p[-19]。这里-19是一个负整数,所以叙述②也是一个正确叙述。这种表示方法是借用下标表示法,与指针加减的整表达式引用数组元素,其中加减的整数实际不是数组元素的下标。还需要指出一点,指针与整表达式和的新指针不应该指向数组之外的别的地址。如前述的例子中指针变量p指向a[20],表达式*(p+n)中的 n要求不能小于 20,也不能大于 79。最后,C语言规定数组元素的下标从0开始顺序编号,所以选择③才是错误的叙述。
2.填充题
填充题要考核的内容与选择题的考核内容基本相同,但考核的形式不同。填充题的试题多数是从基本概念儿语言关于数据类型、程序对象、程序结构等的规定、C程序设计基本技巧等引伸的具体应用。如C语言规定每个字符占一个字节,每个字符串除存储它所包含的字符外,在字符串最后一个字符之后还存有一个字符串结束符。对于这样两个基本概念和规定,填充题可能是问具体的一个字符和一个字符串各占多少个字节等。因填充题是概念或规定的具体应用,解答的难度也就比选择题的要大,不可能有猜得分的机会。
【例3】下列函数的功能是统计并返回形参指针S所指向的字符串所含字符’A’的个数。试完成程序,写出应填写在程序空框中的代码。
int counts(char *s)
{ int n;
for( n=0;。 ; s++)
if(*s==’A’)n++;
return n;
}
为统计字符指针s所指字符串包含的某字符的出现次数,必须用一个循环顺序考察整个字符串。由从指针s所指字符串的首字符开始,每考察一个字符后,指针s后移一个字符位置,考察循环直至字符率结束终止。所以填写在空框中的正确代码可写成* S! =’\ 0’。由于字符串束符’\ 0’的代码为 8位全0,其值为 0,正确解答也可写成* S!= 0,或更简洁地写成*s。
【例4】在内存中存储’A’要占用____字节,存储"A"又要占用____字节。
由于C语言规定字符只占1个字节,一个具体的字符当然也只占1个字节。字符串”A”要有1个字节用于存储字符’A’,另需要1个字节存储字符串的结束符,所以它要占用连续的2个字节。
【例5】设整型变量a、b的值均为3,执行语句:
b= a++, b++, ++a;
后,a的值为____,b的值为____。
该试题的表达式书写形式一般不会直接出现在实际应用程序中,但作为考核考生对有关表达式的计算规则,也不失为是一个很有意义的试题。赋值表达式自右至左计算,而逗号运算符的优先级最低,并且逗号表达式自左至右逐一计算,并以最后子表达式的值为逗号表达式的结果。上述表达式的计算顺序可用以下3个表达式语句等价表示:
b=a++;b++;++a;
由以上一系列表达式知,变量b的最终值与其原来值无关,表达式b= a+十是先计算a++。表达式a+十的值是变量a的原先值3,但又让变量a增1后变为4。然后表达式b++又使变量b增1,变成4。而计算++a的值,是让a增1,使a的值变为5。所以上述表达式使变量a的值变为5,b的值变为4。
如上述表达式改写为:
b+=(a++,b++,++a);
请读者回答执行该表达式后,变量a和b的值又分别为多少。
……
这篇文章比较长,查看原文:http://blog.sina.com.cn/u/4b94731701000705