2013年C语言程序设计练习题

更新时间:2024-03-25 21:34:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

C语言程序设计练习题

一、选择题

1. C语言是一种( C )程序设计语言。

A. 低级 B. 面向对象 C. 高级 D. 智能 2. 下列特性中,( D )不是C语言的特征。 A.运行效率高 B.结构化程序设计 C.能直接访问物理地址 D.类型检测严格 3.下列标识符中, D 不是C的关键字;

A. int B. float C. char D. scanf 4.下列标识符中, D 不是C的关键字;

A. sizeof B. short C. long D. define 5.下列标识符中, D 不是C的关键字;

A. goto B. break C. auto D. printf 6.下列标识符中, D 不是C的关键字;

A. static B. struct C. void D. include

7.下列自定义标识符中, C 是不符合规定。

A. point1x B. _point1x C. 2pointx D. pointx_2 8.下列自定义标识符中, C 是不符合规定。

A. MAX B. _MIN C. MAX$ D. MIN_2 9.下列自定义标识符中, D 是不符合规定。

A. point1_ B. _point1x C. pointx D. pointx_ # 10.下列自定义标识符中, A 是不符合规定。

A. 2_point1x B. _point1x C. pointx D. pointx_2 11.定义int a=1; int *p=&a; 下列描述( B )是正确的。

A.&a和&p的值相同;B.a和*p的值相同; C.a和p的值相同; D.a和&p的值相同;

12.定义int a=1; int *p=&a; 下列描述( D )是正确的。

A.&a和&p的值相同;B.&a和*p的值相同; C.a和p的值相同; D.&a和p的值相同;

13.定义int a=1; int *p=&a; 下列描述( C )是错误的。

A.&a和&p的值不相同;B.&a和*p的值不相同; C.a和p的值相同; D.&a和p的值相同; 14.定义int a=1; int *p=&a; 下列描述( D )是错误的。

A.&a和&p的值不相同;B.&a和*p的值不相同; C.a和p的值不相同; D.&a和p的值不相同;

15.输入语句为:scanf(\下列键盘输入(B)是正确的。 A.1 2↙; B.1,2\\n↙; C.1↙2↙; D.1,2↙;

16.输入语句为:scanf(\从键盘输入(D)是正确的。 A.1 2↙; B.1,2↙; C.1↙2↙; D.a=1,b=2↙;

17.输入语句为:scanf(\从键盘输入(D)是正确的。 A.1 2↙; B.1,2↙; C.1↙2↙; D.a=1,b=2\\n↙;

18.输入语句为:scanf(\ b=%f\从键盘输入(D)是正确的。 A.1 2↙; B.1,2↙; C.1↙2↙; D.a=1 b=2↙;

19.double PI=3.1415926, 输出语句为:printf(\下列输出结果(D)是正确的。

A.3.1415926; B.3.2; C.3.1; D.3.14;

20.double PI=3.1415926, 输出语句为:printf(\下列输出结果(C)是正确的。 A.3.1415926; B.3.1415; C.3.1416; D.5.4;

21.double PI=3.1415926, 输出语句为:printf(\下列输出结果(D)是正确的。 A.3.1415926; B.3.141; C.3.1415; D.3.1416;

22.double PI=3.1415926, 输出语句为:printf(\下列输出结果(D)是正确的。 A.3.1415926; B.4.2; C.3.141; D.3.14;

23 int a=-1;C语言整型数分配2个字节,在计算机中下列十六进制表示的a(A)是正确的。 A.ffff; B.8001; C.1001; D.0001;

24 int a=-1;C语言整型数分配2个字节,在计算机中下列十六进制表示的a(D)是正确的。 A.0001; B.1001; C.-1; D.ffff;

25 int a=-1;C语言整型数分配2个字节,在计算机中下列十六进制表示的a(D)是正确的。 A.1001; B.-0001; C.-1; D.ffff;

26 int a=-1;C语言整型数分配2个字节,在计算机中下列十六进制表示的a(C)是正确的。 A.-ffff; B.8001; C.ffff; D.-1; 27.下列关于数组名作函数实参的描述,正确的是(A )。

A.把实参数组首元素的地址传递给形参数组,两个数组共占同一段内存; B.实参数组把各个元素的值传递给形参数组,两个数组各占不同的内存; C.把实参数组首元素的地址传递给形参数组,两个数组各占不同的内存; D.实参数组把各个元素的值传递给形参数组,两个数组共占同一段内存; 28.执行语句for (i=1;i++<3;);后变量i的值的是( A )。

A.3 B.4 C. 5 D.不确定

29.在C语言中引用数组元素时,其数组下标的数据类型可以是( C )。 A.整型常量 B.整型表达式

C.整型常量或整型表达式 D.任何类型的表达式 30. 以下能对一维数组a进行正确初始化的语句是( C )。

A.int a[10]=(0,0) B.int a[10]={ }; C.int a[ ]={0}; D.int a[10]={10*1};

31.设有下列变量说明:char a; int x; float y; double z; 则表达式a*x-z+y的值的数据类型为( D )。

A.float B.char C.int D.double

32.若x是int型变量,则表达式x%2+(x+1)%2的值为( B ) 。

A.0 B.1 C.2 D.不确定

33.设有定义int a=3,b=4,c=5,则表达式a||b+c&&b=c的值为( B )。

A.3 B.1 C.0 D.不确定 34.判断字符串a和b是否相等,应当使用( D ) A.if (a==b) B.if (a=b)

C.if (strcpy(a,b)) D.if (strcmp(a,b)) 35.以下正确的说法是( C )

A.定义函数时,形参的类型说明可以放在函数体内 B.return后面的值不能是表达式

C.如果函数值的类型与返回值类型不一致,以函数值类型为准 D.如果形参与实参的类型不一致,以实参类型为准

36.C语言中允许函数值类型缺省定义,此时该函数值隐含的类型是( D ) A.float B.double C.long D.int

37.若有说明:int a[10];则对a数组元素的正确引用是( D )

A.a[10] B.A[3.5] C. a(5) D.A[10-10] 38.若有说明:int a[3][4];则对a数组元素的正确引用是( C )

A.a[2][4] B.A[2,4] C. a[1+1][0] D.A(2)(1) 39.若有以下说明:int a[ ][3]={1,2,3,4,5,6,7};则数组a的第一维的大小是( B ) A.4 B.3 C. 2 D.不确定 40.二维数组x有m列,若元素x[0][0]是第一个元素,则x[i][j]在数组中的位置是( D ) A.i*m+j B.j*m+i C. i*m+j-1 D.i*m+j+1 41.在C语言中,下列描述正确的是( B )

A.函数的定义可以嵌套,但函数的调用不可以嵌套 B.函数的定义不可以嵌套,但函数的调用可以嵌套 C.函数的定义可以嵌套,函数的调用也可以嵌套

D.函数的定义不可以嵌套,函数的调用也不可以嵌套 42.表达式5!=4的值是( B )

A.0 B.1 C.true D.任一非零数 43.设逻辑型变量a,b,c,其中a的值为1,则逻辑运算表达式a||b||c的值是( B ) A.0 B.1 C.true D.不确定 44.若a=5,b=4,c=2时,表达式a>b!=c的值是( A )

A.1 B.0 C.非1 D.不确定

45.设逻辑型变量a,b,c,其中a的值为0,则逻辑运算表达式a&&b&&c的值是( A ) A.0 B.1 C.非1 D.不确定 46.设x,y均为float型变量,则下列不合法的赋值语句是( B ) A.++x B.y=(x%2)/10 C.x*=y+8 D.x=y=0

47.已知字母a的ASCII码为十进制数97,且设ch为字符型变量,则表达式ch=?a?+?8?-?3? 的值为( A )

A.?f? B.?a? C.?d? D.102 48.若当a的值为奇数时,表达式的值为“真”,当a的值为偶数时,表达式的值为“假”,则以下不能满足要求的表达式是( C )

A.a%2==1 B.!(a%2==0) C. !(a%2) D.a%2 49.已知ch是字符型变量,下列不正确的赋值语句是( A )

A.ch=?a+b? B.ch=?\\0? C.ch=?a?+?b? D.ch=5+9 50.若s是int型变量,则表达式s=25/3%3的值为( C )

A.25 B.1 C.2 D.3 51.若s是int型变量,则表达式s%2+(s-1)%2的值为( B )

A.0 B.1 C.–1 D.2 52.若s是int型变量,则表达式s%2+(s+1)%2的值为( B )

A.0 B.1 C.2 D.不确定 53.下列四个选项中,是不合法的用户标识符的选项是( C )

A.P_0 B._abc C.goto D.temp 54.下面是不正确的字符串常量的是( A )

A.?abc? B.“12?12” C.“0” D.“ ”

2xy55.下列表达式中,不能正确表达代数式含义的C语言表达式是( C )

abA.x/a/b*y*2 B.2*x*y/a/b C.2*x*y/a*b D.x*y/b/a*2 56.假设有下列变量说明:char a; int x; float y; double z; 则表达式a*x+z-y的值的数据类型为( D )

A.float B.char C.int D.double 57.C语言的编译系统对宏命令的处理是( D ) A.在程序运行时进行的 B.在程序连接时进行的

C.和C程序中的其他语句同时进行编译的 D.在对源程序中其他成分正式编译之前进行的 58.下面能正确进行字符串赋值操作的是( B )

A.char a[5]={“ABCDE”}; B.char a[5]={?A?, ?B?, ?C?, ?D?, ?E?}; C.char *a;a= {“ABCDE”}; D.char *a;scanf(“%s”,s); 59.若有定义:int a[5];则数组a中首元素的地址可以表示为( C )

A.& a B.a+1 C. a D.&a[1] 60.变量的指针,其含义是指该变量的( B )

A.值 B.地址 C.名 D.一个标志 61.若已定义char s[10];则在下列表达式中不表示s[1]的地址的是( C ) A.s+1 B.s++ C.&s[0]+1 D.&s[1] 62.设有以下说明语句

struct sss

{int a;float b;}stype

则下面的叙述不正确的是( C )

A.struct是结构体类型的关键字 B.struct sss是用户定义的结构体类型 C.stype 是用户定义的结构体类型名 D.a和b都是结构体成员名

63.设有程序段:char str[ ]=”ABC”,*p=str;则输出*(p+3)的值为( D )

A.67 B.0 C.字符?C? 的地址 D.字符?C? 64.若有说明:int *p[4];则标识符p( B ) A.是一个指向整型变量的指针 B.是一个指针数组名

C.是一个指针,它指向一个含有四个整型元素的一维数组 D.说明不合法

65.已有函数max(a,b),为了让函数指针变量p指向函数max,正确的赋值方法是( B ) A.*p=max ; B.p=max; C.p=max(a,b); D.*p=max(a,b); 66.若有结构体说明如下:

struct student {int age;

int num;}stu1,*p; p=&stu1;

则以下对结构体变量stu1中成员age的非法引用是( B )

A.stu1.age B.student.age C.p->age D.(*p).age 67.若有定义:int a[ ]={2,4,6,8,10,12},*p=a;则*(p+1)的值是( B ) A.2 B.4 C.10 D.12 68.若有定义:int a[5],*p=a;则对a数组元素的正确引用是( D )

A.*&a[5] B.a+2 C.*(p+5) D.*(a+2)

69.下面对typedef的叙述中不正确的是( B )

A.用typedef可以定义各种类型名,但不能用来定义变量 B.用typedef可以增加新类型

C.用typedef只是将已存在的类型用一个新的标识符来代表 D.使用typedef有利于程序的通用和移植

二、填空题

1. 在C语言程序中,使用输入输出需要包含的头文件是 stdio.h 。

2. C程序是由一组 函数 组成的,其中有且只有一个 main 函数,C语言文件的后缀是 .cpp , C语言程序的语句行以 分号 结束, C语言程序的注释以 /* 开始,以 */ 结束。

5.C语言程序的函数由 函数首部 和 函数体 两部分组成。

6. C语言的标识符由 下划线 、 字母 和 数字 三种符号组成,其中 数字 不能打头,用户自定义标识符不能与C语言的 关键字 相同。 8. C语言采用的是 8 位二进制ASCII代码集,共有 256 个字符。

9. 函数调用时,实参和形参之间有两种传递方式: 值传递 和 引用传递 。 10. 函数调用时,实参与形参的 个数 应该相等, 类型 应匹配。 11. C语言程序中函数的声明是把函数的名字、函数类型以及形参的类型、个数和顺序通知

编译系统,以便在调用该函数时系统按此进行对照检查,声明函数时,函数的___ 参数名 __可以省略。

12. 函数的定义是指对函数功能的确立,包括指定函数类型、函数名、参数类型、个数及其函数体等,它是一个完整的、独立的函数单位。

13.一个函数在它的函数体内,直接或间接地调用它自身,称为 递归 函数。,

14. 允许在不同的函数中使用相同的变量名,它们分配不同的单元,互不干扰,也不会发生混淆。在同一源文件中,允许外部变量和内部变量同名。在内部变量的作用域内,外部变量将被屏蔽而不起作用。

15. 从变量值存在的时间角度,有静态存储方式和动态存储方式。对变量的存储类型:自动变量(auto)、寄存器变量(register)、外部变量(extern)、静态变量(static)。自动变量和寄存器变量属于动态存储方式,外部变量和静态内部变量属于静态存储方式。 16. 指针变量是存放 地址 的变量。结构中可以嵌套其它结构的变量作为数据成员,结构不能嵌套自身的结构变量,但可以包含自身的结构指针。

17.结构体一般不能作为一个整体参加数据处理,参加各种运算和操作的是结构体的各个成员项数据。结构体变量使用成员时用 . 符号,结构体指针使用成员时用 → 符号; 18.C语言中所提供的基本数据类型包括: 基本整型 、 字符型 、

单精度型、双精度型、枚举型。

19.在C语言中,&运算符作为单目运算符时表示的是 取地址 运算;作为双

目运算符时表示的是 逻辑与 运算。 20.若for循环语句用以下形式表示:

for (表达式1;表达式2;表达式3) 循环体语句

则执行语句:for (i=0;i<4;i++) printf(“*”);时,表达式1执行 1 次,表达式3执行了 4 次。 21.设有程序段

k=1;n=263;

do

{ k*=n % 10; n/=10;} while (n);

其运行结束后k的值为 36 ,循环结束后n的值是 0 。

22.在C语言中,二维数组元素在内存中的存放顺序是 按行存放的 。 23.在C语言中,一个函数一般由两个部分组成,它们是 函数首部 和 函数体 。 24.若x为int型变量,则C语言中“x为奇数”的表达式描述是 x%2==1 。 25.在C语言中,若x,y,z均为int型变量,则“x或y中有一个小于z”的表达式描述形

式为 if(x<11y

三、 读程题

1. 阅读下列程序,在下划线上写出输出结果。 #include main( ) {

int x=1, y=0, a=0, b=0; switch(x) {

case 1:

switch(y)

case 0: a++; break; case 1:b++; break; }

case 2:a++;b++;break; }

printf(“%d,%d ”,a,b); /*输出结果: 2,1 */ }

2.以下程序的运行结果是 0 。 #include main( ) {

int y=10; do {

y--; } while (--y); printf(“%d, ”,y--); }

3. 阅读下列程序,在下划线上写出输出结果。

#include main( ) {

int y= -10; do {

y++; } while (++y);

printf(“%d, ”,y++); /*输出结果: 0 */ }

4.以下程序的运行结果是 6 。 main( ) {

int x=5; if (x++>5)

printf(“%d\\n”,x); else

printf(“%d\\n”,x--); }

5.以下程序的运行结果是 #&,&,&* 。 #include main( ) {

int i;

for (i=1;i<=5;i++) switch(i %5)

{

case 0: printf(“*”);break; case 1: printf(“#”);break; default: printf(“,”); case 2: printf(“&”); }

}

6. 阅读下列程序,在下划线上写出输出结果。 main( ) {

int i,j, row, col, m;

int a[3][4]={{1,2,3,4},{9,8,7,6},{-1,-2,0,5}}; min=a[0][0];

for (i=0;i<=2;i++) for (j=0;j<=3;j++)

if (a[i][j]

printf(“m=%d row =%d col =%d ”,m,row,col);

/*输出结果: m=-2,row=2,col=1 */ }

8.下列程序的功能是实现输出a,b,c三个数中的最大值。请为程序填空。 #include main( ) {

int a=5,b=4,c=8;

Int u,v ;

if ( a>b ) u=a; else

u=b;

if ( u>c )

v=u;

else v=c ; printf(“v=%d\\n”, v); }

9.下列程序的功能是根据下列函数关系,输入x的值,计算y的值。请为程序填空。

?x(x?5)2?x?10?y??4x?1?x?2 ?x?6x??1?main( )

{

int x, y;

scanf(“%d”, &* );

if ( x>2&&x<=10 )

y=x*(x+5);

else if ( x>-1&&x<=2 )

y=4*x; else

y=x-6 ; printf(“%d\\n”, y); }

10.下列程序的功能是采用“顺序查找法”查找数组中是否存在元素x。请为程序填空。 #include void main( ) {

int a[8]={ 9, 1, 3, 2, 6, 4, 7, 8}; int i, x;

scanf (“%d”, &x );

for (i=0; i<=8; i++) {

if (x==a[i]) {

printf(“Found! The Index is: %d\\n”, --i);

printf(“x=%d\\n”,a[i]) ; } }

if ( x!=a[i] ) printf(“not found!”; }

11.程序填空。 #include

void hanoi(int n,char one,char two,char three); void move(char x,char y);

void hanoi(int n,char one,char two,char three) /*定义hanio函数*/ {

if(n==1) move(one,three); else { hanoi(n-1,one,three,two); move(one,three); hanoi(n-1,two,one,three); } }

void move(char x,char y) /*定义move函数*/ {

printf(\}

void main() { int m; printf(\ scanf(\ printf(\ hanoi(m,'A','B','C'); }

12. 阅读下列程序,在下划线上写出变量类型及输出结果。 #include \

double countArea(int r); double Volumn1();

double Volumn2(int r,int h);

double PI=3.14; //变量类型: 双精度浮点型变量 double r=1; int h=1; void main( ) {

int r,h;//变量类型: 整型变量 double volumn,area; r=0; area=PI*r*r; printf(\圆的面积=%lf\\n\输出结果:圆的面积=0.000000 area=countArea(r); printf(\圆的面积=%lf\\n\输出结果:圆的面积=0.000000 h=2;r=1; volumn=Volumn2(r,h); printf(\圆柱体积=%lf\\n\输出结果:圆柱体积=6.280000 volumn=Volumn1( ); printf(\圆柱体积=%lf\\n\输出结果:圆柱体积=0.000000 volumn=Volumn1( ); printf(\圆柱体积=%lf\\n\输出结果:圆柱体积=3.140000 }

double countArea(int r) { return PI*r*r; }

double Volumn1( )

{ static int h=-1;//变量类型: 整型变量 h++; return PI*r*r*h; }

double Volumn2(int r,int h) { return PI*r*r*h; }

7. 阅读下列程序,在下划线上写出输出结果。 #include void main() { int *p,a; double b=0; char c='a'; a=10; p=&a; printf(\ //输出结果: a=10 printf(\ //输出结果: b=0 printf(\ c=a

}

printf(\输出结果: &p=1310588 printf(\输出结果: &a=1310584 printf(\输出结果: &b=1310576

printf(“&c=%d\\n”,&c); //输出结果:&c=1310572 printf(“p=%d\\n”,p); //输出结果: p=1310584 printf(“oxp=%x\\n\

printf(“*p=%d\\n\ //输出结果:*p=10 *p=*p+1;

printf(“a=%d\\n\ //输出结果:a=11 printf(“*p=%d\\n\ //输出结果:*p=11 a=a+1;

printf(“a=%d\\n\ //输出结果: a=12 printf(“*p=%d\\n\ //输出结果: *p=12

四、 写程序

1.用循环函数计算n!。 #include void main() {

int i=1,n; float max=1;

printf(\ scanf(\ if(n<0); {

printf(\!\ } else {

do {

max*=1; i++; }

while(i<=n);

printf(\ } }

2.用递归函数计算n!. #include float fac(int n); void main

{

int n;

printf(\ scanf(\ if(n<0); {

printf(\ } else {

printf(\ }

float fac(int n) {

float f i

if(n==0 11 n==1) f=1; else

f=fac(n-1)*n; return(f); } 2.编程计算?i。

i?1n#include void main() {

int i=1.sum=0; int n;

printf(\ scanf(\ do {

sum+=i; i++; }

while(i<=n);

printf(\}

3.编程计算?i。

i?1n #include #include void main()

{

int i=1.sum=0; float sum=0;

printf(\ scanf(\ do {

sum+=sqrt(i) i++; }

while(i<=n);

printf(\}

4.读懂下列程序,写出冒泡排序子函数。 void sort(int [ ],int); void main( ) { int i,array[10]={3,4,-5,5,11,-1,2,8,1,0}; sort(array,10); //调用排序函数 for(i=0; i

void sort(int a[],int size) /*冒泡排序*/ {

int i,temp,pass;

for(pass=1;pass

for(i=0;i

if(a[i]>a[i+1]) {

temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; } } } }

5. 从键盘输入一个数n,判断n是否是素数。 #include #include int main() {

int i,k,n;

printf(\ scanf(\ k=sqrt(n);

if(n==0 11 n==1) {

printf(\ else {

for(i=2,i<=k,i++) {

if(n%i==0) break; }

if(i

printf(\ else

printf(\ } } }

6. 编写程序输出1~1000之间的偶数,要求屏幕显示时4个偶数一行,每个数占5位,左

对齐。 #include void main() {

int i,j;

for(i=1,j=1,i<=1000,i++) {

if(i%2==0) {

printf(\ j++; if(j%4==0) {

printf(\ } } } }

7. 输入一行字符(字符数组的个数为50),统计其中单词个数。 #include #include int main() {

char str[50]; int word; int n=0; int i;

printf(\ gets(str);

for(i=0;i<50;i++) {

if(str[i]==' ') {

word=1; }

if(word) {

n++; word=0; } }

printf(\ system(\ return o; }

8. 用数组求Fibonacci数列的前20项。

?F1?1(n?1)?Fibonacci数列公式:?F2?1(n?2)?F?F?F(n?3)n?1n?2?n#include

void main() {

int i;

int f[20]={1,1} for(i=2;i<20;i++) f[i]=f[i-1]+f[i-2]; for(i=0;i<20,i++) {

if(i%5==0) printf(\

printf((\ }

printf(\}

9.编写一个程序,定义一个二维数组a[2][3]={{2,4,6},{8,10,12};将数组a按列的顺序的输出。

#include viod main() {

int a[2][3]={{2,4,6},{8,10,12}}; int b[3][2],i,j; for (i=0;i<=1;i++) {

for(j=0;j<=2;j++) {

} }

printf(\ for(i=0;i<=2;i++) {

for(j=0;j<=1;j++) {

printf(\ printf(\ } }

b[j][i] =a[i][j];

#include viod main() {

int a[2][3]={{2,4,6},{8,10,12}}; int b[3][2],i,j; for (i=0;i<=1;i++) {

for(j=0;j<=2;j++) {

} }

printf(\ for(i=0;i<=2;i++) {

for(j=0;j<=1;j++) {

printf(\ printf(\ } }

b[j][i] =a[i][j];

本文来源:https://www.bwwdw.com/article/28u8.html

Top