c语言复习重点文档格式.docx
《c语言复习重点文档格式.docx》由会员分享,可在线阅读,更多相关《c语言复习重点文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
例已知intx=1,y=2,z;
执行语句z=x>
y?
++x:
++y;
后,z的值是C
A)1B)2C)3D)4
●自增、自减运算及应用(57页)
例设有inta=1,b=1;
,执行printf("
%d,%d"
(a++,--b),b-1);
的输出结果是D
A)1,-1
B)1,0
C)0,-1
D)0,0
●与或非运算及关系运算常用的算术运算(55页、91页、92页)
例C语言中运算对象必须是整型数据的运算符是A
A)%B)/C)!
D)&
&
例设a、b和c都是int型变量,且a=3,b=4,c=5;
则以下表达式中,值为0的表达式是D
A)a&
b
B)a<
=b
C)a||b+c&
b-c
D)!
((a<
b)&
!
c||1)
●指针的相关运算(第十章的一些简单定义和运算)
例已知inta[3][4],*p=a;
p+=6;
那么*p和D的值相同。
A)*(a+6)B)*(&
a[0]+6)
C)*(a[1]+3)D)*(&
a[0][0]+6)
注:
*p=a;
定义时赋初值,相当于把a[0][0]的地址赋值给p。
例已知charb[5],*p=b;
则正确的赋值语句是C
A)b="
abcd"
;
B)*b="
;
C)p="
D)*p="
●正确的输入语句scanf正确的输入方法(82页)
●有关宏定义的运算、宏定义的正确使用(204页)
例若有宏定义#defineMOD(x,y)x%y,则执行以下语句后的输出为B
intz,a=15,b=100;
z=MOD(b,a);
printf("
%d\n"
z++);
A)11B)10C)6D)宏定义不合法
例若有以下宏定义
#defineN2
#defineY(n)((N+1)*n)
则执行语句z=2*(N+Y(5));
后的结果为B
A)语句有错误B)z=34C)z=70D)z值不确定
●取整运算
例已知intx=10,y=3,z;
则下列语句的输出结果是D
z=(x%y,x/y));
A)1B)0C)4D)3
●多重循环语句的运算(复习第六章)
例以下程序段的输出结果是D
A)9B)1C)11D)10
intk,j,s;
for(k=2;
k<
6;
k++,k++)
{
s=1;
for(j=k;
j<
j++)
s+=j;
}
s);
注:
第二轮循环k=4,s=1,所以结果为10。
●循环语句中break和continue的使用(122页)
例若变量已正确定义,以下语句的输出结果是A
A)%#B)*%$C)%D)%$*
x=0;
y=2;
z=3;
switch(x)
{case0:
switch(y)
{case1:
printf("
*"
);
break;
case2:
%"
case1:
switch(z)
$"
default:
#"
}
●循环语句的循环次数的判断
例
执行下述程序的输出结果是C
#include<
stdio.h>
main()
{
staticinti,j;
for(j=9;
i<
j;
i++)
{for(i=9;
if(!
(j%i))
break;
if(i>
=j-1)
j);
A)11
B)10
C)9
D)1011
这个程序只循环一次。
●判断字符串长度的运算(149页)
例已知:
charstr[]="
ab\n\018\\\"
"
则执行语句:
strlen(str));
的结果是B
A)3B)7C)6D)12
字符分别为a、b、\01、8、\、\、\”
●位运算(不考位段)
例执行下面程序段后,c的二进制值为D
inta=3,b=6;
charc;
c=(a^b)<
<
2;
A)00011100
B)00000111
C)00000001
D)00010100
例以下程序的输出结果是D
A)100B)160C)120D)64
main()
charx=040;
x=x<
1);
●数组元素地址的表示(230页和243页)
例设有int a[]={2,4,6,8,10},*p=a;
,则值为8的表达式是D
A)*p+3
B)*p+4
C)*(p+4)
D)*(a+3)
例若有inta[4][3]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}},(*p)[3];
p=a;
则*(*(p+1)+2)的值是B
A)5B)6C)7D)有语法错误
●结构体数据所占内存的长度(281页)
●逻辑运算(92页)
●正确的函数定义形式(157页)
●字符串的比较(148页)
●多级指针的使用(271)
●文本文件的读写操作
例以“只读”方式打开文本文件a:
\aa.dat,下列语句中哪一个是正确的D
A)fp=fopen("
a:
\\aa.dat"
"
ab"
B)fp=fopen("
\aa.dat"
C)fp=fopen("
wb"
D)fp=fopen("
r"
例若要执行p=fopen("
a1"
"
则p必须事先进行定义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所指的内存
C)从文件f中读取n个字符串存入指针s所指的内存
D)从文件f中读取长度为n-1的字符串存入指针s所指的内存
例写字符到磁盘文件的fputc(ch,fp)函数(ch表示字符,fp表示文件指针),其函数原型(头)正确的是C
A)FILE*fputc(char)B)intfputc(FILE*)
C)intfputc(char,FILE*)D)intfputc(FILE*,char)
例函数调用语句:
fseek(fp,-20L,2)的含义是C
A)将文件位置指针移动到距离文件头20个字节处
B)将文件位置指针从当前位置向后移动20个字节
C)将文件位置指针从文件末尾处向后退20个字节
D)将文件位置指针移到离当前位置20个字节处
●数组元素的正确引用、数组的正确定义(第七章)
例在以下数组定义中,正确的是A
A)inta[3+3];
B)inta[3,3];
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)-60C)60D)-24
●字符串正确的定义方法(52页142页)
例下面关于字符串的说明中,错误的是AD
A)charstr[7]="
FORTRAN"
;
B)charstr[]="
C)char*str="
D)charstr[]={'
F'
,'
O'
R'
T'
A'
N'
注:
charstr[8]="
charstr[7]={'
}
●字符串与指针的相关运算(251页)
例以下函数的功能是
A
voidfun(char
*p2,
char
*p1)
{
while((*p2=*p1)!
='
\0'
){
p1++;
p2++;
}
A)将p1所指字符串复制到p2所指内存空间
B)将p1所指字符串的地址赋给指针p2
C)对p1和p2两个指针所指字符串进行比较
D)检查p1和p2两个指针所指字符串中是否有'
例下列程序的输出结果是D
A)cB)dC)eD)f
char*p="
abcdefghijklmnopq"
while(*p++!
e'
%c\n"
*p);
注意printf语句不是while的内嵌语句.
注意:
如果while语句后没有;
输出结果就发生变化
●字符串操作的相关运算如连接、复制等(146-150)
例函数调用strcat(strcpy(str1,str2),str3)的功能是C
A)将串str1复制到串str2中,然后再连接到str3之后
B)将串str1连接到串str2之后,再复制到str3之中
C)将串str2复制到str1中,然后再将串str3连接到串str1之后
D)将串str2复制到str1中,再将串str1连接到串str3之后
例设有charstring1[20]="
ABCDE"
,string2[10]="
xyz"
,则执行printf("
%d"
,strlen(strcat(string1,string2)));
后的输出结果是D
A)9
B)8
C)5
D)3
●C语言可以处理的文件类型(书331页)
●文件指针指向末尾的函数(347feof()函数)
二、程序填空题(20分)
1、
(1)求某数的绝对值
(2)数据的反序输出
方法一:
voidmain()
{
inta[5]={1,2,3,4,5};
inti;
for(i=4;
i>
0;
i--)
%5d"
a[i]);
(3)求一系列数之和
例以下程序用递归法求解
,当最后一项的值小于0.00001时,累加结束。
{doubles,x;
doublesum(double,double,double*);
scanf("
%lf"
&
x);
s=1.0;
if(x>
1.0)
{printf("
s=%10.5lf\n"
sum(1.0,x,&
s);
)
elseprintf("
dataerror!
\n"
doublesum(doublet,doublep,double*a)
{t=t/p;
if(t>
=0.00001)
sum(t,p,a);
*a+=t;
return(*a);
(4)统计一系列数中的具有共同特征的数之和。
例程序读入20个整数,统计非负数个数,并计算非负数之和。
请填空完成。
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.将某数值转换成二进制数,所得二进制数的每一位数存放在一维数组中返回
#include<
{intm,i,r,a[16];
m);
16;
{if((r=m%2)==0)a[15-i]=0;
elsea[15-i]=1;
m=m/2;
%d"
3.求字符串的长度,如一个字符串连接到另一个字符串的后面,新串的长度。
例以下是将两个字符串连接起来的程序,请填空。
方法一:
{chars1[80],s2[40];
inti=0,j=0;
printf(“\nInputstring1:
”);
scanf(“%s”,s1);
printf(“\nInputstring2:
scanf(“%s”,s2);
while(s1[i]!
=’\0’)
i++;
while(s2[j]!
s1[i++]=s2[j++];
或s1[i]=s2[j];
i++;
j++;
s1[i]=’\0’;
printf(“Thenewstringis%s\n”,s1);
printf(“Thenewstringlongis%d\n”,strlen(s1));
方法二:
{chars1[80],s2[40];
\nInputstring1:
%s"
s1);
\nInputstring2:
s2);
s1[80]=strcat(s1,s2);
Thenewstringis%s\n"
Thenewstringlongis%d\n"
strlen(s1));
4.将数组元素按行求和后在存储到数组中。
例将数组元素按行求和后存放到另一个数组中。
{inti,j,a[3][4],b[3]={0};
inputa:
3;
for(j=0;
4;
a[i][j]);
b[i]=b[i]+a[i][j];
\nouputa:
{for(j=0;
a[i][j]);
\nouputb:
b[i]);
三、修改下列程序的错误(共15分)
1.通过某种方式实现两个变量值的交换。
例给定程序中功能是:
从键盘上输入2个整数,按从小到大的顺序输出这2个数。
2.输入矩阵元素的值,求主对角线元素之和。
{inta[3][3],sum=0;
inti,j;
enterdata:
sum=sum+a[i][i];
sum=%d\n"
sum);
3.用选择法对数组元素按从小到大的顺序进行排序。
4.计算系列数之和(有规律的数列)。
例如求1-3+5-7+……-99+101的值。
四、程序设计(共15分)
1.求某数的阶乘。
{intn,i;
longinty=1;
n);
if(n==0||n==1)
y=1;
else
{for(i=1;
=n;
y=y*i;
n!
=%ld\n"
y);
(参考课本173页例8.8)
2.求三个数中的最大值。
可以参考04-05学年试卷A的30题答案.
3.求数组右上半三角元素中的值乘以某个数。
{inti,j,k=4;
inta[3][3]={{1,2,3},{4,5,6},{7,8,9}};
outputarraya:
for(j=i;
a[i][j]=a[i][j]*k;
4.N×
N阶矩阵中各行最小数之和。
{inti,j,min,t,s=0;
inta[3][3]={{1,2,3},{7,5,6},{9,8,7}};
i++)
{min=a[i][0];
for(j=1;
if(min>
a[i][j])
{t=min;
min=a[i][j];
a[i][j]=t;
min);
/*输出每行的最小数*/
s=s+min;
/*输出每行的最小数之和*/