你好
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
printf("Please enter the number:\n");
int a,b,c;
int q=0,w=0,e=0,r=0,t=0,y=0,u=0,k=0,o=0,p=0;
scanf("%d",&a);
a=fabs(a);
c=a;
int i=0;
while(1)
{
a/=10;
i++;
if(a==0)
break;
}
printf("%d: %d bits\n",c,i);
while(i)
{
b=c%10;
if(c>=10)
c=c/10;
else
b=c;
i--;
switch(b)
{
case 0: q+=1;
break;
case 1: w+=1;
break;
case 2: e+=1;
break;
case 3: r+=1;
break;
case 4: t+=1;
break;
case 5: y+=1;
break;
case 6: u+=1;
break;
case 7: k+=1;
break;
case 8: o+=1;
break;
case 9: p+=1;
break;
}
}
if(q>0)
printf("0: %d\n",q);
if(w>0)
printf("1: %d\n",w);
if(e>0)
printf("2: %d\n",e);
if(r>0)
printf("3: %d\n",r);
if(t>0)
printf("4: %d\n",t);
if(y>0)
printf("5: %d\n",y);
if(u>0)
printf("6: %d\n",u);
if(k>0)
printf("7: %d\n",k);
if(o>0)
printf("8: %d\n",o);
if(p>0)
printf("9: %d\n",p);
return 0;
}
2020年哈尔滨工业大学C语言程序设计精髓 第五周练兵编程题 第一题判断一个整型数据有几位v2.0(4分)的第二个用例上面的代码无法通过,想知道为什么
如何使用C语言直接跳转到某个固定的地址开始执行?(不是goto)
使用回调函数,回调函数是一种很重要的思想。那么什么是回调机制呢?
回调机制中的调用者和被调用者没有依赖关系
上面的理论,看起来并不是很容易让人理解,下面直接上手写代码就知道什么是回调函数了。
代码 36-2.c
#include <stdio.h>
typedef int (Fruit)(int); //定义Fruit为int(int)类型的函数 参数:吃多少克,返回值:获得多少能量
void Eat(Fruit* fruit, int n){ //函数指针fruit:指向吃什么水果的函数 参数n:吃多少克
int ret = 0;
printf("Eat...\n");
ret = fruit(n); //获得多少能量
printf("Increase : %d\n", ret);
}
int Apple(int n){ //吃n克苹果获得ret克能量
int ret = 0;
int i = 0;
for(i=0; i<n; i++){
printf("Eat apple get energy : %d\n", 1);
ret++;
}
return ret;
}
int Banana(int n){ //吃n克香蕉获得ret克能量
int ret = 0;
int i =0;
for(i=0; i<n; i++){
printf("Eat banana get energy : %d\n",3);
ret+=3;
}
return ret;
}
int Pear(int n){ //吃n克梨子获得ret克能量
int ret = 0;
int i = 0;
for(i=0; i<n; i++){
printf("Eat pear get energy : %d\n",5);
ret+=5;
}
return ret;
}
int main(){
Eat(Apple, 5); //get 5
printf("\n");
Eat(Banana, 2); // get 6
printf("\n");
Eat(Pear, 3); //get 15
printf("\n");
return 0;
}
上述程序编译运行结果为:
分析:
题主的代码没啥问题,就是写的太复杂了,修改如下,供参考:
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Please enter the number:\n");
int a,c;
int q[10] = {0};
scanf("%d",&a);
c=abs(a);
int i=0;
while(1)
{
q[c%10]++;
c/=10;
i++;
if(c==0)
break;
}
printf("%d: %d bits\n",a,i);
for (i = 0;i < 10; i++)
if (q[i])
printf("%d: %d\n", i, q[i]);
return 0;
}