2012年9月全国计算机考试二级C语言最新上
机题库
上机考试题库
(打印版)
1
1
【参考答案】(1) a[i](2) a[j](3) a[j]
【考点分析】本题考查:数组的引用;if语句条件表达式,如果表达式的值为真,则执行下面的语句,如果该值为假,则不执行下面的语句。
【解题思路】填空1:for循环语句循环体中将数组元素a[i]赋值给变量max和变量min。
填空2:通过一次for循环,找到数组中的最大值,if语句的条件表达式是max
填空3:同理,此处if语句的条件表达式是min>a[j]。
【解题宝典】求最大值或者最小值的题目,一般都是假设一个元素最大或最小,然后通过if条件语句将该元素和其他元素进行比较操作来完成。
【参考答案】(1) 去掉分号(2) case 1:case 2:return 1;【考点分析】本题考查:switch语句,其一般形式为:switch(表达式){
case常量表达式1: 语句1;
case常量表达式2: 语句2;
……
case常量表达式n: 语句n;
default: 语句n+1;
}其中switch(表达式)后不应该带有";",同时case语句常量后应该是":"。
【解题思路】C语言中,switch语句之后不能有分号,并且case语句常量后应用的是冒号。
【参考答案】
oid fun(STREC *a)
{double ave=0.0;
int i;
for(i=0;i a->ave=a->ave+a->s[i]; /*求各门成绩的总和*/ a->ave/=N; /*求平均分*/ } 【考点分析】本题考查:结构体类型成员运算,指向结构体类型的指针变量作函数参数。 【解题思路】本题考查自定义形参的相关知识点,程序流程是这样的:在fun()函数中求出平均分后,返回到主函数时平均分也要带回,所以只能定义一个指针类型的形参STREC*a ,此时,引用成员的方式可以使用指向运算符,即a->ave和a->s[i],当然也可用(*a).ave和(*a).s[i]。 2 【参考答案】(1) char(2) ch<='9'(3)'0' 【考点分析】本题考查:函数定义,注意函数定义的一般形式以及有参函数和无参函数的区别;if语句条件表达式,本题的条件表达式是判断数字字符;函数返回值,其一般形式为"return 表达式;"。 【解题思路】填空1:函数定义时,类型标识符指明了本函数的类型,函数的类型实际上是函数返回值的类型,所以此处应该填入char。填空2:通过if条件语句判断字符串中字符是否是数字字符,既大于等于字符'0',同时小于等于字符'9'。 填空3:return语句完成函数返回操作,要实现字符转换,应填入return ′9′-(ch-′0′)。 【解题宝典】有参函数定义,其一般形式为: 类型标识符函数名(形式参数表列) {声明部分 语句} 在形参表中给出的参数称为形式参数,它们可以是各种类型的变量,各参数之间用逗号间隔。在进行函数调用时,主调函数将赋予这些形式参数实际的值。形参既然是变量,必须在形参列表中给出类型说明。 【参考答案】(1) b[k]=*p;(2) b[k]=′ ′;k++; 【考点分析】本题考查:指针类型变量作为函数的参数,函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型。它的作用是将一个变量的地址传送到另一个函数中。 【解题思路】(1) 题目中p是指针型变量作函数参数,因此给b[k]赋值时出现错误。(2) 题目要求赋值3个字符后加一个空格,所以应该是先给b[k]赋值空格,然后变量k 再加1。 【解题宝典】C语言中为了表示指针变量和它所指向的变量之间的关系,在程序中用"*"符号表示"指向",例如,pointer代表指针变量,而*pointer是pointer所指向的变量。 【参考答案】 double fun( STREC *h ) { double ave=0.0; STREC *p=h->next; while(p!=NULL) {ave=ave+p->s; p=p->next; } return ave/N; } 【考点分析】本题考查:链表的操作,对链表的主要操作有以下几种:建立链表、结构的查找与输出、插入一个结点、删除一个结点。 【解题思路】题目要求求链表中数据域的平均值,应首先使用循环语句遍历链表,求各结点数据域中数值的和,再对和求平均分。遍历链表时应定义一个指向结点的指针p,因为"头结点"中没有数值,所以程序中让p直接指向"头结点"的下一个结点,使用语句STREC *p=h->next。 3 【参考答案】(1) M(2) <(3) k 2 【考点分析】本题考查:for循环语句的循环条件;if语句条件表达式;return语句完成函数值的返回。 【解题思路】填空1:题目指出ss所指字符串数组中共有M个字符串,所以for循环语句循环条件是i 【参考答案】(1)if(( tt[i]>=a′)&&( tt[i] <=′z′)(2)tt[i]-=32;【考点分析】本题考查:if语句条件表达式;小写字母转大写字母的方法。 【解题思路】(1)分析本题可知,要判断字符是否为小写字母,即判断其是否在a~z之间,所以这里需要进行连续的比较,用&&。(2)从ASCII码表中可以看出,小写字母的ASCII码值比对应大写字母的ASCII值大32。将字符串中的小写字母改为大写字母的方法是:从字符串第一个字符开始,根据ASCII码值判断该字母是不是小写字母,若是,则ASCII码值减32即可。 【参考答案】 void fun( int m, int *k, int xx[] ) { int i,j,n=0; for(i=4;i if(i%j==0) break; if(j
} *k=n; /*返回非素数的个数*/ } 【考点分析】本题考查:如何判断非素数;循环判断结构;数组的引用。 【解题思路】题目要求将1~m之间的非素数存入数组中,应使用循环判断结构。循环语句用来遍历1~m之间的每个数,判断语句用来判断该数是否素数,若不是素数,则将其存入数组中。这道题目是考查一个数是否为素数的简单延伸,只要掌握了判断素数的方法,问题便能顺利解决。【解题宝典】判定一个数是否为素数,即该数除了能被1和它本身外,不能被任何数整除。 代码实现为: for(j=2;j
if(i%j==0)/*如余数为0,证明i不是素数*/ …… 此语句需要熟记,很多判断素数的题目也可通过此法解决。 4 【参考答案】(1)j++或j+=1或++或j=j+1(2)s[i]=t1[i](3) j 【考点分析】本题考查:指针型变量;数组变量赋值;for 循环语句。 【解题思路】填空1:根据函数fun中的内容可知,数组t1存储了s中的非数字字符,数组t2存储了s中的数字字符,为了存储下一个数字字符,下标j要进行加1操作。填空2:将s串中的数字与非数字字符分开后,要先将非数字字符放入字符串s中,因此填入s[i]=t1[i]。填空3:最后将数字字符加到s串之后,并且i要小于数字的个数j。 【参考答案】(1)for (j = i + 1; j < 6; j++) (2)*(pstr +i) = *(pstr + j) ; 【考点分析】本题考查:冒泡排序算法;for循环语句格式;指针数组。 【解题思路】(1)此处考查for语句的格式,各表达式之间应用";"割开。(2)此处考查用指针表示数组元素的方法,*(pstr+I)表示pstr所指向数组的第I个元素,同理*(pstr+j)表示pstr所指向数组的第j个元素。 【解题宝典】冒泡排序算法,其基本思想是,将待排序的元素看作是竖着排列的"气泡",较小的元素比较轻,从而要往上浮。在冒泡排序算法中我们要对这个"气泡"序列处理若干遍。所谓一遍处理,就是自底向上检查一遍这个序列,并时刻注意两个相邻的元素的顺序是否正确。如果发现两个相邻元素的顺序不对,即"轻"的元素在下面,就交换它们的位置。显然,处理一遍之后,"最轻"的元素就浮到了最高位置;处理二遍之后,"次轻"的元素就浮到了次高位置。依次类推,完成排序。用代码实现数组s[N]的升序排列为: for(i=0; i for(j=i+1; j if(s[i]>s[j]) {t=s[i]; s[i]=s[j] s[j]=to;} 【参考答案】 int fun(char *ss, char c) { int i=0; for(;*ss!='\0';ss++) if(*ss==c) i++;/*求出ss所指字符串中指定字符的个数*/ return i; } 【考点分析】本题考查:for循环语句遍历字符串,并通过if条件语句,判断字符串是否结束。 【解题思路】从字符串中查找指定字符,需要使用循环判断结构,循环语句用来遍历字符串,循环条件为字符串没有结束,即当前字符不是′\0′,判断语句用来判断当前字符是否为指定字符。最后返回指定字符的个数。 5 【参考答案】(1)x(2)p(3)s 【考点分析】本题考查:链表的基本操作。了解链表的 3 基本思想和相关算法,理解有关链表插入及删除时指针移动的先后顺序问题,注意指针的保存和归位。 【解题思路】填空1:将形参x赋值给结点的数据域。 填空2和填空3:将新的结点和原有链表中结点进行比较。【参考答案】(1)long k=1;(2)num /=10; 【考点分析】本题考查:数据类型;保存乘积的变量初始化;除法运算符。 【解题思路】(1)k用来存放各位数字的积,初始值应为1。 (2)这里是一个符号错误,除号用"/"来表示。 【解题宝典】明确C语言中的算术运算符: 加法运算符"+":为双目运算符,即应有两个量参与加法运算。减法运算符"-":为双目运算符。但"-"也可作负值运算符,此时为单目运算,如-x,-5等具有左结合性。乘法运算符"*":双目运算,具有左结合性。除法运算符"/":双目运算,具有左结合性。参与运算量均为整型时,结果也为整型,舍去小数。如果运算量中有一个是实型,则结果为双精度实型。求余运算符(模运算符)"%":双目运算,具有左结合性。要求参与运算的量均为整型。求余运算的结果等于两数相除后的余数。 【参考答案】 float fun ( float *a , int n ) { int i; float av=0.0; for(i=0; i av=av+a[i]; return(av/n);/*返回平均值*/ } 【考点分析】本题考查:如何通过指针来实现计算平均分。【解题思路】本题较简单,只需用一个循环语句就可变成数组元素的求和,再将和除以课程数即可。需要注意的是本题对指针的操作,当指针变量指向一个数组时,用该指针变量引用数组元素,引用方式与数组的引用方式相同。如本题中a指向了score,所以通过a引用score中的元素时可以用下标法,也可以用指针运算法,a[i]和*(a+i)具有相同的作用。下标运算实际上是从当前地址开始往后取出地址中的第几个元素,当前地址下标为0。例如,若有int cc[10],*p=cc+5;,即p指向了cc的第5个元素,则p[0]的作用与cc[5]相同;p[3]的作用是取出从当前地址(即p所指地址)开始往后的第3个元素,它与cc[8]相同;p[-2]的作用是取出从当前地址开始往前的第2个元素,它与cc[3]相同,但不提倡使用"负"的下标。 【解题宝典】计算平均分方法。掌握以下语句: for(i=0;i av=av+a[i]; return (av/n);/*返回平均值*/ 6 【参考答案】(1)3.0或(double)3(2)>(3) (t+1) 【考点分析】本题考查:基本算术运算时的类型转换,其转换规则为:如果双目运算符两边运算数的类型一致,则所得结果的类型与运算数的类型一致;如果双目运算符两边运算的类型不一致,系统将自动进行类型转换,使运算符两边的类型达到一致后,再进行运算规律见下表。 运算数1,运算数2,转换结果类型 短整型,大整型,短整型 长整型 整型,大整型,整型 长整型 字符型,整型,字符型 整型 有符号整型,无符号整型,有符号整型 无符号整型 整型,浮点型,整型 浮点型while循环语句,一般考查如何根据题意确定循环条件,以及如何通过循环变量变化实现循环操作。 【解题思路】填空1:变量x定义为double类型,而运算符"/"后面是整型数,所以给x赋值时,需要注意数据类型,此处不能将3.0写成3。填空2:while循环语句的循环条件,根据题意确定循环变量应大于1e-3,因此此处应填">"。 填空3:表达式的通项是(2] 【解题宝典】本题填空1还可以运用强制类型转换来实现。

