下列程序接受一个整数n(1<=n<=12),计算n!,然后输出n!中非0数字的个数。其中函数fac( )用于计算阶乘,函数nzero( )用于计算非0数字的个数。 long fac(int n) /* 计算n!并返回 */ { long m=n; while(_________) m*=n; return m; } int nzero(long m) /*计算m中有几个非0数字并返回 */ { int num=_____________; while(m>0L) { if(_________) num++; m/=10L; } return num; /* num是m中非0数字个数 */ } void main( ) { int n; do{ printf(“输入一个1和12之间的整数:”); scanf(“%d”,&n); }while(____________); /*如果输入不正确,则重复输入 */ n<1||n>12 printf(“%d!中有%d个非0数字。\n”,n,_________); }
举一反三
- 读程序从键盘输入 1902 , 则程序的输出结果是 :( ) int fun(int n) { int m=0,c; while(n!=0) { c=n%10; m=m*10+c; n=n/10; } return(m); } int main() { int m; scanf("%d",&m); printf("%d\n",fun(m)); return 0; }
- 输入若干个正整数,判断每个数从高位到低位各位数字是否按值从小到大排列,请根据题意,将程序补充完整。 #include <stdio.h> ___________ int main(void) { int n; scanf("%d", &n); while (n > 0) { if(fun1(n)) printf("%d中各位数字按从小到大排列\n", n); scanf("%d", &n); } } int fun1(____) { int k; ______ while(m) if( m / 10 % 10 > k) return 0; else { _______; k = m % 10; } return 1; }
- 中国大学MOOC: 下面程序的功能是计算两个整数的( )。#include <stdio.h>int main(){ int m,n,w; scanf("%d,%d",&m,&n); while (n) { w=m; m=n; n=w%n;} printf("%d",m); return 0;}
- 计算两个自然数n和m(m<10000)之间所有数的和(n和m从键盘输入),若n>m,和为0。 例如,当n=1,m=100时,sum=5050;当n=100,m=1000时,sum=495550。 #include int main() { int n,m; long sum; /***********SPACE***********/ 【?】; printf("\nInput n,m\n"); scanf("%d,%d",&n,&m); while(n<=m) { /***********SPACE***********/ 【?】; n++; } /***********SPACE***********/ printf("sum=【?】\n",sum); return 0; }
- 使用递归函数计算n!(n=0,1,2,3,……)的是( ) A: fac(int n) B: int i,f=1; C: if(n==0)return 1; D: else for(i=1;i<=n;i++)f*=i; E: return f; F: fac(int n) G: if(n==0||n==1)return 1; H: else return n*fac(n-1); I: fac(int n) J: int i=1,f=1; K: if(n==0)return 1; L: else while(i<=n)f*=i++; M: return f; N: fac(int n) O: int i=1,f=1; P: if(n==0)return 1; Q: else dof*=i;while(i++<n); R: return f;