第二次博客作业: 函数+进制转换器v1.0beta

一:运行截图

 

 

 

 

 

 二:介绍函数

1,

 1 int panduan1(int n,char a[],int count,int sign)//判断用户是否输入了除数字和a-f范围外的字符 
 2 {
 3 
 4     int i;
 5     for(i=0;i<count;i++){
 6         if(n!=2&&n!=8&&n!=10&&n!=16)return 1;
 7         if(a[i]>='a'&&a[i]<='f')a[i]-=87;
 8         if(a[i]>='0'&&a[i]<='9')a[i]-=48;
 9         if(a[i]>=n){
10             if(sign!=0){
11                 return 0;
12         }
13         return 1;
14     }
15     }
16     return 0;
17 }

2,

 1 int panduan2(char a[],int count,int sign)// 判断用户输入的待转化的数是否符合标准 
 2 {
 3         int i,x;
 4         x=count;
 5         if(sign!=0)return 0;
 6     for(i=0;i<count;i++){
 7         if(a[i]>='a'&&a[i]<='f')x--;
 8         if(a[i]>='A'&&a[i]<='F')x--;
 9         if(a[i]>='0'&&a[i]<='9')x--;    
10     }
11     if(x==0)return 0;
12     return 1;
13 }

3,

 1 void change(int n,char a[],int m,int count)//将用户输入的数先转化成十进制数,在转化成想要转化成的进制数 
 2 {    
 3     int i,j,k=0,num,sum=0,c;
 4     char b[1001];
 5     for(i=0;a[i]!='\0';i++)
 6     {
 7         if(a[i]>='0'&&a[i]<='9')num=a[i]-'0';
 8         else
 9             num=a[i]-'a'+10;
10         sum=sum*n+num;
11     }
12     while(sum)
13     {
14         c=sum%m;
15         b[k++]="0123456789abcdef"[c];
16         sum=sum/m;
17     }
18     i=0;
19     for(i=k-1;i>=0;i--)
20     {
21         if(b[i]>='0'&&b[i]<='9')printf("%d",b[i]-'0');
22         else
23             printf("%c",b[i]);
24     }
25     printf("\n"); 
26 }

三:展示main函数

 1 int main()
 2 {
 3     printf("二进制,八进制,十进制转化器。\n"); 
 4     int m, i, count =0, among,n,flag=0,x;
 5     int sign=0;
 6     static char a[1000],ch,b[1001];
 7     L:x=0;
 8     do
 9     {
10         printf("输入要转化的整数:\n");
11         for (i = 0; i < 1000; i++)
12         {
13             scanf("%c", &a[i]);
14             if (a[i] == '\n')
15             {
16                 break;
17             }
18             count++;
19         }
20         if(count!=0)break; 
21     }
22     while (count == 0);
23     for(i=0;i<count;i++){
24         if(a[i]>='A'&&a[i]<='F'){
25             a[i]=a[i]+32;
26         }
27     }
28     for(i=0;i<count;i++){
29         if(panduan2(a,count,sign)){
30             sign++;
31             printf("出错了,重新输入一遍吧\n");
32             goto L;
33         }
34         for(i=0;i<count;i++)
35         b[i]=a[i];
36         b[i]='\0';
37 }
38     printf("输入此整数的进制:\n");
39     scanf("%d", &n);
40     ch=getchar();
41     while(panduan1(n,a,count,sign))
42     {
43         printf("出错了,重新输入一遍吧!\n");
44         scanf("%d", &n);
45     }
46     sign=0;
47     printf("输入想要转化成的进制\n");
48     scanf("%d",&m);
49     while(m!=2&&m!=8&&m!=10&&m!=16)
50     {
51         printf("出错了,重新输入一遍吧!\n");
52         scanf("%d", &m);
53     } 
54     printf("转换成功:");
55     change(n,b,m,count);
56     } 

四:思维导图

 

 五:问题与解决

1,在编写程序之前,对二进制,八进制,十进制和十六进制间的互相转化计算并不非常明白,所以先要去查询课本和网上计算方法,先搞明白各个进制数之间是如何转化的,才可以开始编写程序,在网上了解到,先把想要转化的数转化成一个十进制数,因为十进制数进行进制转化时的计算较为简单,所以按这种思路去编写程序比较容易。

2,运用函数是并没有分清需要返回值和不需要返回值的用法,多次在int,double之间徘徊,后来通过询问同学了解到不需要返回值的函数应该使用void,还是因为pta题刷太少,遇到的都是需要返回值的题目,再加上自己为了做题而做题,没有深入的去了解,造成知识的空缺。

3,刚学习数组的应用,对数组的用法还不是非常了解和熟练,并不懂得可以输入字符串数组等等的操作,再通过查询网络资料和请教同学之后,才逐渐完善了对这方面知识的不足。

六:代码互评

 网络1914宋思坡

 1         if(c>=2)
 2             l++;
 3         y/=10;
 4         s10=s10+c*pow(2,i);
 5         i++;
 6     }
 7     y=s10;
 8     i=0;
 9     while(y!=0){
10         c=y%8;
11         y/=8;
12         s8=s8+c*pow(10,i);
13         i++;
14     }
15     if(l==0){
16         printf("二进制转为\n"); 
17         printf("八进制:%d\n十进制:%d\n",s8,s10);
18     } 
19     else 
20         printf("这个输入是错的鸭");
21 }

他的判断输入的数是否正确的代码比较简洁明了,不像我一样又写了两个函数,效率较高,而且他的判断放在main函数中,写起来也更加方便,快捷有效的编写程序是非常值得学习的。

七:总结

1,编写一个可以使用的程序真是难难难,需要多方面的知识做基础,如果在编写过程中遇到各种各样的问题,一定要先自己解决,不管是翻书还是查询网络资料,都要先自己尝试,不能问别人,实在是搞不懂,再去请教别人,这次作业也让我学会了遇事先靠自己,比如在进制之间的转化知识方面,我就理解的不够透彻,所以自己在网上查找资料,自己拿笔纸演算,一步步摸索出计算规律,才能完成此次作业。

2,对于函数,它的用法真是多种多样,只有你想不到,没有它用不到,函数里的嵌套递归等用法,功能非常强大,可以做到许多运算,灵活运用函数可以使你的程序发挥更大的能力。

猜你喜欢

转载自www.cnblogs.com/hhs1/p/11824175.html
今日推荐