1、 下列程序执行的结果是( )。
a=1;b=2;c=3;
While(b<a<c){t=a;a=b;b=t;c–;}/* a、b的值交换3次,c–执行3次,结果为0*/
printf(“%d,%d,%d”,a,b,c); a b c b<a b<a<c
A)1,2,0 B)2,1,0 C)1,2,1 D)2,1,1 1 2 3 0 1
2 1 2 1 1
1 2 1 0 1
2 1 0 0 0
2、 执行语句for(i=1;i++ <4;);后,i的值是( )。
A)3 B)4 C)5 D)不定
3、 下列程序段( )。
x=3;
do{y=x–;
if(!y){printf(“x”);continue;}
printf(“#”);
}while(1<=x<=2);
A输出 # # B)输出##x C)是死循环 D)有语法错
4、 若int x;则执行下列程序段后输出是( )。
for(x=10;x>3;x–)
{if(x%3)x–;–x;–x;
printf(“%d”,x);
}
A)63 B)74 C)62 D)73
5、 下列说法中正确的是( )。
A) break用在switch语句中,而continue用在循环语句中。
B) break用在循环语句中,而continue用在switch语句中。
C) break能结束循环,而continue只能结束本次循环。
D) continue能结束循环,而break只能结束本次循环。
6、 指出程序结束时,j、i、k的值分别是( )。
main()
{int a=10,b=5,c=5,d=5,i=0,j=0,k=0;
for(;a>b;++b )i++;
while(a> ++c)j++;
do k++;while(a>d++);
}
A)j=5,i=4,k=6; B)i=5,j=4,k=6; C)j=6,i=5,k=7 D)j=6,i=6,k=6;
7、 下面程序的输出结果是( )。
main()
{int i,j;float s;
for(i=6;i>4;i–)
{s=0.0;
for(j=i;j>3;j–)s=s+i*j;
}
printf(“%f\n”,s);
}
A}135.000000 B)90.000000 C)45.000000 D)60.000000
8、 若有:do{i=a-b++;printf(“%d”,i);}while(!i);
则while中的!i可用( )代替。
A)i= =0 B)i!=1 C)i!=0 D)以上均不对
二、填空题
1、以下while循环执行的次数是________。(无限)
k=0;while(k=10)k=k+1;
2、 下列程序段的执行结果是________。(8)
int a,b;
for(a=1,b=1;a<=100;a++)
{if(b>=20)break;
if(b%3==1)
{b+=3;continut;}
b-=5; /*不执行*/
}
printf(“%d\n”,a);
3、 以下循环语句执行________次循环;(5×4)
int i,j;
for(i=5;i;i--)
for(j=0;j<4;j++){……}
4、以下程序段的输出结果是________。(11)
int i=0,sum=1;
do{sum+=i++;}while(i<5);
printf(“%d\n”,sum);
5、执行以下程序后,输出是________。(2.400000)
#include “math.h”
main()
{float x,y,z;
x=3.6;y=2.4;z=x/y; /*z=1.5*/
while(1)
if(fabs(z)>1){x=y;y=x;z=x/y;}
else break;
printf(“%f\n”,y);}
6、以下程序的输出结果是________。(##*#$)
main()
{int i;
for(i=1;i<=5;i++)
{if(i%2)printf(“*”); /*i=1、3、5 输出’*#’ */
else continue; /*i=2、4不输出*/
printf(“#”);}
printf(“$\n”); /*循环结束后输出$ */
}
7、以下程序段的输出结果是________。(8 5 2)
main()
{int y=10;
for(;y>0;y--)
{if(y%3)continue;
printf(“%4d”,--y);
}
}
8、 以下程序段:
s=1.0;
for(k=1;k<=n;k++)s=s+1.0/(k*(k+1)); /计算 s=1+1/(12)+1/(23)+……/
printf(“%f\n”,s);
请填空,使下面的程序段的功能完全与之等同。
s=0.0;k=0;________ ; (d=1.0;)
do
{s=s+d;
________ ; (k++)
d=1.0/(k*(k+1));
}while( ________ ) ; (k<=n)
printf(“%f\n”,s);
9、 以下程序的功能:从键盘上输入若干学生的成绩,统计并输出最高成绩和最低成绩,当输入负数是结束输入。填空,使程序正确。
main()
{float x,amax,amin;
scabf(“%f”,&x);
amax=x;amin=x;
while( ________ ) (x>=0)
{if(x>amax)amax=x;
if( ______ )amin=x; (x<amin)
scanf(“%f”,&x);
}
printf(“\namax=%f\namin=%f\n”,amax,amin);
}
三、编程题
1、求1-3+5-7+…-99+100的值。
(1)
main( )
{ int i, k, s=0;
for ( i=1,k=1; i<=101;i +=2,k*=-1 )
s = s+i*k;
printf (“%d\n”, s);
}
(2)
main()
{int s=0,i;
foa(i=1;n<=101;i=i+4)
s=s+i;
for(i=3;i<=100;i=i+4)
s=s-i;
printf(“%d\n”,s);
}
(3)
main()
{int s=0,i;
for(i=1;i<=101;i=i+2)
if(i%4==1)s=s+i;
else s=s-i;
printf(“s=%d\n”,s);
}
2、任意输入10个数,计算所有正数的和、负数的和以及这10个的总和。
main( )
{ int i, k, p=0, n=0, s=0;
for ( i=1; i<=10; i++ )
{ printf (“i=%d: “,i);
scanf (“%d”,&k);
s += k;
if ( k>0 ) p += k;
if ( k<0 ) n += k;
}
printf (“s=%d,p=%d,n=%d\n”, s, p, n);
}
3、任意输入小余32768的正整数s,从s的个位开始输出每一位数字,用逗号分开。
main( )
{ int i;
printf(“Please Enter Number:”);
scanf(“%d”,&i);
while ( i > 0 )
{ printf (“%d,”,i%10);
i /= 10;
}
}
/*P129_20B.c */
main()
{long s,n,k=1;
printf("Input s:");
scanf("%ld",&s);
n=s;
while(n>0)
{n=n/10;
k=k*10;}
k=k/10;
for(;k>0;k=k/10)
{printf("%3d,",s/k);
s=s%k;
}
printf("\n");
}
4、对输入的正整数a,b,求ab的最后三位数。
(1) 注释:此题的关键是要保证乘积不超过int型允许的最大数。由于仅要求结果的最后三位,被乘数的后三位参加运算;则将乘数后三位的每一位分别和被乘数相乘,然后部分积再相加。
main( )
{ int i, a, b, c1, c2, c3, y, y1, y2, y3;
printf (“Please Enter a,b:”);
scanf (“%d,%d”,&a,&b); y = a;
c1 = a%10; /* c1保存乘数个位上的数 */
c2 = a/10%10; /* c2保存乘数十位上的数 */
c3 = a/100%10; /* c3保存乘数百位上的数 */
for ( i=1; i<b; i++ ) /* 求a的b次乘方 */
{ y %= 1000; /* 被乘数保留三位 */
y1 = y*c1; /* 被乘数和乘数个位相乘 */
y2 = y*c2%100; /* 被乘数和乘数十位相乘,结果保留两位 */
y3 = y*c3%10; /* 被乘数和乘数百位相乘,结果保留一位 */
y = y1+y2*10+y3*100; /* 部分积相加 */
}
printf (“%d\n”,y%1000);
}
(2) 解法2。
main ( )
{ int a, b, k;
long last;
scanf (“%d%d”, &a, &b);
for ( last=k=1; k<=b; k++)
last = last * (a%1000) % 1000;
printf (“last=%ld\n”, last );
}
5、输入6个学生5门课的成绩,分别求出每个学生的平均成绩。
/* p129_22.c */
main()
{int i,j;
float x,s;
printf("Input data:\n");
for(i=1;i<=6;i++)
{s=0;
for(j=1;j<=5;j++)
{scanf("%f",&x);
s=s+x;
}
printf("average=%6.2f\n",s/5);
}
}
6、编修程序,求e的近似值。
e≈1+1/1!+1/2!+1/3!+…+1/n!
(1)计算前20项。
(2)计算各项,直到最后一项的值小于10-4为止(计算的项均大于等于10-4)。
(1)注释:变量t储存阶乘,20!已经超出单精度实型数的范围,所以t被说明为double型。
main( )
{ int i=1;
double t=1; float e=1;
do
{ t = t*i; /*计算i!*/
e = e+1./t;
} while ( i++ <20 );
printf(“%f\n”,e);
}
(2)
main( )
{ int i=1;
double t=1;
float e=1;
do
{ e = e+1/t;
t = t*++i;
} while ( 1/t >= 1.0e-4 );
printf (“%f\n”,e);
}
(3)
main()
{int i,j;
float s,e=1;
for(i=1;i<=20;i++)
{s=1;
for(j=1;j<=i;j++)
s=s*j;
e=e+1.0/s;
}
printf(“e=%f\n”,e);
}
7、设X数列定义如下:
Xn= n ,n=1,2,3
xn-1+xn-2+xn-3 , n>3
编写程序,对输入的正整数n,输出数列的前n项。
main( )
{ int n, x1, x2, x3, xn, i;
printf(“Enter n:”); scanf (“%d”,&n); if ( n<=3 )
xn=n;
else
{ x1=1; x2=2; x3=3;
for ( i=4; i<=n; i++ )
{ xn=x1+x2+x3;
x1=x2;
x2=x3;
x3=xn;
}
}
printf (“Xn=%d\n”,xn);
}
8、输入所有大于1010的4位偶数,且该数的各位数字两两不相同。
main( )
{ int i, j, k, l;
for ( i=1; i<=9; i++ )
for ( j=0; j<=9; j++ )
{ if ( j==i ) continue;
for ( k=1; k<=9; k++ )
{ if ( k==i || k==j ) continue;
for ( l=0; l<=9; l+=2 )
{if ( l==i || l==j || l == k ) continue;
printf (“%d\n”,i*1000+j*100+k*10+l);
}
}
}
}
9、用40元买苹果、西瓜和梨,三种水果都要。已知苹果0.4元一个,西瓜4元一个,梨方
0.2元一个。问可以各买多少个?输出全部购买方案。
注释:题中水果的价格以元计价,为了避免计算中出现实数,则改为以角为计价单位。
法1:
main( )
{int i, j, k;
for ( i=0; i<=100; i++ )
for( j=0; j<=100-i; j++ )
if ( i*4+j*40+(100-i-j)*2 == 400 )
printf (“apple=%d watermelon=%d pear=%d\n”,i,j,100-i-j);
}
方法2:
#include "math.h"
main()
{int a,b,c;
float s;
printf("\n");
for(a=1;a<25;a++)
for(b=1;b<100;b++)
{c=100-a-b;
s=a*4+b*.4+c*.2;
if(a+b+c==100&&fabs(s-40)<1e-4)printf("a=%d,b=%d,c=%d,s=%f\n",a,b,c,s);
}
}
10、编写程序,输出以下图案。
*
* * *
* * * * *
* * * * * * *
* * * * *
* * *
*
#include <stdio.h>
int main()
{
int i, j, n;
printf("\nPlease Enter n: ");
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n + i - 1; j++)
{
if (j > n - i)
printf("* ");
else
printf(" ");
}
printf("\n");
}
for (i = 1; i < n; i++)
{
for (j = 1; j <= 2 * n - i - 1; j++)
{
if (j > i)
printf("* ");
else
printf(" ");
}
printf("\n");
}
return 0;
}
方法2
#include <stdio.h>
#include <math.h>
int main()
{
int n, i, j;
scanf("%d", &n);
n = n / 2 + 1;
// 打印上半部分倒三角形
for (i = -n; i <= n; i++)
{
// 控制每行的输出个数
for (j = 1; j < 40 + n - abs(i) - 1; j++)
{
// 根据位置判断输出空格还是星号
if (j < 40 - n + abs(i))
printf(" ");
else
printf("*");
}
printf("\n");
}
return 0;
}