C语言 复习题
(课程代码 352062)
一、选择题
(1) 有如下程序
main()
{ int y=3,x=3,z=1;
printf(“%d %d\n”,(++x,y++),z+2);
}
运行该程序的输出结果是: D
(第三章 输出语句)
(2)当c的值不为0时,在下列选项中能正确将c的值赋给变量a、b的是: C
A)c=b=a; B)(a=c)‖(b=c);
C)(a=c)&&(b=c); D)a=c=b;
(第四章 关系表达式)
(3)在以下一组运算符中,优先级最高的运算符是: C
A)<= B)=
C)% D)&&
(第四章 运算符的优先级)
(4) 请选出合法的C语言赋值语句: B
(第三章 赋值语句)
(5)以下说法中正确的是: C
A)#define和printf都是C语句 B)#define是C语句,而printf不是
C)printf是C语句,但#define不是 D)#define和printf都不是C语句
(第三章 语句概述)
(6)若有以下定义: D
char a; int b;
float c; double d;
则表达式a*b+d-c值的类型为
(第二章 类型混合运算)
(7)若已定义x和y为double类型,则表达式:x=1,y=x+3/2的值是: C
A)1 B)2
C)2.0 D)2.5
(第二章类型混合运算)
(8)有以下程序
#include
main()
{ int a,b,c=246;
a=c/100%9;
b=(-1)&&(-1);
printf("%d,%d\n",a,b);
}
输出结果是: A
(第四章 逻辑运算符)
(9) 以下程序运行后,输出结果是: C
main()
{ char *s="abcde";
s+=2;
printf("%ld\n",s);
}
(第九章 指针的概念)
(10)若要求在if后一对圆括号中表示a不等于0的关系,则能正确表示这一关系的表达式为: D
A)a<>0 B)!a
C)a=0 D)a
(第4章 条件表达式)
(11)有如下程序段,其输出结果是什么: A
main( )
{int a=1,b=3,c=5;
if (c=a+b)
printf ("yes\n");
else printf("no\n"); }
(第4章 条件语句)
(12) 假设在程序中a,b,c均被定义成整型,并且已赋大于1的值,则下列能正确表
1
示代数式 ----- 的表达式是: D
abc
(第二章 类型混合运算)
(13)若i ,j已定义为int类型,则以下程序段中内循环体的总的执行次数是: A
for (i=5;i;i--)
for(j=0;j<4;j++){...}
A)20 B)15
C)24 D)16
(第五章 for循环语句)
(14)下面哪个程序段不是死循环: C
(A) a=0; sum=0;
while(a=1)
{sum=sum+a;a++;}
(B) {int I,sum=0;
For(i=1;i<=3;sum++)
sum+=I;
}
(C) sum=0;
for(i=1;i<10;i++);
sum=sum+i;
(D) sum=0;
for(i=1; ;i++)
sum=sum+i;
(第五章 for循环语句)
15、设有以下定义:
int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};
int (*prt)[3]=a,*p=a[0]
则下列能够正确表示数组元素a[1][2]的表达式是: D
A)*((*prt+1)[2]) B)*(*(p+5))
C)(*prt+1)+2 D)*(*(a+1)+2)
16、不能把字符串:Hello!赋给数组b的语句是: B
A)char b[10]={'H','e','l','l','o','!'};
B)char b[10];b="Hello!";
C)char b[10];strcpy(b,"Hello!");
D)char b[10]="Hello!";
17、设有以下定义:
int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};
int (*prt)[3]=a,*p=a[0]
则下列能够正确表示数组元素a[1][2]的表达式是: D
A)*((*prt+1)[2]) B)*(*(p+5))
C)(*prt+1)+2 D)*(*(a+1)+2)
18、 请选出以下语句的输出结果: A
printf("%d\n",strlen("\t\"\065\xff\n"));
(19)假定所有变量均已正确说明,下列程序段运行后x的值是: B
a=b=c=0;x=35;
if(!a)x--;
else if(b);
if(c)x=3;
else x=4;
A)34 B)4 C)35 D)3
(第四章 if语句)
(20) 运行以下程序后,如果从键盘上输入 china#<回车>,则输出结果为: C
#include<stdio,h>
main()
{ int v1=0,v2=0;
char ch;
while((ch=getchar())!='#')
switch(ch)
{ case 'a';
case 'h';
default; v1++;
case '0'; v2++;
}
printf("%d,%d\n",v1,v2);
}
(第四章 switch语句)
(21) 执行以下程序段时: A
x=-1;
do {x=x*x; } while(! x);
(第五章 do_whule语句)
(22)执行下面的程序后,a的值为: B
main()
{ int a,b;
for (a=1,b=1;a<=100;a++)
{ if(b>=20)break;
if(b%3==1)
{b+=3;
continue;
}b-=5;
}
}
A)7 B)8
C)9 D)10
(第5章 break,continue 语句)
23) 下面能正确进行字符串赋值操作的语句是: C
(第6章 字符数组的定义 ;第9章 字符串指针)
(24)不能把字符串:Hello!赋给数组b的语句是: B
A)char b[10]={'H','e','l','l','o','!'};
B)char b[10];b="Hello!";
C)char b[10];strcpy(b,"Hello!");
D)char b[10]="Hello!";
(第6章 字符数组的使用)
(25)函数调用:strcat(strcpy(str1,str2),str3)的功能是: C
A)将串str1复制到串str2中后再连接到串str3之后
B)将串str1连接到串str2之后再复制到串str3之后
C)将串str2复制到串str1中后再将串str3连接到串str1之后
D)将串str2连接到串str1之后再将串str1复制到串str3中
(第6章 字符串处理函数)
(26)给出以下定义:
char x[ ]="abcdefg";
char y[ ]={'a','b','c','d','e','f','g'};
则正确的叙述为: C
(第6章 字符数组的定义)
(27)以下程序的输出结果是: D
A)AfghdEFG B)Abfhd C)Afghd D)Afgd
#include
main( )
{ char *p1,*p2,str[50]="ABCDEFG";
p1="abcd"; p2="efgh";
strcpy(str+1,p2+1); strcpy(str+3,p1+3);
printf("%s",str);
}
(第6章 字符串处理函数;第9章 字符串指针)
(28)下面哪个程序段编译会出错: D
{ *z=x>y?x:y;} {return x>y?x:y;}
{ int z; { int z
z=x>y?x:y; z=x>y?x:y;
return z;} return z;}
(29)下列程序执行后输出的结果是: D
#include 〈stdio.h〉
f(int a)
{ int b=0;
static c=3:
a=c+ +,b+ +;
returu(a);
}
main( )
{ int a=2,i,k;
for(i=0;i<2;i+ +)
k=f(a+ +);
printf("%d\n",k);
}
A)3 B)0 C)5 D)4
(第7章 静态变量)
(30)下列程序执行后输出的结果是: A
int d=1;
fun (int q)
{ int d=5;
d + =q+ +;
printf("%d".d);
}
main( )
{ int a=3;
fun(a);
d + = a + +;
printf("%d\n",d);
}
A)8 4 B)9 6 C)9 4 D)8 5
(第7章 函数调用;第3章 复合赋值运算符)
(31)以下程序的输出结果是: D
main()
{ int x=10,y=10;
printf("%d %d\n",x--,--y);
}
A)10 10 B)9 9
C)9 10 D)10 9
(第7章 函数调用时,参数结合方式:右结合)
(32)有以下程序
int fun(int x , int y , int *cp , int *dp)
{ *cp=x+y; *dp=x-y; }
main()
{ int a, b, c, d;
a=30; b=50;
fun(a,b,&c,&d);
printf("%d,%d\n", c, d);
}
输出结果是: C
A)50,30 B)30,50 C)80,-20 D)80,20
(第7章 函数调用 ;第9章 指针变量做参数)
(33)执行下面的程序后,a的值是: B
#define SQR(X) X*X
main( )
{ int a=10,k=2,m=1;
a/=SQR(k+m)/SQR(k+m);
printf("%d\n",a);
}
A)10 B)1 C)9 D)0
(第8章 带参宏定义)
(34) 以下有关宏替换的叙述不正确的是: D
C)宏替换只是字符替换 D)宏名必须用大写字母表示
(第8章 宏定义)
(35)C语言的编译系统对宏命令的处理是: D
(第8章 宏定义运行特点)
(36)若有宏定义如下:
#define X 5
#define Y X+1
#define Z Y * X / 2
则执行以下printf语句后,输出结果是: D
int a; a=Y;
Printf("%d\n", Z);
Printf("%d\n", - - a);
6 6 5 5
(第7章 函数调用;第8章 带参宏定义)
37、 若有以下的定义:int t[3][2];能正确表示t数组元素地址的表达式是: D
A) &t[3][2] B) t[3][2] C) t[1][0] D) t[2]+1
38、若已定义x和y为double类型,则表达式:x=1,y=x+3/2的值是: C
A)1 B)2
C)2.0 D)2.5
39、当c的值不为0时,在下列选项中能正确将c的值赋给变量a、b的是: C
A)c=b=a; B)(a=c)‖(b=c);
C)(a=c)&&(b=c); D)a=c=b;
40、C语言的编译系统对宏命令的处理是: D
(41)请读程序:
#define ADD(x) x+x
main()
{
int m=1, n=2, k=3;
int sum=ADD(m+n) * k;
printf("sum=%d", sum);
}
上面程序的运行结果是: B
(第8章 带参宏定义)
(42)在宏定义 #define PI 3.14159中,用宏名PI代替一个: D
(第8章 宏定义)
(43)设有以下定义:
int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};
int (*prt)[3]=a,*p=a[0]
则下列能够正确表示数组元素a[1][2]的表达式是: D
A)*((*prt+1)[2]) B)*(*(p+5))
C)(*prt+1)+2 D)*(*(a+1)+2)
(第9章 数组指针与指向主组的指针)
44、能正确表示“当x的取值在[1,10]和[200,210]范围内为真,否则为假“的表达式是___C____。
45、在C语言中,合法的长整型常数是: A
A)0L B)4962710 C)0.054838743 D)2.1869e10
46、下列4个函数中,: C 能实现交换变量值的功能。
A) void fun_a(int x,int y) B) void fun_b(int *x,int *y)
{ int *p; { int *p;
*p=x;x=y;y=*p;} *x=*y;*y=*x;}
C) void fun_c(int *x,int *y) D) void fun_d(int x,int y)
{ *x=*x+*y; { int p;
*y=*x-*y; p=x;x=y;y=p;
*x=*x-*y;} }
47、 请选出合法的C语言赋值语句: B
48、下列程序的输出结果是: C
main( )
{ int a[5]={2,4,6,8,10},*P, * *k;
p=a;
k=&p;
printf("%d",*(p++));
printf("%d\n",* *k);
}
A)4 4 B)2 2 C)2 4 D)4 6
49、以下说法中正确的是: C
A)#define和printf都是C语句 B)#define是C语句,而printf不是
C)printf是C语句,但#define不是 D)#define和printf都不是C语句
50、有以下程序
#include
main()
{ int a,b,c=246;
a=c/100%9;
b=(-1)&&(-1);
printf("%d,%d\n",a,b);
}
输出结果是: A
51、若要求在if后一对圆括号中表示a不等于0的关系,则能正确表示这一关系的表达式为: D
A)a<>0 B)!a
C)a=0 D)a
52、假定所有变量均已正确说明,下列程序段运行后x的值是: B
a=b=c=0;x=35;
if(!a)x--;
else if(b);
if(c)x=3;
else x=4;
A)34 B)4 C)35 D)3
53、 执行以下程序段时: A
x=-1;
do {x=x*x; } while(! x);
54、以下程序的输出结果是: D
A)AfghdEFG B)Abfhd C)Afghd D)Afgd
#include
main( )
{ char *p1,*p2,str[50]="ABCDEFG";
p1="abcd"; p2="efgh";
strcpy(str+1,p2+1); strcpy(str+3,p1+3);
printf("%s",str);
}
55、以下程序的输出结果是: D
main()
{ int x=10,y=10;
printf("%d %d\n",x--,--y);
}
A)10 10 B)9 9
C)9 10 D)10 9
二 、 简单题:
5种。(控制、函数、表达式、空、复合语句)
Getchar(); putchar(); printf();scanf() (p48)
while ; do_while ; for
全局:函数体外定义的变量;局部:函数体内定义的变量;
全局对各个程序中的修改都起作用。
动态:auto; 静态:static ,静态变量存储在专用的静态存储区中,在函数结束是不会消失,下次对函数调用有起作用,直到整个程序运行结束才消失。
(6) 分析数组指针和指向数组的指针有何区别?(p190)
定义方式不同;意义不同。
数组元素是一般值传递,数组名是传递的地址,因此, 对主调函数的影响也不同。
(8) 简述文件操作的步骤?(p292)
1、文件指针的定义2、文件打开3、文件读写4、文件关闭
(9)C语言中十进制、八进制、十六进制表示的方法是什么?十进制数100表示为八进制、十六进制分别是什么? (0144,0X64)
(10)简述break;和 continue;语句的不同?
break;跳出循环结构,执行循环结构后面的语句。
continue;跳出本次循环,回到循环开头重新执行。
(11)、分别各列出两种C语言中的输入输出函数,并例举出每个函数的使用格式?
printf,scanf,getchar,putchar
(12)、有如下定义: int a[10],*p=a; 和 float a[10],*p=a; 若执行 p++; 后,p增值是否相同?并说明其原因?
不一样,不同数据类型存储占用空间不一样。
三、编 程 复 习 题
【程序1】
题目:输入三个整数x,y,z,请把这三个数由小到大输出。
1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,
然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。
2.程序源代码:
main()
{
int x,y,z,t;
scanf("%d%d%d",&x,&y,&z);
if (x>y)
{t=x;x=y;y=t;} /*交换x,y的值*/
if(x>z)
{t=z;z=x;x=t;}/*交换x,z的值*/
if(y>z)
{t=y;y=z;z=t;}/*交换z,y的值*/
printf("small to big: %d %d %d\n",x,y,z);
}
-----------------------------------------------------------------------------
【程序2】
题目:输出9*9口诀。
1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
2.程序源代码:
#include "stdio.h"
main()
{
int i,j,result;
printf("\n");
for (i=1;i<10;i++)
{ for(j=1;j<10;j++)
{
result=i*j;
printf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3位*/
}
printf("\n");/*每一行后换行*/
}
}
-----------------------------------------------------------------------------
【程序3】
题目:判断101-200之间有多少个素数,并输出所有素数。
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,
则表明此数不是素数,反之是素数。
2.程序源代码:
#include "math.h"
main()
{
int m,i,k,h=0,leap=1;
printf("\n");
for(m=101;m<=200;m++)
{ k=sqrt(m+1);
for(i=2;i<=k;i++)
if(m%i==0)
{leap=0;break;}
if(leap) {printf("%-4d",m);h++;
if(h%10==0)
printf("\n");
}
leap=1;
}
printf("\nThe total is %d",h);
}
-----------------------------------------------------------------------------
【程序4】
题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数
本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
2.程序源代码:
main()
{
int i,j,k,n;
printf("'water flower'number is:");
for(n=100;n<1000;n++)
{
i=n/100;/*分解出百位*/
j=n/10%10;/*分解出十位*/
k=n%10;/*分解出个位*/
if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)
{
printf("%-5d",n);
}
}
printf("\n");
}
-----------------------------------------------------------------------------
【程序5】
题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
1.程序分析:利用while语句,条件为输入的字符不为'\n'.
2.程序源代码:
#include "stdio.h"
main()
{char c;
int letters=0,space=0,digit=0,others=0;
printf("please input some characters\n");
while((c=getchar())!='\n')
{
if(c>='a'&&c<='z'||c>='A'&&c<='Z')
letters++;
else if(c==' ')
space++;
else if(c>='0'&&c<='9')
digit++;
else
others++;
}
printf("all in all:char=%d space=%d digit=%d others=%d\n",letters,
space,digit,others);
}
自己复习有关排序的程序!!