文档库 最新最全的文档下载
当前位置:文档库 › C程序习题

C程序习题

C程序习题
C程序习题

《C程序设计》单元练习(基本概念、顺序结构)

一、选择题

1、C语言程序的基本单位

(1)程序行(2)语句(3)函数(4)字符

2、下列说法中正确的是

(1)C语言程序总是从第一个定义的函数开始执行。

(2)在C语言程序中要调用的函数必须在main()函数中定义

(3)C语言程序总是从main()函数开始执行

(4)C语言程序中的main()函数必须在程序的开始部分

3、设有语句int a=3,则执行语句a+=a-=a*a以后变量a的值是

(1)3 (2)0 (3)9 (4)-12

4、在C语言中,要求运算数必须是整数的运算符是

(1)% (2)/ (3)< (4)1

5、C语言中最简单的数据类型包括

(1)整型、实型、逻辑型(2)整型、实型、字符型

(3)整型、字符型、逻辑型(4)整型、实型、逻辑型、字符型6、C语言提供的合法的数据类型关键字是

(1)double (2)short (3)integer (4)char

7、合法的C语言字符常量是

(1)‘t’(2)“A”(3)65 (4)A

8、在C语言中,合法的字符常量是

(1)‘\084’(2)‘\X43’(3)‘ab’(4)“\0”9、设有语句cher a=‘\72’,则变量a是

(1)包含1个字符(2)包含2个字符

(3)包含3个字符(4)说明不合法

10、以下程序的输出结果是

main(){ int i=010 ,j=10;

printf(“%d,%d\n”,++i,j--);}

(1)11、10 (2)9、10 (3)010,9 (4)10,9 11、下面程序的输出是

main()

{ unsigned a=32768;

print(“a=%d\n”,a);}

(1)a=32768 (2)32767 (3)a=-32768 (4)a=-1 12、设X,Y,Z和K是int型变量,则执行表达式:X=(Y=4,Z=16,K=32)后,X的值为

(1)4 (2)16 (3)32 (4)52

13、设有如下定量定义:则下列符合C语言语法的表达式为

int i=8,K,a,b;

unsigned long w=5; double x=1.42,y=5.2;

(1) a+=A-=(b=4)*(a=3) (2) x%(-3) (3)a=a*3=2 (4) y=float(i) 14、若有如下定义变量:

int k=7,x=12;则能使值为3的表达式是

(1)X%=(K%=5)(2)X%=(K-K%5)

(3)X%=K-K%5 (4)(X%=K)-(K%=5)

15、以下叙述中正确的是

(1)输入项可以是一个实型常量例如:scanf(“%f”,3.5);

(2)只有格式控制,没有输入项,也能正确输入数据到内存。例如:scanf(“a=%d,b=%d”);

(3)当输入一个实型数据时,格式控制部分可以规定小数点后的位数,例如:scanf(“%7.2f”,&f);

(4)当输入数据时,必须指明变量的地址,例如:scanf(“%f”,&f);

16、执行以下语句:x+=y;y=x-y;x-=y;的功能是

(1)把x和y按从大到小排列(2)把x和y按从小到大排列(3)无确定结果(4)交换x和y中的值

17、以下程序的输出结果是

main()

{ int a=12, b=12;

printf(“%d %d\n”,--a,++b);}

(1)10 10 (2)12 12 (3)11 10 (4)11 13 18、若有以下程序段,其输出结果是

int a=0,b=0 C=0;

C=(C-=a-5),(a=b,b+3);

printf(“%d,%d,%d\n”,a,b,c)

(1)3,0,-10 (2)0,0,5 (3)-10,3,-10 (4)3,0,3 19、当运行以下程序时,在键盘上从第一列开始输入9876543210

main()

{ int a;

float b,c;

scanf(“%2d%3f%4f”,&a,&b,&c);

printf(“\na=%d,b=%f,c=%f\n”,a,b,c); } (1)a=98,b=765,C=4321 (2)a=10,b=432,c=8765

(3)a=98,b=765.000000,c=4321.000000 (4)a=98,b=765,c=4321.0 20、若int 类型占两个字节,则以下程序段的输出结果是

int a=-1;

printf(“%d,%u\n”,a,a);

(1) –1,1 (2) –1,32767 (3) –1,32768 (4) –1,65535 21、以下程序段的输出结果是

main() { int a=2,b=5;

printf(“a=%%d,b=%%d\n”,a,b); }

(1) a=%2,b=%5 (2) a=2,b=5 (3) a=%%d,b=%%d (4) a=%d,b=%d 22、若a,b,c,d都是int类型变量且初值为O,以下选项中不正确的赋值

语句是

(1)a=b=c=100;(2)5++;(3)c+b; 4)d=(c=22)-(b++);23、以下合法的C语言赋值语句是

(1)a=b=58 (2)k=int(a+b);(3)a=58,b=58 (4)--i;24、以下程序的输出结果是

main() { int w=4,x=3,y=2,z=1;

printf(“%d\n”,(w

(1)1 (2)2 (3)3 (4)4

25、 下列程序的输出结果是

main()

{ double d=3.2; int x,y;

x=1.2; y=(x+3.8)/5.0;

printf("%d \n", d*y);

}

1) 3 2) 3.2 3) 0 4) 3.07

26、 在C 语言中,合法的长整型常数是

1) OL 2) 4962710 3) 324562& 4) 216D

27、假定x 和y 为double 型,则表达式x=2,y=x+3/2的值是

1) 3.500000 2) 3 3) 2.000000 4) 3.000000

28、 设正x 、y 均为整型变量,且x=10 y=3,则以下语句的

输出结果是

pprintf("%d,%d\n",x--,--y);

1) 10,3 2) 9,3 3) 9,2 4)10,2

29、x 、y 、z 被定义为int 型变量,若从键盘给x 、y 、z 输入

数据,正确的输入语句是

1) INPUT x 、y 、z; 2) scanf("%d%d%d",&x,&y,&z);

3) scanf("%d%d%d",x,y,z); 4) read("%d%d%d",&x,&y,&z);

30、下列不正确的转义字符是

1)'\\' 2)'\" 3)'74' 4)'\ddd'

31、执行下面程序中的输出语句后,a 的值是

main( )

{

int a;

printf(“%d \n”,(a=3 * 5,a * 4,a + 5)); }

① 65 ② 20 ③ 15 ④ 10

32、在一个C 语言程序中

1) main 函数必须出现在所有函数之前 2) main 函数可以在任何地方出现

3) main 函数必须出现在所有函数之后 4) main 函数必须出现在固定位置

二、编制程序

1、若a=3,b=4,c=5,x=1.2,y=2.4,Z=-3.6,u=51274,n=128765,cl=’a ’,

c2=’b ’。若想得到以下的输出格式和结果(见结论),请写出程序。

a=3 b=4 c=5

x=1.200000,y=2.400000,z=-3.600000

x+y=3.60 y+z=-1.20 z+x=-2.40

u=51274 n=128765

cl=ˊa ˊor97(ASCII)

cl=ˊb ˊor98(ASCII)

2、输入一个华氏温度,要求输出摄氏温度。公式为:

)32(95-=

F c 输出要有文字说明,取2位小数。

班级: 姓名: 学号:

《C程序设计》单元练习(选择结构)

一、选择题

1、在if后一对圆括号中表示a不等于0的关系,则能正确表示这一关系的

表达式为________

(1)a<>0 (2)!a (3)a=0 (4)a 2、以下程序段中不能根据x值正确计算出y值的是

(1)if(x>0) y=1; (2)y=0;

else if(x==0) y=0; if(x>0) y=1;

else y=-1; else if(x<0) y=-1;

(3)y=0; (4)if(x>=0)

if(x>=0); if(x>0) y=1;

if(x>0) y=1 ; else y=0;

3、有以下程序

main()

{ int a=15,b=21,m=0;

switch(a%3)

{ case 0:m++;break;

case 1:m++;

switch(b%2)

{ default:m++;

case 0:m++;break; } }

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

程序运行后的输出结果是

(1)1 (2) 2 (3) 3 (4)4 4、以下程序的输出结果是

main()

{ int a=4,b=5,c=0,d;

d=!a&&!b||!c;

printf("%d\n",d); }

(1)1 (2)0 (3)非0的数(4)-1 5、表达式“0?(0?3:2):(10?1:0)”的值为。

(1)3 (2)2 (3)1 (4)0

6、若变量已正确定义,那么以下语句段的输出结果是

x=0;y=2;z=3;

switch(x)

{ case 0: switch(y==2)

{ casa 1: printf(“*”);break;

case 2: printf(“%”);break; } case 1: switch(z)

{ case 1: printf(“$”);

case 2: printf(“*”);break;

default: printf(“#”);

} }

(1)%$ (2)#* (3)*# (4)**$

7、执行下列语句后,C的值是。

int a,b,c,m=1,n=0;

a=(- -m= =n++)?- -m:++n;

b=m++;c=- -n;

(1)0 (2)1 (3)2 (4)-1

8、设实型变量为f1、f2、f3、f4的值分别为4,3,2,1整型变量ml、m2

的值为1。表达式“(ml=fl>f2)&&(m2=f3

(1)0 (2)1 (3)2 (4)出错

9、若执行以下程序时从键盘上输入3和4,则输出结果是。

main()

{ int a,b,s;

scanf(“%d%d”,&a,&b); s=a;

if(a

s*=s;

printf(“%d/n”,s);}

(1)14 (2)16 (3)18 (4)20 10、下面的程序片段所表示的数学函数关系是。

y=-1;

if(x!=0)

if(x>0) y=1;

else y=0;

- 1(x<0) 1 (x<0) (1)y= 0 (x=0) (2)y= -1 (x=0)

1(x>0) 0 (x>0)

0(x<0)-1 (x<0) (3)y= -1 (x=0) (4)y= 1 (x=0)

1(x>0) 0 (x>0)

11、有如下条件表达式,若a=2、b=4、c=5 、d=7则表达式的值为。

a >

b ? a :

c >

d ? c : d

(1) 2 (2) 4 (3) 5 (4)7

12、有如下表达式,若a=2、b=3、c=5、d=4、m和n的原值为8,则m、n的

值分别为。

(m = a > b)&& (n = c > d)

(1)8 8 (2)8 1 (3)0 8 (4)0 1

13、把下面数学表达式,表示成C语言表达式。

-5 ≤ x < 10

(1)-5 ≤ x < 10 (2)x ≥ -5 && x < 10

(3)x >= -5 && x < 10 (4)-5 =< x, x < 10

14、已知grade=’B’,则下列程序段的运行结果为。

switch(grade)

{case …A? : printf (“85~100\n”); break;

case ?B?: printf (“70~84”);

case ?C?: printf (“60~69\n”); break;

default: printf (“error\n”); }

(1)70~84 (2)60~69 (3)85~100 (4)70~84 60~69

二、编程题

1、有一函数:

x (-5

y= x-1 (x=0)

x+1 (0

编写一程序,要求输入x的值(x为整型),输出y的值。

分别用(1)if语句(2)switch语句

2、从键盘输入一个年份,判断是否为闰年。

班级:姓名:学号:

《C程序设计》单元练习(循环结构)

一、选择题

1、对以下for循环,叙述正确的是

for(x=0,y=0;(y!=123)&&(x<4);x++,y++);

(1) 是无限循环(2) 循环次数不定(3) 执行了4次(4) 执行了3次

2、若有程序段:

x=99;

while(x-2)x--;则循环结束时,x= 。

(1)99 (2)2 (3) 1 (4)0

3、下列程序段的执行结果是输出。

x=3;

do

printf(″%2d″,x--);

}while(!x);

(1) 3 2 1 (2)3 (3)2 1 (4)2 1 0 4、执行下列程序后,i的值是。

int i,x;

for(i=1,x=1;i<20; i++)

{if (x>=10) break;

if(x%2= =1)

{x+=5; continue; }

x-=3;

(1) 4 (2)5 (3)6 (4)7

5、以下程序段输出结果是

main()

{ int k,j,s;

for(k=2;k<6;k++,k++)

{ s=1;for(j=k;j<6;j++) s+=j;}

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

(1)9 (2)1 (3)11 (4)10

6、以下程序段的输出结果是

int x=3

do

{ printf(“%3d”,X-=2);}

while(!(--x));

(1)1 (2)3 0 (3)1 -2 (4)死循环7、以下正确的是

(1)do—while语句构成的循环不能用其它语句构成的循环来代替。

(2)do—while语句构成的循环只能用break语句退出

(3)用do—while语句构成循环时,只有在while后的表达式非零时结束循环

(4)用do—while语句构成循环时,只有在while后的表达式为零时结束循环

8、以下程序的输出结果是

main()

{

int x,i;

for(i=1; i<=100; i++)

{ x=i;

if(++x%2==0)

if(++x%3==0)

if(++x%7==0)printf(“%d”,x);}

printf(“\n”);

}

(1)39 81 (2)42 84 (3)26 68 (4)28 70

二、填空题

1、执行语句:for(i=1;i++<4;);后变量i的值是

2、以下程序的功能是:从键盘上输入若干个学生的成绩,统计并输出最高成

绩和最低成绩当输入负数时,结束输入,请填空。

main()

{ `float x ,amax,amin;

scanf(“%f”,&x);

amax=x;amin=x;

while( )

{ if(x>amax)amax=x;

if( )amin=x;

scanf(“%f”,&x);}

printf(“\namax=%f\namin=%f\n”,amax,amin);

}

3、PI函数可根据下面公式,计算精度满足eps时的值。请填空。

PI/2=1+1/3+1/3×2/5+1/3×2/5×3/7+1/3×2/5×3/7×4/9+……

main( )

{ double s=0.0,t=1.0 , eps=1E-6 ; int n;

for(;t>eps;n++)

{ s+=t;t= }

printf ( “PI=%f ”,(2.0* ));}

4、有如下一段程序,下面程序的运行结果为________________.

main()

{ int y=12;

for(;y>0;y--)

{ if(y%3= =0)

{ printf(“%d,”,--y);

continue;} } }

5、源程序如下,下面程序的运行结果为________________.

main()

{int i;

for(i=10; i<100;i++)

if(i%7= =0&&i%3!=0)

printf(″%4d″,i);}

三、编程题:

1、请编写输出以下图案的程序

A

BBB

CCCCC

DDDDDDD

EEEEEEEEE

2、求

∑=201!n n (即求1!+2!+3!+4!+。。。+20!)

3、打印出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数

字立方和等于该数本身。例如,153是一水仙花数,因为333351153++=。

班级: 姓名: 学号:

《C程序设计》单元练习(数组)

一、选择题

1.假设int 型变量占两个字节的存储单元,若有以下定义,则数组x在

内存中所占字节数为 int x[10]={0,2,4};

3 6 ● 10 ? 20

2.若给出以下定义,则正确的叙述是

char m[ ]=”abcde”;

char n[ ]={‘a’,’b’,’c’,’d’,’e’};

数组m的长度大于数组n的长度 数组m和数组n的长度相同

●数组m和数组n等价?数组m的长度小于数组n的长度

3.以下一维数组a的正确定义是

int a(10); int n=10, a[n];

● int n;scanf(“%d”,&n);int a[n];? #define SIZE 10 int a[SIZE];

4.在定义 int a[5][4]; 之后,对a的正确引用是

a[2][4] a[5][0] ● a[0][0] ? a[0,0]

5.若有定义语句:则输出结果是

char s[10]; s=”abcd”; printf(“%s\n”,s);

输出 abcd 输出 a ●出现编译错误?输出 bcd

6.以下程序段的输出结果是

char str[ ]=”ab\n\012\\\””; printf(“%d\n”,strlen(str));

12 6 ● 4 ? 3

7. 调用函数strlen(“abcd\0ef\0g”)的结果是

4 6 ● 11 ? 7

8.下列程序的执行结果是

main( )

{ int I,k,a[10],p[3];

k=5;

for(I=0;I<10;I++) a[I]=I;

for(I=0;I<3;I++) p[I]=a[I*(I+1)];

for(I=0;I<3;I++) k+=p[I]*2;

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

20 21 ● 22 ? 23

9. 以下程序的执行结果是

#include “string.h”

void main( )

{ char s[20]=”hello\0\t\’\\”;

printf(“%d %d\n”,strlen(s),sizeof(s)); }

9 9 5 20 ● 13 20 ? 20 20

二、填空题:

1.下列程序的执行结果是

#include

main( )

{ int a[ ]={1,2,3,4},m,n,s=0;

n=1;

for(m=3;m>=0;m--)

{ s=s+a[m]*n;

n=n*10; }

printf(“s=%d\n”,s); }

2、下列程序的执行结果是

#include

void main( )

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

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

m=m*a[i][i];

printf(“m=%d\n”,m); }

3、下列程序的执行结果是

void main( )

{ int b[4][4]={{1,3,5},{2,4,6},{3,5,7}};

printf(”%d,%d,%d\n”,a[0][3],a[1][2],a[2][1],a[3][0]); }

4. 运行下面程序后,若从键盘输入:

good↙

good?↙

则程序的输出结果是

#include

void main( )

{ char s1[30],s2[30];

gets(s1);gets(s2);

if(!strcmp(s1,s2)) printf(“*”);

else printf(“#”);

printf(“%d\n”,strlen(strcat(s1,s2))); }

5. 下列程序的输出结果是

#include

void main( )

{ char str[30];

strcpy(&str[0],”NEXT”);

strcpy(&str[1],”OR”);

strcpy(&str[2],”TICE”);

printf(“%s\n”,str); }

6. 下列程序的输出结果是

#include

void main( )

{ char w[ ] [10]={ “ABCD”, “EFGH”, “IJKL”, “MNOP” };

int k;

for (k=1;k<3;k++)

printf(“%s\n”,&w[k][k]); }

7. 下列程序的输出结果是

#include

void main( )

{ char arr[2][4];

strcpy(arr, “you”);

strcpy(arr[1], “me”);

arr[0][3]=’&’;

printf(“%s\n”,arr); }

8. 已知a数组中的数,按由小到大的顺序存放,下列程序把a数组中相同的

数删得只剩下一个,然后以每行5个数的形式输出a数组中的数,请填空。

#include

#define MAX 20

void main( )

{ int a[MAX],i,j,n;

for(i=0;i

n=i=MAX-1;

while(i>0)

{ if(a[i]==a[i-1])

{ for (j= ;j<=n;j++) a[ ]=a[j];

n--; }

i--; }

for(i=0;i<=n;i++)

{ if( ) printf(“\n”);

printf(“%3d”,a[i]); }

printf(“\n”); }

9. 下面程序的功能是将一个字符串按逆序存放,请填空。

#include

#include

void main( )

{ char st[50],m;

int i,j; gets(st);

for( i=0;j=strlen(st);i< ;i++,j--)

{ m=st[i];

st[i]= ; =m; }

printf(“%s\n”,st); }

10.下列程序是对从键盘输入的两个字符串进行比较,然后输出两个

字符串中第一个不相同字符的ASCII码之差,例如:输入的两个字符

串分别为:aab和aacc, 则输出-1.请填空。

#include

void main( )

{ char st1[50],st2[50],c; int n,diff;

printf(“\n 请输入第一个字符串:\n”); gets(st1);

printf(“\n 请输入第二个字符串:\n”); gets(st2);

n=0;

while((st1[n]==st2[n]) && (st1[n]!= ))

n++; diff= ; printf(“%d\n”,diff); }

11.下面程序可以把输入的十进制数以十六进制数的形式输出, 请填空。

void main( )

{ char b[17]={ “0123456789ABCDEF”};

int c[64],d,i=0,base=16;

long n;

printf(“Enter a number:\n ”);

scanf(“%ld”,&n);

do { c[i]= ; i++;n=n/base;} while(n!=0);

printf(“Transmite new base:\n”);

for(--i;i>=0;--i)

{ d=c[i]; printf(“%c”,b ); }

printf(“\n”); }

三、编制程序

1、在歌手大奖赛中有10名评委打分,分数采用百分制,歌手的最后得分是:

班级:姓名:学号:

《C程序设计》单元练习(函数)

一、选择题

1、以下不正确的描述为

(1)不同函数中可以使用相同名字的变量;

(2)形参是局部变量;

(3)一个函数内部定义的变量只能在本函数范围内有效

(4)在一个内部的复合语句中定义的变量可以在本函数范围内有效

2、以下函数的类型是

fff(float x)

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

(1)与参数X的类型相同(2)void型

(3)int类型(4)无法确定

3、以下函数调用语句中,含有的实参个数是

func((exp1,exp2),(exp3,exp4,exp5));

(1)1 (2)2 (3)4 (4)5

4、以下程序的输出结果是

func(int a,int b)

{ int c;

c=a+b;

return c;}

main()

{ int x=6,y=7,z=8,r=0;

r=func((x--,y++,x+y),z--);

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

(1)11 (2)20 (3)21 (4)31 5、以下程序的输出结果是

func(int a,int b,int c)

{ c=a*b;}

main()

{ int c;

fun(2,3,c);

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

(1)0 (2)1 (3)6 (4)无确定值

6、以下程序的输出是

double f(int n)

{ int i;double s;s=1.0;

for(i=1;i<=n;i++)s+=1.0/i; return s;}

main( )

{ int i,m=3;float a=0.0;

for(i=0;j

(1)5.500000 (2)3.000000 (3)4.000000 (4)8.25 7、若x为int型变量,则以下函数fun的类型为()

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

(1) 返回值为void类型 (2) 无法确定返回值

(3) 返回值为int类型 (4) 无返回值

8、以下叙述正确的是

(1)C程序中各函数之间既允许直接递归调用,也允许间接递归调用;(2)C程序中各函数之间不允许直接递归调用,也不允许间接递归调用;(3)C程序中各函数允许直接递归调用,不允许间接递归调用;

(4)C程序中各函数之间不允许直接递归调用,允许间接递归调用。

9、C语言中,形参缺省的存储类别是

(1)auto(自动)(2)static(静态)

(3)register(寄存器)(4)extern(外部)

10、以下叙述中不正确的是

(1)一个变量的作用域完全取决于变量定义语句的位置

(2)全局变量可以在函数以外的任何部位进行定义

(3)局部变量的“生存期”只限于本次函数调用,因此不可能将局部变量的运算结果保存至下一次调用。

(4)一个变量说明为static存储类别是为于限制其它编译单位的引用。

11、在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是(1)地址传递(2)单向值传递

(3)由实参传给形参,再由形参传回实参(4)传递方式由用户指定12、C语言中函数能否嵌套调用和递归调用?

(1)二者均不可(2)前者可,后者不可

(3)前者不可,后者可(4)二者均可以

13、有以下程序

char fun(char x , char y)

{ if(x

return y;

}

main( )

{ int a='9',b='8',c='7';

printf("%c\n",fun(fun(a,b),fun(b,c)));

}

程序的执行结果是

(1)函数调用出错(2)8 (3)9 (4)7

二、填空题:

1、以下程序的输出是

unsigned fun6(unsigned num)

{ unsigned k=1;

do

{ K*=num%10;num/=10;}

while(num);

return k;}

main(){

unsigned n=26;

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

2、以下程序的输出结果是

double sub(double x,double y,double z)

{ y-=1.0; z=z+x; return z ;}

main()

{ double a=2.5, b=9.0;

printf(“%f\n”,sub(b-a,a,a));

}

3.以下程序段的输出结果是

fun1(int a,int b)

{ int c;

a+=a;b+=b;

c=fun2(a,b);

return c*c; }

fun2(int a,int b)

{ int c;

c=a*b%3;

return c; }

main()

{ int x=11,y=19;

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

4、以下程序段的输出结果是

main(){

int i=2,p;

p=f(i,i+1);

printf(“%d”,p)}

int f(int a, int b)

{ int c;

c=a;

if(a>b) c=1;

else if (a=b) c=0;

else c=-1;

return(c);}

三、编制程序

1、写一函数,使输入的一个字符串按反序存放,在主函数中输入和输出

字符串。

2、写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数

调用这个函数,并输出结果,两个整数由键盘输入。

3、写一函数,使给定的一个二维数组(3*3)转置,既行列互换,主函数

中调用此函数,并完成输入、输出数组。

4、输入10个学生5门课的成绩,分别用函数求:①每个学生平均分;

②每门课的平均分;③找出最高的分数所对应的学生和课程。

5、一函数,用“起泡法”对输入的10个字符按由小到大顺序排列。

班级:姓名:学号:

《C程序设计》单元练习(指针)

一、选择题

1、若有定义: int X,*pb;则以下正确的赋值表达式是

(1)pb=&x (2)pb=x (3)*pb=&x (4)*pb=*x 2、以下程序的输出结果是

main(){ int k=2,m=4,n=6;

int *pk=&k,pm=&m,*p;

*(p=&n)=*pk*(*pm);printf(“%d\n”,n);} (1)4 (2)6 (3)8 (4)10

3、已知指针P的指向如下图所示,则执行*P++;后*P的值是

a[0] a[1] a[2] a[3] a[4]

(1)20 (2)30 (3)21 (4)31 4、以下程序的输出结果是

void sub(int x,int y,int *z)

{ *z=y-x;}

main()

{ int a,b,c;

sub(10,5,&a);sub(7,a,&b);sub(a,b,&c);

printf(“%d,%d,%d\n”,a,b,c);}

(1)5,2,3 (2)-5,-12,-7 (3)-5,-12,-17 (4)5,-2,-7 5、以下程序的输出结果是

void prtv(int *x){ printf(“%d\n”,++*x);}

main( )

{ int k=25; prtv(&k):}

(1)23 (2)24 (3)25 (4)26

6、以下程序的输出结果是

void fun(float *a,float *b)

{ float w;

*a=*a+*a; w=*a; *a=*b; *b=w;}

main()

{ float x=2.0,y=3.0;

float *px=&x,*py=&y;

fun(px,py);

printf(“%2.0f,%2.0f\n”,x,y); }

(1)4,3 (2)2,3 (3)3,4 (4)3,2 7、下程序的输出是

void sub(float x,float *y,float *z)

{ *y=*y-1.0; *z=*z+x;}

main( )

{ float a=2.5, b=9.0 *pa, *pb;

pa=&a; pb=&b;

sub(b-a,pa,pb);printf(“%f\n”,a);}

(1)9.000000 (2)1.500000 (3)8.000000 (4)10.500000

8、以下程序的输出结果是

main()

{ int a[ ]={2,4,6,8},*p=a,i;

for(i=0;i〈4;i++〉 a[i]=*p++;printf(“%d\n”,a[2]);〉(1)6 (2)8 (3)4 (4)2

9、以下程序段的输出结果是

char str[ ]=“ABCD”,*p=str;

printf(“%d\n”,*(p+4));

(1)68 (2)0 (3)字符D地址(4)不确定的值10、若有说明 int i,j=7,*P=&i,则与i=j等价的语句是

(1)i=*P;(2)*P=*&j;(3)i=&j;(4)i=**P;11、设有以下语句,则不是对a数组元素的正确引用。

int a[10]={0,1,2,3,4,5,6,7,8,9 },*p=a,i;

(1)a[p-a] (2)*(&a[i])(3)p[i] (4)*(*(a+i))12、以下程序的输出结果是

main()

{ int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;

printf(“%d\n”,*(p+2);)

(1)3 (2)4 (3)1 (4)2 13、以下程序的输出结果是

main()

{ int a[ ]={2,4,6,8,10},y=1,x,*p;

p=&a[1];

for(x=0;x〈3;x++) y+=*(p+x);printf(“%d\n”,y);}

(1)17 (2)18 (3)19 (4)20

二、填空题:

1、以下程序的输出结果是

int ast (int x,int y,int *cp,int *dp)

{ *cp=x+y; *dp=x-y;}

main(){ int a,b,c,d;

a=4;b=3;ast(a,b,&c,&d);

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

2、下面程序的输出结果是

#include 〈stdio.h〉

void as(int x,int y,int *cp,int *dp)

{ *cp=x+y; *dp=x-y;}

main()

{ int a=4,b=3,c,d;as(a,b,&c,&d);

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

3、下面程序的输出结果是

#include 〈stdio.h〉

int a[ ]={2,4,6,8};

main()

{ int i;

int *p=a;

for(i=O;i〈4;i++〉a[i]=*p++;printf(“%d\n”,a[2]);)

4、设有如下一段程序:

int *var,ab;

ab=100;var=&ab;ab=*var+10;执行上面程序后,ab的值为

5、下面程序的输出结果是

main()

{ int a[5]={2,4,6,8,10},*p,**k;

p=a;k=&p;

printf(“%d”,*(p++));

printf(“%d\n”,**k);}

6、有以下语句,则使指针P指向值为36的数组元素的表达式是

int a[10]={19,23,44,17,37,28,49,36},*p;p=a;

7、下面程序的输出是

#define PR(ar) printf(“%d”,ar)

main()

{ int j,a[ ]={1,3,5,7,9,11,13,15},*p=a+5;

for (j=3;j;j- -)

{ switch(j)

{ case 1:

case 2:PR(*p++):break;

case 3:PR(*(--p));} } }

8、下面程序的输出是

main(){ int y=9;

for(;y>0;y - -)

{ if(y%3= =0) { printf(“%d”,- -y);continue;} } } 9、以下程序的输出结是

main()

{ char s[ ]=“ABCD”,*p;

for(p=s;p〈s+4;p++〉printf(“%s\n”,p); )

10、以下程序的输出结果是

#include“stdio.h”

void fun(char *w,int m)

{ char s,*p1,*p2;

p1=w; p2=w+m-1;

while(p1

{ s=*p1++; *p1=*p2- -; *p2=s;} }

三、编制程序(要求用指针方法处理,程序请书写于背面)

1、输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数:1)输入10个整数;

2)进行处理;

3)输出10个整数。

2、有N个整数,使前面各数顺序向后移M个位置,最后M个数变成最前面M个数。写一函数实现此功能,在主函数中输入N个数和输出调整后的N个数。

3、写一函数,求一个字符串的长度。在主函数中输入字符串并输出其长度。

4、写一函数,将一个3×3的矩阵转置。

班级:姓名:学号:

《C程序设计》单元练习(构造类型、文件)

一、选择题

1. 当定义一个结构体变量时系统分配给它的内存是____。

A. 各成员所需内存的总和。B. 变量第一个成员所需内存容量。C. 成员中占内存量大者所需的容量。D. 变量最后一个成员所需内存容。

2. 当定义一个共用体变量时系统分配给它的内存是____。

A. 各成员所需内存的总和。B. 变量第一个成员所需内存容量。C. 成员中占内存量大者所需的容量。D. 变量最后一个成员所需内存容。

3. C语言中的共用体变量在程序执行期间____。

A. 所有成员驻留在内存中。B. 只有一个成员驻留在内存中。C. 部分成员驻在内存中。D. 没有成员驻留在内存中。

4 以下对结构体变量stu1中成员age的非法引用是______。

struct student

{ char name[10];

int age ;

} stu1 ,*p; p=&stu1;

A. stu1.age B. p->age C. (*p).age *D. student.age

5. 设有以下语句

typedef struct S

{ int g; char h;} T;

则下面叙述中正确的是______。

A.可用S定义结构体变量

B. 可以用T定义结构体变量*

C. S是struct类型的变量

D. T是struct S类型的变量

6. 以下程序的运行结果是______。

#include “stdio.h”

main( )

{ typedef union

{ long i; int k[5]; char c; } DA TE ;

struct date

{int cat ; DA TE cow ; double dog ; } too ;

DA TE max;

printf(“%d\n”, sizeof(struct date)+sizeof(max));

}

A. 30 B. 25 C. 18 D. 8 7. 有以下程序,程序运行后的输出结果是____。

struct s

{ int x,y; } data[2]={10,100,20,200};

main()

{ struct s *p=data;

printf("%d\n",++(p->x)); }

A.10

B.11

C. 20

D. 21

8. C语言中文件的存取方式____。

A. 只能顺序存取B. 只能随机存取(或称直接存取)C. 可以顺序存取,也可随机存取*D. 只能从文件的开头进行存取

9.有以下结构类型说明和变量定义,则指针变量p在内存所占字节数是____。Struct stud

{ char num[6];

int s[4];

double ave;

} a,*p;

A. 2 * B. 24 C. 6 D. 8

10. C语言中,从计算机的内存中将数据写入文件,称为____。

A. 输入B. 修改C. 输出D. 删除

11. 若fp是某文件指针,且已读到文件尾,则表达式feof(fp)的返回值是____。

A. EOF B. -1 C. 非零值D. NULL

12. 若调用fputc函数输出字符成功,则其返回值是____。

A. EOF B. 1 C. 0 D. 输出的字符13. C语言中函数fgets(str,n,fp)的功能是____。

A. 从文件fp中读取长度n的字符串存入str指向的内存

B.从文件fp中读取长度不超过n-1的字符串存入str指向的内存*

C.从文件fp中读取n个字符串存入str指向的内存

D.从串str读取至多n个字符到文件fp

14.若需要打开一个存在的非空文件file进行修改,正确的语句是______。

A. fp=fopen(“file”,”r”);B. fp=fopen(“file”,”a+”);

C. fp=fopen(“file”,”w+”);D. fp=fopen(“file”,”r+”);* 15. 若fp指向某个文件,当未遇到该文件结束标志时函数feof(fp)的值______。

*A . 0 B. 1 C. -1 D. 一个非0值

16. 下列关于C语言数据文件的叙述中正确的是______。

A.文件由ASCII码字符序列组成,C语言只能读写文本文件

B.文件由二进制数据序列组成,C语言只能读写二进制文件

C.文件由记录序列组成,可按数据存放形式分为二进制文件和文本文件

D.文件由数据流组成,可按数据存放形式分为二进制文件和文本文件*

二、填空题:

1. 有以下程序

#include

main( )

{ FILE *fp; int i,k=0,n=0;

fp=fopen(“d1.dat”,”w”);

for(i=1;i<4;i++) fprintf(fp,”%d”,i);

fclose(fp);

fp=fopen(“d1.dat”,”r”);

fscanf(fp,”%d%d”,&k,&n);printf(“%d %d\n”,k,n);

fclose(fp);

} 执行后输出结果是______。

2、以下定义,能输出字母M的语句是

struct person{ char name[9];int age;};

struct person class [10]={“John”,17,

“Paul”,19;

“Mary”,18,

“Adam”,16,};

相关文档