《C程序设计》练习题4

更新时间:2024-01-25 23:32:01 阅读量: 教育文库 文档下载

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

《C程序设计》练习题一

一.选择题

1.以下选项中属于C语言的数据类型是( )。

A. 复合型 B. 双精度型 C. 逻辑型 D. 集合型 2.以下说法中正确的是( )。

A. C语言程序总是从第一个函数开始执行

B. 在C语言程序中,要调用的函数必须在main()函数中定义 C. C语言程序总是从main()函数开始执行

D. C语言程序中的main()函数必须放在程序的开始部分 3.选出下列标识符中不是合法的标识符的是( )。 A. hot_do B. cat1 C. _pri D. 2ab 4.下列描述中不正确的是( )。 A.字符型数组中能存放字符串。

B.可以对字符型数组进行整体输入、输出。 C.可以对整型数组进行整体输入、输出。

D.不能在赋值语句中通过赋值运算符“=”对字符型数组进行整体赋值。 5.表达式:10!=9的值是( )。

A. true B. 非零值 C. 0 D. 1

6.能正确表示a和b同时为正或同时为负的逻辑表达式是( )。

A.(a>=0||b>=0)&&(a<0 ||b<0) B.(a>=0 && b>=0)&&(a<0 && b<0) C.(a+b>0) &&(a+b<=0) D. a*b>0 7.C语言中,合法的字符型常数是( )

A.‘A’ B.“A” C. 65 D. A

8.设有数组定义:char array[]=”China”; 则数组所占的空间是( )

A.4个字节 B.5个字节 C.6个字节 D.7个字节 9.若变量c为char类型,能正确判断出c为小写字母的表达式是( )

A.’a’<=c<=’z’ B. (c>=’a’) || (c<=’z’) C.(‘a’<=c) and (‘z’>=c) D. (c>=’a’) && (c<=’z’)

10.设有定义:long x=-123456L; 则以下能够正确输出变量x值的语句是( A.printf(“x=%d\\n”,x) B.printf(“x=%ld\\n”,x) C.printf(“x=?l\\n”,x) D.printf(“x=%LD\\n”,x); 11.指出下面正确的输入语句( )

A.scanf(“a=b=%d”,&a,&b); B. scanf(“%d,%d”,&a,&b) ; C.scanf(“%c”,c) ; D. scanf(“% f%d\\n”,&f) ; 12.C语言源程序的基本单位是( )。

A. 过程 B. 函数 C. 子程序 D.标识符

13.下列程序的输出结果是( )。

main( )

{ int a=7,b=5; printf(\}

A. 5 B. 1 C. 0 D.不确定值

14.设a为int型变量,执行下列赋值语句后,a的取值分别是( )。

a=125.534; a=(int)125.521%4;

A. 125,31 B. 125,1 C. 125,31 D. 125.534,2 15.设有如下程序段,下面描述中正确的是 ( )。

int k=10; while(k=0) k=k-1;

A. 循环执行一次 B.循环是无限循环 C.循环体语句一次也不执行 D.循环体语句执行一次 16.以下程序的输出结果为( )。 main( )

{ int i=010,j=10; printf(\ }

A. 11,9 B. 9,10 C. 8,10 D. 9,9 17.设i和k都是int类型,则for循环语句( ) for(i=0,k=-1;k=1;i++,k++) printf(\A. 循环结束的条件不合法 B. 循环体一次也不执行 C. 循环体只执行一次 D. 是无限循环 18.下列说法不正确的是( )

A. 主函数main中定义的变量在整个文件或程序中有效 B. 不同函数中,可以使用相同名字的变量 C. 形式参数是局部变量

D. 在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效 19.设a为整型变量,初值为12,执行完语句 a+=a-=a*a后,a的值是( )。 A. 552 B. 144 C .264 D. -264

20.下列标识符中,不能作为合法的C用户定义标识符的是( )。 A. a3_b3 B. void C. _123 D. IF

21.下列整数值中,不正确的八进制或十六进制数值常量是( )。 A. 0xcd B. -017 C. 019 D. 0xfdc

22.在C语言中,if语句后的一对圆括号中,用以决定分支流程的表达式为( )。 A. 只能是逻辑表达式 B.只能是关系表达式 C.只能是逻辑表达式或关系表达式 D.可以是任意表达式 23.以下程序的输出结果为( )

main( ) { char c; int i;

for(i=65;i<68;i++) { c=i+32; switch(c)

{ case ‘a’:printf(\ case ‘b’:case ‘e’:printf(\default: printf(\} } }

A. a,ok,end B. a,ok,endend C. a,ok,end,end D. a,ok,ok

24.a,b为整型变量,二者均不为0,以下关系表达式中恒成立的是( ) (A) a*b/a*b==1 (B) a/b*b/a==1 (C) a/b*b+a%b==a (D) a%b*b==a

25.为表示关系x≥y≥z,应使用C语言表达式( ) A.(x>=z)&(y>=z) B. (x>=y) AND (y>=z) C.(x>=y>=z) D. (x>=y)&&(y>=z) 26.设 int a=12; 表达式a+=a-=a*=a的值是( )。 A. 12 B. 144 C. 0 D. 132 27.以下程序的输出结果是( )。

main( ) { int a=011;

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

A. 12 B. 11 C. 10 D. 9 28.若k为整型,则while循环执行( )次。

k=2;

while(k==0)

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

A. 2 B. 9 C. 0 D. 1 29.以下程序:

int a=5; float x=3.14; a*=x*(‘E’ - ‘A’);

printf(“%f\\n”,(float)a); 的输出结果是()

A. 62.000000 B. 62.800000 C. 63.000000 D. 62 30.设有如下定义: int x=10,y=3,z;

则语句printf(\的输出结果是( ) A. 1 B. 0 C. 4 D. 3 31.以下的 for 循环( )

for(x=0,y=0;(y!=123)&&(x<4);x++) ; (A) 执行 3 次 (B) 执行 4 次

(C) 循环次数不定 (D) 是无限循环 32. 设有如下定义:

int a=1,b=2,c=3,d=4,m=2,n=2;

则执行表达式:(m=a>b)&&(n=c>d)后,n的值为( ) A)1 B)2 C)3 D)0

33. 在C语言中,要求运算数必须是整型的运算符是( )

A) % B) / C) < D) ! 34. 以下说法中正确的是( )

A) #define和printf都是C语句 B) #define是C语句,而printf不是 C) printf是C语句,但#define不是 D) #define和printf都不是C语句 35.设整型变量a为5,使b不为2的表达式是( )。 A. b=a/2 B. b=6-(--a) C. b=a%2 D. b=a>3?2:1

36.为了避免嵌套的条件分支语句if-else的二义性,C语言规定:C程序中的else总是与 ( )组成配对关系。

A. 缩排位置相同的if B. 在其之前未配对的if C. 在其之前未配对的最近的if D.同一行上的if 37.下列标识符中不是合法的标识符的是( )。 A. IF B. cat1 C. _pri D. #ab

二.判断题

1.在Turbo C中,实型数据在内存中占4个字节。( ) 2.019是一个合法的整型常量。( )

3.若有宏定义:#define PI 3.14i5926,则系统预编译时会报错。( ) 4.函数的递归调用不过是一个函数直接或间接地调用它自身。( ) 5.定义在main函数后的任何函数都需在main中进行函数声明。( ) 6.若有定义:int a;则scanf(“%d\可以给变量a赋值。( )

7. C 语言源程序文件通过了编译、连接之后 , 生成一个后缀为 .EXE 的文件。 ( ) 8.在 C 程序中, APH 和 aph 代表不同的变量。( ) 9.表达式 0195 是一个八进制整数。( ) 10.表达式 _ya是不合法的C语言标识符。( )

11.C程序总是从main( ) 函数的第一条语句开始执行的。 ( ) 12.a-=7等价于a=a-7。 ( )

13.执行printf(\输出 12345 。( ) 14.int i=20; switch(i/10) {case 2:printf(\case 1:printf(\}

的输出结果为A。( )

15.break语句用在循环体中,可结束本层循环,continue语句用在循环体中,可结束本次循环。( )

16.在Turbo C中,整型数据在内存中占2个字节。( ) 17.表达式1/4+2.75的值是3。( )

18.对整型变量可进行自加或自减运算,而对常量或表达式不可以。( ) 19.算术运算符和赋值运算符的结合方向均从左到右。( )

20.在循环过程中,使用break语句和continue语句的作用是一样的。( ) 21.C语言中数据类型只有整型、实型和字符型。 ( )

22.当函数类型与return 表达式;中表达式的类型不一致时,以函数类型为准。( ) 23.从循环体中退出只能使用goto语句。 ( )

24.Continue语句的作用是继续程序中的下一个循环。( )

三.填空题

1.设x的值为15,n的值为2,则表达式x%=(n+=3)运算后,x的值为( )。

2.设 int a=7,b=9,t;执行完表达式t=(a>b)?a:b后,t的值是( )。 3.( )是构成C语言源程序的基本单位。

4.a数组定义如下,按照内存排列顺序,a数组中的所有元素是( )。 char a[3];

5.C语言中基本的数据类型有:整型、( )、字符型。 6选择结构语句有( ),( )两种语句。 7.C语言的预处理语句以( )开头。 8.表达式7+8>2 && 25 %5的结果是( )。

9.实型变量的类型说明符有:( )、( )。

10.C语言用函数( )和( )实现单个字符的输入和输出 11.结构化程序设计用到的三种程序结构是( )、选择结构和( 12.C语言表达式 5>2>7>8 的值是( )。

四.程序填空题

1.下列程序段是从键盘输入的字符中统计数字字符的个数,用‘#’结束循环。 int n=0, ch; ch=getchar( );

while( (1) )

{ if ( (2) ) n++; c=getchar( ); } 2.求矩阵的主、次对角线之和。 main()

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

int i,j,s1=0,s2=0; for(i=0;i<3;i++) for(j=0;j<3;j++)

{if( (3) ) s1=s1+a[i][j];

if((4) ) s2=s2+a[i][j]; }

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

3.从键盘上输入10个数放入一维数组,然后求其平均值。 main() {int i;

float a[10], sum,avg; for(i=0;i<10;i++)

(5) ;

) (6) ; for(i=0;i<10;i++)

(7) ; (8) ; printf(“average=%f\\n”,avg); }

4.用选择排序法对任意10个整数按照由小到大排序。

main()

{ int a[11],i,j,k,t;

printf(\ for(i=1;i<11;i++) scanf(\ printf(\ for(i=1;i<=9;i++)

{ (9) ;

for(j=i+1; (10) ;j++)

if(a[j]>a[k]) k=j;

if( (11) )

{ t=a[k]; a[k]=a[i]; a[i]=t;} }

printf(\

for(i=1;i<11;i++) printf(\

5.百马百担问题:有100匹马,驮100担货,大马驮3担,中马驮2担,两匹小马驮1担,问大、中、小马各多少匹?

main( )

{ int hb,hm,hl,n=0; for(hb=0;hb<=100;hb+=3 )

for(hm=0;hm<=100-hb;hm+= (13) ) { hl=100-hb- (14) ;

if(hb/3+hm/2+2* (15) ==100) { n++;

printf(\ } }

printf(\ }

6.试求出1000以内的“完全数”。(提示:如果一个数恰好等于它的因子之和(因子包括1,不包括数本身),则称该数为“完全数”。如:6的因子是1、2、3,而6=1+2+3,则6是个“完全数”。) main() {

int i,a,m;

for(i=1;i<1000;i++) {

for(m=0,a=l;a<=i/2;a++)

if( (i%a)==0) (16) ; if( (17) ) printf(\ } }

7.用“起泡法”对输入的10个字符排序后按从小到大的次序输出。 #define N 10 char str[N]; main() {

int i,flag; for(i=0;i<10;i++) scanf(\ sort(_(18) __); for(i=0;i

sort(char str[N]) { int i,j; char t;

for(j=1;j

if(str[i]> (19) ) { t=str[i];

_(20)__ _________;

_(21)____ _______; } }

8.求100~200间的全部素数。

#include (22) main()

{ int m,k,i,n=0; for(m=101;m<=200;m+=2) { k=sqrt(m);

for(i= (23) ;i<=k;i++) if(m%i==0) (24) ; if(i== (25) )

{ printf(\;n++;} } }

9.用选择法对数组中的10个字符按由大到小排序。

void sort( (26) ) { int i,j,k;

char t;

for (i=0;i

if ( (28) ) k=j; t=a[k];a[k]=a[i];a[i]=t;} } main( ) { char s[10];

int i;

for(i=0;i<10;i++) scanf(“%c”,&s[i]); (29) ; printf(“the sorted array:\\n”); for(i=0;i<10;i++) printf(“%c”,s[i]); printf(“\\n”); }

}

五.写出程序运行结果

1.int x=6, y=7;

printf(“%d,”,x++); printf(“%d\\n”,++y); 程序的输出结果是 。 2.float f=3.1415927;

printf(“%5.4f,%3.3f”,f,f); 则程序的输出结果是 。 3.a=3;

a+=(a<1)?a:1; printf(“%d”,a); 结果是 。 4.main( )

{ int i=29,j=6,k=2,s; s=i+i/j%k-9; printf(“s=%d\\n”,s); }

程序的输出结果是 。 5.以下程序的输出结果为( )。 main( )

{ int i=010,j=10,*pi,*pj; pi=&i; pj=&j;

printf(\ }

6. 以下程序的输出结果是( ) main()

{ char s1[20]=“abc”,s2[20]=“123”; if(strcmp(s1,s2)>0) printf(“%s\\n”,s1));

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

7. 以下程序的输出结果为( )。 #include \ main()

{ int i,j,a[]={0,2,8,4,5}; printf(\

for(i=1;i<=5;i++) { j=5-i;

printf(\ } }

8. 以下程序的输出结果为( )

main( ) { int a,b,s=0;

for(a=1,b=1;a<=100;a++)

{ if(b>=20) break; if(b%3==1)

{ b+=3; continue; }

b-=5; }

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

9. 以下程序的输出结果为( ) hcf(int u,int v)

{ int a,b,c,r;

if(u>v) { c=u; u=v; v=c; } a=u; b=v;

while((r=b%a)!=0) { b=a; a=r;} return(a); } main()

{ int u,v,h,l; u=32; v=48; h=hcf(u,v);

printf(\}

10.以下程序的输出结果为( )

main()

{ int number=0;

while(number++<=1) printf(\

printf(\ }

11. 以下程序的输出结果为( )

float average (float array[10]) { int i;

float aver,sum=array[0]; for (i=1;i<10;i++)

sum=sum+array[i];

aver=sum/10; return(aver); }

main( )

{ float score[10]={89,67.5,78,91,56,82.5,65,70,79,88},aver; int i;

aver=average (score);

printf (“average score is %5.2f\\n”,aver); }

12. 以下程序的输出结果为( )

main( )

{ char a[5]={‘A’,‘B’,‘C’,‘D’,‘E’},*p=a; for( ;p

printf(“,”,*p);

printf(“\\n”);

}

13. 以下程序的输出结果为( ) main() { int a=8 , b=1;

a=a+b; b=a*b;

printf(\ }

14. 以下程序的输出结果为( ) main() { int i,num[5];

for(i=0;i<5;i++) num[i]=i*10 - 2;

printf(\ }

15. 以下程序的输出结果为( ) main() { float c,f;

c=30.0; f=(6*c)/5+32; printf(\ }

16.以下程序的输出结果为( )

main()

{ int a=6095 , b ;

b=a00 ;

printf(\ }

六.简答题

1.结构化程序设计中常用的三种程序结构是什么?各自用哪些语句来实现? 2.函数调用有几种方式?函数的实参和形参是怎么进行结合的? 3.do—while循环和while循环的区别是什么?

七.编程题

1.三个整数a、b、c,由键盘输入,输出其中最大的数。(10分)

2.从键盘输入的10个整数中,找出第一个能被7整除的数。若找到,打印此数后退出循环;若未找到,打印“not exist”。(10分)

3.从键盘上输入a与n的值,计算sum=a+aa+aaa+aaaa+??(共n项)的和。例a=2, n=4, 则sum=2+22+222+2222。(10分)

4.编写程序,对三个整数x,y,z进行排序,按从小到大的顺序进行输出。(10分) 5.编写一个函数prime(n),判断一个数n是不是素数。在主函数中输入一个整数,输出是否是素数的信息。(15)

6.求数列的1/1+1/3+1/5+?? 前20项的累加和(15分)

7.已知e≈1+1/1!+1/2!+?+1/n!,编程计算e的值,直到最后一项的值小于1e-6。(10分) 8.编写程序打印下面的图形。利用scanf()函数由用户输入星号的行数。(10分)

* ** *** **** *****

9.已知定义int型数组a,数组a中的元素均为三位数。编写函数jsVal(),其功能是:统计出3位数均为偶数的数组元素的个数c。

例如:int a[6]={123,246,345,608,420,987},则统计结果c=3.(10分)

10.编写一计算器程序,完成加、减、乘、除四则运算。首先提示用户输入运算符,然后提

示输入两个运算数,最后将计算结果输出。例如:用户输入+,然后输入10 20,程序在屏幕上输出10+20=30。(15分)

11.从键盘上输入学生的成绩,输出该成绩所对应的等级。成绩等级的划分方法为:>=90

分,等级为‘A’;80至89分,等级为‘B’;70至79分,等级为C;60至69分,等级为‘D’;60分以下,等级为‘E’。(10分) 12.求1!+2!+??+10! (10分)

14. 编程求s=1+1/2+1/3+?+1/n,直到最后一项的绝对值小于10。(15分) 15.编程计算下列表达式:s=n!(n从键盘上输入)(10分)

16.编程求下列函数,用户输入x,程序打印出函数结果y。(注:求绝对值函数为fabs(x)) x3 x>2

y= |x| -2<=x<=2

10-2x x<-2

18.求裴波那切数列的前20项并打印输出,前三项为1,1,2,?,以后每项等于前2项之和。

19.定义求最大、最小值函数MaxMin,求出一维数组的最大值和最小值,并用全局变量MAX

和MIN存放结果。 20.输出1900~2000年中所有的闰年。每输出3个年号换一行。(判断闰年的条件为下面二者之一:能被4整除,但不能被100整除。或者能被400整除。) 21.输出1—100之间不能被12整除的数。

-6

《C程序设计》练习题二

一. 选择题

1.若已定义:int a[9], *p=a;并在以后的语句中未改变p的值,不能表示a[1]地址的表达式为( )

A. p+1 B. a+1 C. a++ D. ++p

2.定义如下变量和数组: int i, x[3][3]={1,2,3,4,5,6,7,8,9};则下面语句

for(i=0;i<3;i++) printf(\的输出结果是( ) A. 1 5 9 B. 1 4 7 C. 3 5 7 D. 3 6 9 3.若有说明: int i,j=7, *p=&i;, 则与i=j; 等价的语句是( )

A. i= *p; B. *p=j; C. i=&j; D. i=* *p;

4.在C程序中有如下语句:char *func(int x,int y); 它是( ) A. 对函数func的定义。 B. 对函数func的调用。 C.对函数func的原型说明。 D. 不合法的。 5.以下程序的输出结果是( ) char str[15]=”hello!”;

printf(“%d\\n”,strlen(str));

A. 15 B. 14 C. 7 D. 6 6.若有如下定义,则( )是对数组元素的正确的引用。 int a[10] , *p ; p=a ;

A. *&a[10] B. a[11] C. *(p+10) D. *p 7.以下不能正确定义二维数组的语句是( )

A . int a[2][2]={{1},{2}}; B. int a[][2]={1,2,3,4}; C. int a[2][2]={{1},2,3}; D. int a[2][]={{1,2},{3,4}}; 8.设变量定义为 int a[3]={1,4,7},*p=&a[2], 则*p的值是( ) A. &a[2] B. 4 C. 7 D. 1

9.C语言中以追加方式打开一个文件应选择( )参数。 A.“r” B.“w” C.“rb” D.“a” 10.在C语言程序中,以下说法正确的是( )

A.函数的定义可以嵌套,但函数的调用不可以嵌套 B.函数的定义不可以嵌套,但函数的调用可以嵌套 C.函数的定义和函数的调用都不可以嵌套 D.函数的定义和函数的调用都可以嵌套 11.以下程序的输出结果为( )

#define ADD(x) x*x main( )

{ int a=4,b=6,c=7,d=ADD(a+b)*c; printf(\}

A. d=70 B. d=80 C. d=140 D. d=700

12.已知职工记录描述如下,在Turbo C中,系统为变量w分配( )字节的空间。

struct worker { int no; char name[20]; char sex; union

{ int day; int month; int year;}birth; } w;

A. 29 B. 20 C. 25 D. 6 13.设有以下定义,值为5的枚举常量是( )

enum week{sun,mon=4,tue,wed,thu,fri,sat} w; A. tue B. sat C. fri D. thu

14.下面选项中正确的赋值语句是(设 char a[5],*p=a;)( )

A. p=\15.C语言中的文件类型只有( )

A. 索引文件和文本文件两种 B. 文本文件一种

C. 二进制文件一种 D. ASCII码文件和二进制文件两种

16.函数调用语句:fseek(fp,-10L,2);的含义是( )

A. 将文件位置指针从文件末尾处向文件头的方向移动10个字节 B. 将文件位置指针从当前位置向文件头的方向移动10个字节 C. 将文件位置指针从当前位置向文件末尾方向移动10个字节 D. 将文件位置指针移到距离文件头10个字节处 17.以下程序的输出结果为( )

main( )

{ char s1[40]=\int i=0,j=0;

while(s1[i]!='\\0') i++;

while(s2[j]!='\\0') s1[i++]=s2[j++]; s1[i]=0;

printf(\}

A. side B. country C. sidetry D. countryside 18.在下列程序段中,枚举变量 c1的值是( )

enum color { red,yellow,blue,green,white} c1; c1=white; A. 1 B. 4 C. 5 D. 6

19.设有说明 int (*ptr)();其中标识符ptr是( )

A. 是一个指向整型变量的指针 B.它是一个指向函数值是int的函数指针 C. 是一个函数名 D.定义不合法

20.定义由n个指向整型数据的指针组成的数组p,其正确的方式为( )

A. int p; B. int (*p)[n]; C. int *p[n]; D. int (*p)( ); 21.以下程序的输出结果为( ) #define N 2 #define M N+2

#define CUBE(x) (x*x*x) #include \ main( ) { int i=M; i=CUBE(i); printf(\ }

(A) 17 (B) 64 (C) 125 (D) 53

22.数组名作为实参数传递给函数时,数组名被处理为( )

A. 该数组的长度 B. 该数组的元素个数 C. 该数组的首地址 D. 该数组中各元素的值 23.关于return语句,下列正确的说法是( )

A. 可以在同一函数中出现多次 B. 在主函数中不能出现

C. 必须在每个函数中出现 D. 只能在除主函数之外的函数中出现一次

24.以下程序的输出结果为( )

#define A 3

#define B(a) (A+1)*a main() { int x; x=3*A+B(7); printf(\}

A x=93 B x=37 C x=60 D x=90

25.若有下面的变量定义,以下语句中合法的是( )

int i,a[10],*p;

A p=a+2; B p=a[5]; C p=a[2]+2; D p=&(i+2);

26.要打开一个已存在的非空文件“file”用于修改,选择正确的语句( )

A fp=fopen(\C fp=fopen(\

27.在下列程序段中,枚举变量 c2 的值是( )

enum color { red,yellow,blue=4,green,white} c1,c2; c1=yellow; c2=white;

(A) 1 (B) 3 (C) 5 (D) 6 28.以下程序的输出结果是( ) char str[15]=”hello!”;

printf(“%d\\n”,strlen(str));

A. 15 B. 14 C. 7 D. 6 29.以下程序的输出结果是( )

main()

{ char s1[20]=“abc”,s2[20]=“123”; if(strcmp(s1,s2)>0) printf(“%s\\n”,s1);

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

(A) abc (B) 123 (C) abc123 (D) 123abc

30.已知职工记录描述如下,设变量w中的“生日”是“1993年10月25日”,下列对“生

日”的正确赋值方式是( )

struct worker

{ int no; char name[20]; char sex;

struct { int day; int month; int year;}birth; };

struct worker w;

(A) day=25; month=10; year=1993;

(B) w.birth.day=25; w.birth.month=10; w.birth.year=1993; (C) w.day=25; w.month=10; w.year=1993;

(D) birth.day=25; birth.month=10; birth.year=1993; 31.下列描述中不正确的是( )

A. 字符型数组中可以存放字符串。 B. 可以对字符型数组进行整体输入、输出。 C. 可以对整型数组进行整体输入、输出。

D. 不能在赋值语句中通过赋值运算符“=”对字符型数组进行整体赋值。 32.两个指针变量不可以( )

A. 相加 B 比较 C 相减 D 指向同一地址 33.下列不能实现赋值操作的是( )

A.A++ B. a== b C. a+=b D. a=1 34.定义如下变量和数组:int i; int x[3][3]={1,2,3,4,5,6,7,8,9};

则语句for(i=0;i<3;i++) printf(\的输出结果是( ) A. 1 5 9 B. 1 4 7 C. 3 5 7 D. 3 6 9 35.以下对二维数组a进行正确初始化的是( )

A. int a[2][3]={{1,2},{3,4},{5,6}}; B. int a[ ][3]={1,2,3,4,5,6}; C. int a[2][ ]={1,2,3,4,5,6}; D. int a[2][ ]={{1,2},{3,4}}; 36.下面的选项中正确的赋值语句是(char a[5],*p=a;)( )

A. p=“abcd”; B. a=“abcd”; C. *p=“abcd”; D. *a=“abcd”; 37. 若要用下面的程序片段使指针变量p指向一个存储整型变量的动态存储单元:

int *p;

p=__________ malloc( sizeof(int)); 则应填入( )

A) int B) *int C) (*int) D) (int *) 38.设有如下定义: char *aa[2]={\则以下说法中正确的是( ) A)aa数组成元素的值分别是\和ABCD\

B)aa是指针变量,它指向含有两个数组元素的字符型一维数组

C)aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址 D)aa数组的两个元素中各自存放了字符'a'和'A'的地址 39.不能把字符串:Hello!赋给数组b的语句是( )

A. char b[10]={'H','e','l','l','o','!'}; B. char b[10]; b=\

C. char b[10]; strcpy(b,\40.以下程序的输出结果为( ) main( )

{ int i=010,j=10,*pi,*pj; pi=&i; pj=&j;

printf(\,%d\\n\ }

(A) 10,10 (B) 8,10 (C) 010,10 (D) 8,8

41.在C程序中有如下语句:char *func(int x,int y); 它是( ) A. 对函数func的定义。 B. 对函数func的调用。 C.对函数func的原型说明。 D. 不合法的。

二. 判断题

1.若有形参定义:int a[10];则a++是合法的表达式。( ) 2.任何数组在使用前必须先定义。( )

3.在int *p;和语句printf(“%d”, *p);中的*p含义相同。( ) 4.共用体变量的各个成员所占内存单元的地址相同。( )

5.在使用缓冲文件系统时,与文件输入和输出相关的数据都先送到缓冲区中。( ) 6. 利用fclose函数关闭已打开的文件。( ) 7. 数组名可以作为参数进行传递。( )

8. 在 C 程序中 , 函数既可以嵌套定义 , 也可以嵌套调用。( ) 9.函数的递归调用不过是一个函数直接或间接地调用它自身。( ) 10.函数strlen(\的值是7。( )

11.通过return语句,函数可以带回一个或一个以上的返回值。( ) 12.结构体类型只有一种。 ( )

13.char *p=\;的含义是定义字符型指针变量p,p的值是字符串\。( ) 14.若有定义:char *p(char a[10]);则p是函数名。( )

15.用fopen(\打开的文件\可以进行修改。 ( )

16.在程序中定义了一个结构体类型后,可以多次用它来定义具有该类型的变量。( ) 17.函数若无返回值,则它一定无形参。( ) 18.一个函数中只允许有一条return语句。( ) 19.结构体类型的各成员可以有不同的类型。( ) 20.宏定义不是C语言的语句,所以句尾没有分号。( ) 21.参加位运算的数据可以是任何类型的数据。( )

22.C语言中的构造数据类型包括数组、集合和结构体类型。 ( )

23.C语言的数组下标从1开始。 ( )

24.假设有int a[10], *p; 则p=&a[0]与p=a等价。 ( ) 25.getchar()函数的功能是从键盘上输入一个字符串。 ( ) 26.在C语言中定义一个文件指针的方法为:FILE *fp; 。 ( ) 27.构成数组的各个元素可以有不同的数据类型。 ( )

三.填空题

1.C语言中putchar(c ) 函数的功能是( )。 2.int *p ;的含义是( )。

3.定义fp为文件型指针变量的定义方法为( )。 4.数组 int a[3][4];共定义了( )个数组元素。 5、二维数组有两维下标,分别用一对( )号括起。 6、指针是指变量的( )。

7、链表是以结构体类型表示链中元素,以( )表示链的一种线性数据结构。 8、链表与数组相比,比较适合的操作包括( )和( )。

9、有如下语句:char A[ ]={”I am a student”}; 该字符串的长度是( ) ,A[3]=( ) 。

10.C语言用( )做关键字来进行类型定义

11.二进制数11001010和10001110异或运算的结果是( )

12.链表的定义必须用到的两种C语言数据类型是( )和( ) 13.C语言表示字符串类型的两种方法是( )和( ) 14.C语言中,( )数据类型不可以直接输入/输出 15.三种构造数据类型分别是( )、( )和共用体 16.函数的实参和形参值的结合采用( )传递

17.设有以下宏定义,则执行赋值语句 a=PP*20;(a为int型变量)后,a的值是( )。 #define PR 80 #define PP PR+403

18.C语言中调用( )函数打开文件,调用( )函数关闭文件,调用( )函数可实现文件的随机读写。

19.若有int a[3]={10,12,30};则a+1是( )的地址,*(a+2)=( )。

四.程序填空题

1.以下程序是建立一个名为myfile的文件,并把从键盘输入的字符存入该文件,当键盘上输入结束时关闭该文件。 #include main() {

(1) *fp; char c;

fp= (2) ;

do {

c=getchar();

(3) ; }while(c!=EOF);

(4) ; }

2.有一个3*4矩阵,求其中的最大元素。 max_value( (5) )

{ int i,j,max; max=array[0][0]; for(i=0;i<3;i++) for(j=0;j<4;j++) if(array[i][j]>max) max=array[i][j]; (6) ; } main( )

{ int a[3][4], i,j; for(i=0;i<3;i++) for(j=0;j<4;j++)

(7) ;

printf(“max value is %d\\n”,max_value(a)); }

3.输入x、y两个整数,按先大后小的顺序输出x、y。

#include “stdio.h” main( )

{ int x,y, *px,*py, (8) ; scanf(“%d%d”,&x,&y); (9) ;

(10) ; if(x

{ p=px; px=py; py=p; } printf(“x=%d,y=%d\\n”,x,y); printf(“MAX=%d,MIN=%d\\n”,*px,*py);

}

4.以下程序是一个函数,功能是求二阶矩阵(m行n列矩阵)的所有靠外侧的各元素值之和。(本程序中二阶矩阵用一维数组来表示。)

例如,矩阵为: 3 0 0 3 2 5 7 3 1 0 4 2

则所有靠外侧的各元素值之和为3+0+0+3+2+3+1+0+4+2=18。 add(int m,int n,int arr[]) { int i,j,sum=0; for(i=0;i

sum=sum+ (11) ; for(j=0;j

5.用指针作函数参数,编程序求一维数组中的最大和最小的元素值。

#define N 10 main()

{ void maxmin(int arr[],int *pt1,int *pt2,int n); int array[N]={10,7,19,29,4,0,7,35,-16,21},*p1,*p2,a,b; p1=&a; p2=&b; maxmin(array,p1,p2,N); printf(\ }

void maxmin(int arr[],int *pt1,int *pt2,int n) { int i;

*pt1=*pt2=arr[0]; for(i=1;i

{ if(arr[i]>*pt1) (13) ; if(arr[i]<*pt2) (14) ; }

}

6.将一个磁盘文件中的信息复制到另一个磁盘文件中。 #include \ main()

{ (15) *in,*out; char ch,infile[10],outfile[10]; printf(\ scanf(\

printf(\ scanf(\

if((in=fopen(infile,\ { printf(\ exit(0); }

if((out=fopen(outfile,\ { printf(\ exit(0); }

while(!feof(in))

fputc( (16) ,out); (17) ; (18) ; }

7.已知有二进数据文件stu1.dat,下列程序完成从stu.dat中读出数据,然后在屏幕上输出。 struct student

{ int no; char name[10];

};

main()

{

FILE *stu1;

struct student stu;

if ((stu1=fopen( (19) ))==NULL)

{printf(\

while( (20) ) {

fread( (21) );

printf(“no:%d,name: %s\\n”,stu.no,stu.name); } }

五.写出程序运行结果

1.下列程序的输出结果是( )

main( )

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

printf(\printf(\2. 下列程序的输出结果是( )

#define N 7 main()

{ int i,j,a[N][N]; for(i=1;i

{ a[i][i]=1; a[i][1]=1; }

for(i=3;i

a[i][j]=a[i-1][j-1]+a[i-1][j]; for(j=1;j<=4;j++) printf(\printf(\}

3.下列程序的输出结果是( )

main()

{ int a[]={1,2,3,4,5,6},*p; p=a; *(p+3)+=2;

printf(\ }

4.下列程序的输出结果是( ) main() { int y;

fac(4,&y);

printf(\ }

fac(int n,int *t) { int s;

if((n==1)||(n==0)) *t=1; else { fac(n-1,&s); *t=n*s; } }

5. 以下程序的输出结果为( )。

void main()

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

p=&a[0]; for(x=0;x<3;x++) y + = * (p + x); printf(\}

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

float average (float array[10]) { int i;

float aver,sum=array[0]; for (i=1;i<10;i++)

sum=sum+array[i];

aver=sum/10; return(aver); }

main( )

{ float score[10]={89,67.5,78,91,56,82.5,65,70,79,88},aver; int i;

aver=average (score);

printf (“average score is %5.2f\\n”,aver); }

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

main( )

{ char a[5]={‘A’,‘B’,‘C’,‘D’,‘E’},*p=a;

for( ;p

printf(“,”,*p);

printf(“\\n”);

}

8.下列程序的输出结果是( )

#include

void fun(int *x,int y,int *z) {

*z=*x+y; } main() {

int a=1,b=3,c=5; fun(&a,b,&c);

printf(\}

9. 下列程序的输出结果是( ) # include “stdio.h” main( )

{ int a[]={8,2,9,4,1}, *p; p=a; *(p+2)+=2;

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

六.简答题

1.C语言对字符串操作的函数有哪些?

2.C语言的构造类型有哪几种?各自适合描述什么样的问题?

七.编程题

1.有一维数组float a[10],其中存放10个学生成绩,写一个函数,求出平均分。 2.编写函数sum,求3*3矩阵的主对角线元素之和。(15分)

3.从键盘上输入10个数存入一维数组中,求这10数中的最大值与最小值并输出。(15分) 4.一个班级有10名学生,每个学生的信息包括学号,姓名和成绩。编写一函数sort,实现按学生成绩降序排列,排序方法任选。在函数之前,定义出函数中要使用的数据类型。 5.编写一函数void sort(int a[],int n),用起泡法实现对数组a中的n个元素进行排序。

6. 已知有如下数组定义,int a[3][3]; 编写程序求出该二维数组的主对角线之和和次对

角线之和。(10分)

本文来源:https://www.bwwdw.com/article/279w.html

Top