C语言习题与答案

更新时间:2024-04-01 22:52:44 阅读: 评论:0

2024年4月1日发(作者:庄昶)

C语言习题与答案

一、单选题

1、能将高级语言源程序转换成目标程序的是( C )。 编译程序的基本功能是把源程序翻译成目标程序 A)调试程序

B)解释程序

C)编译程序

D)编辑程序 2、设有以下定义:int x=10,y=3,z;则语句:printf(“%d”,z=(x%y,x/y ));的结果是( D )。

A)1 B)0 C)4 D)3

3、若已定义x 和y 为整型,则表达式:x=1,y=x+3/2的值是( B )。P56 A)1 B)2

C)2.0

D)2.5 4、C语言中 ( B )。P115 A)不能使用 do - while 语句构成循环。

B)do-while 语句, 当 while 语句中的表达式值

为零时结束循环。

C)do-while 语句, 当 while 语句中的表达式值

为非零时结束循环 D)do-while 语句必须用 break 语句才能退出循

5、设有定义 int a =3;,则执行语句 a+ = a-=a*a 后,变量 a 的值是( C ).P64

(a-a*a a = 3-3*3 a = -6 a = a + a a = -6 + (-6) a=-12)

A)3 B)0 C)-12

D)9

6、以下程序的输出结果是 ( C )。p93 # include main( ) {int

a,b,d=241; a=d/100%9; b=(-1)&&(-1);

printf ("%d,%dn",a,b);

}

A)2 1 B)1,-1 C)

2,1 D)2 -1

7、以下程序的输出结果是 ( D )。

#include #include main( )

{char str[12]={'s','t','r','i','n','g'}; printf("%dn",strlen(str)); }求字符串的长度,strlen( )的参数必须是char*

A)12

B)7

C)11

8、以下的 for 循环( A )。

for (x=0,y=0;(y!=123)&&(x<4);x++); A)执行4次 B)是无限循环 C)执行3次 D)循环次数不定

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

char a[]=”Basic”; char *p=a; printf(“%s”,p);

A)Basic

B)B

C)asic

10、以下说法中正确的是( C )。 A)C 语言程序总是从第一个定义的

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

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

D)C 语言程序中的 main( ) 函数必须放在程序的开始部分 11、下述对 C 语言字符数组的描述中错误的是( C ) A)字符数组可以存放字符串

B)字符数组中的字符串可以整体输入、输出

C)可以在赋值语句中通过赋值运算符“=”对字符

数组整体赋值 D)不可以用关系运算符对字符数组中的字符串进

行比较

12、C语言中最简单的数据类型包括( B ) A)整型、实型、逻辑型

B)整型、实型、字符型 C)整型、字符型、逻辑型 D)整型、实型、逻辑型、字符型 13、阅读程序: #include #define SUB(X,Y)

(X)*Y main( ) {int a=3,b=4;

printf("%dn",SUB(a++,b++));

} 程序的输出结果是 ( B )

A)15

B)12 C)16

D)20 14、为表示关系x ≥y ≥z 应使用C 语言表达式( A )

A)(x>=y )&&(y>=z) B)( x>=y )and(y>=z)

C) (x>=y>=z) D)( x>=y )&( x>=y ) 15、如下程序的运行结果是( A ) Main() {int n=0; while(n++<=1)

printf(“%3d”,n); printf(“%3d n”,n); }

A)1 2 3 B)3 2 1 C)0 1 2 D )2 1 0

16、设有如下定义:

char *aa[2]={“abcd”,”ABCD”}; 则以下说法中正确的是( D )

A)aa 数组元素的值分别是”abcd”和”ABCD”

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

C)aa 数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址

D)aa 数组的两个元素中各自存放了字符’a’和’A’的地址。

17、设有如下定义:

struct sk

{int a;float b;}data,*p;

若有 p=&data,则对 data 中的 a 域的正确引用是

(p->a )( A )

A)(*p).a B)(*p).data.a C).a D)

p->data.a

18、设有说明 int (*ptr)[M]; 其中的标识符 ptr 是( C ) A)M

个指向整形变量的指针 B)指向 M 个整形变量的函数指针

C)一个指向具有 M 个整形元素的一维数组的指

D)具有 M 个指针元素的一维指针数组,每个元素都只能指向整形变量

19、阅读程序,程序的输出结果为( C )。 int x=3; do

{printf(“%3d”,x -=2); } while(!(--x));

A)1 B)30 C)1 -2

D)死循环

20、设有10个数据进行冒泡排序,最少进行的比较次数为( C )。

A)0 B)10 C)9 D)1

21、设有语句 char a=’n’; ,则变量 a ( A )。 A)包含1个字符

B)包含2个字

C)包含3个字符 D)说明不合法 22、若有定义:double x,y;则表达式:x=1,y=x+3/2的值是( C )。 A)1 B)2

C)2.0

D)2.5

23、有以下程序:(注意:ch[0] 在低字节,ch[1] 在高字节。)

# include< stdio.h>

union pw{int i ;char ch[2];}a;

main( )

{[0]=0 ;[1]=13 ; printf("%dn",a.i);

}

程序的输出结果是( C )。

A)13

B)14

C)3328 D)328 24、以下程序的输出结果是 ( B )。

#include main( )

{char

printf("%dn",strlen(str)); }

str[12]={'a','b','c','d','f','g',’f’};

A)12

B)7

C)11 D)6 25、设有以下语句:

struct st{int n;struct st *next;};

static struct st a[3]={{5,&a[1]},{7,&a[2]},{9,'0'}},*p; p=&a[0];

则表达式( B )的值是6。

A)p++->n

B)++(p->n)

C)(*p).n++ D)p->n++ 26、对于程序段 float f1(int a) {int

b ;……} main( ) { int m,n; m=f1(n);…… }

char f2(int x,int y) { int a;…… }

变量m,n 的作用范围是( B ) (A )整个程序段 (B )main 函数 (C )main 函数和f2函数 (D )mian 函数和f1函数 27、若p1、p2都是指向整型的指针,p1已经指向数量x ,要使p2也指向x ,正确的是( A )

(A )p2=p1; (B )p2=**p1; (C )p2=&p1; (D )p2=*p1; 28、算术运算符,赋值运算符和关系运算符的运算优先级按

从高到低依次为( B )

(A )算术运算、赋值运算、关系运算 (B )算术运算、关系运算、赋值运算 (C )关系运算、赋值运算、算术运算 (D )关系运算、算术运算、赋值运算

29、C语言中,运算对象必须是整型数的运算符是( A )

A)%

B)/

C)% 和

30、若数组定义为int a[10];则下列哪个表达式是错误的?( A )

(A )*a (B )a

(C )&a

(D )++a

31、表达式10%2值是( A ) (A )0 (B )1 (C )5 (D )5.0

32、设有说明 int (*ptr)[M]; 其中的标识符 ptr 是( C )

A)M 个指向整形变量的指针

B)指向 M 个整形变量的函数指针

C)一个指向具有 M 个整形元素的一维数组的指

D)具有 M 个指针元素的一维指针数组,每个元

素都只能指向整形变量

33、初始化一维数组a 正确的语句是( C ) (A )int

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

a[10]={[10*1]}; 34、下列程序执行后输出的结果是 ( A )

int d = 1 ;

fun ( int p ) { int d = 5 ; d + = p + + ; 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

35、函数调用语句“f((e1,e2),(e3,e4,e5))”中参数的个数是( B )

(A )1 (B )2 (C )3 (D )5

36、执行下列语句中,sum 变量的值是( B ) int I,sum=0;

for(i=0;i<10;i++,sum+=i);

(A )45 (B )55 (C )0 (D )编译错误 37、以下c 语言函数声明中,不正确的是( C )

(A ) void fun (int x, int y); (B ) fun (int x, int y);

(C ) int fun (int x,y); (D ) char *fun (char *s);

38、以下关于typedef 的叙述中错误的是 ( A ) (A ) 用typedef 可以增加新的类型

(B ) 用typedef 可以定义各种类型名,但不能用来定义变量

(C ) 用typedef 只是将已有的类型用新的标识符来代表 (D )

使用typedef 有利于程序的通用和移植

39、 假设指针p 已经指向某个整型变量x ,则*p 相当于( C )

(A ) &x (B ) &p (C ) x (D ) *x 40、组成C 语言程序的是( B ) (A )过程 (B )函数

(C )子程序 (D )主程序和子程序

41、不用第三个变量,将变量a 和b 的值进行互换的操作是( B )

(A )a+=b; b-=a; a-=b; (B )a+=b; b=a-b; a-=b; (C )b-=a; a-=b; a-=b; (D )b-=a; a=b-a; a+=b; 42、对do-while 语言错误的说法是(C )

(A )可构成多重循环结构 (B )循环次数不可能为0

(C )循环次数可能为0 (D )先执行后判断 43、函数调用时,若实参是一个数组名,则向形参传递的是

(C )

(A )数组的长度 (B )数组的每一个元素的地址 (C )数组的首地址(D )数组元素的值

二、填空题

1、下面函数要求用来求出两个整数之和,并通过形参传回两数相加之和值。

int add(int x,int y, int z )

{ z=x+y;}

2、以下定义和语句,则使指针P 指向值为17 的数组元素的表达式是P+3 。

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

p=a;

3、设有定义:int i,j,k;则执行语句for(i=0,j=10; i<=j;i++,j--)

k=i+j;后,k 的值为10 。

4、以下两条if 语句可合并成一条if 语句

为。

if (a<=b) x=1 ;

el y=2;

if (a>b) printf("y=%dn",y);

el printf( "x=%dn",x);

5、C 语言程序的函数之间可通过函数名返回数据外,还可

通过函数指针返回

数据(P261)定义全局变量,传递地址运算进行。

6、int *p[4]的意义是它表示指针数组,int (*p)[4]的意是表示p是一个指针变量,它指向包含4个整形元素的一维数组数组指针(p28)。

7、设有以下定义和语句:

int a[3][2]={10,20,30,40,50,60},(*p)[2];

p=a;

则*(*(p+1)+1) 的值为_____40_________。

8、若有以下定义和语句:

struct{int x;char y;int z;}a,*b;

b=&a

则sizeof(a) 的值是__ 5__,而sizeof(b) 的值是

2。

9、以下程序的输出是______49 ___。

main( )

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

p=a;

printf( "%dn",(p+=3)[3]);

}

10、若有以下说明和定义语句,则变量w 在内存中所占的字节数是34,

union aa

{float x,y;char c[6];};

struct st{union aa v;float m[5];double ave;}w ; 11、以下函数的

功能是:把两个整数指针所指的存储单元中的内容进行交换。请填空。

exchange(int *x,int *y)

{int t;

t=*y; *y= *x;*x= t ;}

12、设有字符串STR,如下程序段用于确定其长度。

{int num=0;

while( STR[num]!=’0’)

num++;

return( num);

}

13、设单链表的结点含两个域:data 是数据域,next是指针域,请填空。

struct link {char data ; struct link *next }node ;

14、下面程序的输出是 4 。

main( )

{int a[]={1,2,3,4},*p=a,i;

for(i=0;i<4;i++)a[i]=*(++p);

printf(“%d”,a[2]);

}

15、如下程序的运行结果是 1 2 3。

Main()

{int n=0;

while(n++<=1)

printf(“%3d”,n);

printf(“%3dn”,n);

}

16、设for(k=0;k<10;k++)++k;则该循环共执行5次。

17、结构化程序由三种基本控制结构组成,它们分别是

顺序结构、选择结构和循环结构。

18、初始化值是0.618的双精度变量a的定义形式为double

a=0.618 。

19、若有以下定义和语句:struct{int x;char y;float

z;}a,*b;b=&a

则sizeof(a) 的值是__7 __,而sizeof(b) 的值是

2。

20、语句printf(“%d%d”, 123); 执行后将输出: 123285。

21、如下程序段的输出是BCD。

static char a[]=”ABCD”;

char *p=a;

printf(“%s”,++p);

22、如下函数用于求出一个2x4矩阵中的最小值。

Max_value(arr)

Int arr[ ][4];

{int I,j,max=arr[0][0];

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

for(j=0; j<4;j++)

if(arr[I][j]>max) max=a[I][j];

return(max);

}

23、设单链表的结点含三个域:data1和data2 是数据域,next

是指针域,请填

空。struct link{ int data1;char data2; struct link

*next;}node; 24、字符串″ABCDt123″的长度是7。

25、表达式a = 1,a + 1,a + + 的值是

2。

27、被调函数在执行结束时,这个函数中定义的静态储存类型的变量不被释放。

28、设int a[2][3] = {{2},{3}};则数组元素a[1][0]的值为3。

29、下列程序

int x=3;

do{printf(″%d″,--x);} while(!x);

循环执行的次数是1。

30、若函数定义为

int data()

{float x=9.9;

return(x);

}

则调用后函数返回的值是9。

十四、判断题

1、函数可以分为两个部分:函数说明部分和函数体。(√)

2、函数的定义和函数的调用均可以嵌套。(×)

3、在C语言中,当我们定义了数组int a[5];则数组元素的下标从1到5。(×)

4、在C语言中,“A”占两个字节,而‘A’占一个字节。(√)

5、程序中定义的整型变量的初值都为0。(×)

6、若有说明int c;则while (c=getchar());是错误的C语句。(×)

7、C语言中,共用体类型的变量在程序运行期间,所有成员都在内存中。(×)

8、在一个函数内部的复合语句中定义的变量,只在该复合语句范围内有效。(√)

9、C语言程序中,一个文件中的函数可以引用存储在另一个文件中的函数和变量。(√)

10、使用continue和break语句,都可以使得C程序的执行直接从循环中跳出。(×)

十五、程序改错题

从键盘输入m和n两个整数,输出时先输出较大者,后输出较小者。

main( )

{ int m,n,*pm=m,*pn=n,*p;

if(a

{*p=*pm;

*pm=*pn;

*pn=*p;

}

printf("max=%d,min=%dn",a,b"); }

#include

void main()

{int *p1,*p2,m,n;

scanf(“%d,%d”,&m,&n);

p1=&m

p2=&n

if(m

{p1=&n

p2=&m

}

printf(“m=%d,n=%dn

(“max=%d,min=%dn ”,*p1,*p2); }

三、阅读如下程序,其功能是求出数组S 中的最大元素,请简述其算法的基本思想,画出程序流程图;修改该算法,使其更高效。

”,a,b); printf

Main() {int s[10],I,m; for(I=0;I<10;I++) scanf(“%d”,&s[I]);

for(I=1;I<10;I++) if (s[I]>s[0]) {m=s[0]; s[0]=s[I]; s[I]=m;}

printf(“%d”,s[0]); } main() {int s[10],i,m; for(i=0;i<10;i++)

{scanf("%d",&s[i]);

if (s[i]>s[0]) {m=s[0];s[0]=s[i];s[i]=m;}} printf("%d",s[0]); }

四、简述如下程序的功能,画出程序流程图,并对其进行修改,使其符合结构化程序的要求。

程序1: main() {int n;

for(n=100;n<=200;n++) {if (n%3==0)

continue;

printf(“%d”,n); } } 程序2: main() {int n=1; while(n<=200) {if

(n>100) break; printf(“%d”,n++); } }

五、阅读如下程序: #include

int main(void)

{int i;

char *name[3]={"David","Jane Wang","Tom Lee"};

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

printf("name[%d]=%sn",i,name[i]);

printf(“n”);

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

printf("name[%d]=%cn",i,name[i][0]);

}

原来输出:

name[0]=David

name[1]=Jane Wang

name[2]=Tom Lee

请描述其执行结果;修改程序显示三个字符串("David","Jane

Wang","Tom Lee")的首字符。

六、设数组a中有10个整数(数据在函数main中产生),请设计一个函数把其中的偶数存放到数组b中返回并输出。

#include

main()

{void mod(int a[10],int b[10]);

int a[10],i,b[10];

printf("input ten data:n");

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

{scanf("%2d",&a[i]);

b[i]=1;

}

mod (a,b);

printf("the new data:n");

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

{if(b[i]!=1)

printf("%2dn",b[i]);

}

}

void mod(int a[10],int b[10])

{int i;

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

{if(a[i]%2==0)

b[i]=a[i];

}

}

七、设有单向链表L,编程输出结点的值,并删除第一个结点。(提示:结点结构为:struct node{int data;struct node

*next;};)

#include

#include

#define NULL 0

struct node

{int data;

struct node *next;

};

void main()

{struct node a,b,c,*head,*p;

=10;

=11;

=12;

head=&a

=&b

=&c

=NULL;

p=head;

printf("the data of the link:n");

while(p!=NULL)

{printf("%4d",p->data);

p=p->next;

}

printf("ndelete the first data:n");

head=&b

=&c

=NULL;

p=head;

while(p!=NULL)

{printf("%4d",p->data);

p=p->next;

}

}

八、编程完成:函数main 产生整型数组s[4][4]中的数据;函数findmin求出数组s每列中最小元素的行号;函数outdata输出每列的最小元素及行号。

#include

main()

{ints[4][4]={{78,89,54,61},{87,65,74,75},{78,89,78,79},{51,9

7,98,3}};

int min[4],mini[4];

void findmin(int s[4][4],int min[4],int mini[4]);

void outdata(int min[4],int mini[4]);

findmin(s,min,mini);

outdata(min,mini);

}

void findmin(int s[4][4],int min[4],int mini[4])

{int i,j;

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

{min[i]=s[0][i];

mini[i]=1;

for(j=0;j<4;j++)

if(min[i]>s[j][i])

{min[i]=s[j][i];

mini[i]=j+1;

}

}

}

void outdata(int min[4],int mini[4])

{int i;

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

printf("min[%d]=%dn",mini[i],min[i]);

}

九、设有单向链表L,请设计函数查找链表中数据域值最大的结点并返回其地址值。结点结构为:struct node{int data;struct node

*next;}。

#include

#include

#define NULL 0

struct node

{int data;

struct node *next;

}; void main()

{struct node a,b,c,*head,*p,*max;

struct node * chzhao(struct node *head);

=10;

=11;

=12;

head=&=&=&=NULL;p=head;

printf("the data of the link:n");

while(p!=NULL)

{printf("%p",p);

printf("%4dn",p->data);

p=p->next;

}

max=chzhao(head);

printf("nthe address of %d is: %p",max->data,max); }

struct node * chzhao(struct node *head)

{struct node *p,*max;

p=head;max=p;

for(;p!=NULL;p=p->next)

if(max->datadata)

max=p;

return max;

}

十、有一函数:

#include

void main()

{

int x,y;

scanf("%d",&x);

if (x<1)

y=x;

el if (x<10)

y=2*x-1;

el

y=3*x-1;

printf("y=%d",y);

}

写一程序,输入X,输出Y值.

十一、输入若干学生成绩,统计并输出最高与最低成绩,输入负数时结束。

#include

main()

{int i,a,s[99],n=0,max,min;

i=0;

while(a>=0)

{printf("input the scores of the students:n");

scanf("%d",&a);

s[i]=a;i++;n++;

}

max=s[0];min=s[0];

for(i=0;i

{if(s[i]>max)

max=s[i];

if(s[i]

if(s[i]>0)

min=s[i];

}

printf("output the number max min: n");

printf("---------------------------------n");

printf("n=%d max=%d

min=%dn",n-1,max,min);

十二、阅读程序,说明每个语句的功能及程序的功能,并画出程序的流程图。(结构组成,执行情况)

main()

{int a,b,c;

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

c=max(a,b);

printf(“max=%d”,c);

}

int max(int x,int y)

{int z;

if (x>y z=x;el z=y;

return(z);

}

十三、设有30个学生数据,每个学生数据包括学号、姓名、成绩三项;请编写函数input输入学生数据,函数sort完成按成绩由高到低的顺序排列数据,主控函数main完成调用控制与输出结果。

struct student

{int num;

char name[10];

int score;

}stu[30],temp;

#include

main()

{int i;

input();

sort();

printf("sort the score from high to low :n");

printf(" No. Name Score n");

printf("---------------------------------n");

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

printf("%4d%6s%6dn",stu[i].num,stu[i].name,stu[i].score);

printf("n");

}

input()

{int i;

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

{printf("input the num name score:n");

scanf("%d%s%d",&stu[i].num,&stu[i].name,&stu[i ].score);

}

}

sort()

{int i,j;

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

for( j=29;j>i;j--)

{ if(stu[j].score>stu[j-1].score)

{temp=stu[j];

stu[j]=stu[j-1];

stu[j-1]=temp;

}

}

}

本文发布于:2024-04-01 22:52:44,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1241409.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:函数   程序   数组   变量   语句   输出   定义
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图