# 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");``````

THE END

)">