2004年上海师范大学教育技术学专业C语言试题
C程序设计练习一
1. 在计算机中,一个字节所包含二进制位的个数是:
A.2 B.4 C.8 D.16
2. 能将高级语言编写的源程序转换为目标程序的软件是
A.汇编程序 B.编辑程序 C.解释程序 D.编译程序
3. 以下叙述中正确的是
A.C程序中注释部分可以出现在程序中任意合适的地方
B.花括号"{"和"}"只能作为函数体的定界符,*****可作为复合语句的定界符
C.构成C程序的基本单位是函数,所有函数名都可以由用户命名******main
D.分号是C语句之间的分隔符,不是语句的一部分
C程序设计练习二
一、选择题
(1) 用8位无符号二进制数能表示的最大十进制数为
A) 127 B) 128 C) 255 D) 256
(2) C语言中用于结构化程序设计的三种基本结构是
A) 顺序结构、选择结构、循环结构
B) if、switch、break
C) for、while、do-while
D) if、for、continue
(3) 在一个C语言程序中
A) main函数必须出现在所有函数之前
B) main函数可以在任何地方出现
C) main函数必须出现在所有函数之后
D) main函数必须出现在固定位置
(4) 下列叙述中正确的是
A) C语言中既有逻辑类型也有集合类型
B) C语言中没有逻辑类型但有集合类型
C) C语言中有逻辑类型但没有集合类型
D) C语言中既没有逻辑类型也没有集合类型
(5) 下列关于C语言用户标识符的叙述中正确的是
A) 用户标识符中可以出现下划线和中划线(减号)
B) 用户标识符中不可以出现中划线,但可以出现下划线
C) 用户标识符中可以出现下划线,但不可以放在用户标识符的开头
D) 用户标识符中可以出现下划线和数字,它们都可以放在用户标识符的开头
(6) 下列关于单目运算符++、--的叙述中正确的是
A) 它们的运算对象可以是任何变量和常量
B) 它们的运算对象可以是char型变量和int型变量,但不能是float型变量
C) 它们的运算对象可以是int型变量,但不能是double型变量和float型变量
D) 它们的运算对象可以是char型变量、int型变量和float型变量
(7) 有以下程序段
int m=0,n=0; char c='a';
scanf("%d%c%d",&m,&c,&n);
printf("%d,%c,%d\n",m,c,n);
若从键盘上输入:10A10<回车>,则输出结果是:
A) 10,A,10 B) 10,a,10 C) 10,a,0 D) 10,A,0
(8) 有以下程序
main()
{ int i;
for(i=0;i<3;i++)
switch(i)
{ case 1: printf("%d",i);
case 2: printf("%d",i);
default: printf("%d",i);
}
}
执行后输出的结果是
A) 011122 B) 012 C) 012020 D) 120
(9) 有以下程序
main()
{ int i=1,j=1,k=2;
if((j++||k++)&&i++) printf("%d,%d,%d\n",i,j,k);
}
执行后输出的结果是
A) 1,1,2 B) 2,2,1 C) 2,2,2 D) 2,2,3
(10) 有以下程序
main()
{ int a=5,b=4,c=3,d=2;
if(a>b>c)
printf("%d\n",d);
else if((c-1>=d)==1)
printf("%d\n",d+1);
else
printf("%d\n",d+2);
}
执行后输出的结果是
A) 2 B) 3 C) 4 D) 编译时有错,无结果
(11) 有以下程序
main()
{ int p[7]={11,13,14,15,16,17,18},i=0,k=0;
while(i<7&&p[i]%2){k=k+p[i]; i++;}
printf("%d\n",k);
}
执行后输出的结果是
A) 58 B) 56 C) 45 D) 24
(12) 有以下程序
main()
{ int i=0,s=0;
do{
if(i%2){i++;continue;}
i++;
s+=i;
} while(i<7);
printf("%d\n",s);
}
执行后输出的结果是
A) 16 B) 12 C) 28 D) 21
(13) 有以下程序
main()
{ int i=10,j=1;
printf("%d,%d\n",i--,++j);
}
执行后输出的结果是
A) 9,2 B) 10,2 C) 9,1 D) 10,1
(14) main()
{int a=4,b=3,c=5,d,e,f;
d=f1(a,b); d=f1(d,c);
e=f2(a,b); e=f2(e,c);
f=a+b+c-d-e;
printf("%d,%d,%d\n",d,f,e);
}
执行后输出的结果是
A) 3,4,5 B) 5,3,4 C) 5,4,3 D) 3,5,4
(15) 有以下程序
void f(int x,int y)
{ int t;
if(x<y){ t=x; x=y; y=t; }
}
main()
{ int a=4,b=3,c=5;
f(a,b); f(a,c); f(b,c);
printf("%d,%d,%d\n",a,b,c);
}
执行后输出的结果是
A) 3,4,5 B) 5,3,4 C) 5,4,3 D) 4,3,5
(16) 若有一些定义和语句
#include <stdio.h>
int a=4,b=3,*p,*q,*w;
p=&a; q=&b; w=q; q=NULL;
则以下选项中错误的语句是
A) *q=0; B) w=p; C) *p=&a; D) *p=*w;
(17)有以下程序
int *f(int *x,int *y)
{ if(*x<*y)
return x;
else
return y;
}
main()
{ int a=7,b=8,*p,*q,*r;
p=&a; q=&b;
r=f(p,q);
printf("%d,%d,%d\n",*p,*q,*r);
}
执行后输出结果是
A) 7,8,8 B) 7,8,7 C) 8,7,7 D) 8,7,8
(18)有以下程序
main()
{ char *s[]={"one","two","three"},*p;
p=s[1];
printf("%c,%s\n",*(p+1),s[0]);
}
执行后输出结果是
A) n,two B) t,one C) w,one D) o,two
(19)有以下程序
main()
{ int x[8]={8,7,6,5,0,0},*s;
s=x+3;
printf("%d\n",s[2]);
}
执行后输出结果是
A) 随机值 B) 0 C) 5 D) 6
(20) 以下能正确定义数组并正确赋初值的语句是
A) int N=5,b[N][N];
B) int a[1][2]={{1},{3}};
C) int c[2][]={{1,2},{3,4}};
D) int d[3][2]={{1,2},{3,4}};
(21)有以下程序
main()
{ int m[][3]={1,4,7,2,5,8,3,6,9};
int i,j,k=2;
for(i=0;i<3;i++)
{ printf("%d ",m[k][i]); }
}
执行后输出结果是
A) 4 5 6 B) 2 5 8 C) 3 6 9 D) 7 8 9
(22) 以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。
#define N 10
void arrin(int x[N])
{ int i=0;
while(i<N)
scanf("%d",_________);
}
在下划线处应填入的是
A) x+i B) &x[i+1] C) x+(i++) D) &x[++i]
(23) 有以下程序
main()
{ char s[]="\n123\\";
printf("%d,%d\n",strlen(s),sizeof(s));
}
执行后输出结果是
A) 赋初值的字符串有错 B) 6,7 C) 5,6 D) 6,6
(24) 阅读以下函数
fun(char *sl,char *s2)
{ int i=0;
while(sl[i]==s2[i]&&s2[i]!='\0') i++;
return(sl[i]=='\0'&&s2[i]=='\0');
}
此函数的功能是
A) 将s2所指字符串赋给s1
B) 比较s1和s2所指字符串的大小,若s1比s2的大,函数值为1,否则函数值为0
C) 比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0
D) 比较s1和s2所指字符串的长度,若s1比s2的长,函数值为1,否则函数值为0
(25) 以下叙述中正确的是
A) 全局变量的作用域一定比局部变量的作用域范围大
B) 静态(static)类别变量的生存期贯穿于整个程序的运行期间
C) 函数的形参都属于全局变量
D) 未在定义语句中赋初值的auto变量和static变量的初值都是随机值
(26) 设有如下说明
typedef struct
{ int n; char c; double x;}STD;
则以下选项中 ,能正确定义结构体数组并赋初值的语句是
A) STD tt[2]={{1,'A',62},{2,'B',75}};
B) STD tt[2]={1,"A",62,2,"",75};
C) struct tt[2]={{1,'A'},{2,'B'}};
D) struct tt[2]={{1,"A",62.5},{2,"B",75.0}};
(27) 有以下程序
main()
{ union{ unsigned int n;
unsigned char c;
}ul;
ul.c='A';
printf("%c\n",ul.n);
}
执行后输出结果是
A) 产生语法错 B) 随机值 C) A D) 65
(28) 有以下程序
main()
{ char str[]="xyz",*ps=str;
while(*ps) ps++;
for(ps--;ps-str>=0;ps--) puts(ps);}
执行后输出结果是
A) yz<回车>xyz B) z<回车>yz
C) z<回车>yz<回车>xyz D) x<回车>xy<回车>xyz
(29) 有以下程序
main()
{int a[][3]={{1,2,3},{4,5,0}},(*pa)[3],i;
pa=a;
for(i=0;i<3;i++)
if(i<2) pa[1][i]=pa[1][i]-1;
else pa[1][i]=1;
printf("%d\n",a[0][1]+a[1][1]+a[1][2]);
}
执行后输出结果是
A) 7 B) 6 C) 8 D) 无确定值
(30) 有以下程序
void fun(int *a,int i,int j)
{ int t;
if (i<j)
{ t=a[i];a[i]=a[j];a[j]=t;
fun(a,++i,--j);
}
}
main()
{ int a[]={1,2,3,4,5,6},i;
fun(a,0,5);
for(i=0;i<6;i++)
printf("%d",a[i]);
}
执行后输出结果是
A) 6 5 4 3 2 1 B) 4 3 2 1 5 6
C) 4 5 6 1 2 3 D) 1 2 3 4 5 6
(31) 有以下程序
main(int argc,char *argv[])
{ int n,i=0;
while(argv[1][i]!='\0')
{ n=fun(); i++;}
printf("%d\n",n*argc);
}
int fun()
{ static int s=0;
s+=1;
return s;
}
假设程序编译、连接后生成可执行文件exam.exe,若键入以下命令
exam 123〈回车〉
则运行结果为
A) 6 B) 8 C) 3 D) 4
(32) 以下程序中,能够通过调用函数fun,使main函数中的指针变量p指向一个合法的整型单元的是
A) main()
{int *p;
fun(p);… }
int fun(int *p)
{ int s;
p=&s;} B) main()
{int *p;
fun(&p);…}
int fun(int **p)
{int s;
*p=&s;}
C) #include<stdlib.h>
main()
{int *p;
fun(&p);…}
int fun(int **p)
{*p=(int*)malloc(2);}… D) #include<stdlib.h>
main()
{int *p;
fun(p);…}
int fun(int *p)
{p=(int*)malloc(sizeof(int));}
(33) 若要说明一个类型名STP,使得定义语句STP s;等价于char *s;,以下选项中正确的是
A) typedef STP char *s;
B) typedef *char STP;
C) typedef STP *char;
D) typedef char* STP ;
(34) 设有如下定义
struct ss
{ char name[10];
int age;
char sex;
} std[3],* p=std;
下面各输入语句中错误的是
A) scanf("%d",&(*p).age);
B) scanf("%s",&std.name);
C) scanf("%c",&std[0].sex);
D) scanf("%c",&(p->sex));
(35) 设char型变量x中的值为10100111,则表达式(2+x)∧(~3)的值是
A) 10101001 B) 10101000 C) 11111101 D) 01010101
(36) 以下叙述中不正确的是
A) C语言中的文本文件以ASCII码形式存储数据
B) C语言中对二进制位的访问速度比文本文件快
C) C语言中,随机读写方式不使用于文本文件
D) C语言中,顺序读写方式不使用于二进制文件
(37) 以下程序企图把从终端输入的字符输出到名为abc.txt的文件中,直到从终端读入
字符#号时结束输入和输出操作,但程序有错。
#include <stdio.h>
main()
{ FILE *fout; char ch;
fout=fopen('abc.txt','w');
ch=fgetc(stdin);
while(ch!='#')
{ fputc(ch,fout);
ch =fgetc(stdin);
}
fclose(fout);
}
出错的原因是
A) 函数fopen调用形式有误
B) 输入文件没有关闭
C) 函数fgetc调用形式有误
D) 文件指针stdin没有定义
二) 填空题
(1) 若有语句
int i=-19,j=i%4;
printf("%d\n",j);
则输出的结果是【1】。
(2) 若有程序
main()
{ int i,j;
scanf("i=%d,j=%d",&i,&j);
printf("i=%d,j=%d\n ",i,j);
}
要求给i赋10,给j赋20,则应该从键盘输入【2】。
(3) 若有以下程序
main()
{ int p,a=5;
if(p=a!=0)
printf("%d\n",p);
else
printf("%d\n",p+2);
}
执行后输出结果是【3】。
(4) 若有以下程序
main()
{ int a=4,b=3,c=5,t=0;
if(a<b)t=a;a=b;b=t;
if(a<c)t=a;a=c;c=t;
printf("%d %d %d\n",a,b,c);
}
执行后输出结果为【4】。
(5) 若有以下程序
main()
{ int a[4][4]={{1,2,-3,-4},{0,-12,-13,14} ,{-21,23,0,-24},{-31,32,-33,0}};
int i,j,s=0;
for(i=0;i<4;i++)
{ for(j=0;j<4;j++)
{ if(a[i][j]<0) continue;
if(a[i][j]==0) break;
s+=a[i][j];
}
}
printf("%d\n",s);
}
执行后输出结果是【5】。
(6) 若有以下程序
main()
{ char a;
a='H'-'A'+'0';
printf("%c\n",a);
}
执行后输出结果是【6】。
(7) 若有以下程序
int f(int x,int y)
{ return(y-x)*x; }
main()
{ int a=3,b=4,c=5,d;
d=f(f(3,4),f(3,5));
printf("%d\n",d);
}
执行后输出结果是【7】。
(8) 函数YangHui的功能是把杨辉三角形的数据赋给二维数组的下半三角,形式如下
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1.
其构成规律是:
(1) 第0列元素和主对角线元素均为1
(2) 其余元素为其左上方和正上方元素之和
(3) 数据的个数每行递增1
请将程序补充完整。
#define N 6
void yanghui(int x[N][N])
{ int i,j;
x[0][0]=1;
for(i=1;i<N;i++)
{ x[i][0]=【8】=1;
for(j=1;j<i;j++)
x[i][j]=【9】;
}
}
(9) 以下函数的功能是删除字符串s中的所有数字字符。请填空。
viod dele(char *s)
{ int n=0,i;
for(i=0;s[i];i++)
if(【10】)
s[n++]=s[i];
s[n]=【11】;
}
(10) 设函数findbig已定义为求3个数中的最大值。以下程序将利用函数指针调用findbig函数。请填空。
main()
{ int findbig(int,int,int);
int (*f)(),x,y,z,big;
f=【12】;
scanf("%d%d%d",&x,&y,&z);
big=(*f)(x,y,z);
printf("big=%d\n",big);
}
(11) 以下程序的输出结果是【13】。
#define MCRA(m) 2*m
#define MCRB(n,m) 2*MCRA(n)+m
main()
{ int i=2,j=3;
printf("%d\n",MCRB(j,MCRA(i)));
}
(12) 设有以下定义
stuct ss
{ int info; struct ss *link;}x,y,z;
且已建立如下图所示链表结构:
x → y → z
请写出删除结点y的赋值语句【14】。
(13) 已有文本文件test.txt,其中的内容为:Hello,everyone!。以下程序中,文件test.txt已正确为“读”而打开,由此文件指针fr指向文件,则程序的输出结果是【15】。
#include <stdio.h>
main()
{ FILE *fr; char str[40];
......
fgets(str,5,fr);
printf("%s\n",str);
fclose(fr);
}
4以下不能定义为用户标识符的是
A.scanf ******外部加载的 B.Void C._3com_ D.int******保留字
5有以下程序
main(){
int a; char c=10;
float f=100.0; double x;
a=f/=c*=(x=6.5);
printf("%d %d %3.1f %3.1f\n",a,c,f,x);
}
程序运行后的输出结果是
A.1 65 1 6.5 B.1 65 1.5 6.5
C.1 65 1.0 6.5 D.2 65 1.5 6.5
6以下选项中非法的表达式是
A.0<=x<100 B.i=j==0
C.(char)(65+3) D.x+1=x+1
7有以下程序
main(){
int a=1,b=2,m=0,n=0,k;
k=(n=b>a)||(m=a<b);*****或运算中,前面已经为真,所以后面不算了m=0;
printf("%d,%d\n",k,m);
}
程序运行后的输出结果是
A.0,0 B.0,1 C.1,0 D.1,1
8有定义语句:int x, y;,若要通过scanf("%d,%d",&x,&y);语句使变量x得到数值11,变量y得到数值12,下面四组输入形式中,错误的是 *******格式说明中有一个逗号,所以输入时也要有逗号
A.11 12<回车> B.11, 12<回车>
C.11,12<回车> D.11,<回车>12<回车>
9设有如下程序段:
int x=2002, y=2003;
printf("%d\n",(x,y));
则以下叙述中正确的是
A.输出语句中格式说明符的个数少于输出项的个数,不能正确输出
B.运行时产生出错信息
C.输出值为2002
D.输出值为2003
10变量x为float型且已赋值,则以下语句中能将x中的数值保留到小数点后两位,并将第三位四舍五入的是
A.x=x*100+0.5/100.0; B.x=(x*100+0.5)/100.0;
C.x=(int)(x*100+0.5)/100.0; D.x=(x/100+0.5)*100.0;
11定义语句:int a=1,b=2,c=3,x;,则以下选项中各程序段执行后,x的值不为3的是
A. if (c<a) x=1;
else if (b<a) x=2;
else x=3; B. if (a<3) x=3;
else if (a<2) x=2;
else x=1;
C. if (a<3) x=3;
if (a<2) x=2;
if (a<1) x=1; D. if (a<b) x=b;
if (b<c) x=c;
if (c<a) x=a;
12以下程序
main(){
int s=0,a=1,n;
scanf("%d",&n);
do{
s+=1; a=a-2;
}
while(a!=n);
printf("%d\n",s);
}
若要使程序的输出值为2,则应该从键盘给n输入的值是
A.-1 B.-3 C.-5 D.0
13有如下程序段,其中s、a、b、c均已定义为整型变量,且a、c均已赋值(c大于0)
s=a;
for(b=1;b<=c;b++) s=s+1;
则与上述程序段功能等价的赋值语句是
A.s=a+b; B.s=a+c; C.s=s+c; D.s=b+c;
14以下程序
main(){
int k=4,n=0;
for( ; n<k ; ){
n++;
if(n%3!=0) continue;
k--;
}
printf("%d,%d\n",k,n);
}
程序运行后的输出结果是 C
A.1,1 B.2,2 C.3,3 D.4,4
15求以下程序的功能是计算:s=
main(){
int n; float s;
s=1.0;
for(n=10;n>1;n--)
s=s+1/n;
printf("%6.4f\n",s);
}
程序运行后输出结果错误,导致错误结果的程序行是 c
A.s=1.0; B.for(n=10;n>1;n--)
C.s=s+1/n;*****类型不符 D.printf("%6.4f\n",s);
16定义ch为字符型变量,以下赋值语句中错误的是 a
A.ch='\';****这是转义符 B.ch=62+3; C.ch=NULL; D.ch='\xaa';
17已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是 d
A.函数调用可以作为独立的语句存在
B.函数调用可以作为一个函数的实参
C.函数调用可以出现在表达式中
D.函数调用可以作为一个函数的形参
18有以下函数定义:
void fun(int n, double x) { …… } C
若以下选项中的变量都已正确定义并赋值,则对函数fun的正确调用语句是
A.fun(int y,double m); B.k=fun(10,12.5);
C.fun(x,n); D.void fun(n,x);
19有以下程序
void fun(char *a, char *b)
{ a=b; (*a)++; }
main()
{ char c1='A',c2='a',*p1,*p2;
p1=&c1; p2=&c2; fun(p1,p2);
printf("%c%c\n",c1,c2);
}
程序运行后的输出结果是 a
A.Ab B.aa C.Aa D.Bb
20有以下程序
#include <stdio.h>
main()
{ printf("%d\n",NULL); }
程序运行后的输出结果是 a
A.0*****null在c语言中的值为0 B.1 C.-1 D.NULL没定义,出错
21已定义c为字符型变量,则下列语句中正确的是 c ****c可以附值为数值或者单个字符
A.c='97'; B.c="97"; C.c=97; D.c="a";
22以下不能正确定义二维数组的选项是 d******二位数组定义时,列不能省略
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}};
23.以下选项中不能正确把cl定义成结构体变量的是 b
A.typedef struct
{ int red;
int green; int blue;
} COLOR;
COLOR cl; B.struct color cl****变量名不能写在上面
{ int red;
int green;
int blue;
};
C.struct color
{ int red;
int green; int blue;
} cl; D.struct
{ int red;
int green;
int blue;
} cl;
24.以下能正确定义一维数组的选项是 B
A.int num[]; B. #define N 100
int num[N];
C.int num[0..100]; D. int N=100; ****数组定义时不可以使用变量
int num[N];
25.下列选项中正确的语句组是 d*****数组变量符值必须使用函数
A.char s[8]; s={"Beijing"}; B.char *s; s={"Beijing"};
C.char s[8]; s="Beijing"; D.char *s; s="Beijing";
26.已定义以下函数
fun(int *p)
{ return *p; }
该函数的返回值是 C
A.不确定的值 B.形参p中存放的值
C.形参p所指存储单元中的值 D.形参p的地址值
27.下列函数定义中,会出现编译错误的是 b
A.max(int x,int y,int *z)
{ *z=x>y ? x:y; } B.int max(int x,y)****y前缺少int
{ int z;
z=x>y ? x:y;
return z;
}
C.max(int x,int y)
{ int z;
z=x>y?x:y; return(z);
} D.int max(int x,int y)
{ return(x>y?x:y); }
28.有以下程序
#include <stdio.h>
#define F(X,Y) (X)*(Y)
main()
{ int a=3, b=4;
printf("%d\n", F(a++, b++));
}
程序运行后的输出结果是 a
A.12 B.15 C.16 D.20
29.有以下程序 D
fun(int a, int b)
{ if(a>b) return(a);
else return(b);
}
main()
{ int x=3, y=8, z=6, r;
r=fun(fun(x,y), 2*z);
printf("%d\n", r);
}
程序运行后的输出结果是
A.3 B.6 C.8 D.12
30.若有定义:int *p[3];,则以下叙述中正确的是 B
A.定义了一个基类型为int的指针变量p,该变量具有三个指针
B.定义了一个指针数组p,该数组含有三个元素,每个元素都是基类型为int的指针
C.定义了一个名为*p的整型数组,该数组含有三个int类型元素
D.定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素
31.以下程序中函数scmp的功能是返回形参指针s1和s2所指字符串中较小字符串的首地址
#include <stdio.h>
#include <string.h>
char *scmp(char *s1, char *s2)
{ if(strcmp(s1,s2)<0)
return(s1);
else return(s2);
}
main()
{ int i; char string[20], str[3][20];
for(i=0;i<3;i++) gets(str[i]);
strcpy(string,scmp(str[0],str[1])); /*库函数strcpy对字符串进行复制*/
strcpy(string,scmp(string,str[2]));
printf("%s\n",string);
}
若运行时依次输入:abcd、abba和abc三个字符串,则输出结果为 B
A.abcd B.abba C.abc D.abca
32.有以下程序
struct s
{ int x,y; } data[2]={10,100,20,200};
main()
{ struct s *p=data;
printf("%d\n",++(p->x));
}
程序运行后的输出结果是 B
A.10 B.11 C.20 D.21
33.有以下程序段
main()
{ int a=5,*b,**c;
c=&b; b=&a;
……
}
程序在执行了c=&b;b=&a;语句后,表达式:**c的值是 C
A.变量a的地址 B.变量b中的值 C.变量a中的值 D.变量b的地址
34.有以下程序
#include <string.h>
main()
{ char str[][20]={"Hello","Beijing"},*p=str;
printf("%d\n",strlen(p+20));
*****定义的是一个二维数组即str[0]=hello, str[1]=Beijing;
******将p长度后移20 即进入str[1][0]
}
程序运行后的输出结果是 C
A.0 B.5 C.7 D.20
35.已定义以下函数
fun(char *p2, char *p1)
{ while((*p2=*p1)!='\0'){ p1++;p2++; } }
函数的功能是 a
A.将p1所指字符串复制到p2所指内存空间
B.将p1所指字符串的地址赋给指针p2
C.对p1和p2两个指针所指字符串进行比较
D.检查p1和p2两个指针所指字符串中是否有'\0'
36.有以下程序
main()
{ int x=3, y=2, z=1;
printf("%d\n",x/y&~z);***~取反符
}
程序运行后的输出结果是
A.3 B.2 C.1 D.0
37.若fp已正确定义并指向某个文件,当未遇到该文件结束标志时函数feof(fp)的值为
A.0 B.1 C.-1 D.一个非0值 a
******函数feof判断文件是否到结束标志
38.下列关于C语言数据文件的叙述中正确的是 D
A.文件由ASCII码字符序列组成,C语言只能读写文本文件
B.文件由二进制数据序列组成,C语言只能读写二进制文件
C.文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件
D.文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件
39.有以下程序
main()
{ int a[3][3],*p,i;
p=&a[0][0];
for(i=0;i<9;i++) p[i]=i+1;
printf("%d \n",a[1][2]);
}
程序运行后的输出结果是 B
A.3 B.6 C.9 D.2
40.有以下结构体说明和变量定义,如图所示,指针p、q、r分别指向一个链表中的三个连续结点。
struct node
{ int data;
struct node *next;
} *p, *q, *r;
↑p ↑q ↑r
现要将q和r所指结点的先后位置交换,同时要保持链表的连续,以下错误的程序段是 A
A.r->next=q; q->next=r->next; p->next=r;
B.q->next=r->next; p->next=r; r->next=q;
C.p->next=r; q->next=r->next; r->next=q;
D.q->next=r->next; r->next=q; p->next=r;
二、填空题
1.以下程序运行后的输出结果是 【1】 3。
main()
{ int p=30;
printf("%d\n",(p/3>0 ? p/10 : p%3));
}
2.以下程序运行后的输出结果是 【2】 。b
main()
{ char m;
m='B'+32; printf("%c\n",m);
}
3.以下程序运行后的输出结果是 【3】 yes。
main()
{ int a=1,b=3,c=5;
if (c=a+b) printf("yes\n");
else printf("no\n");
}
4.以下程序运行后的输出结果是 【4】 1 3 2。
main()
{ int i,m=0,n=0,k=0;
for(i=9; i<=11;i++)
switch(i/10)
{ case 0: m++;n++;break;
case 10: n++; break;
default: k++;n++;
}
printf("%d %d %d\n",m,n,k);
}
5.执行以下程序后,输出'#'号的个数是 【5】 6。
#include <stdio.h>
main()
{ int i,j;
for(i=1; i<5; i++)
for(j=2; j<=i; j++) putchar('#');
}
6.以下程序的功能是调用函数fun计算:m=1-2+3-4+…+9-10,并输出结果。请填空。
int fun( int n)
{ int m=0,f=1,i;
for(i=1; i<=n; i++)
{ m+=i*f;
f= 【6】 -f;
}
return m;
}
main()
{ printf("m=%d\n", 【7】 ); } fun(10)
7.以下程序运行后的输出结果是 【8】 1 3 7 15
main()
{ int i,n[]={0,0,0,0,0};
for(i=1;i<=4;i++)
{ n[i]=n[i-1]*2+1;
printf("%d ",n[i]);
}
}
8.以下程序运行后的输出结果是 【9】 1 2 3
main() 0 5 6
{ int i,j,a[][3]={1,2,3,4,5,6,7,8,9}; 0 0 9
for(i=0;i<3;i++)
for(j=i+1;j<3;j++) a[j][i]=0;
for(i=0;i<3;i++)
{ for(j=0;j<3;j++) printf("%d ",a[i][j]);
printf("\n");
}
}
9.以下程序运行后的输出结果是 【10】 30 25
int a=5;
fun(int b)
{ static int a=10;
a+=b++;
printf("%d ",a);
}
main()
{ int c=20;
fun(c);
a+=c++;
printf("%d\n",a);
}
10.请在以下程序第一行的下划线处填写适当内容,使程序能正确运行。
【11】 double max
____________( double,double);
main()
{ double x,y;
scanf("%lf%lf",&x,&y);
printf("%lf\n",max(x,y));
}
double max(double a,double b)
{ return(a>b ? a:b); }
11.以下程序运行后输入:3,abcde<回车>,则输出结果是 【12】 cdeab
#include <string.h>
move(char *str, int n)
{ char temp; int i;
temp=str[n-1];
for(i=n-1;i>0;i--) str[i]=str[i-1];
str[0]=temp;
}
main()
{ char s[50]; int n, i, z;
scanf("%d,%s",&n,s);
z=strlen(s);
for(i=1; i<=n; i++) move(s, z);
printf("%s\n",s);
}
12.以下程序运行后的输出结果是 【13】 136
fun(int x)
{ if(x/2>0) fun(x/2);
printf("%d ",x);
}
main()
{ fun(6); }
13.已有定义如下:
struct node
{ int data;
struct node *next;
} *p;
以下语句调用malloc函数,使指针p指向一个具有struct node类型的动态存储空间。请填空。
p = (struct node *)malloc( 【14】 ); sizeof(node)
14.以下程序的功能是将字符串s中的数字字符放入d数组中,最后输出d中的字符串。例如,输入字符串:abc123edf456gh,执行程序后输出:123456。请填空。
#include <stdio.h>
#include <ctype.h>
main()
{ char s[80], d[80]; int i,j;
gets(s);
for(i=j=0;s[i]!='\0';i++)
if( 【15】 ) { d[j]=s[i]; j++; } ( s[i]>46)&&( s[i]<58)
d[j]='\0';
puts(d);
}
C程序设计练习一
1.C 2.D 3.A 4.D 5.B 6.D 7.C 8.A 9.D 10.C
11.C 12.B 13.B 14.C 15.C 16.A 17.D 18.C 19.A 20.A
21.C 22.D 23.B 24.B 25.D 26.C 27.B 28.A 29.D 30.B
31.B 32.B 33.C 34.C 35.A 36.D 37.A 38.D
39.B 40.A
练习二答案
1.C 2.A 3.B 4.D 5.B 6.D 7.A 8.A 9.C 10.B
11.D 12.A 13.B 14.C 15.D 16.C 17.B 18.C 19.B 20.D
21.C 22.C 23.C 24.C 25.B 26.A 27.C 28.C 29.A 30.A
31.A 32.C 33.D 34.B 35.D 36.D 37.A
C程序设计练习一
1. 在计算机中,一个字节所包含二进制位的个数是:
A.2 B.4 C.8 D.16
2. 能将高级语言编写的源程序转换为目标程序的软件是
A.汇编程序 B.编辑程序 C.解释程序 D.编译程序
3. 以下叙述中正确的是
A.C程序中注释部分可以出现在程序中任意合适的地方
B.花括号"{"和"}"只能作为函数体的定界符,*****可作为复合语句的定界符
C.构成C程序的基本单位是函数,所有函数名都可以由用户命名******main
D.分号是C语句之间的分隔符,不是语句的一部分
C程序设计练习二
一、选择题
(1) 用8位无符号二进制数能表示的最大十进制数为
A) 127 B) 128 C) 255 D) 256
(2) C语言中用于结构化程序设计的三种基本结构是
A) 顺序结构、选择结构、循环结构
B) if、switch、break
C) for、while、do-while
D) if、for、continue
(3) 在一个C语言程序中
A) main函数必须出现在所有函数之前
B) main函数可以在任何地方出现
C) main函数必须出现在所有函数之后
D) main函数必须出现在固定位置
(4) 下列叙述中正确的是
A) C语言中既有逻辑类型也有集合类型
B) C语言中没有逻辑类型但有集合类型
C) C语言中有逻辑类型但没有集合类型
D) C语言中既没有逻辑类型也没有集合类型
(5) 下列关于C语言用户标识符的叙述中正确的是
A) 用户标识符中可以出现下划线和中划线(减号)
B) 用户标识符中不可以出现中划线,但可以出现下划线
C) 用户标识符中可以出现下划线,但不可以放在用户标识符的开头
D) 用户标识符中可以出现下划线和数字,它们都可以放在用户标识符的开头
(6) 下列关于单目运算符++、--的叙述中正确的是
A) 它们的运算对象可以是任何变量和常量
B) 它们的运算对象可以是char型变量和int型变量,但不能是float型变量
C) 它们的运算对象可以是int型变量,但不能是double型变量和float型变量
D) 它们的运算对象可以是char型变量、int型变量和float型变量
(7) 有以下程序段
int m=0,n=0; char c='a';
scanf("%d%c%d",&m,&c,&n);
printf("%d,%c,%d\n",m,c,n);
若从键盘上输入:10A10<回车>,则输出结果是:
A) 10,A,10 B) 10,a,10 C) 10,a,0 D) 10,A,0
(8) 有以下程序
main()
{ int i;
for(i=0;i<3;i++)
switch(i)
{ case 1: printf("%d",i);
case 2: printf("%d",i);
default: printf("%d",i);
}
}
执行后输出的结果是
A) 011122 B) 012 C) 012020 D) 120
(9) 有以下程序
main()
{ int i=1,j=1,k=2;
if((j++||k++)&&i++) printf("%d,%d,%d\n",i,j,k);
}
执行后输出的结果是
A) 1,1,2 B) 2,2,1 C) 2,2,2 D) 2,2,3
(10) 有以下程序
main()
{ int a=5,b=4,c=3,d=2;
if(a>b>c)
printf("%d\n",d);
else if((c-1>=d)==1)
printf("%d\n",d+1);
else
printf("%d\n",d+2);
}
执行后输出的结果是
A) 2 B) 3 C) 4 D) 编译时有错,无结果
(11) 有以下程序
main()
{ int p[7]={11,13,14,15,16,17,18},i=0,k=0;
while(i<7&&p[i]%2){k=k+p[i]; i++;}
printf("%d\n",k);
}
执行后输出的结果是
A) 58 B) 56 C) 45 D) 24
(12) 有以下程序
main()
{ int i=0,s=0;
do{
if(i%2){i++;continue;}
i++;
s+=i;
} while(i<7);
printf("%d\n",s);
}
执行后输出的结果是
A) 16 B) 12 C) 28 D) 21
(13) 有以下程序
main()
{ int i=10,j=1;
printf("%d,%d\n",i--,++j);
}
执行后输出的结果是
A) 9,2 B) 10,2 C) 9,1 D) 10,1
(14) main()
{int a=4,b=3,c=5,d,e,f;
d=f1(a,b); d=f1(d,c);
e=f2(a,b); e=f2(e,c);
f=a+b+c-d-e;
printf("%d,%d,%d\n",d,f,e);
}
执行后输出的结果是
A) 3,4,5 B) 5,3,4 C) 5,4,3 D) 3,5,4
(15) 有以下程序
void f(int x,int y)
{ int t;
if(x<y){ t=x; x=y; y=t; }
}
main()
{ int a=4,b=3,c=5;
f(a,b); f(a,c); f(b,c);
printf("%d,%d,%d\n",a,b,c);
}
执行后输出的结果是
A) 3,4,5 B) 5,3,4 C) 5,4,3 D) 4,3,5
(16) 若有一些定义和语句
#include <stdio.h>
int a=4,b=3,*p,*q,*w;
p=&a; q=&b; w=q; q=NULL;
则以下选项中错误的语句是
A) *q=0; B) w=p; C) *p=&a; D) *p=*w;
(17)有以下程序
int *f(int *x,int *y)
{ if(*x<*y)
return x;
else
return y;
}
main()
{ int a=7,b=8,*p,*q,*r;
p=&a; q=&b;
r=f(p,q);
printf("%d,%d,%d\n",*p,*q,*r);
}
执行后输出结果是
A) 7,8,8 B) 7,8,7 C) 8,7,7 D) 8,7,8
(18)有以下程序
main()
{ char *s[]={"one","two","three"},*p;
p=s[1];
printf("%c,%s\n",*(p+1),s[0]);
}
执行后输出结果是
A) n,two B) t,one C) w,one D) o,two
(19)有以下程序
main()
{ int x[8]={8,7,6,5,0,0},*s;
s=x+3;
printf("%d\n",s[2]);
}
执行后输出结果是
A) 随机值 B) 0 C) 5 D) 6
(20) 以下能正确定义数组并正确赋初值的语句是
A) int N=5,b[N][N];
B) int a[1][2]={{1},{3}};
C) int c[2][]={{1,2},{3,4}};
D) int d[3][2]={{1,2},{3,4}};
(21)有以下程序
main()
{ int m[][3]={1,4,7,2,5,8,3,6,9};
int i,j,k=2;
for(i=0;i<3;i++)
{ printf("%d ",m[k][i]); }
}
执行后输出结果是
A) 4 5 6 B) 2 5 8 C) 3 6 9 D) 7 8 9
(22) 以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。
#define N 10
void arrin(int x[N])
{ int i=0;
while(i<N)
scanf("%d",_________);
}
在下划线处应填入的是
A) x+i B) &x[i+1] C) x+(i++) D) &x[++i]
(23) 有以下程序
main()
{ char s[]="\n123\\";
printf("%d,%d\n",strlen(s),sizeof(s));
}
执行后输出结果是
A) 赋初值的字符串有错 B) 6,7 C) 5,6 D) 6,6
(24) 阅读以下函数
fun(char *sl,char *s2)
{ int i=0;
while(sl[i]==s2[i]&&s2[i]!='\0') i++;
return(sl[i]=='\0'&&s2[i]=='\0');
}
此函数的功能是
A) 将s2所指字符串赋给s1
B) 比较s1和s2所指字符串的大小,若s1比s2的大,函数值为1,否则函数值为0
C) 比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0
D) 比较s1和s2所指字符串的长度,若s1比s2的长,函数值为1,否则函数值为0
(25) 以下叙述中正确的是
A) 全局变量的作用域一定比局部变量的作用域范围大
B) 静态(static)类别变量的生存期贯穿于整个程序的运行期间
C) 函数的形参都属于全局变量
D) 未在定义语句中赋初值的auto变量和static变量的初值都是随机值
(26) 设有如下说明
typedef struct
{ int n; char c; double x;}STD;
则以下选项中 ,能正确定义结构体数组并赋初值的语句是
A) STD tt[2]={{1,'A',62},{2,'B',75}};
B) STD tt[2]={1,"A",62,2,"",75};
C) struct tt[2]={{1,'A'},{2,'B'}};
D) struct tt[2]={{1,"A",62.5},{2,"B",75.0}};
(27) 有以下程序
main()
{ union{ unsigned int n;
unsigned char c;
}ul;
ul.c='A';
printf("%c\n",ul.n);
}
执行后输出结果是
A) 产生语法错 B) 随机值 C) A D) 65
(28) 有以下程序
main()
{ char str[]="xyz",*ps=str;
while(*ps) ps++;
for(ps--;ps-str>=0;ps--) puts(ps);}
执行后输出结果是
A) yz<回车>xyz B) z<回车>yz
C) z<回车>yz<回车>xyz D) x<回车>xy<回车>xyz
(29) 有以下程序
main()
{int a[][3]={{1,2,3},{4,5,0}},(*pa)[3],i;
pa=a;
for(i=0;i<3;i++)
if(i<2) pa[1][i]=pa[1][i]-1;
else pa[1][i]=1;
printf("%d\n",a[0][1]+a[1][1]+a[1][2]);
}
执行后输出结果是
A) 7 B) 6 C) 8 D) 无确定值
(30) 有以下程序
void fun(int *a,int i,int j)
{ int t;
if (i<j)
{ t=a[i];a[i]=a[j];a[j]=t;
fun(a,++i,--j);
}
}
main()
{ int a[]={1,2,3,4,5,6},i;
fun(a,0,5);
for(i=0;i<6;i++)
printf("%d",a[i]);
}
执行后输出结果是
A) 6 5 4 3 2 1 B) 4 3 2 1 5 6
C) 4 5 6 1 2 3 D) 1 2 3 4 5 6
(31) 有以下程序
main(int argc,char *argv[])
{ int n,i=0;
while(argv[1][i]!='\0')
{ n=fun(); i++;}
printf("%d\n",n*argc);
}
int fun()
{ static int s=0;
s+=1;
return s;
}
假设程序编译、连接后生成可执行文件exam.exe,若键入以下命令
exam 123〈回车〉
则运行结果为
A) 6 B) 8 C) 3 D) 4
(32) 以下程序中,能够通过调用函数fun,使main函数中的指针变量p指向一个合法的整型单元的是
A) main()
{int *p;
fun(p);… }
int fun(int *p)
{ int s;
p=&s;} B) main()
{int *p;
fun(&p);…}
int fun(int **p)
{int s;
*p=&s;}
C) #include<stdlib.h>
main()
{int *p;
fun(&p);…}
int fun(int **p)
{*p=(int*)malloc(2);}… D) #include<stdlib.h>
main()
{int *p;
fun(p);…}
int fun(int *p)
{p=(int*)malloc(sizeof(int));}
(33) 若要说明一个类型名STP,使得定义语句STP s;等价于char *s;,以下选项中正确的是
A) typedef STP char *s;
B) typedef *char STP;
C) typedef STP *char;
D) typedef char* STP ;
(34) 设有如下定义
struct ss
{ char name[10];
int age;
char sex;
} std[3],* p=std;
下面各输入语句中错误的是
A) scanf("%d",&(*p).age);
B) scanf("%s",&std.name);
C) scanf("%c",&std[0].sex);
D) scanf("%c",&(p->sex));
(35) 设char型变量x中的值为10100111,则表达式(2+x)∧(~3)的值是
A) 10101001 B) 10101000 C) 11111101 D) 01010101
(36) 以下叙述中不正确的是
A) C语言中的文本文件以ASCII码形式存储数据
B) C语言中对二进制位的访问速度比文本文件快
C) C语言中,随机读写方式不使用于文本文件
D) C语言中,顺序读写方式不使用于二进制文件
(37) 以下程序企图把从终端输入的字符输出到名为abc.txt的文件中,直到从终端读入
字符#号时结束输入和输出操作,但程序有错。
#include <stdio.h>
main()
{ FILE *fout; char ch;
fout=fopen('abc.txt','w');
ch=fgetc(stdin);
while(ch!='#')
{ fputc(ch,fout);
ch =fgetc(stdin);
}
fclose(fout);
}
出错的原因是
A) 函数fopen调用形式有误
B) 输入文件没有关闭
C) 函数fgetc调用形式有误
D) 文件指针stdin没有定义
二) 填空题
(1) 若有语句
int i=-19,j=i%4;
printf("%d\n",j);
则输出的结果是【1】。
(2) 若有程序
main()
{ int i,j;
scanf("i=%d,j=%d",&i,&j);
printf("i=%d,j=%d\n ",i,j);
}
要求给i赋10,给j赋20,则应该从键盘输入【2】。
(3) 若有以下程序
main()
{ int p,a=5;
if(p=a!=0)
printf("%d\n",p);
else
printf("%d\n",p+2);
}
执行后输出结果是【3】。
(4) 若有以下程序
main()
{ int a=4,b=3,c=5,t=0;
if(a<b)t=a;a=b;b=t;
if(a<c)t=a;a=c;c=t;
printf("%d %d %d\n",a,b,c);
}
执行后输出结果为【4】。
(5) 若有以下程序
main()
{ int a[4][4]={{1,2,-3,-4},{0,-12,-13,14} ,{-21,23,0,-24},{-31,32,-33,0}};
int i,j,s=0;
for(i=0;i<4;i++)
{ for(j=0;j<4;j++)
{ if(a[i][j]<0) continue;
if(a[i][j]==0) break;
s+=a[i][j];
}
}
printf("%d\n",s);
}
执行后输出结果是【5】。
(6) 若有以下程序
main()
{ char a;
a='H'-'A'+'0';
printf("%c\n",a);
}
执行后输出结果是【6】。
(7) 若有以下程序
int f(int x,int y)
{ return(y-x)*x; }
main()
{ int a=3,b=4,c=5,d;
d=f(f(3,4),f(3,5));
printf("%d\n",d);
}
执行后输出结果是【7】。
(8) 函数YangHui的功能是把杨辉三角形的数据赋给二维数组的下半三角,形式如下
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1.
其构成规律是:
(1) 第0列元素和主对角线元素均为1
(2) 其余元素为其左上方和正上方元素之和
(3) 数据的个数每行递增1
请将程序补充完整。
#define N 6
void yanghui(int x[N][N])
{ int i,j;
x[0][0]=1;
for(i=1;i<N;i++)
{ x[i][0]=【8】=1;
for(j=1;j<i;j++)
x[i][j]=【9】;
}
}
(9) 以下函数的功能是删除字符串s中的所有数字字符。请填空。
viod dele(char *s)
{ int n=0,i;
for(i=0;s[i];i++)
if(【10】)
s[n++]=s[i];
s[n]=【11】;
}
(10) 设函数findbig已定义为求3个数中的最大值。以下程序将利用函数指针调用findbig函数。请填空。
main()
{ int findbig(int,int,int);
int (*f)(),x,y,z,big;
f=【12】;
scanf("%d%d%d",&x,&y,&z);
big=(*f)(x,y,z);
printf("big=%d\n",big);
}
(11) 以下程序的输出结果是【13】。
#define MCRA(m) 2*m
#define MCRB(n,m) 2*MCRA(n)+m
main()
{ int i=2,j=3;
printf("%d\n",MCRB(j,MCRA(i)));
}
(12) 设有以下定义
stuct ss
{ int info; struct ss *link;}x,y,z;
且已建立如下图所示链表结构:
x → y → z
请写出删除结点y的赋值语句【14】。
(13) 已有文本文件test.txt,其中的内容为:Hello,everyone!。以下程序中,文件test.txt已正确为“读”而打开,由此文件指针fr指向文件,则程序的输出结果是【15】。
#include <stdio.h>
main()
{ FILE *fr; char str[40];
......
fgets(str,5,fr);
printf("%s\n",str);
fclose(fr);
}
4以下不能定义为用户标识符的是
A.scanf ******外部加载的 B.Void C._3com_ D.int******保留字
5有以下程序
main(){
int a; char c=10;
float f=100.0; double x;
a=f/=c*=(x=6.5);
printf("%d %d %3.1f %3.1f\n",a,c,f,x);
}
程序运行后的输出结果是
A.1 65 1 6.5 B.1 65 1.5 6.5
C.1 65 1.0 6.5 D.2 65 1.5 6.5
6以下选项中非法的表达式是
A.0<=x<100 B.i=j==0
C.(char)(65+3) D.x+1=x+1
7有以下程序
main(){
int a=1,b=2,m=0,n=0,k;
k=(n=b>a)||(m=a<b);*****或运算中,前面已经为真,所以后面不算了m=0;
printf("%d,%d\n",k,m);
}
程序运行后的输出结果是
A.0,0 B.0,1 C.1,0 D.1,1
8有定义语句:int x, y;,若要通过scanf("%d,%d",&x,&y);语句使变量x得到数值11,变量y得到数值12,下面四组输入形式中,错误的是 *******格式说明中有一个逗号,所以输入时也要有逗号
A.11 12<回车> B.11, 12<回车>
C.11,12<回车> D.11,<回车>12<回车>
9设有如下程序段:
int x=2002, y=2003;
printf("%d\n",(x,y));
则以下叙述中正确的是
A.输出语句中格式说明符的个数少于输出项的个数,不能正确输出
B.运行时产生出错信息
C.输出值为2002
D.输出值为2003
10变量x为float型且已赋值,则以下语句中能将x中的数值保留到小数点后两位,并将第三位四舍五入的是
A.x=x*100+0.5/100.0; B.x=(x*100+0.5)/100.0;
C.x=(int)(x*100+0.5)/100.0; D.x=(x/100+0.5)*100.0;
11定义语句:int a=1,b=2,c=3,x;,则以下选项中各程序段执行后,x的值不为3的是
A. if (c<a) x=1;
else if (b<a) x=2;
else x=3; B. if (a<3) x=3;
else if (a<2) x=2;
else x=1;
C. if (a<3) x=3;
if (a<2) x=2;
if (a<1) x=1; D. if (a<b) x=b;
if (b<c) x=c;
if (c<a) x=a;
12以下程序
main(){
int s=0,a=1,n;
scanf("%d",&n);
do{
s+=1; a=a-2;
}
while(a!=n);
printf("%d\n",s);
}
若要使程序的输出值为2,则应该从键盘给n输入的值是
A.-1 B.-3 C.-5 D.0
13有如下程序段,其中s、a、b、c均已定义为整型变量,且a、c均已赋值(c大于0)
s=a;
for(b=1;b<=c;b++) s=s+1;
则与上述程序段功能等价的赋值语句是
A.s=a+b; B.s=a+c; C.s=s+c; D.s=b+c;
14以下程序
main(){
int k=4,n=0;
for( ; n<k ; ){
n++;
if(n%3!=0) continue;
k--;
}
printf("%d,%d\n",k,n);
}
程序运行后的输出结果是 C
A.1,1 B.2,2 C.3,3 D.4,4
15求以下程序的功能是计算:s=
main(){
int n; float s;
s=1.0;
for(n=10;n>1;n--)
s=s+1/n;
printf("%6.4f\n",s);
}
程序运行后输出结果错误,导致错误结果的程序行是 c
A.s=1.0; B.for(n=10;n>1;n--)
C.s=s+1/n;*****类型不符 D.printf("%6.4f\n",s);
16定义ch为字符型变量,以下赋值语句中错误的是 a
A.ch='\';****这是转义符 B.ch=62+3; C.ch=NULL; D.ch='\xaa';
17已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是 d
A.函数调用可以作为独立的语句存在
B.函数调用可以作为一个函数的实参
C.函数调用可以出现在表达式中
D.函数调用可以作为一个函数的形参
18有以下函数定义:
void fun(int n, double x) { …… } C
若以下选项中的变量都已正确定义并赋值,则对函数fun的正确调用语句是
A.fun(int y,double m); B.k=fun(10,12.5);
C.fun(x,n); D.void fun(n,x);
19有以下程序
void fun(char *a, char *b)
{ a=b; (*a)++; }
main()
{ char c1='A',c2='a',*p1,*p2;
p1=&c1; p2=&c2; fun(p1,p2);
printf("%c%c\n",c1,c2);
}
程序运行后的输出结果是 a
A.Ab B.aa C.Aa D.Bb
20有以下程序
#include <stdio.h>
main()
{ printf("%d\n",NULL); }
程序运行后的输出结果是 a
A.0*****null在c语言中的值为0 B.1 C.-1 D.NULL没定义,出错
21已定义c为字符型变量,则下列语句中正确的是 c ****c可以附值为数值或者单个字符
A.c='97'; B.c="97"; C.c=97; D.c="a";
22以下不能正确定义二维数组的选项是 d******二位数组定义时,列不能省略
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}};
23.以下选项中不能正确把cl定义成结构体变量的是 b
A.typedef struct
{ int red;
int green; int blue;
} COLOR;
COLOR cl; B.struct color cl****变量名不能写在上面
{ int red;
int green;
int blue;
};
C.struct color
{ int red;
int green; int blue;
} cl; D.struct
{ int red;
int green;
int blue;
} cl;
24.以下能正确定义一维数组的选项是 B
A.int num[]; B. #define N 100
int num[N];
C.int num[0..100]; D. int N=100; ****数组定义时不可以使用变量
int num[N];
25.下列选项中正确的语句组是 d*****数组变量符值必须使用函数
A.char s[8]; s={"Beijing"}; B.char *s; s={"Beijing"};
C.char s[8]; s="Beijing"; D.char *s; s="Beijing";
26.已定义以下函数
fun(int *p)
{ return *p; }
该函数的返回值是 C
A.不确定的值 B.形参p中存放的值
C.形参p所指存储单元中的值 D.形参p的地址值
27.下列函数定义中,会出现编译错误的是 b
A.max(int x,int y,int *z)
{ *z=x>y ? x:y; } B.int max(int x,y)****y前缺少int
{ int z;
z=x>y ? x:y;
return z;
}
C.max(int x,int y)
{ int z;
z=x>y?x:y; return(z);
} D.int max(int x,int y)
{ return(x>y?x:y); }
28.有以下程序
#include <stdio.h>
#define F(X,Y) (X)*(Y)
main()
{ int a=3, b=4;
printf("%d\n", F(a++, b++));
}
程序运行后的输出结果是 a
A.12 B.15 C.16 D.20
29.有以下程序 D
fun(int a, int b)
{ if(a>b) return(a);
else return(b);
}
main()
{ int x=3, y=8, z=6, r;
r=fun(fun(x,y), 2*z);
printf("%d\n", r);
}
程序运行后的输出结果是
A.3 B.6 C.8 D.12
30.若有定义:int *p[3];,则以下叙述中正确的是 B
A.定义了一个基类型为int的指针变量p,该变量具有三个指针
B.定义了一个指针数组p,该数组含有三个元素,每个元素都是基类型为int的指针
C.定义了一个名为*p的整型数组,该数组含有三个int类型元素
D.定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素
31.以下程序中函数scmp的功能是返回形参指针s1和s2所指字符串中较小字符串的首地址
#include <stdio.h>
#include <string.h>
char *scmp(char *s1, char *s2)
{ if(strcmp(s1,s2)<0)
return(s1);
else return(s2);
}
main()
{ int i; char string[20], str[3][20];
for(i=0;i<3;i++) gets(str[i]);
strcpy(string,scmp(str[0],str[1])); /*库函数strcpy对字符串进行复制*/
strcpy(string,scmp(string,str[2]));
printf("%s\n",string);
}
若运行时依次输入:abcd、abba和abc三个字符串,则输出结果为 B
A.abcd B.abba C.abc D.abca
32.有以下程序
struct s
{ int x,y; } data[2]={10,100,20,200};
main()
{ struct s *p=data;
printf("%d\n",++(p->x));
}
程序运行后的输出结果是 B
A.10 B.11 C.20 D.21
33.有以下程序段
main()
{ int a=5,*b,**c;
c=&b; b=&a;
……
}
程序在执行了c=&b;b=&a;语句后,表达式:**c的值是 C
A.变量a的地址 B.变量b中的值 C.变量a中的值 D.变量b的地址
34.有以下程序
#include <string.h>
main()
{ char str[][20]={"Hello","Beijing"},*p=str;
printf("%d\n",strlen(p+20));
*****定义的是一个二维数组即str[0]=hello, str[1]=Beijing;
******将p长度后移20 即进入str[1][0]
}
程序运行后的输出结果是 C
A.0 B.5 C.7 D.20
35.已定义以下函数
fun(char *p2, char *p1)
{ while((*p2=*p1)!='\0'){ p1++;p2++; } }
函数的功能是 a
A.将p1所指字符串复制到p2所指内存空间
B.将p1所指字符串的地址赋给指针p2
C.对p1和p2两个指针所指字符串进行比较
D.检查p1和p2两个指针所指字符串中是否有'\0'
36.有以下程序
main()
{ int x=3, y=2, z=1;
printf("%d\n",x/y&~z);***~取反符
}
程序运行后的输出结果是
A.3 B.2 C.1 D.0
37.若fp已正确定义并指向某个文件,当未遇到该文件结束标志时函数feof(fp)的值为
A.0 B.1 C.-1 D.一个非0值 a
******函数feof判断文件是否到结束标志
38.下列关于C语言数据文件的叙述中正确的是 D
A.文件由ASCII码字符序列组成,C语言只能读写文本文件
B.文件由二进制数据序列组成,C语言只能读写二进制文件
C.文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件
D.文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件
39.有以下程序
main()
{ int a[3][3],*p,i;
p=&a[0][0];
for(i=0;i<9;i++) p[i]=i+1;
printf("%d \n",a[1][2]);
}
程序运行后的输出结果是 B
A.3 B.6 C.9 D.2
40.有以下结构体说明和变量定义,如图所示,指针p、q、r分别指向一个链表中的三个连续结点。
struct node
{ int data;
struct node *next;
} *p, *q, *r;
↑p ↑q ↑r
现要将q和r所指结点的先后位置交换,同时要保持链表的连续,以下错误的程序段是 A
A.r->next=q; q->next=r->next; p->next=r;
B.q->next=r->next; p->next=r; r->next=q;
C.p->next=r; q->next=r->next; r->next=q;
D.q->next=r->next; r->next=q; p->next=r;
二、填空题
1.以下程序运行后的输出结果是 【1】 3。
main()
{ int p=30;
printf("%d\n",(p/3>0 ? p/10 : p%3));
}
2.以下程序运行后的输出结果是 【2】 。b
main()
{ char m;
m='B'+32; printf("%c\n",m);
}
3.以下程序运行后的输出结果是 【3】 yes。
main()
{ int a=1,b=3,c=5;
if (c=a+b) printf("yes\n");
else printf("no\n");
}
4.以下程序运行后的输出结果是 【4】 1 3 2。
main()
{ int i,m=0,n=0,k=0;
for(i=9; i<=11;i++)
switch(i/10)
{ case 0: m++;n++;break;
case 10: n++; break;
default: k++;n++;
}
printf("%d %d %d\n",m,n,k);
}
5.执行以下程序后,输出'#'号的个数是 【5】 6。
#include <stdio.h>
main()
{ int i,j;
for(i=1; i<5; i++)
for(j=2; j<=i; j++) putchar('#');
}
6.以下程序的功能是调用函数fun计算:m=1-2+3-4+…+9-10,并输出结果。请填空。
int fun( int n)
{ int m=0,f=1,i;
for(i=1; i<=n; i++)
{ m+=i*f;
f= 【6】 -f;
}
return m;
}
main()
{ printf("m=%d\n", 【7】 ); } fun(10)
7.以下程序运行后的输出结果是 【8】 1 3 7 15
main()
{ int i,n[]={0,0,0,0,0};
for(i=1;i<=4;i++)
{ n[i]=n[i-1]*2+1;
printf("%d ",n[i]);
}
}
8.以下程序运行后的输出结果是 【9】 1 2 3
main() 0 5 6
{ int i,j,a[][3]={1,2,3,4,5,6,7,8,9}; 0 0 9
for(i=0;i<3;i++)
for(j=i+1;j<3;j++) a[j][i]=0;
for(i=0;i<3;i++)
{ for(j=0;j<3;j++) printf("%d ",a[i][j]);
printf("\n");
}
}
9.以下程序运行后的输出结果是 【10】 30 25
int a=5;
fun(int b)
{ static int a=10;
a+=b++;
printf("%d ",a);
}
main()
{ int c=20;
fun(c);
a+=c++;
printf("%d\n",a);
}
10.请在以下程序第一行的下划线处填写适当内容,使程序能正确运行。
【11】 double max
____________( double,double);
main()
{ double x,y;
scanf("%lf%lf",&x,&y);
printf("%lf\n",max(x,y));
}
double max(double a,double b)
{ return(a>b ? a:b); }
11.以下程序运行后输入:3,abcde<回车>,则输出结果是 【12】 cdeab
#include <string.h>
move(char *str, int n)
{ char temp; int i;
temp=str[n-1];
for(i=n-1;i>0;i--) str[i]=str[i-1];
str[0]=temp;
}
main()
{ char s[50]; int n, i, z;
scanf("%d,%s",&n,s);
z=strlen(s);
for(i=1; i<=n; i++) move(s, z);
printf("%s\n",s);
}
12.以下程序运行后的输出结果是 【13】 136
fun(int x)
{ if(x/2>0) fun(x/2);
printf("%d ",x);
}
main()
{ fun(6); }
13.已有定义如下:
struct node
{ int data;
struct node *next;
} *p;
以下语句调用malloc函数,使指针p指向一个具有struct node类型的动态存储空间。请填空。
p = (struct node *)malloc( 【14】 ); sizeof(node)
14.以下程序的功能是将字符串s中的数字字符放入d数组中,最后输出d中的字符串。例如,输入字符串:abc123edf456gh,执行程序后输出:123456。请填空。
#include <stdio.h>
#include <ctype.h>
main()
{ char s[80], d[80]; int i,j;
gets(s);
for(i=j=0;s[i]!='\0';i++)
if( 【15】 ) { d[j]=s[i]; j++; } ( s[i]>46)&&( s[i]<58)
d[j]='\0';
puts(d);
}
C程序设计练习一
1.C 2.D 3.A 4.D 5.B 6.D 7.C 8.A 9.D 10.C
11.C 12.B 13.B 14.C 15.C 16.A 17.D 18.C 19.A 20.A
21.C 22.D 23.B 24.B 25.D 26.C 27.B 28.A 29.D 30.B
31.B 32.B 33.C 34.C 35.A 36.D 37.A 38.D
39.B 40.A
练习二答案
1.C 2.A 3.B 4.D 5.B 6.D 7.A 8.A 9.C 10.B
11.D 12.A 13.B 14.C 15.D 16.C 17.B 18.C 19.B 20.D
21.C 22.C 23.C 24.C 25.B 26.A 27.C 28.C 29.A 30.A
31.A 32.C 33.D 34.B 35.D 36.D 37.A
回复Comments
{commenttime}{commentauthor}
{CommentUrl}
{commentcontent}