c语言复习重点docxWord格式.docx
《c语言复习重点docxWord格式.docx》由会员分享,可在线阅读,更多相关《c语言复习重点docxWord格式.docx(16页珍藏版)》请在冰豆网上搜索。
例设a、b和c都是int型变量,且a=3,b=4,c=5;
则以下表达式中,值为0的表达式是_
A)a&
bB)a<
=bC)a||b+c&
b・cD)!
((a<
b)&
!
c||l)
•指针的相关运算(第十章的一些简单定义和运算)
例已知inta[3][4],*p=a;
p+=6;
那么*p和D的值相同。
A)*(a+6)B)*(&
a[0]+6)
C)*(a[l]+3)D)*(&
a[0][0]+6)
注:
*p=a;
定义时赋初值,相当于把a[0][0]的地址赋值给p。
例已知charb[5],*p二b;
贝0正确的赋值语句是C
A)b二怙bed"
;
B)*b=Habcdn;
C)p=Habcdu;
D)*p二怙bed"
止确的输入语句scanf正确的输入方法(82页)
有关宏定义的运算、宏定义的正确使用(204页)
例若有宏定义ttdefineM0D(x,y)x%y,贝U执行以下语句后的输出为Bintz,a二15,b=100;
z=M0D(b,a);
printf(M%d\nn,z++);
A)11B)10C)6D)宏定义不合法
例若有以下宏定义
^defineN2
tfdefineY(n)((N+l)*n)
则执行语句z二2*©
+Y(5));
后的结果为_
A)语句有错误B)z=34C)z=70D)z值不确定
取整运算
例己知intx=10,y=3,z;
则下列语句的输出结果是一Dprintf("
%d\nn,z=(x%y,x/y));
A)1B)0C)4D)3
多重循环语句的运算(复习第六章)
例以下程序段的输出结果是_
A)9B)1OilD)10
intk,j,s;
for(k=2;
k<
6;
k++,k++)
{
s=l;
for(j=k;
j<
j++)
s+二j;
}
printf("
%d\n"
s);
第二轮循环24,s二1,所以结果为10。
循环语句中break和continue的使用(122页)
例若变量已正确定义,以下语句的输出结果是_
A)%#B)*%$C)%D)%$*
x=0;
y=2;
z=3;
switch(x)
{case0:
switch(y)
{case1:
printf(n*n);
break;
case2:
printf("
%"
);
case1:
switch(z)
printf(”$”);
printf(M*n);
default:
printf(常'
);
•循环语句的循环次数的判断
例执行下述程序的输出结果是—
#include<
stdio.h>
main()
{staticinti,j;
for(j=9;
i<
j;
i++)
{for(i=9;
if(!
Q%i))
if(i>
=j-l)
printf(”%d\n”,j);
A)11B)10C)9D)1011
这个程序只循环一次。
•判断字符串长度的运算(149页)
例已知:
charstr[]=,,ab\n\018\\\,H,;
则执行语句:
printf('
^dXn"
strlen(str));
的结果是B
A)3B)7C)6D)12
字符分别为a、b、\01、8、\、\、\”
•位运算(不考位段)
例执行下面程序段后,c的二进制值为_
inta=3,b=6;
charc;
c=(aAb)«
2;
A)0001110()B)00000111C)00()000()1D)00010100例以下程序的输出结果是_
A)100B)1600120D)64
main()
charx=040;
%d\rT,x=x«
l);
•数组元素地址的表示(230页和243页)
例设有inta[]={2,4,6,&
10},*p=a;
则值为8的表达式是I)
A)*p+3B)*p+4C)*(p+4)D)*(a+3)
例若有inta[4][3]二{{1,2,3},{4,5,6},{7,8,9},{10,11,12}},(邙)[3];
p=a;
则*(*(p+1)+2)的值是_g_
A)5B)6C)7D)有语法错误
•结构体数据所占内存的长度(281页)
•逻辑运算(92页)
•正确的函数定义形式(157页)
•字符串的比较(148页)
•多级指针的使用(271)
•文本文件的读写操作
例以“只读”方式打开文本文件a:
\aa.dat,T列语句中哪一个是正确的_
A)fp=fopen("
a:
\\aa.dat'
\"
abM);
B)fp=fopen(,'
\aa.dat"
"
a,'
C)fp二fopen("
\aa.dat”,"
wb”);
D)fp二fopen("
\\aa.dat〃,"
r"
例若要执行p=fopen(>
ar\V);
则d必须事先进行定义D
A)intp;
B)int*p;
C)FILEp;
D)FILE*p;
例标准库函数fgets(s,n,f)的功能是B
A)从文件f中读取长度为n的字符串存入指针s所指的内存
B)从文件f中读取长度不超过n-1的字符串存入指针s所指的内存
0从文件f中读取n个字符串存入指针s所指的内存
D)从文件f中读取长度为n-1的字符串存入指针s所指的内存
例写字符到磁盘文件的fputc(ch,fp)ffi数(ch表示字符,fp表示文件指针),其函数原型(头)正确的是一C
A)FILE*fputc(char)B)intfputc(FILE*)
C)intfputc(char,FILE*)D)intfputc(FILE*,char)
例函数调用语句:
fseek(fp,-20L,2)的含义是
A)将文件位置指针移动到距离文件头20个字节处
B)将文件位置指针从当前位置向后移动20个字节
C)将文件位置指针从文件末尾处向后退20个字节
D)将文件位置指针移到离当前位置20个字节处
•数组元素的正确引用、数组的正确定义(第七章)
例在以下数组定义中,正确的是一A
A)inta[3+3];
B)inta[3,3J;
C)inta[];
D)inta[3][];
•非法的字符常量(48页)
•函数的隐含类型(157页)
•判断函数调用语句屮参数的个数(第八章)
例函数原型是voidfun(int*a,int*b),且intx[10],y;
则下列调用小正确的是一D
A)fun(*x,&
y);
B)fun(&
x,*y);
C)fun(x,y);
D)fun(x,&
•一个变量的多赋值语句的运算
例己知intx二6;
则执行x+二x-二x*x;
语句后,x的值为B
A)36B)-60060D)-24
•字符串正确的定义方法(52页142页)
例下面关于字符串的说明中,错误的是AD
A)charstr[7]「FORTRAN"
;
B)charstrL]=nFORTRAN,,;
C)char*str二"
FORTRAN"
D)charst讥]={'
F,O,R,T,R,A,N}
注:
charstr[8]「FORTRAN”;
charstr[7]={'
F,'
O'
R'
T,'
R'
'
A'
N}
•字符串与指针的相关运算(251页)
例以下函数的功能是_
voidfun(char*p2,char*pl)
{while((*p2=*p1)!
-\0'
){pl++;
p2++;
}}
A)将pl所指字符串复制到p2所指内存空间
B)将pl所指字符串的地址赋给指针p2
C)对pl和p2两个指针所指字符串进行比较
D)检查pl和p2两个指针所指字符串屮是否有'
\0'
例下列程序的输出结果是_
A)cB)dC)eD)f
char*p=,,abcdefghijk1mnopqn;
mainO
wh订e(*p++!
=,e'
%c\n"
*p);
注意printf语句不是while的内嵌语句.
注意:
如果while语句后没有;
输岀结果就发生变化
•字符串操作的相关运算如连接、复制等(146-150)
例函数调用strcat(strcpy(strl,str2),str3)的功能是
A)将串strl复制到串str2中,然后再连接到str3之后
B)将串strl连接到串str2之后,再复制到str3之中
C)将串str2复制到strl中,然后再将串str3连接到串strl之后
D)将串str2复制到strl中,再将串strl连接到串str3之后
例设有charstringl[20]二"
ABCDE"
string2[10]=/,xyzz,;
则执行printf(,z%dz,,strlen(strcat(stringl,string2)));
后的输出结果是D
A)9B)8C)5D)3
•C语言可以处理的文件类型(书331页)
•文件指针指向末尾的函数(347feof()函数)
二、程序填空题(20分)
1、
(1)求某数的绝对值
方法一:
方法二:
#include〈stdio.h>
#include<
voidmainO
voidmain()
{inta;
scanf("
%d"
&
a);
scanf(“%d”,&
if(a>
=0)
a=abs(a);
a二%d\n"
a);
printf(Ma=%d\n,,,a);
else
printf(,za=%d\n"
-a);
(2)数据的反序输出方法一:
voidmain()
inta[5]={l,2,3,4,5};
inti;
for(i=4;
i>
0;
i--)printf(〃%5d〃,a[i]);
将数组中的n个数据按逆序存放。
voidreverse(intaHJntn)
{int
i=0;
j=;
while(i<
j)
{t=a(il;
a[i]=a[j];
afj]=t;
i++;
—;
}
方法三:
#include<
#defineN5voidmain(){inta[N],i,temp;
printf("
enterarraya:
\n"
for(i=0;
N;
i++)scanf("
&
a[ij);
anaya:
\iT'
for(i=0;
i++)printf(H%4d,,,a[i]);
N/2;
i++){temp=a[i];
a[i]=a[N-i-l];
a[N-i-l]=temp;
}printf("
\nNovv,arraya:
i++)printf("
%4d"
a[ij);
printf(,,\nn);
(3)求一系列数之和
例以下程序用递归法求解$=1+丄+丄+丄+…(兀>
1),当最后一项的值小于
XL兀
0.00001时,累加结束。
{doubles,x;
doublesum(double,double,double*);
scanf("
%lf'
x);
s=1.0;
if(x>
1.0)
{printf('
s=%10.51f\n'
,sum(1.0,x,&
s);
)
elseprintf(ndataerror!
\nn);
doublesum(doublet,doublep,double*a)
{t=t/p;
if(t>
=O.OOOOl)
sum(t,p,a);
*a+=;
return(*a);
(4)统计一系列数中的具有共同特征的数之和。
例程序读入20个整数,统计非负数个数,并计算非负数之和。
请填空完成。
★include<
inti,a[20],s,count;
s二count=0;
for(i=0;
20;
a[i]);
{if(a[i]<
0)
continue;
s+=a[i];
count++;
s=%d\tcount=%d\n"
s,count);
2.将某数值转换成二进制数,所得二进制数的每一位数存放在一维数组中返冋
{intm,i,r,a[16];
m);
16;
{if((r=m%2)==0)a[15-i]=0;
elsea[15-i]=l;
m=m/2;
printf(”%d”,a[i]);
3.求字符串的长度,如一个字符串连接到另一个字符串的后面,新串的长度。
例以下是将两个字符串连接起來的程序,请填空。
{charsi[80],s2[40];
inti=0,j=0;
\nlnputstringl:
r,);
scanf('
%s〃,si);
\nlnputstring2:
〃);
scanf(、'
%s〃,s2);
while(sl[i]!
-\0,)
i++;
while(s2[j]!
=,\OZ)
sHi++]二s2[i++l;
或sl「il二s2[i];
i++;
sl[i]i\O,;
Thenewstringis%s\,si);
printf('
Thenewstringlongis%d\nzz,strlen(si));
voidmain(){charsl[80],s2[40];
inti=0,j=();
printf("
"
scanf(”%s”,sl);
printf(n\nlnputstring2:
H);
scanf(”%s”,s2);
sl[8O]=strcat(sl,s2);
printf(uThenewstringis%s\n"
sl);
Thenewstringlongis%d\n"
strlen(sl));
4•将数组元素按行求和后在存储到数组中。
例将数组元素按行求和后存放到另一个数组中。
{inti,j,a[3][4],b[3]={0J;
printfC'
inputa:
\nM);
3;
for(j=0;
4;
scanf(”%d”,&
a[i][j]);
iv3;
b[i]=b[i]+a[i]|j];
\nouputa:
(for(j=0;
printfC*%5d-,a[i][j]);
printf(M\nH);
printf(H\nouputb:
\nH);
printf(”%5d”,b[i]);
三、修改下列程序的错误(共15分)
1.通过某种方式实现两个变量值的交换。
例给定程序中功能是:
从键盘上输入2个整数,按从小到大的顺序输出这2个数。
/******found*******/
正确的程序
fun(intx,inty)
/******found*******/
{inttemp;
fun(int*x,int*y)
temp=*x;
*x=*y;
*y=temp;
temp-^x^x-^y;
*y-temp;
{inta,b;
/*******found******/
scanf(”%d,%d"
a,&
b);
/************/
if(a<
b)
scanf(”%d,%d”,&
/********found*****/
fun(a,b)
/********found*****/
printf('
\n%d,%d\n'
,a,b);
fun(&
\n%d,%d\n"
a,b);
2.输入矩阵元素的值,求主对角线元素Z和。
{inta⑶⑶,sum=0;
inti,j;
enterdata:
i++)for(j=0;
j++)scanf(H%dH,&
a[i]Lj]);
i++)sum=sum+a[i][i];
printf(Hsum=%d\nH,sum);
3.用选择法对数组元素按从小到大的顺序进行排序。
stdio.h>
#defineN20
voidfun(inta[],intn)
{intij,min5tempta[ll];
printf(nenterdata:
inti,j,k,t;
for(i=l;
=10;
n~l;
{printf(,,a[%d]=,,,i);
%d”,&
k=i;
/*输入10个数*/
for(j=i+l;
n;
if(alil<
a|k])
printf(HTheorginalnumbers:
\n,r);
k二j;
t=a[k];
a[k]=a[i];
a[i]=t;
printf(”%5d”,a[i]);
fbr(i=l;
=9;
/*10个数需要9趟比较*/
{min=i;
inta[N]={9,6,8,3,-1},i,m=5;
if(a[min]>
a[j])min=j;
i<
m;
i++)printf("
%dH,a[i]);
{temp=a[ij;
fun(im);
a[i]=a[min];
afminl=temp;
i++)printf(n%dH,a[i])jprintf(u\nM);
printf(M\nthesortednumbers:
for(i=l;
printf(H%5dM,a[i]);
4.计算系列数Z和(有规律的数列)。
例如求1-3+5-7+……-99+101的值。
{intij=l,sum=0;
=101;
i+=2)
inti,sl=0,s2=0;
i+=4)
sum+=i*j;
sl+=i;
j*=(・l);
for(i=-3;
i>
=-99;
i-=4)