鱼C论坛

 找回密码
 立即注册
查看: 1592|回复: 4

[已解决]求助,是否存在一个函数使得输出的字符被重新利用

[复制链接]
发表于 2018-12-22 17:40:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 凌_霜 于 2018-12-22 17:40 编辑

代码如下:
  1. #include<stdio.h>//功能:十进制转化二进制
  2. void main()
  3. {
  4.         int a,i,bei,yu;//bei:被除数。yu:余数。i=循环次数。a:所输入的数字。
  5.         printf("该程序可实现十进制转化二进制!\n");
  6.         printf("请输入需要转化的十进制数字:\n\t\t\t");
  7.         scanf("%d",&a);
  8.         yu=a%2;bei=a/2;
  9.         printf("转化后的二进制数字为:(请从右向左读取!)\n\t\t\t");
  10.         if(a<2)
  11.         {

  12.                 bei=a/2;
  13.                 yu=a%2;
  14.                 i=1;
  15.                 printf("%d",yu);
  16.                 printf("该程序共进行了%d次除法!",i);
  17.         }
  18.         else
  19.         {
  20.                 i=0;
  21.                 printf("0");
  22.                 begin:for(;bei>0;)
  23.                 {
  24.                         yu=bei%2;
  25.                         bei/=2;
  26.                         printf("%d",yu);
  27.                         i++;
  28.                         if(bei>0){goto begin;}
  29.                         printf("\n\t\t\t该程序共进行了%d次除法!",i+1);
  30.                         if(bei=0){goto finish;}
  31.                 }
  32.         }
  33.         finish:printf("\n\t\t\t\t\t\tFinish");
  34. }
复制代码




输入45,得到的结果如下:
该程序可实现十进制转化二进制!
请输入需要转化的十进制数字:
                        45
转化后的二进制数字为:(请从右向左读取!)
                        001101
                        该程序共进行了6次除法!
                                                Finish
问题:能否利用函数将输出的001101赋值到数组,如果不行,这个程序应该怎么改???C语言萌新,求指教
最佳答案
2018-12-22 19:05:49
你的代码是自己写的吧。。你用计算器算下看看,45的二进制是多少。不要用goto

20181222_190419.png

用数组存放的代码:
  1. #include<stdio.h>//功能:十进制转化二进制
  2. void main()
  3. {
  4.         int a,i,bei,yu;//bei:被除数。yu:余数。i=循环次数。a:所输入的数字
  5.                 char b[100] = {'\0'};// 声明一个足够大的数组

  6.         printf("该程序可实现十进制转化二进制!\n");
  7.         printf("请输入需要转化的十进制数字:\n\t\t\t");
  8.         scanf("%d",&a);
  9.         yu=a%2;bei=a/2;
  10.         printf("转化后的二进制数字为:(请从右向左读取!)\n\t\t\t");

  11.                 i=0;
  12.         if(a<2)
  13.         {

  14.                 bei=a/2;
  15.                 yu=a%2;     
  16.                                
  17.                                 b[i] = yu == 1? '1': '0';

  18.         }
  19.         else
  20.         {
  21.                                 b[i] = yu == 1? '1': '0';

  22.                 begin:for(;bei>0;)
  23.                 {
  24.                         yu=bei%2;
  25.                         bei/=2;
  26.                                                 i++;

  27.                                                 b[i] = yu == 1? '1': '0';
  28.                                                
  29.                         if(bei>0){goto begin;}
  30.                         if(bei=0){goto finish;}
  31.                 }
  32.         }
  33.                 printf("%s", b);

  34.        

  35.                 printf("该程序共进行了%d次除法!",i+1);
  36.         finish:printf("\n\t\t\t\t\t\tFinish");
  37. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-12-22 19:05:49 | 显示全部楼层    本楼为最佳答案   
你的代码是自己写的吧。。你用计算器算下看看,45的二进制是多少。不要用goto

20181222_190419.png

用数组存放的代码:
  1. #include<stdio.h>//功能:十进制转化二进制
  2. void main()
  3. {
  4.         int a,i,bei,yu;//bei:被除数。yu:余数。i=循环次数。a:所输入的数字
  5.                 char b[100] = {'\0'};// 声明一个足够大的数组

  6.         printf("该程序可实现十进制转化二进制!\n");
  7.         printf("请输入需要转化的十进制数字:\n\t\t\t");
  8.         scanf("%d",&a);
  9.         yu=a%2;bei=a/2;
  10.         printf("转化后的二进制数字为:(请从右向左读取!)\n\t\t\t");

  11.                 i=0;
  12.         if(a<2)
  13.         {

  14.                 bei=a/2;
  15.                 yu=a%2;     
  16.                                
  17.                                 b[i] = yu == 1? '1': '0';

  18.         }
  19.         else
  20.         {
  21.                                 b[i] = yu == 1? '1': '0';

  22.                 begin:for(;bei>0;)
  23.                 {
  24.                         yu=bei%2;
  25.                         bei/=2;
  26.                                                 i++;

  27.                                                 b[i] = yu == 1? '1': '0';
  28.                                                
  29.                         if(bei>0){goto begin;}
  30.                         if(bei=0){goto finish;}
  31.                 }
  32.         }
  33.                 printf("%s", b);

  34.        

  35.                 printf("该程序共进行了%d次除法!",i+1);
  36.         finish:printf("\n\t\t\t\t\t\tFinish");
  37. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-23 17:37:35 | 显示全部楼层
ba21 发表于 2018-12-22 19:05
你的代码是自己写的吧。。你用计算器算下看看,45的二进制是多少。不要用goto

感谢大佬,已经好了,这是修改后的代码,然后就是goto的用法,我认为只要声明清楚跳转的地点,用goto会轻松很多,那么不用goto是因为易读性的原因吗?
  1. #include<stdio.h>//功能:十进制转化二进制
  2. void main()
  3. {
  4.         int a,i,bei,yu,j,mid;//bei:被除数。yu:余数。i=循环次数。a:所输入的数字。
  5.         char c[100];
  6.         printf("该程序可实现十进制转化二进制!\n");
  7.         printf("请输入需要转化的十进制数字:\n\t\t\t");
  8.         scanf("%d",&a);
  9.         yu=a%2;bei=a/2;

  10.         if(a<2)
  11.         {
  12.                 printf("转化后的二进制数字为:\n\t\t\t");
  13.                 bei=a/2;
  14.                 yu=a%2;
  15.                 i=1;
  16.                 printf("%d",yu);
  17.                 printf("\n该程序共进行了  %d  次除法!",i);
  18.         }
  19.         else
  20.         {
  21.                 i=0;
  22.                 c[0]=0;
  23.                 begin:for(;bei>0;)
  24.                 {
  25.                         yu=bei%2;
  26.                         bei/=2;
  27.                         i++;
  28.                         c[i]=yu;

  29.                         if(bei>0){goto begin;}


  30.                         if(bei=0){goto finish;}
  31.                 }

  32.         finish:printf("转化后的二进制数字为:\n\t\t\t");
  33.                 for(j=0;j<i/2;j++,i--)
  34.         {
  35.                 mid=c[j];c[j]=c[i];
  36.         }
  37.         for(j=i,i=0;i<=j;i++)
  38.         {
  39.                 printf("%d",c[i]);
  40.         }
  41.         printf("0");
  42.         printf("\n\t\t\t该程序共进行了%d次除法!",i+2);
  43.         }
  44.                 printf("\n\t\t\t\t\t\tFinish");
  45. }
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-23 18:22:41 | 显示全部楼层
凌_霜 发表于 2018-12-23 17:37
感谢大佬,已经好了,这是修改后的代码,然后就是goto的用法,我认为只要声明清楚跳转的地点,用goto会轻 ...

是的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-23 20:45:04 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-14 15:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表