选择题
1、如下程序的运行结果为 【 正确答案: B】。
A.9 B.8 C.7 D.6
2、C语言的for语句中的表达式可以部分或全部省略,但两个 【 正确答案: C】不能省略。
但当三个表达式均省略后,因缺少判断条件,循环会无限制在执行下去,形成死循环。
A.< B.++ C.; D.,
3、如下程序的运行结果为 【 正确答案: A】。
#include <stdio.h>
int main()
{
int t = 3;
while(t++<=4)
printf("%d ",t);
printf("%d\n",t);
return 0;
}
A.4 5 6 B. 3 4 5 C.2 3 4 D.2 2 2
解析:
while(t++<=4)
printf("%d ",t);
printf("%d\n",t);
(1)第1次 3<=4 为真,t变为4 输出4
(2)第2次 4<=4 为真,t变为5 输出5
(3)第3次 5<=4 为假,t变为6 结束循环
(4)输出6
4、有如下程序段
int k = 1;
while( !k==0 )
{
k = k + 1;
printf("%d\n",k);
}
则以下说法中正确的是 【 正确答案: B】。
A.while循环执行2次 B.循环是无限循环
C.循环体一次也不执行 D.循环体执行一次
解析:while( !k==0 ) 由于k=1,所以 !k为0 0==0永远为真
5、以下叙述正确的是 【 正确答案: D】。
A. do-while语句构成的循环不能用其它语句构成的循环来代替
B. do-while语句构成的循环只能用break语句退出
C. 用do-while语句构成的循环,while后的表达式为非零时结束循环
D. 用do-while语句构成的循环,while后的表达式为零时结束循环
6、语句for(表达式1; ;表达式3)也可以理解为 【 正确答案: B】。
A. for(表达式1;0 ;表达式3)
B. for(表达式1;1 ;表达式3)
C. for(表达式1; 表达式1;表达式3)
D. for(表达式1; 表达式3;表达式3)
7、以下语句中,正确的是 【 正确答案: D】。
A.continue语句的作用是结束整个循环的执行
B.只能在switch语句体内使用break语句
C.在循环体内使用break和continue语句的作用相同
D.只能在循环体内和switch语句体内使用break语句
8、有如下程序段
int t = 0;
while(t=1)
{......}
由以下叙述中,正确的是 【 正确答案: B】。
A. 循环控制表达式的值为0,不执行循环体
B. 循环控制表达式的值为1,执行循环体
C. 循环控制表达式不合法
D. 以上说法都不正确
解析:while (t=1)中t=1为赋值,不是相等比较。赋值后t为1,为真
9、以上描述中,正确的是 【 正确答案: C】。
A.do-while语句中,循环体不能使用复合语句
B.do-while循环由do开始,到while结束,在while (表达式) 后面不能写分号
C.在do-while循环中,循环体至少执行一次
D.在do-while循环中,根据情况可以省略while
10、若i,j 已经定义为int型,则以下程序段中循环体总的执行次数是 【 正确答案: A】。
for(i=6; i; i--)
for (j=0; j<4; j++)
{ ...... }
A.24 B.20 C.25 D.28
解析:for(i=6; i; i--)中的表达式2 i 等价于i!=0
编程题
1、换零钱
【问题描述】用一张100元人民币换5元、1元、0.5元面值的人民币,要求各种面值的人民币至少各一张,且总张数为100张,问共有多少种换法,各种面值分别为多少张?
【输入形式】无
【输出形式】各种满足条件的换法及换法总数
各种换法前输出
5yuan 1yuan 0.5yuan
每种换法占一行,格式:"%4d%6d%6d\n"(分别与5元、1元、0.5元对应)
最后输出换法总数
【样例输入】无
【样例输出】
5yuan 1yuan 0.5yuan 1 91 8 2 82 16 3 73 24 4 64 32 5 55 40 6 46 48 7 37 56 8 28 64 9 19 72 10 10 80 11 1 88 |
total:11
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main()
{
int x=0,y=0,z=0,total=0;
printf("5yuan 1yuan 0.5yuan\n");
for(x=1;x<=20;x++)
{
for(y=1;y<=100;y++)
{
for(z=1;z<=200;z++)
{
if ((x*5+y*1+z*0.5==100)&&(x+y+z==100))
{
total++;
printf("%4d%6d%6d\n",x,y,z);
}
}
}
}
printf("total:%d\n",total);
return 0;
}
2、最大公约数和最小公倍数
【问题描述】输入两个正整数m和n,求其最大公约数和最小公倍数。
【输入形式】两个正整数
【输出形式】最大公约数和最小公倍数
【样例输入】15,25
【样例输出】
gcd:5
lcm:75
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main()
{
int x,y,z,a,gcd=0,lcm;
scanf("%d,%d",&x,&y);
z=x*y;
if (x<y)
{
a=x;
x=y;
y=a;
}
if(x%y==0)
{
lcm=x;
gcd=y;
}
else
{
while(x%y!=0)
{
gcd=x%y;
x=y;
y=gcd;
}
lcm=z/gcd;
}
printf("gcd:%d\n",gcd);
printf("lcm:%d\n",lcm);
return 0;
}
3、分数序列和
【问题描述】有一分数序列:
求该数列的前n项之和,n由键盘输入。
【输入形式】一个整数n
【输出形式】该数列的前n项之和
【样例输入】3
【样例输出】5.1667
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main()
{
double a=2.0,b=1.0,c;
double d,sum=0;
int n,m;
scanf("%d",&n);
for(m=1;m<=n;m++)
{
d=(double)a/b;
c=a;
a=a+b;
b=c;
sum=sum+d;
}
printf("%.4f\n",sum);
return 0;
}
4、用梯形法求定积分
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main()
{
double a,b,d,s,sd,xd,sum=0;
int i,n;
scanf("%lf,%lf,%d",&a,&b,&n);
d=(b-a)/n;
for(i=0;i<=n-1;i++)
{
sd=2*pow(a+d*i,5)+5*pow(a+d*i,3);
xd=2*pow(a+d*(i+1),5)+5*pow(a+d*(i+1),3);
s=(sd+xd)*d/2.0;
sum=sum+s;
}
printf("%.2f\n",sum);
return 0;
}
5、水仙花数
【问题描述】输出指定范围的水仙花数。所谓水仙花数是指一个3位数,其各位数字立方和等于该数本身。
提示:有两种方法
分割法:三位数拆成三个数字
拼接法:三位数字拼成三位数
【输入形式】两个整数:指定的范围
【输出形式】该范围内的水仙花数
【样例输入】100 200
【样例输出】153
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main()
{
int a,b,c,x,y,i;
scanf("%d %d",&x,&y);
for(i=x;i<=y;i++)
{
a=i/100%10;
b=i/10%10;
c=i%10;
if(pow((double)a,3)+pow((double)b,3)+pow((double)c,3)==i)
printf("%d\n",i);
}
return 0;
}
6、牛顿迭代法求根
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main()
{
double x,y,a,y1;
scanf("%lf",&a);
do
{
x=a;
y=2*x*x*x-4*x*x+3*x-6;
y1=6*x*x-8*x+3;
a=x-y/y1;
}
while(fabs(x-a)>=1e-10);
printf("%.2f\n",a);
return 0;
}
7、编程求指定范围中三个数字之和为12、积为42的三位数
【问题描述】编程求出[a,b]之间满足下列条件的三位数:该数的三个数字之积为42,三位数字之和为12。a,b由键盘输入。
【输入形式】一个区间a,b的值
【输出形式】该区间内满足条件的三位数
【样例输入】200 300
【样例输出】
237
273
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main()
{
int a,b,c,x,y,i;
scanf("%d %d",&x,&y);
for(i=x;i<=y;i++)
{
a=i/100%10;
b=i/10%10;
c=i%10;
if(a*b*c==42&&a+b+c==12)
printf("%d\n",i);
}
return 0;
}