二级C冲刺班上机材料.docx

上传人:b****6 文档编号:6715616 上传时间:2023-01-09 格式:DOCX 页数:76 大小:64.58KB
下载 相关 举报
二级C冲刺班上机材料.docx_第1页
第1页 / 共76页
二级C冲刺班上机材料.docx_第2页
第2页 / 共76页
二级C冲刺班上机材料.docx_第3页
第3页 / 共76页
二级C冲刺班上机材料.docx_第4页
第4页 / 共76页
二级C冲刺班上机材料.docx_第5页
第5页 / 共76页
点击查看更多>>
下载资源
资源描述

二级C冲刺班上机材料.docx

《二级C冲刺班上机材料.docx》由会员分享,可在线阅读,更多相关《二级C冲刺班上机材料.docx(76页珍藏版)》请在冰豆网上搜索。

二级C冲刺班上机材料.docx

二级C冲刺班上机材料

上机考试考点总结

注意事项:

1.分值为程序填空30分+程序修改30分+程序设计40分

2.2008.4开始两大变化:

时间60分钟->90分钟

上机环境TC2.0->VC++6.0

3.上机考试被考生称为“从天堂坠落地狱”。

 

上机填空的试题中常包含3个空缺需要填写,试题中用

“______数字_____”来提示在此处填写程序代码,需要填写的代码一般是程序运行的关键部分,因此需要考生理解整个程序流程。

特别要注意的是,只能在有数字标号的空缺处填写,不要试图改动程序行的顺序和其他的非空缺处填写。

改错的试题通常包含两个(或三个)错误需要修改,试题中用“******found******”来提示下一行(或下面第二行)有错。

错误的性质基本分语法错和逻辑错两种,也有些少量的试题把语句添加在下划线处。

特别要注意的是,只能在出错行上进行修改,不要改动程序行的顺序,更不要自己另编程序。

最后,在二级C语言程序设计上机考试编程中,要求完成一个独立的函数的编程。

 

本资料对上机考试题目划分为6大类,对每种类型的题目进行了分析。

 

1.对一维数组(排序)和字符串(指针)操作

该类型的题目在以往的机试中占有比例较大,约40%,考生应该对该知识点

做全面的复习和掌握,一维数组可以分成数值型和字符型,其中数值型数组的数据类型为整型和实型,字符串数组的数据类型为字符型,我们通常会把字符型数组叫做字符串,但是应该注意字符型数组与字符串之间是存在区别的,也就是‘\0’结束标识符问题。

在复习该部分时,考生应该注意掌握以下两个问题:

(1)对一维数组的操作

对一维数组操作时,不可避免的要访问相关的数组元素,在C语言中访问数组元素一般采用单层循环的方法进行遍历,假设数组长度为n,数组下标是在0到(n-1)之间的,考生应该牢固掌握在一维数组中求最大值、最小值、移动元素、查找特定值(通过具体数值或通过下标)、存储数组元素等的方法。

其中一个非常重要的操作一定要重视:

两种排序算法,冒泡排序额和选择排序,具体的过程和实现代码要求考生必须掌握。

(2)对字符串的操作(指针)

该类问题是每次考试的重点和难点,特别是将字符串同指针结合起来以后,难度就更大了。

考生在解决此类问题时应特别注意字符串的结束标志‘\0’,它不仅用来作为字符串的结束标志,而且对字符串进行操作时,它也是循环的结束标志。

考生在复习该部分的时候应该注意这样几个基本问题:

大小写字母的转换、奇偶数判别、添加或删除指定的字符和字符的移动。

此外,考生应该牢固掌握指针的特性及字符串操作函数的使用和实现方法,曾出现过考题要求考生自己编程完成字符串操作函数,特别是字符串连接函数和求子串函数,应当引起足够重视。

另外对于指针应该清楚指针的建立、遍历、添加或删除一个结点的操作代码。

2.数值计算

该类型的题目在历年的机试中占20%,考查的机率也非常高。

该类题目一般给定一个数列计算公式,然后要求考生编写一个函数实现求数列的前n

项的值、累加和或积,在解决该类问题时,首先重要的找到给定数列的变化规律,然后其变化规律来编写一个单层或者双层的循环来求相应的值。

在编写程序的过程中,往往还会用到一些数学函数,如sqrt()、fabs()、pow()等,考生应该牢固掌握math.h中一些常用的数学函数的用法和使用方法。

另外还应注意数据类型之间的区别,特别是float和int类型,不同的数据类型产生的运算结果是不一样的。

3.对结构体的操作

这部分对非计算机专业的学生来说是个难点,但以往的机试中,有17%的题目是属于该类型。

考生在复习这部分的时候,首先应该注意结构体成员的两种不同的引用方法:

结构体变量和指向结构体的指针,也就是结构体成员运算符‘.’和指向运算符‘->’,在编程的过程中,往往会涉及到结构体数组,其实这类数组除了数据类型是结构体外,其他的特性和普通数组是一样的,结构体除了定义、赋值和初始化以外,其他的操作和普通变量也是一样的,包括在结构体数组(记录)中进行查找、删除、求最大最小值等操作,我们应该用对待普通变量的方法来解决结构体的问题,这样的话,难度就大幅度的降低。

4.对二维数组的操作

该类问题在历年的机试中占16%,考生应该对二维数组的元素遍历方法、存储方式、矩阵转换等问题做重点掌握。

在C语言中,访问二维数组的数族元素一般采用双层循环的方法实现,因为二维数组具有两个下标:

行下标和列下标;二维数组可以按行或者按列转化成一维数组进行存储;对二维数组进行行列转换的时候,要将行下标和列下标进行互换。

考生还应该掌握上三角矩阵、下三角矩阵的特性,在考试中,矩阵的表达形式经常考到二维数组的坐标转换。

5.数制转换

该部分在以往的机试中占11%,包括两类问题:

一是整数合并,而是类型转换,例如对一个数的各位进行一系列的变化。

在复习该部分时,考生应该注意C语言中int、long、float、double类型数据所占的存储空间大小和精度,注意%(模)运算和/(整除)运算的特点,特别应该灵活的使用模运算与除法运算求数据相应位数上的数值,掌握强制类型转换的方法以及按规定的位数保留小数的方法。

6.素数

该部分在历年机试中占6%,考生应该牢固掌握素数的基本概念和判断素数的方法,特别要求考生注意整数1不是素数,所以在判断素数时应该从2开始,到(n-1)结束,能够除尽的不是素数,不能除尽的是素数。

判断素数是C语言中的一个基本算法,不仅会在程序填空和程序改错中也会有所涉及,应该重点复习。

 

C语言编程常见错误

1.书写标识符时,忽略了大小写字母的区别。

main()

{

inta=5;

Printf(“%d”,A);

}

2.忽略了变量的类型,进行了不合法的运算。

main()

{

floata,b;

printf(“%d”,a%b);

}

3.将字符常量与字符串常量混淆。

charc;

c=“a”;

4.忽略了“=”与“==”的区别。

if(a=3)……if(a==3)……

5.忘记加分号。

a=1

b=1

6.多加分号。

{

z=x+y;

t=z/100;

printf(“%f”,t);

};

inta[10];

for(i=0;i<10;i++);

s+=a[i];

7.输入变量时忘记加地址运算符“&”。

inta,b;

scanf(“%d%d”,a,b);

8.输入数据的方式与要求不符。

scanf(“%d%d”,&a,&b);

输入3,4

9.输入字符的格式与要求不一致。

在用%c格式输入字符时,空格字符和转义字符都将作为有效字符输入

scanf(“%c%c%c”,&c1,&c2,&c3);输入abc

10.输入输出的数据类型与所用格式说明符不一致。

inta=3;

floatb=4.5;

printf(“%f%d”,a,b);

11.输入数据时,企图规定精度。

scanf(“%7.2”,&a);

12.switch语句中漏写break语句。

switch(grade)

{

case‘A’:

printf(“85~100\n”);

case‘B’:

printf(“70~84\n”);

case‘C’:

printf(“60~69\n”);

case‘D’:

printf(“<60\n”);

default:

printf(“errer\n”);

}

13.定义数组时误用变量

intn;

scanf(“%d”,&n);

inta[n];

14.在定影数组时,将定义的“元素个数”误认为是可使的最大下标值

inta[10]={1,2,3,4,5,6,7,8,9,10};

printf(“%d”,a[10]);

 

15.在不该加地址运算符&的未知加了地址运算符。

scanf(“%s”,&str);

 

上机-填空部分

一、填空题

考试做题要求:

  1、在__1__处填写正确的答案,并将下划线和数字删除。

  2、将题目做完之后一定要保存。

3、不能删除/**********found**********/,也不能多行或少行。

1.函数fun的功能是:

统计所有小于等于n(n>2)的素数的个数,素数的个数作

为函数值返回。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:

源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

#include

intfun(intn)

{inti,j,count=0;

printf("\nTheprimenumberbetween3to%d\n",n);

for(i=3;i<=n;i++){

/**********found**********/

for(___1___;j

/**********found**********/

if(___2___%j==0)

break;

/**********found**********/

if(___3___>=i)

{count++;printf(count%15?

"%5d":

"\n%5d",i);}

}

returncount;

}

main()

{intn=20,r;

r=fun(n);

printf("\nThenumberofprimeis:

%d\n",r);

}

 

2.人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入

结构体数组std中。

函数fun的功能是:

找出指定出生年份的人员,将其数据放

在形参k所指的数组中,由主函数输出,同时由函数值返回满足指定条件的人数。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:

源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

#include

#defineN8

typedefstruct

{intnum;

intyear,month,day;

}STU;

intfun(STU*std,STU*k,intyear)

{inti,n=0;

for(i=0;i

/**********found**********/

if(___1___==year)

/**********found**********/

k[n++]=___2___;

/**********found**********/

return(___3___);

}

main()

{STUstd[N]={{1,1984,2,15},{2,1983,9,21},{3,1984,9,1},{4,1983,7,15},

{5,1985,9,28},{6,1982,11,15},{7,1982,6,22},{8,1984,8,19}};

STUk[N];inti,n,year;

printf("Enterayear:

");scanf("%d",&year);

n=fun(std,k,year);

if(n==0)

printf("\nNopersonwasbornin%d\n",year);

else

{printf("\nThesepersonswerebornin%d\n",year);

for(i=0;i

printf("%d%d-%d-%d\n",k[i].num,k[i].year,k[i].month,k[i].day);

}

}

 

3.给定程序中,函数fun的功能是:

求ss所指字符串数组中长度最短的字符串所

在的行下标,作为函数值返回,并把其串长放在形参n所指变量中。

ss所指字符

串数组中共有M个字符串,且串长

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:

源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

#include

#include

#defineM5

#defineN20

intfun(char(*ss)[N],int*n)

{inti,k=0,len=N;

/**********found**********/

for(i=0;i<___1___;i++)

{len=strlen(ss[i]);

if(i==0)*n=len;

/**********found**********/

if(len___2___*n)

{*n=len;

k=i;

}

}

/**********found**********/

return(___3___);

}

main()

{charss[M][N]={"shanghai","guangzhou","beijing","tianjing","chongqing"};

intn,k,i;

printf("\nTheoriginalstringsare:

\n");

for(i=0;i

k=fun(ss,&n);

printf("\nThelengthofshorteststringis:

%d\n",n);

printf("\nTheshorteststringis:

%s\n",ss[k]);

}

 

4.给定程序中已建立一个带有头结点的单向链表,在main函数中将多次调用fun

函数,每调用一次fun函数,输出链表尾部结点中的数据,并释放该结点,使链表

缩短。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:

源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

#include

#include

#defineN8

typedefstructlist

{intdata;

structlist*next;

}SLIST;

voidfun(SLIST*p)

{SLIST*t,*s;

t=p->next;s=p;

while(t->next!

=NULL)

{s=t;

/**********found**********/

t=t->___1___;

}

/**********found**********/

printf("%d",___2___);

s->next=NULL;

/**********found**********/

free(___3___);

}

SLIST*creatlist(int*a)

{SLIST*h,*p,*q;inti;

h=p=(SLIST*)malloc(sizeof(SLIST));

for(i=0;i

{q=(SLIST*)malloc(sizeof(SLIST));

q->data=a[i];p->next=q;p=q;

}

p->next=0;

returnh;

}

voidoutlist(SLIST*h)

{SLIST*p;

p=h->next;

if(p==NULL)printf("\nThelistisNULL!

\n");

else

{printf("\nHead");

do{printf("->%d",p->data);p=p->next;}while(p!

=NULL);

printf("->End\n");

}

}

main()

{SLIST*head;

inta[N]={11,12,15,18,19,22,25,29};

head=creatlist(a);

printf("\nOutputfromhead:

\n");outlist(head);

printf("\nOutputfromtail:

\n");

while(head->next!

=NULL){

fun(head);

printf("\n\n");

printf("\nOutputfromheadagain:

\n");outlist(head);

}

}

5.给定程序中,函数fun的功能是:

在形参s所指字符串中的每个数字字符之后插入一个*号。

例如,形参s所指的字符串为:

def35adh3kjsdf7。

执行结果为:

def3*5*adh3*kjsdf7*。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:

源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

#include

voidfun(char*s)

{inti,j,n;

for(i=0;s[i]!

='\0';i++)

/**********found**********/

if(s[i]>='0'___1___s[i]<='9')

{n=0;

/**********found**********/

while(s[i+1+n]!

=___2___)n++;

for(j=i+n+1;j>i;j--)

/**********found**********/

s[j+1]=___3___;

s[j+1]='*';

i=i+1;

}

}

main()

{chars[80]="ba3a54cd23a";

printf("\nTheoriginalstringis:

%s\n",s);

fun(s);

printf("\nTheresultis:

%s\n",s);

}

 

6.函数fun的功能是:

把形参a所指数组中的偶数按原顺序依次存放到a[0]、a[1]、a[2]、……中,把奇数从数组中删除,偶数个数通过函数值返回。

例如:

若a所指数组中的数据最初排列为:

9、1、4、2、3、6、5、8、7,删除奇数后a所指数组中的数据为:

4、2、6、8,返回值为4。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:

源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

#include

#defineN9

intfun(inta[],intn)

{inti,j;

j=0;

for(i=0;i

/**********found**********/

if(___1___==0){

/**********found**********/

___2___=a[i];j++;

}

/**********found**********/

return___3___;

}

main()

{intb[N]={9,1,4,2,3,6,5,8,7},i,n;

printf("\nTheoriginaldata:

\n");

for(i=0;i

printf("\n");

n=fun(b,N);

printf("\nThenumberofeven:

%d\n",n);

printf("\nTheeven:

\n");

for(i=0;i

printf("\n");

}

 

7.给定程序中,函数fun的功能是:

统计形参s所指字符串中数字字符出现的次数,并存放在形参t所指的变量中,最后在主函数中输出。

例如,形参s所指的字符串为:

abcdef35adgh3kjsdf7。

输出结果为:

4。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:

源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

#include

voidfun(char*s,int*t)

{inti,n;

n=0;

/**********found**********/

for(i=0;___1___!

=NULL;i++)

/**********found**********/

if(s[i]>='0'&&s[i]<=___2___)n++;

/**********found**********/

___3___;

}

main()

{chars[80]="abcdef35adgh3kjsdf7";

intt;

printf("\nTheoriginalstringis:

%s\n",s);

fun(s,&t);

printf("\nTheresultis:

%d\n",t);

}

 

8.给定程序的功能是:

从键盘输入若干行文本(每行不超过80个字符),写到文件myfile4.txt中,用-1作为字符串输入结束的标志。

然后将文件的内容读出显示在屏幕上。

文件的读写分别由自定义函数ReadText和WriteText实现。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:

源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

#include

#include

#include

voidWriteText(FILE*);

voidReadText(FILE*);

main()

{FILE*fp;

if((fp=fopen("myfile4.txt","w"))==NULL)

{printf("openfail!

!

\n");exit(0);}

WriteText(fp);

fclose(fp);

if((fp=fopen("myfile4.txt","r"))==NULL)

{printf("openfail!

!

\n");exit(0);}

ReadText(fp);

fclose(fp);

}

/**********found**********/

voidWriteText(FILE___1___)

{charstr[81];

printf("\nEnterstringwith-1toend:

\n");

gets(str);

while(strcmp(str,"-1")!

=0){

/**********found**********/

fputs(___2___,fw);fputs("\n",fw);

ge

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1