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 条评论) |