二级C冲刺班上机复习材料Word格式.docx
《二级C冲刺班上机复习材料Word格式.docx》由会员分享,可在线阅读,更多相关《二级C冲刺班上机复习材料Word格式.docx(91页珍藏版)》请在冰点文库上搜索。
考生在复习这部分的时候,首先应该注意结构体成员的两种不同的引用方法:
结构体变量和指向结构体的指针,也就是结构体成员运算符‘.’和指向运算符‘->
’,在编程的过程中,往往会涉及到结构体数组,其实这类数组除了数据类型是结构体外,其他的特性和普通数组是一样的,结构体除了定义、赋值和初始化以外,其他的操作和普通变量也是一样的,包括在结构体数组(记录)中进行查找、删除、求最大最小值等操作,我们应该用对待普通变量的方法来解决结构体的问题,这样的话,难度就大幅度的降低。
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.忽略了变量的类型,进行了不合法的运算。
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<
stdio.h>
intfun(intn)
{inti,j,count=0;
printf("
\nTheprimenumberbetween3to%d\n"
n);
for(i=3;
i<
=n;
i++){
/**********found**********/
for(___1___;
j<
i;
j++)
if(___2___%j==0)
break;
if(___3___>
=i)
{count++;
printf(count%15?
"
%5d"
:
"
\n%5d"
i);
}
returncount;
{intn=20,r;
r=fun(n);
\nThenumberofprimeis:
%d\n"
r);
2.人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入
结构体数组std中。
函数fun的功能是:
找出指定出生年份的人员,将其数据放
在形参k所指的数组中,由主函数输出,同时由函数值返回满足指定条件的人数。
不得增行或删行,也不得更改程序的结构!
#defineN8
typedefstruct
{intnum;
intyear,month,day;
}STU;
intfun(STU*std,STU*k,intyear)
{inti,n=0;
for(i=0;
N;
i++)
if(___1___==year)
k[n++]=___2___;
return(___3___);
{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;
Enterayear:
);
scanf("
%d"
&
year);
n=fun(std,k,year);
if(n==0)
\nNopersonwasbornin%d\n"
year);
else
{printf("
\nThesepersonswerebornin%d\n"
for(i=0;
n;
%d%d-%d-%d\n"
k[i].num,k[i].year,k[i].month,k[i].day);
3.给定程序中,函数fun的功能是:
求ss所指字符串数组中长度最短的字符串所
在的行下标,作为函数值返回,并把其串长放在形参n所指变量中。
ss所指字符
串数组中共有M个字符串,且串长<
N。
string.h>
#defineM5
#defineN20
intfun(char(*ss)[N],int*n)
{inti,k=0,len=N;
___1___;
{len=strlen(ss[i]);
if(i==0)*n=len;
if(len___2___*n)
{*n=len;
k=i;
return(___3___);
{charss[M][N]={"
shanghai"
"
guangzhou"
beijing"
tianjing"
chongqing"
intn,k,i;
\nTheoriginalstringsare:
\n"
M;
i++)puts(ss[i]);
k=fun(ss,&
\nThelengthofshorteststringis:
n);
\nTheshorteststringis:
%s\n"
ss[k]);
4.给定程序中已建立一个带有头结点的单向链表,在main函数中将多次调用fun
函数,每调用一次fun函数,输出链表尾部结点中的数据,并释放该结点,使链表
缩短。
stdlib.h>
typedefstructlist
{intdata;
structlist*next;
}SLIST;
voidfun(SLIST*p)
{SLIST*t,*s;
t=p->
next;
s=p;
while(t->
next!
=NULL)
{s=t;
t=t->
%d"
___2___);
s->
next=NULL;
free(___3___);
SLIST*creatlist(int*a)
{SLIST*h,*p,*q;
inti;
h=p=(SLIST*)malloc(sizeof(SLIST));
{q=(SLIST*)malloc(sizeof(SLIST));
q->
data=a[i];
p->
next=q;
p=q;
next=0;
returnh;
voidoutlist(SLIST*h)
{SLIST*p;
p=h->
if(p==NULL)printf("
\nThelistisNULL!
\nHead"
do{printf("
->
p->
data);
p=p->
}while(p!
=NULL);
End\n"
{SLIST*head;
inta[N]={11,12,15,18,19,22,25,29};
head=creatlist(a);
\nOutputfromhead:
outlist(head);
\nOutputfromtail:
\n"
while(head->
=NULL){
fun(head);
\n\n"
\nOutputfromheadagain:
5.给定程序中,函数fun的功能是:
在形参s所指字符串中的每个数字字符之后插入一个*号。
例如,形参s所指的字符串为:
def35adh3kjsdf7。
执行结果为:
def3*5*adh3*kjsdf7*。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
voidfun(char*s)
{inti,j,n;
s[i]!
='
\0'
;
if(s[i]>
0'
___1___s[i]<
9'
)
{n=0;
while(s[i+1+n]!
=___2___)n++;
for(j=i+n+1;
j>
j--)
s[j+1]=___3___;
s[j+1]='
*'
i=i+1;
{chars[80]="
ba3a54cd23a"
\nTheoriginalstringis:
s);
fun(s);
\nTheresultis:
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。
#defineN9
intfun(inta[],intn)
{inti,j;
j=0;
if(___1___==0){
___2___=a[i];
j++;
return___3___;
{intb[N]={9,1,4,2,3,6,5,8,7},i,n;
\nTheoriginaldata:
i++)printf("
%4d"
b[i]);
n=fun(b,N);
\nThenumberofeven:
%d\n"
\nTheeven:
7.给定程序中,函数fun的功能是:
统计形参s所指字符串中数字字符出现的次数,并存放在形参t所指的变量中,最后在主函数中输出。
abcdef35adgh3kjsdf7。
输出结果为:
4。
#include<
voidfun(char*s,int*t)
{inti,n;
n=0;
___1___!
=NULL;
&
s[i]<
=___2___)n++;
___3___;
abcdef35adgh3kjsdf7"
intt;
fun(s,&
t);
t);
8.给定程序的功能是:
从键盘输入若干行文本(每行不超过80个字符),写到文件myfile4.txt中,用-1作为字符串输入结束的标志。
然后将文件的内容读出显示在屏幕上。
文件的读写分别由自定义函数ReadText和WriteText实现。
voidWriteText(FILE*);
voidReadText(FILE*);
{FILE*fp;
if((fp=fopen("
myfile4.txt"
w"
))==NULL)
openfail!
!
exit(0);
WriteText(fp);
fclose(fp);
r"
ReadText(fp);
voidWriteText(FILE___1___)
{charstr[81];
\nEnterstringwith-1toend:
gets(str);
while(strcmp(str,"
-1"
)!
=0){
fputs(___2___,fw);
fputs("
fw);
void