❶ 用c语言编写一个程序,输入一个整数,输出0~9各数字在该整数中出现的次数
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
 int a[10];//每个数字的计数器 
 int num;
 int i;
 char ch[100],*ch1,num1;
 for(i = 0;i < 10;i++)
 a[i] = 0;
 printf("请输入一个整数:");
 scanf("%d",&num);
  itoa(num,ch,10); //将数字转化为字符串 
  for(ch1 = ch;ch1<ch+strlen(ch);ch1++)
  {
   num1 = *ch1;
   switch(num1)
   {
    case '0': a[0]++; break;
    case '1': a[1]++; break;
    case '2': a[2]++; break;
    case '3': a[3]++; break;
    case '4': a[4]++; break;
    case '5': a[5]++; break;
    case '6': a[6]++; break;
    case '7': a[7]++; break;
    case '8': a[8]++; break;
    case '9': a[9]++; break;
    default:break;
   }
  }
  printf("各数字出现的次数如下:\n");
 printf("数字:0  1  2  3  4  5  6  7  8  9\n");
 printf("次数:"); 
 for(i = 0;i < 10;i++)
 printf("%-3d",a[i]); 
 printf("\n");
 return 0;
}
❷ C语言 ,如何快速统计A到B中的所有包含9 的数字 (A和B可能是很大很大的数, A<B)
容易推导1到10^n包含数字9的个数的递推公式f[n]=9*f[n-1]+10^(n-1),因为首位为9,则后面的n-1位任意,共有10^(n-1) ,而首位是0到8这9种情况,则回到1到10^(n-1)这种包含数字9的情况,所以是f[n-1],
设1到a之间一共包含数字9有s[1]个,假定a有枝辩n位数,a为a1a2...ama(m+1)..a(n),考察最后一位,如果是9,就是1个,不是9,则是0个,最后两位a(n-1)a(n),例如37,则首位为(0,1,2)的时候,就退乎谈化为1-10之间包含9的个数,总共有3*f[1],而s[n]表示最后一位数,他包含数字9的个数,
则s[n-1]=a(n-1)*f[1]+s[n];
同理s[n-2]=a(n-2)*f[2]+s[n-1];
...
逐步递推,就是
for(i=n-1;i>=1;i--)s[i]=a[i]*f[n-i]+s[i+1]; 其中f[n]=9*f[n-1]+10^(n-1);a[i]表示a的第i位数字
求出s[1]就是所求,当然还要注意高精度岁搭碰加法和减法
❸ C语言输出一个区间内所有含9的数,并从小到大排序

#include <stdio.h>
#include <math.h>
#include <malloc.h>备搭
int hasN(int num);
int main()
{
int bn,en,i;
while(1)
{
printf("请输入数字区间的起始和结束数字:"),scanf("%d%d",&bn,&en);
if(bn>en)
bn^=en,en^=bn,bn^=en;
printf("所有包含9的数字有:");
for(i=bn;i<=en;i++)
if(hasN(i))
世吵 printf("%d ",i);
printf(" ");
}
return 0;
}
int hasN(int num)
{
int flag=0;
num=abs(num);
while(num/10>0)
{
if(num%10==9)
{
flag=1;
break;
}
num=num/10;
}
if(num==9)
仿返拿 flag=1;
return flag;
}
❹ C语言 输出10到200间所有含9且只含1个9的所有数,要求定义并调用sumdight(n)函数
#include <stdio.h>
int sumdigit(int n)
{ int s=0,m;
m=n;//把n赋值给m
while(n!=0)//经过while循环后n变为0了 所以会输出0
{if(n%10==9)
s++;
n=n/10;
}
if(s==1)
printf("%d ",m);//输出m m就是那个你想要的n
return s;
}
int main()
{ int sumdigit(int );
int i;
for(i=10;i<201;i++)
sumdigit(i);
}//你的方法没问题 就这一个地方没有注意到

❺ 用C语言找出十万以内含9的数和9的倍数,并且输出,谢谢大家了
#include<stdio.h>
int main()
{   
	
	int i,j;
	int cnt=0;
	//freopen("C:\\a.txt","w",stdout);输出较多,可芦局以选择输出到文件
	for(i=0;i<100000;i++)
	{
		j=i;
		if(j%9==0)
		{
			printf("%d ",i);
			cnt++;
		}
		else
		{
			while(j)
			{
				if(j%10==9)break;
				j/虚哗稿=10;
			}
			if(j)
			{
				printf("%d ",i);
				cnt++;
			}
		}
	}
	puts(""差孝);
	printf("cnt=%d\n",cnt);
    return 0;
}
❻ 在C语言编程中,如何实现让电脑随机输出一1~9的整数
c语言中取得伪随机数主要使用srand()和rand()这两个函数.
rand()函数会返回一个伪随机数,但是这是通过一种数学公式推算出来的,得到的随机数分布太集中,这时候要使用srand()函数来设定产生随机数的种子,一般采用当前时间作为种子,这样可以得到分布比较均匀的伪随机数。
rand(),srand()函数位于stdlib.h文件中,取得时间的time()函数位于time.h文件中。随机数测试如下:
#i
nclude
<stdio.h>
#i
nclude
<stdlib.h>
#i
nclude<time.h>
void
main()
{
int
results[10];/*用于保存随机数产生的结果*/
int
i=0;
srand((int)time(0));/*设定种子*/
for(i=0;i<10;i++)
{
results[i]=0;
}
for(i=0;i<10000;i++)
{
(results[rand()%10])++;/*取一万次随机数,使用求余运算符使得最后取得的随机数小于10*/
}
for(i=0;i<1
0;i++)
{
printf("
%d
%d
\n",i,results[i]);/*输出0-9之间的随机数出现的次数*/
}
}
经多次运行试验,产生的随机数比较均匀
