printf("%d",B*2);
4.写出判断字符变量c是英文字母的表达式。
5.写出下列程序段的输出结果。
intk,x;
for(k=0,x=0;k<=9&&x!
=10;k++)
x+=2;
printf("%d,%d",k,x);
6.写出下列程序段的输出结果。
printf(“%d,%d”,NULL,EOF);
7.对于以下递归函数f,调用f(3)的返回值是_____。
f(intn)
{return((n>0)?
2*f(n-1)+f(n-2):
-1);}
8.写出下列程序段的输出结果。
charstr[]="hello\tworld\n";
printf("%d,%c\n",sizeof(str),*(str+10));
9.输入12345#后,写出下列程序的输出结果。
voidmain()
{charc;
for(c=getchar();getchar()!
=’#’;c=getchar())
putchar(c);
}
10.执行程序find–nxouldtext.txt时,*++argv[1]的值是_______。
三、程序阅读题(每题5分,共20分)
1.若输入3123<回车>,则以下程序的输出结果是_______。
#include"stdio.h"
voidmain()
{inti,j,n,a[10];
scanf("%d",&n);
for(i=0;iscanf("%d",&a[i]);
for(i=0;ifor(j=0;jprintf("%d,",a[(i+j)%n]);
}
2.若输入89762425981116354<回车>,则以下程序的输出结果是_______。
#include"stdio.h"
#defineN10
main()
{
intx[N],y1[N],y2[N];
inti,j,n1,n2,t,p;
n1=n2=0;
for(i=0;iscanf(“%d”,&x[i]);
if(x[i]%2==0)y1[n1++]=x[i];
elsey2[n2++]=x[i];
}
for(i=1;ifor(j=0;jif(y1[j]>y1[j+1]){
t=y1[j];y1[j]=y1[j+1];y1[j+1]=t;
}
for(i=0;ip=i;
for(j=i+1;jif(y2[p]if(p!
=i){
t=y2[i];y2[i]=y2[p];y2[p]=t;
}
}
for(i=0;ifor(i=0;i}
3.以下程序的输出结果是_______。
#include
intz;
voidp(int*x,inty)
{++*x;
y--;
z=*x+y+z;
printf("%d,%d,%d#",*x,y,z);
}
voidmain()
{intx=1,y=5,z=9;
p(&x,y);
printf("%d,%d,%d#",x,y,z);
}
4.若输入-6+15*3/5=<回车>,则以下程序的输出结果是_______。
#include
voidmain()
{
intm=0,sum=0;
charc,oldc='+';
do{
c=getchar();
if(c<='9'&&c>='0')m=10*m+c-'0';
else{
if(oldc=='+')sum+=m;
elsesum-=m;
m=0;
oldc=c;
printf("%d,",sum);
}
}while(c!
='=');
}
四、程序填空题(每空2分,共20分)
1.下列程序的功能是创建单向链表。
#include
#include
structlink{
charname[10];
intmark;
structlink*next;
};
voidinsert(char*,int);
structlink*head=NULL;
main()
{
charname[10];
intmark;
structlink*t;
while
(1){
scanf("%s%d",name,&mark);
if(strcmp(name,"#")==0)break;
______
(1)_______;
}
for(t=head;______
(2)_______)
printf("<%s>:
%d\n",t->name,t->mark);
}
voidinsert(char*name,intmark)
{
structlink*p;
p=______(3)_______;
strcpy(p->name,name);
p->mark=mark;
______(4)_______;
if(head!
=NULL)______(5)_______;
head=p;
}
2.prog.c是带命令行参数的程序。
运行progfilename时,将文本文件filename中的内容原样输出;运行prog-ufilename时,将文本文件filename中的所有字母以大写方式输出(其余字符原样输出);运行prog-dfilename时,只将文本文件filename中的数字输出。
#include
#include
voidmain(intargc,char*argv[])
{
FILE*fp;
char*filename,ch;
inttag=0;
if(argc<2||argc>3){printf(“Argumenterror\n”);return;}
if(argc==3){
if(strcmp(argv[1],“-u”)==0)tag=1;
elseif(strcmp(argv[1],“-d”)==0)tag=2;
else{printf(“Optionerror\n”);return;}
______(6)_______;
}
elsefilename=argv[1];
if(______(7)_______){
printf(“Cannotopenfile\n”);return;
}
while(______(8)_______){
ch=fgetc(fp);
if(tag==0)putchar(ch);
elseif(tag==1)______(9)_______;
elseif(______(10)_______)putchar(ch);
}
fclose(fp);
}
五、编程题(共10分,混合班学生做第2题,其他学生做第1题)
1.[程序说明](10分)
输入m和n(m≥n≥0)后,计算下列表达式的值并输出。
m!
n!
*(m-n)!
要求将计算阶乘的运算写成函数fact(n),函数返回值的类型为float。
2.[程序说明](10分)
编写函数strcmp(char*s1,char*s2)。
若s1和s2均是数字串(包括+/-号),则按照十进制整数大小进行比较;否则按照Ascii序进行比较。
s1大于/等于/小于s2时,分别输出1/0/-1。
可以直接调用atoi函数。
2000~2001学年《程序设计基础C》参考答案
一、单项选择题(每小题2分,共30分)
题号
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
选择
C
D
A
D
A
B
C
B
D
B
A
B
C
A
C
二、填空题(每小题2分,共20分)
1
1,0.5
2
1
3
-3
4
c>=’a’&&c<=’z’||c>=’A’&&c<=’Z’
5
5,10
6
0,-1
7
-17
8
13,d
9
135
10
‘n’
三、程序阅读题(每题5分,共20分)
1
1,2,3,2,3,1,3,1,2,
2
4,8,16,24,76,89,35,25,11,9,
3
2,4,6#2,5,9#
4
0,-6,9,6,1,
四、程序填空题(每空2分,共20分)
(1)
insert(name,mark)
(2)
t!
=NULL;t=t->next
(3)
(structlink*)malloc(sizeof(structlink))
(4)
p->next=NULL
(5)
p->next=head
(6)
filename=argv[2]
(7)
(fp=fopen(filename,“r”))==NULL
(8)
!
feof(fp)
(9)
putchar(toupper(ch))
(10)
tag==2&&isdigit(ch)
五、编程题(共10分,混合班学生做第2题,其他学生做第1题)
1、
#include
floatfact(int);
main()
{
intm,n;
floatval;
scanf(“%d%d”,&m,&n);
val=fact(m)/(fact(n)*fact(m-n));
printf(“Value:
%f\n”,val);
}
floatfact(intn)
{
if(n<=0)return1;
return(fact(n-1)*n);
}
floatfact(intn)
{inti;floatf=1;
for(i=1;i<=n;i++)
f=f*i;
returnf;
}
2、
#include
#include
#include
intstrcmp(char*s1,char*s2)
{
inttoken=0,val1,val2,n,i;
for(i=0;s1[i]!
=’\0’;i++)
if(s1[i]!
=’+’&&s1[i]!
=’-‘&&!
isdigit(s1[i])){token=1;break;}
for(i=0;!
token&&s2[i]!
=’\0’;i++)
if(s2[i]!
=’+’&&s2[i]!
=’-‘&&!
isdigit(s2[i])){token=1;break;}
if(token==0)
{
val1=atoi(s1);
val2=atoi(s2);
if(val1>val2)n=1;
elseif(val1elsen=0;
returnn;
}
else
{
for(i=0;s1[i]!
=’\0’&&s2[i]!
=’\0’;i++)
if(s1[i]>s2[i])return1;
elseif(s1[i]if(strlen(s1)==strlen(s2))return0;
if(s[i]==‘\0’)return–1;
elsereturn1;
}
}
2000~2001学年“程序设计基础--C”试卷
一、单项选择题(每题2分,共30分)
1.______是合法的用户自定义标识符。
A、b-bB、floatC、D、_isw
2.若变量已正确定义并赋值,表达式______不符合C语言语法。
A、a*b/c;B、3.14%2C、2,bD、a/b/c
3._____是不正确的字符常量。
A、'\n'B、'1'C、"a"D、'\101'
4.在C程序中,用_____表示逻辑值“真”。
A、1B、非0的数C、非1的数D、大于0的数
5.______把x、y定义成float类型变量,并赋同一初值3.14。
A、floatx,y=3.14;B、floatx,y=2*3.14;
C、floatx=3.14,y=x=3.14;D、floatx=y=3.14;
6.若变量已正确定义,表达式______的值不是2。
A、2&3B、1<<1C、a==2D、1^3
7.若变量已正确定义,语句“if(a>b)k=0;elsek=1;”和______等价。
A、k=(a>b)?
1:
0;B、k=a>b;
C、k=a<=b;D、a<=b?
0:
1;
8.设变量定义为“inta,b;”,执行下列语句时,输入_____,则a和b的值都是10。
scanf("a=%d,b=%d",&a,&b);
A、1010B、10,10C、a=10b=10D、a=10,b=10
9.下列程序的输出结果是_____。
fun(inta,intb,intc)
{c=a*b;}
main()
{intc;
fun(2,3,c);
printf(”%d\n”,c);
}
A、0B、1C、6D、无法确定
10.在C程序中,若对函数类型未加说明,则函数的隐含类型为_____。
A、intB、doubleC、voidD、char
11.表达式strlen(”hello”)的值是_______。
A、4B、5C、6D、7
12.设变量定义为“inta[4];”,则表达式______不符合C语言语法。
A、*aB、a[0]C、aD、a++
13.设变量定义为“intx,*p=&x;”,则&*p相当于_____。
A、pB、*pC、xD、*&x
14.若变量已正确定义,____不能使指针p成为空指针。
A、p=EOFB、p=0C、p=’\0’D、p=NULL
15.对于以下的变量定义,表达式______不符合C语言语法。
structnode{
intlen;
char*pk;
}x={2,"right"},*p=&x;
A、p->pkB、*p.pkC、*p->pkD、*x.pk
二、填空题(每题2分,共20分)
11.表示“x≥y≥z”的C表达式是_______。
12.下列程序段的输出是______。
printf("%o\n",010<<1^1);
13.下列程序段的输出是______。
intk;
floats;
for(k=0,s=0;k<7;k++)
s+=k/2;
printf("%d,%f\n",k,s);
14.下列程序段的输出是_______。
#definef(a,b,x)a*x+b
printf("%d,%d\n",f(3,2,1),f(6,5,f(3,2,1)));
15.下列程序段的输出是_____。
main()
{intk;
for(k=1;k<5;k++){
if(k%2)printf("*");
elsecontinue;
printf("#");
}
}
16.下列程序段的输出是_____。
#include
intf(intx)
{staticy=1;
y++;
x+=y;
returnx;
}
voidmain()
{intk;
k=f(3);
printf("%d%d\n",k,f(k));
}
17.下列程序段的输出是_____。
int*p,*q,k=5,j=6;
q=&k;p=q;q=&j;
printf("%d",*p);
18.函数
voidf(chars[],chart[])
{intk=0;
while(s[k]=t[k])k++;
}
等价于
voidf(char*s,char*t)
{while(_____);
}
19.下列程序段的输出是_____。
char*a[2]={"one","two"},**p=a;
printf("%s,",*(p++)+1);
printf("%c\n",**p-1);
20.用typedef定义一个文件指针FP。
三、程序阅读题(每题4分,共16分)
1.输入elephant后,下列程序的输出结果是_______。
#include
voidmain()
{inti=0,k,ch;
staticintnum[5];
charalpha[]={'a','e','i','o','u'},in[80];
gets(in);
while(in[i]){
for(k=0;k<5;k++)
if(in[i]==alpha[k]){
num[k]++;
break;
}
i++;
}
for(k=0;k