c语言练习
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言笔试复习题
一、单选题:(请选择一个正确结果)
1.下列语句的输出为()
int x=-1;
printf("%d,%u,%O",x,x,x,);
A)-1,65535,177777 B)-1,-1,-1 C)-1,32767,-17777 D)-1,32768,177777 2.若x,y为实数类型的变量,要判断x,y相等,最好使用下列关系表达式()
A)x= =y; B)x-y= =0;
C)fabs(x-y) 〈1e-8; D)labs(x-y)〈1e-8; 3.若有以下的定义、说明和语句,则值为101的表达式是()。
struct cw
{int a ;
int *b;
} *p;
int x0[]={11,12},x1[]={31,32};
static struct cw x[2]={100,x0,300,x1};
p=x;
A)*p-〉b B)p-〉a
C)+ +(p->a) D)(p+ +)-〉a
4.若有以下定义和语句,则输出结果是()。
char *sp="\t\b\\\0English\n";
printf("%d", strlen(sp));
A) 12 B)3 C)17 D)13
5.有如下程序
void main()
{ int x=23;
do
{ printf("%d",x--);
}while(!x);
}
该程序的执行结果是()
A)321 B)23
C)不输出任何内容D)陷入死循环
6.若已定义x和y为double类型,则表达式x=2, y=x+10/4的值是()
A)2 B)4 C)4.0 D)4.5 7.要将一个整数12000分别以ASCII码文件和二进制文件形式存放,各自所占的存储空间数分别是()字节。
A)5和2 B)2和5 C)2和2 D)5和5 8.对于类型相同的两个指针变量之间,不可进行的运算是()
A)= = B)= C)+ D)-9.s izeof(’a’+10.4)的值为()类型。
A)int B)float C)double D)char 10.若有定义int a=3; 则执行完printf("%d",-a--);语句后a的值为()
A)-3 B)2 C)-2 D)3 11.若有float x=2.5;y=4.7;int a=7; 则表达式x+a%3*(int) (x+y)%2/4的值为()
A)4.0 B)3.0 C)2.75 D)2.5 12.语句printf("s=%-5.3s","computer"); 的输出结果是()
A)s= com B)s=com C)s= ter D)s=ter 13.int a=3,b=4,c=5; 执行完表达式a+ +>--b&&b++>c--&&++c后,a,b,c的值分别为()
A)3 4 5 B)4 3 5 C)4 4 4 D)4 4 5
14.int x=3,y=1; 则条件表达式x>y?1:2.3的值为()A)1 B)1.0 C)2.3 D)2 15.若有定义int i=2,a[10],*p=&a[i]:则与*p++等价的是()
A)a[i+ +] B)a[i]+ + C)a[i] D)a[+ +i] 16.以下程序的输出结果是():
void main( )
{ int a=5,*p1,**p2;
p1=&a,p2=&p1;
(*p1)+ +;
printf("%d\n",**p2);
}
A)5 B)4 C)6 D)不确定
17.以下程序的输出结果是()
int x=3,y=4;
void main( )
{ int x,y=5;
x=y+ +;
printf("%d",x);
}
A)3 B)4 C)5 D)6
18.若#include后面的文件名用双引号括起来,寻找被包
含文件的方式是()
A)先按系统设定的标准方式查找,再在当前目录中查找
B)先在当前目录中查找,再按系统设定的标准方式查找
C)只在当前目录中查找
D)只按系统设定的标准方式查找
19.程序设计的步骤一般分为:分析问题、构造模型、设计与描述算法、编写程序、调试程序和()A)数据设计B)算法分析
C)编制程序说明文档D)编译20.表达式11&10的结果用二进制表示为()。
A)11 B)3 C)1 D)10 21.结构化程序语言的三种基本结构是()
(A)顺序结构、选择结构、循环结构
(B)递归结构、循环结构、转移结构
(C)嵌套结构、递归结构、顺序结构
(D)循环结构、转移结构、顺序结构
22.若有以下说明和语句,请选出哪个对c数组元素的正确引用()
int c[4][5],(*cp)[5];
cp=c;
(A)cp+1 (B)*(cp+3) (C)*(cp+1)+3 (D)*(*cp+2) 23.设有如下的程序段:
char str[ ]="hello";
char *ptr;
ptr=str;
执行上面的程序段后,*(ptr+5)的值为()。
(A)o' (B) '\0' (C)不确定的值(D) 'o'的地址24.执行下面的程序段后,B的值为()。
int x=35;
char z='A';
int B;
B=((x&15)&&(z<'a'));
(A)0 (B)1 (C)2 (D)3
25.以下程序的输出结果为()。
#include<stdio.h>
main()
{ int i;
for(i=0;i<10;i++);
printf("%d",i);
}
(A)0 (B)123456789 (C)0123456789 (D)10 26.以下程序的输出结果是()。
#include<stdio.h>
main()
{ int i=010,j=10;
printf("%d,%d",++i,j--);
}
(A)11,10 (B)9,10 (C)010,9 (D)10,9 27.表达式k=(12<10)?4:1?2:3的值为()。
(A)1 (B)2 (C)3 (D)4
28.有一C语言源程序如下:
main()
{ int a,b=-1;scanf("%d",&a);
if(a)if(a>0)b=1;else b=0;
}
该程序所表示的数学函数关系是()
(A)
⎪
⎩
⎪
⎨
⎧
>
=
<
-
=
)0
(
1
)0
(
)0
(
1
a
a
a
b
(B)
⎪
⎩
⎪
⎨
⎧
<
>
=
-
=
)0
(
1
)0
(
)0
(
1
a
a
a
b
(C)
⎪
⎩
⎪
⎨
⎧
>
<
=
-
=
)0
(
1
)0
(
)0
(
1
a
a
a
b
(D)
⎪
⎩
⎪
⎨
⎧
=
>
<
-
=
)0
(
1
)0
(
)0
(
1
a
a
a
b
29.在下列程序中,调用f(8)的值是()
int f(int n)
{ if(n= =1)return(1);
else if(n= =2) return(2);
else return(f(n-1)+f(n-2));
}
(A)13 (B)21 (C)55 (D)34
30.在执行程序china.exe时,若输入的命令行为:china enlish Beijing,则程序执行结果为()。
#include<stdio.h>
void main(int argc, char *argv[])
{ while(argc>1){ printf("%c",**++argv);argc
--;}}
(A)eB (B)ceB
(C)china enlish Beijing (D)enlish Beijing 31.如a为int型,则与表达或a等价的C语言关系表达式是()
(A)a>0 (B)a!=0 (C)a= =0 (D)a>0 32.循环语句for(a=0,b=0;(b!=45)||(a<5);a++);的循环次数是()
(A)4 (B)3 (C)5 (D)无数多次33.一个C语言程序是由()组成。
(A)一个函数(B)一个或若干个函数
(C)一个过程(D)一个过程或若干个过程34.设有字符数组a,则正确的输入语句是()。
(A)gets('a'); (B)scanf("%c",a);
(C)scanf("%s",a); (D)gets("a"); 35.如果程序中有static char c;则编译程序会对其自动设置初值为()。
(A) '\n' (B) "\n" (C)0 (D) '\0' 36.C语言用()表示逻辑真值。
(A)true (B)T
(C)整型值0 (D)非0整型值整数1
37.已知:int*p;使用“p=malloc(sizeof(int));”语句动态申请int型的存储单元,应当使用( )。
(A)int (B)int* (C)(*int) (D)(int*)
38.在C函数中,局部变量的隐含存储类型是( )。
(A)auto (B)static
(C)register (D)extern
39.C语言中,以下叙述中错误的是( )。
(A)同一程序中,全局变量和局部变量可以同名
(B)局部变量的作用域被限定在其所定义的局部范围中
(C)同一程序中,全局变量和局部变量不能同名
(D)全局变量的作用域从定义处开始到本源程序文件结束
40.在c语言中,函数调用时如果相应的形参和实参都是简单变量,则主调函数和被调函数之间传递数据的方式是( )。
(A)单向地址值传递(B)双向地址值传递
(C)单向数值传递(D)双向数值传递
41.有定义:int a[5][4],*p=a[0];,则*(p+2*4+3)等于( )。
(A)a[2][0] (B)a[2][1]
(C)a[2][2] (D)a[2][3]
42.C语言中,一个函数调用语句为fun((el,e2,e3),(e4,e5),e6);,其实参个数为( )。
(A)3个(B)4个(C)5个(D)6个43.有如下程序,该程序的输出结果是( )
main( )
{ int x=1,a=0,b=0;
switch(x)
{case 0;b++;
case 1:a++
case 2:a++;b++
}
(A)a=2,b=1 (B)a=l,b=l
(C)a=l,b=0 (D)a=2,b=2
44.在执行语句if((x=y=2)>=x&&(x=5))y*=x;后变量x、y 的值应分别为( )。
(A)2、4 (B)5、2 (C)5、10 (D)执行时报错45.若N为整型变量,则for(N=10;N=0;N--);循环里的循环体被( )。
(A)无限循环(B)执行10次
(C)执行一次(D)一次也不执行
46.在位运算中,操作数每左移一位,其结果相当于( )
A)操作数乘以2;B)操作数除以2;
C)操作数除以4;D)操作数乘以4;47.已有定义int k=2;int *ptrl,*ptr2,且ptrl和ptr2均已指向变量k,下面不能正确执行的赋值语句是( )
A)k=*ptrl+*ptr2;B)ptr2=k;
C)ptrl=ptr2;D)k=*ptrl*(*ptr2);
49.下面程序的输出是( )
main()
{int x=l0,y=3;
printf(“%d\n”,y=x/y);}
A)0 B)1 C)3 D)不确定的值
49.已知:char s[4]="cba";char *p;执行语句序列p=s;printf("%c\n",*p+1;后,其输出为( )。
A)字符'c' B)字符'b' C)字符'a' D)字符'd' 50.enum color{red,green,yellow=5,white,black}定义了一枚举类型.编译程序为枚举值表中各标识符分配的枚举值依次为()
A)1、2、3、4、5 B)0、1、5、2、3
C)0、l、5、6、7 D)3、4、5、6、7
51.运行完下列程序后,在屏幕上的内容是( )。
main()
{ int a=0;
a+=(a=12);
printf(''%d\n'',a);
}
A)0 B)6 C)12 D)24
52.运行下列程序并用键盘输入53,48,32后,在屏幕上的内容是()。
main()
{ int i,j,k;
scanf(''%d,%d,%d'',&i,&j,&k);
if(i>50)printf(''%d'',i);
else if(i>40)printf(''%d'',j);
eles if(i>30)printf(''%d'',k);
else printf(''Error'');
}
A)53 B)48 C)32 D)Error
53.设有下列语句
typedef struct
{ int n;
charch[8];
}Stt;
则下面叙述正确的是( )。
A)Stt是结构体变量B)Stt是结构类型名
C)typedef struct是结构体类型
D)swuct是结构体类型名
54.函数strcat(strl,str2)的功能是( )
A)将字符串strl连接到字符串str2之后。
B)将字符串str2连接到字符串strl之后。
C)将str2复制到字符串strl中。
D)将strl复制到字符串str2中。
55.若要用fopen函数打开一个新的二进制文件,该文件要既能读又能写,则文件读写方式字符串应是()
A)4 B)''r+'' C)''wb+'' D)"ab" 56.已知:int a[3][4],p=a;p+=6;那么与*p的值相同的是( )。
A)*(a+6) B)*(&a[0]+6)
C)*(a[1]+2) D)*(&a[0][0]+6)
57.以下程序的输出结果是( )(注:备选答案中,代表空格)
main()
{printf("\n*s1=%15s*","chinabeijing");
printf("\n*s2=%-5s*","chi");
}
A)*s1=chinabeijin *
*s2=chi *
B)*s1=chinabeijing *
*s2=**chi*;
C)*s1=* chinabeijing* *s2=chi *;
D)*s1=___chinabeijing*
*s2= chi;
58.如下程序运行台m的值为()
#include <stdio.h>
voidmah()
{ int m,n,k;
m=(n=4)+(k=l0-7);
printf("m=%d\n",m);
}
A)4 B)3 C)7 D)14
59.下面程序运行情况是( ).
#include<stdio.h>
voidmain( )
{
int x=3,y=0,z=0;
if(x=y+z) printf(“****”);
else printf(“####”);
}
A)有语法错误不能通过编译
B)输出****
C)可以通过编译,但不能通过连接,因而不能运行
D)输出####
60.执行下面的程序后,a的值是( )
#define SQR(x) x*x
main()
{ int a=10,k=2,m=3;
a/=SQR(m)/SQR(k); printf(“%d\l ”a); } A)10
B)1
C)5
D)0
61.在C 程序中,同一程序中的各函数之间( )。
A)既允许直接递归调用也允许间接递归调用 B)既不允许直接递归调用也不允许间接递归调用 C)允许直接递归调用但不允许间接递归调用 D)功允许间接递归调用但不允许直接递归调用 62.C 语言中,以下叙述错误的是( )。
A)函数被调用时,系统才为形参分配内存 B)实参和对应形参的数据类型必须一致 C)实参可以是变量、常量或表达式 D)形参可以是变量、常量或表达式
63.C 语言中,函数调用时若实参是数组名,则被调函数对应形参( )。
A) 可以是相应类型简单变量 B) 必须是相应类型的指针变量 C) 必须是相应类型数组名
D) 可以是相应类型的指针变量 64.一个数据类型为void 的函数中可以没有return 语句,那么函数的被调用时( )
A)没有返回值
B)返回一个系统默认值
C)返回只有用户临时决定 D)返回一个不确定的值 65.有定义:floaty ,*p=&y;,假定变量y 在内存中所占地址为100~103。
那么p 的值为( )。
A)100
B)101
C)102
D)103
66.有定义:int a[10][10],*p=a[0],j,k;,其中j 和k 表示数组元素下标并在数组允许范围内,那么能够正确引用元素a[j][k]值的是( )。
A)*(a[j]+k) B)*((p+j)+k
C)*(p[j]+k)
D(a+j)+k
二、判断题(正确的选√,错误的选×)
l .在C 语言中,变量的初始化都是在编译阶段完成的。
2.如果一个函数只能被本文件中的其他函数所调用,则该函数为外部函数。
3.若x 为整型变量、j 为实型变量,当执行语句:x-(int)j ;
后,j 也变为整型变量。
4.递归函数在实现过程中,要使用“堆栈”这种数据结
构来保存递归调用过程中的值。
5.在C 语言中,所有函数之间都可以相互调用。
6.在同一源文件中,全局变量与局部变量同名,在局部
变量作用范围内,全局变量的值等于局部变量的值。
7.C 语言是一种面向过程的语言。
8.用C 语言编写的程序是一种需要经过编译和连接才能运行的程序。
9.语句for(;;){循环体}和 while(1){循环体}是等价的。
10.如果被定义函数的返回值是整型或字符型,使用前可以不必进行说明。
11.语句while(!E);中的条件!E 等价于E=0。
12.格式字符%md 中的m 不能为负。
13.若某自定义函数中无return 语句,则该函数一定没有返回值。
14.fclose 函数顺利执行关闭操作则返回值为1。
15.C 语言的编译系统对宏命令的处理是在对源程序中其他成份正式编译之前进行的。
16.在C 语言的源程序中,注释使用越多,编译之后的可执行程序的执行效率越低。
17.如果strcmp(s1,s2)的返回值为一个负数,则表明字符串s1一定小于字符串s2。
18.表达式128>>2的值是32。
19.若有宏定义:#defineM(x,y,z)
x*y+z
则宏引用M(2+3,4+5,6+7)通过宏展开后的表达式应
为(2+3)*(4+5)+6+7。
20.C 语言程序中,任何英语单词均可以作标识符。
21.一个计算机系统中寄存器数目有限,不能定义任意多个寄存器变量。
22.函数fseek(fp,10L ,1)的作用是将fp 指向的文件内部指针从当前位置后移10个字节的位置。
23.在C 程序中,函数调用不能出现在表达式语句中。
24.表达式~(~1<<3)的值是15。
25.C 语言函数必须包含库函数。
26.用语句a=a+b,b=a-b,a=a-b ;可以交换a,b 两个变量的值。
27.由于计算机的计算精度很高,所以C 语言中用程序计算1.0/3*3的结果肯定等于1。
28.一个C 程序无论有多少个源程序文件组成,在其中
一个源程序文件中定义的全局变量的作用域默认为整个C 程序。
29.在一个函数定义中,可以根据需要使用多个return
语句。
30.函数返回值的数据类型取决于主调函数传递过来的实参的数据类型。
31.对任一变量一旦被指定为某一确定类型后,该变量在程序运行时所占存储空间的多少和所能参加的运算类型便已确定了。
三、填空题
l.与语句if(a>b) max=a;else max=b;功能等价的赋值语句是。
2、下列程序的功能是对某班的某科的学生成绩x进行分
段统计。
要求将[0,60],[60,70],[70,80],[80,90],[90,100]这五个分数段的人数分别统计在
a[5]-a[9]中。
学生成绩采用百分制。
当非法输入时,结束统计。
#include<stdio.h>
void main()
{ float x;
int i,k;
static int a[10];
scanf("%f",&x);
k= ;
while(k>=0&&k<10)
{ if(k<6) k=5;
a[k]=a[k]+1;
scanf("%f",&x);
k=(int)x/10;
}
for(i=5;i<10;i+ +)
printf("%d%,a[i]);
}
3.下面的函数用以验证命题:100以内的奇数的平方被8整除,余数均为1,若命题成立,则返回1,否则返回0请填空完成该函数。
int func( )
{ int a, flag=1;
for(a=1;a<100;a+=2)
if( )
{ flag=0;
}
return(flag);
} 4.以下函数creatlist用来建立一个带头节点的单项链表,新产生节点总是插在链表的末尾。
单项链表的头指针作为函数值返回。
函数中以换行符作为链表建立的结束标志。
请填空。
#include<stdio.h>
struct node
{ char data;
struct node *next;
};
struct node * creatlist( )
{ struct node *h,*p,*q;
char ch;
h=(struct node*)malloc(sizeof(struct node));
p=q=h;
ch=getchar( );
while( )
{ p=(struct node*)malloc(sizeof(struct node));
p->data=ch;
q->next=p;
q-p;
ch=getchar( );
}
p->next='\0';
return h;
}
5.下述程序将磁盘中的一个文件复制到另一个文件中,文件名来自命令行。
请填空。
Void main(int argc,char**argv)
{ FILE*fin,*fout;
if(argc<3)
{ puts("参数丢失1")
return;
}
if(fin=fopen(argv[1],"r"))==NULL||(fout=fope n(argv[2],"w"))==NULL
{ puts("无法打开文件!");
return;
}
while( )
fputc(fgetc(fin),fout);
fclcse(fin);
fclose(fout);
}
6.以下程序是输出Fibonacci数列前20个数,这个数列有如下特点:第1,2两个数为1,1,从第三个数开始,该数是其前面两个数之和。
#include<stdio.h>
void main( )
{ int f[20]={1,1},i;
for(i=2;i<20;i+ +)
f[i]= ;
for(i=0;i<20;i+ +)
{ if(i%5= =0)printf("\n");
printf("%5d",f[i])
}}
7.下面程序的功能是输出5*6阶矩阵中值最大的元素值。
#include<stdio.h>
void main( )
{ int i,j,a[5][6],max;
for(i=0;i<5;i+ +)
for(j=0;j<6;j+ +)
scanf(“%d”,&a[i][j]);
max=a[0][0];
for(i=0;i<5;i+ +)
for(j=0;j<6;j+ +)
if( )
max=a[i][j];
printf("max=%d\n",max);
}
8.以下递归函数是求n!之值。
float fac(int n)
{ float f;
if(n= =0||n= =1) f=1;
else f=n* ;
return(f);
}
9.以下程序的作用是输出a数组中10个元素的值。
#include<stdio.h>
void main( )
{ int i,a[10],*p=a;
for(i=0;i<10;i+ +)
scanf("%d",p+ +);
;
for(i=0;i<10;i+ +,p+ +)
printf(“%5d”,*p);
}
10.以下函数返回字符串s的长度。
int strlen(char *s)
{ char *p=s;
while(*p!='\0')
p++;
return( );
}
11.C语言中包含一元运算符、二元运算符和三元运算符。
其中条件运算符属于。
12.在C语言中没有固有的输入和输出语句,但是用C 语言编写的程序可以用函数调用的形式来实现输入、输出,这些函数由提供。
13.以下程序是求a数组中偶数之和及偶数之平均值。
main()
{ int s=0,k=0,i,a[10]={1,2,3,5,6,7,8,9,10};
float ave;
for(i=0;i<10;i++)
if(a[i]%2==0)
{s+=a[i];
;
}
if(k!=0)
{ ave=s/k;
printf("%d,%fin",k,ave);
}}
14.下面函数的功能是将字符串中的数字字符删除。
#include<stdio.h>
void delnum(char *s)
{ int i,j,
for(i=0;j=0;s[i]!='\0';i++)
if( )
{ s[j]=s[i]; j++;
}
s[j]='\0';
}
15.以下程序用来统计文件f.dat中字符的个数。
#include "stdio.h"
main()
{ FLLE *fp;
char ch;
long num=0L;
if((fp=fopen("f.dat","r"))==NULL){
printf("Open Error\n");exit(0);
}
ch=fgetc(fp);
num=num+1;
while( )
{
fgetc(fp);num=num+1
}
fclose(fp);
printf("num=%ld\n",num);
}
16.下面程序的作用是将两个字符串连接在一起。
#include<stdio.h>
main(){
char strl [80]="abode",*str2="12345", ;
ptrl=strl;
whilc(*++ptrl);
while((*ptrl++=*str2++)!=0);
puts(strl);
}
17.以下程序是求矩阵A的主对角线上元素之和。
#include"stdio.h"
int main( )
{ int a[3][3]={1,2,3,4,5,6,7,8,9},sum1=0,i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(i= =j)sum1= ;
printf("sum1=%d",sum1);
}
18.MyStrCmp(char*slrl,char*str2)是比较两个字符串大小的函数,当strl,与str2相等时返回0,当strl大于str2返回一个正整数,当strl小于str2返回一个负整数。
int MyStrCmp(char *strl,char *str2)
{ for(;*strl= =*str2;strl++,str2++)
if(*slrl= = ) return 0;
return *strl-*str2;
}
19.若x=2,y=3,则x&y的结果是。
20.在C语言中,一个函数一般均由两个部分组成,他们分别称为函数首部和。
21.任何程序都可调用标准函数exit( ),当它被调用时,它程序的执行。
22.下列语句定义结构体变量a,则a占用个字节。
Struct dam{int i;char c;double d;}a;
23.下面程序从键盘读入50个整数并求其中正整数之和。
请完善程序
main()
{ int i,a,sum;
sum=0;
for(i=0;i<50;i++)
{ scanf("%d",&a);
if(a<0) ( (7) );
sum=sum+a;
}
pfinff("sum=%d\n",sum);
}
24.下述程序在数组中同时查找最大元素下标和最小元素下标,并分别存放在main函数的变量max和min中,请填空。
#in clude<stdio.h>
void flnd(int*a,int n,int*max,int*min)
{ int k;
*max=*min=a[0];
for<k=l;k<n;k++
{ if(a[k]>a[*max] (8) ;
if(a{k}<a[*min]*min=k;
}}
void main0
{ int x[]={5,8,-7,2,12,7,3,10};
int max,min;
find( (9) );
printf("\n%d,%d",max,min);}
25.下面程序的功能是输出数组中的各字符串,请填空完成程序。
#include<stdio.h>
voin main()
{ char*a[]={“abcd”, “12345”, “efghijk”, “67890”};
char (5) ;
int j=0;
p=a;
for(;j<4;j++)
puts( (6) );}
26.下列程序的输出结果是( )
#include<stdio.h>
void main( )
{ int m=0,n=0;
char ch,s1[]="countr",s2[]="side";
while(s1[m]!='\0')m++;
whlile(s2[n]!='\0')s1[m++]=s2[n++]
s1[m]='\0';
for(n=0;n<m;n++){ch=s1[n];s1[n]=s1[m-1-n]=c h;}
printf("%s",s1;)
27.以下程序的运行结果是()。
#include<stdio.h>
#define PR(a)printf("%d\t",a)
void main( )
{ int j,laa[]={1,2,3,4,5,6,7,8,9,10},*p=aa+4;
printf("\n")
for(j=4;j;j--)
switch(j)
{ default:PR(*p++);
case 1:
case 2:PR(*p--);break;
case 3:PR(*(++p));
}}
28.下列程序的输出结果是( )
#include<stdio.h>
voidmain()
{ char*str="1234567",*ptr;
ptr=str;
*(ptr+ 4)+=3;
printf("%c,%c\n", *ptr,*(ptr+4));}
29.下列程序的输出结果是( )
#include<stdio.h>
voidmain( )
{ char ch[2][5]={"1234","5678"},*p[2];
int j,k,s=0;
for(k=0;k<2;k++)
p[k]=ch[k];
for(k=0;k<2;k++)
for(j=0;p[k][j]>'\0'&& p[k][j]<='9';j+2)
s=l0*s+p[k][j]-'0';
printf("s=%d\n",s);
}
30.下列程序的输出结果是( )。
#include<stdio.h>
increment()
{ static int x=0;
x=x+1;
printf("%2d",x)
}
void main()
{ increment();increment(); increment();} 31.无论一个C程序有多少个函数构成,程序总是从①开始执行的。
32.函数yh的功能是构成一个杨辉三角形,请填空完成该函数。
#include<stdio.h>,
#define N 11
void yh(a[][N])
{ int j,k;
for(j=1;j<N;j++)
{ a[j][1]=1;
a[j][j]=1;
}
for( ;j<N;j++)
for(k=2;k<=j-1;k++
a[j][k]= +a[j-1][k];}
33.下面程序的功能是统计是从命令行上传递进来的第一个参数中的字母个数。
请填空完成程序。
(注:参数个数从0开始记数)
#include<stdio.h>
#include<ctype.h>
void main(int argc, argv[])
{char *str;int count=0;
if(argc<2)
return;
str= ;
while(*str)
if(isalpha(*str++))
count++;
printf(“%d\n”,count);
}
34.下面程序用于计算1+(1+2)+(1+2+3)+……+(1+2+3+……+10),请完善程序。
#include<stdio.h>
void main( )
{ int total,sum,m,n;
;
for (m=1;n<=10;m++)
{ sum=0;
for(n=1;n<=m;n++)sum=sum+n;
;
}
printf("total=%d\n",total);
}
四、阅读程序题
1.写出下列程序段的执行结果。
()#include<stdio.h>
void main( )
{ union
{ int i[2];
long k;
char c[4];
}r,*s=&r;
s->i[0]=0x39;
s->i[1]=0x38;
printf("%c\n",s->c[0]);
}
2.下列程序的输出结果是()#include<stdio.h>
void main( )
{ p(int *s,int *y);
int i,a[]={11,22,32,41};
int x=1;
for(i=0;i<4;i++)
{ p(a,&x);
printf("%d,",x);
}}
p(int *s,int *y)
{ static int t=3;
*y=s[t];
t--;
}
3.下面程序的输出结果是()#include<stdio.h>
void ff(char *p1,char *p2)
{ while(*p2++=*p1++); }
viod main( )
{ char*p1="abcde",*p2="1234567";
ff(p1,p2);
printf("%s\n%s\n",p1,p2);
}
4.下面程序的输出结果是()#include<stdio.h>
int x=12,y=7;
void main( )
{
int x=15,z;
z=x-y++;
{
int y,z;
while(y=x--)
{ y/=3;
if(y%3==0)
{ z=(++y);
break;
}}
printf("%d,%d,%dn",x,y,z);
}
printf("%d,%d,%d\n",x,y,z);}
5.下面程序的输出结果是()#include<stdio.h>
extern int j=1;
void main( )
{ void add( );
int sum(int x);
int k,s;
add( );
j++;
printf("j=%d\n",j);
for(k=1;k<=10;k++)
s=sum(k);
printf("s=%d\n",s);
}
void add( )
{ int j=0;
j++;
}
int sum(int j)
{ int x=0;
x+=j;
return(x);
}
6.以下程序的运行结果是( )。
#include<stdio.h>
void num()
{ int x,y;
int a=15,b=10;
x=a-b;
y=a+b;
}
int x,y;
void main( )
{ int a=17,b=15;
x=a+b;
y=a-b;
num( );
printf("%d,%d\n",x,y);
}
7.下面程序的运行结果是( )
#include<stdio>
void main()
{ struct cmplx
{ int x;
int y;
}cnum[2]={1,3,0,7};
printf("%d\n",cnum[0].y/cnum[0].x*cnum[1].x);
}
8.下列程序的输出结果是( )。
#include<tclio.b>
void sub(iht*a,int n,int k)
{ if(k<=n)
sub(a,n/2,2*k);
*a+=k;
}
void main()
{ int x=0;
sub(&x,8,1);
printf("%d\n",x);
}
9.下列程序的运行结果是( )。
#4ncludc<stdio.h>
find(int-a,intn)
{ int *p,*s;
for(p=a,s=a;p-a<n;p++)
f(*p>*s)
s=p
return(*s);
}
void main()
{ int x[5]={12,11,13,6,18};
printf("%d\n",find(x,5));
}
10.下列程序的运行结果是( )。
#include<stdio.h>
voidmain()
{ intm,n,numl,num2,temp;
uml=6;num2=52;
if(num1<num2)
emp=numl,numl=nnm2,num2=temp;
m=numl;
n=num2;
while(n!=0)
{ temp=m%n;
m=n;
n=temp;
}
printf("%d\n",m);}
11.#include<stdio.h>
void main()
{ long fun(int n);
printf("%ld\n",fun(4));
}
long fun(int n)
{ long s;
if(n= =1||n= =2) s=2;else s=n+fun(n-1);
return s;}
12.#include<stdio.h>
void main()
{ int fun(int a);
int a=2,j;
for(j=0;j<3;j++)
printf("%d",fun(a));
}
int fun(int a)
{ int b=0;
static int c=3;
b++,c++;
return a+b+c;
}
13.#include<stdio.h>
void main()
{ int a[3][3]={{2},{4},{6}};
int j,*p&a[0][0];
for(j=0;j<2;j++)
if(!j)
a[j][j+1]=*p+1;
else
p++;
printf("%d,*p+1);
}
14.运行下列程序时,输入数据为"2473<回车>",则程序的输出结果为
#include<stdio.h>
void main()
{ int s;
while((s=getchar())!='\n' { switch(s-'2')
{ case 0:
case 1:putchar(s+4);
case 2:putchar(s+4);break;
case 3:putchar(s+3);
default:putchar(s+2);break;
}}}
15.在下列程序中,若输入为:3275<CR>,则输出结果是
#include<stdio.h>
void main()
{ int x,y,t;
scanf('%d",&x);
x=(x>=0?x:-x);
y=0;
while(x)
{ t=x%10;
x=x/10;
y=y*10+t;}
prinnf("the result is 5d",y);}
六、编程题
1.有一字符串,包含n个字符。
写一个函数,将此字符串从第m个字符开始的全部字符有制成为另一个字
符串并输出这个字符串。
例如,要求把字符串abcdefg
中第3个字符开始的全部字符复制成为另一个字符
串cdefg.
2.从键盘上输入n(n<50)个任意位的正整数m(m<32767),将每个整数的各位数字之和存放在a数组中。
要求:求每个整数k的各位数字之和用自定义函数来实现。
3.实现判断一个正整数是否为素数的函数首部为int isprime(int x),当x是素数时函数返回1,否则返回0。
要求编制该函数并用相应的主函数进行测试。
4.编写程序计算100至999之间有多少个数其各位数字之和是5。
例如:122,131是满足要求的数的两个例子。
5.编写一个函数rcvmc(s)将字符串s中的字符位置颠倒过来。
例如,字符串abcdefg中的字符位置颠倒后变为gfedcba。
6.函数adddigit的原型为int adddigit(int num);,其功能是求num各位数字之和。
要求编制该函数并用相应的主函数进行测试。
7.函数的原型说明为int chrn(char*s,char c);,其功能是测试c在s中出现的次数,编制该函数并用相应的主函数对其进行测试。