B.a==11||a==12||a==13||a==14
C.a>10&&a<15
D.!
(a<=10)&&!
(a>=15)
5.设以下变量均为int类型,表达式的值不为9的是C。
A.(x=y=8,x+y,x+1)
B.(x=y=8,x+y,y+1)
C.(x=8,x+1,y=8,x+y)
D.(y=8,y+1,x=y,x+1)
二.填空题
2.逻辑表达式x&&1等价于关系表达式x!
=0。
3.设inta=5,b=6;那么表达式(++a==b--)?
++a:
--b的值是7。
4.设c='w',a=1,b=2,d=-5,那么表达式'x'+1>c,'y'!
=c+2,-a-5*b<=d+1,b==(a=2)的值分别为1、0、1、1。
5.运行以下程序后,如果从键盘上输入china#<回车>,那么输出结果为c1=2,c2=5。
#include
intmain(void)
{
intc1=0,c2=0;charch;
while((ch=getchar())!
=’#’)
switch(ch)
{case‘a’:
case‘h’:
c1++;
default:
c2++;
}
printf(“c1=%d,c2=%d\n〞,c1,c2);
return0;
}
三.程序设计题
1.分类统计字符个数:
输入一行字符,统计出其中的英文字母、空格、数字和其他字符的个数。
试编写相应程序。
解答:
#include
intmain(void)
{
charop;
intletter,blank,digit,other;
printf("Inputcharacters:
");
op=getchar();
letter=blank=0;
digit=other=0;
while(op!
='\n'){
if(op=='')blank++;
elseif(op>='a'&&op<='z'||op>='A'&&op<='Z')letter++;
elseif(op>='0'&&op<='9')digit++;
elseother++;
op=getchar();
}
printf("blank=%d,other=%d,letter=%d,digit=%d",blank,other,letter,digit);
return0;
}
2.使用函数累加由n个a构成的整数之和:
输入两个正整数a和n,求a+aa+aaa+aa…a(n个a)之和。
要求定义和调用函数fn〔a,n〕,它的功能是返回aa……a〔n个a〕。
例如,fn〔3,2〕的返回值是33。
试编写相应程序。
解答:
#include
intmain(void)
{
inta,i,n;
longsn;
longfn(inta,intn);
scanf("%ld%d",&a,&n);
sn=0;
for(i=1;i<=n;i++)
sn=sn+fn(a,i);
printf("%ld\n",sn);
return0;
}
longfn(inta,intn)
{
inti;
longtn;
tn=0;
for(i=1;i<=n;i++)
tn=10*tn+a;
returntn;
}
3.使用函数输出指定范围内的函数:
输入两个正整数m和n(1<=m,n<=1000),输出m~n之间的所有完数,完数就是因子和与它本身相等的数。
要求定义并调用函数factorsum(number),它的功能是返回number的因子和。
例如,factorsum(12)的返回值是16〔1+2+3+4+6〕。
试编写相应程序。
解答:
#include
intfactorsum(intnumber);
intmain(void)
{
intm,n;
printf("Inputm:
");
scanf("%d",&m);
printf("Inputn:
");
scanf("%d",&n);
printf("完全数是:
")
for(;m<=n;m++)
if(factorsum(m)==1)
printf("%d",m);
return0;
}
intfactorsum(intnumber)
{
inti,sum;
if(number==1)return1;
sum=0;
for(i=1;i<=number/2;i++)
if(number%i==0)
sum=sum+i;
if(sum==number)return1;
return0;
}
4.使用函数输出指定范围内的Fibonacci数:
输入两个正整数m和n(1<=m,n<=10000),输出m~n之间所有的Fibonacci数。
Fibonacci序列〔第1项起〕:
1123581321……要求定义并调用函数fib(n),它的功能是返回第n项Fibonacci数。
例如,fib(7)的返回值是13。
试编写相应程序。
解答:
#include
intfib(intn);
#include
intmain(void)
{
inti,m,n,f;
printf("Inputm:
");
scanf("%d",&m);
printf("Inputn:
");
scanf("%d",&n);
i=f=1;
while(f<=n){
if(f>=m)printf("%d",f);
i++;
f=fib(i);
}
return0;
}
intfib(intn)
{
inti,x1,x2,x;
if(n==1||n==2)return1;
else{
x1=x2=1;
for(i=3;i<=n;i++){
x=x1+x2;
x1=x2;
x2=x;
}
}
returnx;
}
5.使用函数验证哥德巴赫猜想:
任何一个不小于6的偶数均可表示为两个奇素数之和。
例如6=3+3,8=3+5,…,18=5+13。
将6~100之间的偶数都表示成两个素数之和,打印时一行打印5组。
试编写相应程序。
解答:
#include
intprime(intm);
intmain(void)
{
intcount,i,number;
count=0;
for(number=6;number<=100;number=number+2){
for(i=3;i<=number/2;i=i+2)
if(prime(i)&&prime(number-i)){
printf("%d=%d+%d",number,i,number-i);
count++;
if(count%5==0)printf("\n");
}
}
return0;
}
intprime(intm)
{
intk,i;
for(i=2;i<=m/2;i++)
if(m%i==0)return0;
if(i>m/2&&m!
=1)return1;
}
6.使用函数输出一个整数的逆序数:
输入一个整数,将它逆序输出。
要求定义并调用函数reverse(number),它的功能是返回number的逆序数。
例如,reverse(12345)的返回值是54321。
试编写相应程序。
解答:
#include
intreverse(intnumber);
intmain(void)
{
intnumber;
printf("Inputnumber:
");
scanf("%d",&number);
printf("%d",reverse(number));
return0;
}
intreverse(intnumber)
{
intres,a;
res=0;
while(number!
=0){
a=number;
number=number%10;
res=res*10+number;
number=a/10;}
returnres;
}
7.简单计算器:
模拟简单运算器的工作:
输入一个算式〔没有空格〕,遇等号"="说明输入结束,输出结果。
假设计算器只能进行加、减、乘、除运算,运算数和结果都是整数,4种运算符的优先级相同,按从左到右的顺序计算。
例如,输入“1+2*10-10/2=〞后,输出10。
试编写相应程序。
解答:
#include
intmain(void)
{
charop;
intoperand1,operand2,res;
scanf("%d",&operand1);
op=getchar();
while(op!
='='){
scanf("%d",&operand2);
switch(op){
case'+':
res=operand1+operand2;break;
case'-':
res=operand1-operand2;break;
case'*':
res=operand1*operand2;break;
case'/':
res=operand1/operand2;break;
default:
res=0;
}
operand1=res;
op=getchar();
}
printf("%d",res);
return0;
}
8.统计一行文本的单词个数:
输入一行字符,统计其中单词的个数。
各单词之间用空格分隔,空格数可以是多个,试编写相应程序。
解答:
#include
intmain(void)
{
charop;
intcount,word;
printf("Inputwords:
");
op=getchar();
count=word=0;
while(op!
='\n'){
if(op=='')
word=0;
elseif(word==0){
count++;
word=1;
}
op=getchar();
}
printf("count=%d\n",count);
return0;
}