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;
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(“*”);
else continue;
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;
c2 = a/10%10;
c3 = a/100%10;
for ( i=1; i<b; i++ )
{ 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;
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、编写程序,输出以下图案。 * * * * * * * * * * * * * * * * * * * * * * * * *
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”);
}
}
方法2
#include "math.h"
main()
{int n,i,j,k;
printf("Input n(1,3,5,7,9...):");
scanf("%d",&n);
k=n/2+1;
for(i=-k;i<k;i++)
{for(j=1;j<=40-k+abs(i);j++)
printf(" ");
for(j=1;j<2*k-2*abs(i);j++)
printf("*");
printf("\n");
}
}
#include "math.h"
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");
}
}
|