PTA4

1.以下程序段( AD)的功能是:输入一批整数,用负数作为输入的结束标志,统计其中大于85的数据个数。

A.

int count = 0, score;
scanf ("%d", &score);
while(score >= 0){
       if(score > 85){
           count++;
       }
       scanf ("%d", &score);
}
printf("%dn", count);

B.

int count = 0, score;
scanf ("%d", &score);
while(score >= 0){
     scanf ("%d", &score);
     if(score > 85){
         count++;
     }
}
printf("%dn", count);

C.scanf位置不对,放到了while里面。如果有负数它不会结束。

int count = 0, score;
while(score >= 0){
       scanf ("%d", &score);
       if(score > 85){
           count++;
       }
}
printf("%dn", count);

D.

int count = 0, score;
while(1){
        scanf ("%d", &score);
        if(score < 0) break;
        if(score > 85){
            count++;
        }
}
printf("%dn", count);

2.以下程序段( ABE)的功能是:计算1! + 2! + 3! + … + n!。假设变量和函数都已正确定义。

A.

   sum = 0;
   for(i = 1; i <= n; i++ ){
        sum = sum + fact (i);     /*  假设函数fact(i)已正确定义 */
    }
    printf("%.0fn", sum);

B.

sum = 0;
for(i = 1; i <= n; i++){
     item = 1;
     for (j = 1; j <= i; j++)
         item = item * j;
     sum = sum + item;
}
printf("%.0fn", sum)

C.

  sum = 0;
  item = 1;
  for(i = 1; i <= n; i++){
       for (j = 1; j <= i; j++)
           item = item * j;
       sum = sum + item;
}
printf("%.0fn", sum)

D.

for(i = 1; i <= n; i++){
      sum = 0;
      item = 1;
      for (j = 1; j <= i; j++)
           item = item * j;
      sum = sum + item;
}
printf("%.0fn", sum);

E.

sum = 0;
item = 1;
for(i = 1; i <= n; i++){
    item = item * i;
    sum = sum + item;
}
printf("%.0fn", sum);


1.

scanf("%d", &m);
cnt = 0;
limit = m/2;
for(i = 2; i <= limit; i++){
    cnt++;
    if(m % i == 0){
        break;
    }
}

 执行程序段C,输入101,变量cnt的值是49


1.输入一个正整数,判断其是否为素数。

scanf ("%d", &m);
if ( m == 1) {
        is_prime = 0; 
} else if (m == 2) {

    is_prime=1;

 } else if (m % 2 == 0) {
        is_prime = 0;
 } else{

    is_prime=1;

         limit = sqrt(m) + 1;
         for(i = 3; i <= limit; i += 2){
                if(m % i == 0){

            is_prime=0;
            break;

                }
        }
}     

if(is_prime==1){

    printf("Yesn");  
}else{ 
    printf("Non"); 
}

2.输入一个非负整数,求1+1/2!+...+1/n!。假设变量已正确定义。

scanf("%d", &n);

sum=0;
item=1;

for(i=1;i<n;i++){

    item=item/i;

        sum = sum + item; 
 }
 printf("%.8fn", sum); 

3.输入一个正整数n(1≤n≤10),输出n×n的简易乘法表。当n=3时,3×3的简易乘法表如下:

   1   2   3
       4   6
           9

int i, j, n;
scanf("%d", &n);
for(i = 1; i <= n; i++){

    for(j=1;j<=n;j++)  /* 处理每行数字前的空格 */

                printf("%4c",' ');

        }

    for(j=i;j<=n;j++){

                printf("%4d", i*j);
        }

        printf("n");

}

4.水仙花数是指一个n位正整数(n≥3),它的每位数字的n次幂之和等于它本身。三位水仙花数满足各位数字的立方和等于自身的正整数,例如:153=13+53+33。

for(num=100;num<=99;num++){

t_num=num;
s=0;

        do{

                digit=t_num%10;

        s=s+digit*digit*digit;
        t_num=t_num/10;

        }while(t_num!=0) ;

    if(num==s)

                printf("%dn",num);

          }

}

5.输入一个正整数n(1≤n≤9),打印一个高度为n的、由“*”组成的等腰三角形图案。当n=3时,输出如下等腰三角形图案:

*****
 ***
  *

int i, j, n; 
scanf("%d", &n);
for (i = n; i > 0; i--){ 

    for(j=n-i;j>0;j--)

                printf(" "); }

    for(j=1;j<=2*i-1;j++)

                printf("*");}

printf("n");

 }

6. 输入一个正的奇数n(1≤n≤9),打印一个高度为n的、由“*”组成的正菱形图案。当n=5时,输出如下正菱形图案:

  *
 ***
*****
 ***
  *
int i, j, m, n; 
scanf("%d", &n);
m = n/2;
for (i = 1; i <= m+1; i++){
  for(j=m+1-i;j>0;j--)
  {
    printf (" ");
  }     
  for(j=1;j<=2*i-1;j++)
  {
    printf ("*");
  }     
  printf ("n");
}
for (i = m; i >= 1; i--){
  for(j=m+1-i;j>0;j++)
  {
    printf (" ");
  }     
  for(j=1;j<=2*i-1;j++)
  {
    printf ("*");
  }     
  printf ("n");
}

7. 输入一个正整数n(1≤n≤10),打印一个n行n列的方阵。当n=4时,打印如下方阵:

  13  14  15  16
   9  10  11  12
   5   6   7   8
   1   2   3   4

int i, j, n;
scanf("%d", &n);

for(i=n-1;i>=0;i--){

        for(j=1;j<=n;j++){

        printf("%4d",i*n+j)}

         printf("n");

}

8.输入一个非负整数,从高位开始逐位分割并输出它的各位数字。例如,输入9837,输出9 8 3 7

int digit, number, pow, t_number; 
scanf ("%d", &number);
t_number = number;
pow = 1;
while (t_number/10!=0)
{
    pow = pow*10;
    t_number = t_number / 10;       
}  
while ( pow >= 1 ) {
    digit = number/pow;
    number = number%pow;
    pow = pow/10;
    printf ("%d ", digit);
}
printf ("n");