進制的轉換課程設計
Ⅰ c語言課程設計二八十六進制轉十進制
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<stdio.h>
void hex(long int x)
{
int a[8],i=7;
while(x!=0)
{
[i]=x%16;x/=16;i--;
}
printf("轉換為十六進制:");
while(++i<8)
{
switch(a[i])
{
case 10:printf("A");break;
case 11:printf("B");break;
case 12:printf("C");break;
case 13:printf("D");break;
case 14:printf("E");break;
case 15:printf("F");break;
default:printf("%d",a[i]);break;
}
}
printf("\n\n");}
void octal(int x)
{
int a[16]={0},i=15;
while(x!=0)
{
a[i]=x%8;x/=8;i--;
}
printf("轉換為八進制:");
while(++i<16)
{
printf("%d",a[i]);
}
printf("\n\n");
}
void binary(int x)
{
char a[50];
int i=0,j;
while(x!=0)
{
a[i]=x%2;x=x/2;i++;
}
printf("shu ru er jin ");
for(j=i-1;j>=0;j--)
{
printf("%d",a[j]);
}
}
int f1(char a[])
{
int n,j,i,sum=0,t=0,p=1,c;
n=strlen(a);
for(i=n-1;i>=0;i--)
{
p=1;
t=(a[i]-48);
if(i==n-1)
p=1;
else
for(j=0;j<n-i-1;j++)
{
p=p*2;
sum+=t*p;
}
}
c=sum;
printf("對應的10進制數:%d\n",c);
return c;
}
int f2(char b[])
{
int i,j,sum=0,c;
for(i=strlen(b)-1,j=0;i>=0;i--,j++)
{
sum=sum+(int)(b[i]-'0')*(int)pow(8,j);
}
c=sum;
printf("對應的10進制數:%d\n",c);
return c;
}
int main()
{
int c=0,R,r,d;
char a[50],b[16];
printf("請輸入將被轉換的數的進制:");
scanf("%d",&R);
if(R==2)
{
printf("輸入一個2進制數:");
scanf("%s",a);
c=f1(a);
}
if(R==8)
{
printf("輸入一個8進制數:b[16]");
scanf("%s",b);
c=f2(b);
}
if(R==10)
{
printf("輸入十進制數:d");
scanf("%d",&d);c=d;
}
printf("請輸入要轉換的進制型:");
scanf("%d",&r);
switch(r)
{
case 2:binary(c);break;
case 8:octal(c);break;
case 10:printf("%d",c);break;
case 16:hex(c);break;
default: printf("%d",c);break;
}
return 0;
}
Ⅱ c語言課程設計,十六進制轉十進制
你的16進制輸入的時候有點問題,獲得16進制數十%x,不是%d,獲得後直接輸出就可以了
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<stdio.h>
intf1(chara[])
{
intn,j,i,sum=0,t=0,p=1,c;
n=strlen(a);
for(i=n-1;i>=0;i--)
{
p=1;
t=(a[i]-48);
if(i==n-1)
p=1;
else
for(j=0;j<n-i-1;j++)
{
p=p*2;
sum+=t*p;
}
}
c=sum;
printf("對應的10進制數:%d ",c);
returnc;
}
intf2(charb[])
{
inti,j,sum=0,c;
for(i=strlen(b)-1,j=0;i>=0;i--,j++)
{
sum=sum+(int)(b[i]-'0')*(int)pow(8,j);
}
c=sum;
printf("對應的10進制數:%d ",c);
returnc;
}
intmain()
{
intc=0,R,d;
chara[50],b[16];
printf("請輸入將被轉換的數的進制:");
scanf("%d",&R);
if(R==2)
{
printf("輸入一個2進制數:");
scanf("%s",a);
c=f1(a);
}
if(R==8)
{
printf("輸入一個8進制數:");
scanf("%s",b);
c=f2(b);
}
if(R==10)
{
printf("輸入十進制數:");
scanf("%d",&d);printf("對應的10進制數:%d ",d);
}
if(R==16)
{
printf("輸入十六進制數:");
scanf("%x",&d);printf("對應的10進制數:%d ",d);
}
return0;
}
Ⅲ C++課程設計 進制轉換翻轉游戲
同學你是哪班的,我和你的題一樣,要不咱們一起討論討論
Ⅳ 課程設計:數制轉換(C語言)
#include <stdio.h>
#include <stdlib.h>
//輸入十進制數和轉化的進制數M
void trans(int n,int m)
{
if(n)
{
trans(n/m,m);
if(n%m<10) printf("%c",n%m+'0');
else printf("%c",n%m-10+'A');
}
}
void main()
{
int m,n,x;
char ch;
printf("給定進制數M:");
scanf("%d",&m);
loop:
printf("給定一個%d進制的數X:",m);
fflush(stdin);
//一個M進制的數X轉10進制
for(x=0;;)
{
ch=getchar();
if(ch>='0' && ch<='9')
{
n=ch-'0';
}
else if(ch>='a' && ch<='z')
{
n=ch-'a'+10;
}
else if(ch>='A' && ch<='Z')
{
n=ch-'A'+10;
}
else
{
break;
}
if(n>=m)
{
goto loop;
}
x=x*m+n;
}
printf("轉化成十進制數為:%d\n",x);
printf("給定要轉化進制數M:");
scanf("%d",&m);
printf("轉化成%d進制後的結果為:",m);
trans(x,m);
printf("\n");
}
其他的方法:
trans函數也可以這樣寫:
void trans(int n,int m)
{
char str[100];
int i;
for(i=0;n>0;i++)
{
if(n%m<10)
{
str[i]=n%m+'0';
}
else
{
str[i]=n%m-10+'A';
}
n=n/m;
}
for(n=i;n>0;n--)
{
printf("%c",str[n-1]);
}
}
Ⅳ 課程設計:編程實現自然數的十進制、二進制、八進制、十六進制轉換
我給你解決,呵呵,見下(已經調試成功):
#include<iostream.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 100;
#define STACKINCREMENT 10;
typedef struct
{
int *base;
int *top;
int stacksize;
}SqStack;
SqStack S;
void InitStack(SqStack &S1)
{
S1.base=(int *)malloc(100*sizeof(int));
S1.top=S1.base;
S1.stacksize=STACK_INIT_SIZE;
}
void Push(SqStack &S2,int e)
{
*S2.top++=e;
}
void Pop(SqStack &S3,int &e)
{
e=* --S3.top;
}
void tentotwo(int n)
{
while(n)
{
Push(S,n%2);
n=n/2;
}
cout<<"轉成的二進制數是:"<<endl;
while(S.top!=S.base)
{
int e;
Pop(S,e);
cout<<e;
}
cout<<endl;
}
void tentoeight(int n)
{
while(n)
{
Push(S,n%8);
n=n/8;
}
cout<<"轉成的八進制數是:"<<endl;
while(S.top!=S.base)
{
int e;
Pop(S,e);
cout<<e;
}
cout<<endl;
}
void tentosixteen(int n)
{
while(n)
{
Push(S,n%16);
n=n/16;
}
cout<<"轉成的十六進制數是:"<<endl;
while(S.top!=S.base)
{
int e;
Pop(S,e);
switch(e)
{
case 10: cout<<'A';
break;
case 11: cout<<'B';
break;
case 12: cout<<'C';
break;
case 13: cout<<'D';
break;
case 14: cout<<'E';
break;
case 15: cout<<'F';
break;
}
cout<<e;
}
cout<<endl;
}
void main()
{
InitStack(S);
f:
cout<<"請選擇您想進行的操作:1.十進制轉換成二進制 2.十進制轉換成八進制 3.十進制轉換成十六進制"<<endl;
int a,m;
cin>>a;
switch (a)
{
case 1:
{
cout<<"請輸入一個十進制數"<<endl;
cin>>m;
tentotwo(m);
break;
}
case 2:
{
cout<<"請輸入一個十進制數"<<endl;
cin>>m;
tentoeight(m);
break;
}
case 3:
{
cout<<"請輸入一個十進制數"<<endl;
cin>>m;
tentosixteen(m);
break;
}
}
goto f;
}
Ⅵ 急!急!急!!課程設計進制轉換,各位大哥幫幫忙吧!!
你是he工大的吧?
#include <iostream.h>
#include <math.h>
int tenToSix(int ten) {
int six = 0;
int count = 0;
while(ten != 0) {
int tmp = ten % 6;
six += (int)tmp * pow((double)10, (double)count++);
ten = ten / 6;
}
return six;
}
int sixToTen(int six) {
int ten = 0;
int count = 0;
while(six != 0) {
int tmp = six % 10;
ten += (int)tmp * pow((double)6, (double)count++);
six = six / 10;
}
return ten;
}
void main(){
int M = 0;
int data = 0;
cout<<"input M and data'\n";
cin>>M>>data;
if(M == 10) {
cout<<"6M is : "<<tenToSix(5863)<<"\n";
cout<<"10M is : "<<data<<"\n";
} else if(M == 6) {
cout<<"6M is : "<<data<<"\n";
cout<<"10M is : "<<sixToTen(data)<<"\n";
}
}
Ⅶ 把十進制數N轉換成任意進制數d 下面程序的詳細解析 數據結構課程設計要用
給你寫注釋了,看能否看得懂
#define MAXSIZE 100
#include<stdlib.h>
#include<stdio.h>
struct stack //一個棧的結構
{
int data[MAXSIZE]; //數據部分
int top; //棧頂位置
};
void init(struct stack *s) //初始化一個空棧
{
s->top=-1; //將棧頂位置設為-1,表示棧為空
}
int empty(struct stack *s) //判斷棧是否為空
{
if(s->top==-1) //如果棧頂位置 top 為-1,則為空,返回1
return 1;
else //否則不是空棧,返回0
return 0;
}
void push(struct stack *s,int i) //壓棧函數
{
if(s->top==MAXSIZE-1) //如果超出MAXSIZE-1,則棧滿,數據部分不能再大
{
printf("Stack is full\n");
return;
}
s->top++; //否則棧頂位置向後移一位
s->data[s->top]=i; //將元素 i 保存到數據部分
}
int pop(struct stack *s) //出棧
{
if(empty(s)) //如果棧為空,則返回錯誤
{
printf("stack is empty");
return -1;
}
return (s->data[s->top--]); //返回棧頂元素
}
void trans(int num,int jz) //將 num 按 jz 進制轉換
{
struct stack s;
int k;
init(&s); //初始化空棧
while(num)
{
k=num%jz; //將 num 除以 jz 的余數保存到k
push(&s,k); //將 k 壓進棧 s
num=num/jz; //num 除以 jz
}
while(!empty(&s)) //然後將棧 s 裡面的元素一個個出棧,並列印出來
{
k=pop(&s);
if(k<10) //如果 k 小於 10 就列印數字
printf("%d",k);
else //如果 k 大於 10 就列印字母,例如,10表示為A
printf("%c",k+55);
}
printf("\n");
}
int main()
{
int num,jz;
// clrscr();
printf("此程序的功能是將十進制數X轉化為Y進制輸出.\n");
printf("請輸入X和Y的值:(-1結束操作)");
scanf("%d%d",&num,&jz);
while(num!=-1)
{
trans(num,jz);
printf("請輸入X和Y的值:");
scanf("%d",&num);
if(num==-1)
return(0);
scanf("%d",&jz);
}
return 0; //最好加個return 0;
}
Ⅷ 數據結構課程設計 關於數制轉換問題
給你一個十進制轉換為八進制的,其他類似的改一下就是了
#include"stdio.h"
#include"malloc.h"
#include"util.h"
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OVERFLOW -2
#define OK 1
#define TRUE 1
#define FALSE 0
#define ERROR 0
typedef int SElemType;
typedef int Status;
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
Status InitStack(SqStack & S)//棧的初始化
{
S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));
if(!S.base)
exit(OVERFLOW);
S.top = S.base;
S.stacksize = 100;
return OK;
}
/*Status GetTop(SqStack S,SElemType &e)
{
if(S.top==S.base)
return ERROR;
e = *(S.top-1);
printf("獲得棧頂元素:");
printf("%3d\n",e);
return OK;
}*/
Status Push(SqStack &S,SElemType e)
{
if(S.top-S.base>=S.stacksize)
{
S.base = (SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!S.base)
exit(OVERFLOW);
S.top = S.base + S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
}
Status Pop(SqStack &S,SElemType &e)
{
//若棧不為空,則刪除s的棧頂元素,用e返回其值
if(S.top==S.base)
return ERROR;
--S.top;
e = *S.top;
return OK;
}
bool StackEmpty(SqStack &S)
{
if(S.top=S.base)
return TRUE;
else
return FALSE;
}
void main()
{
SqStack S;
int N,t;
printf("請輸入要轉換的十進制數:");
scanf("%d",&N);
InitStack(S);
while(N)
{
Push(S,N%8);
N=N/8;
}
printf("轉換後的八進制數:");
while(!StackEmpty(S))
{
Pop(S,t);
printf("%2d",t);
}
printf("\n");
}
百年天地回元氣 一統山河際太平 國泰民安
Ⅸ 數據結構進制轉換用C或者C++怎麼寫啊,我們課設 求大神
/**********************聲明部分**********************/
#include<stdio.h>
#include<stdlib.h>
#defineSTACK_INIT_SIZE10//定義最初申請的內存的大小
#defineSTACK_INCREMENT2//每一次申請內存不足的時候擴展的大小
#defineOVERFLOW0
#defineFALSE0
#defineTRUE1
#defineERROR0
#defineINFEASIBLE0
#defineOK1
typedefintSElemType;
typedefintStatus;
intLength;
/**********************結構類型部分**********************/
typedefstructSqStack
{
SElemType*base;//棧底指針
SElemType*top;//棧頂指針
intstacksize;
}SqStack;//順序棧
/**********************基本操作函數部分**********************//**********************構造一個空棧S**********************/
StatusInitStack(SqStack&S)
{//構造一個空棧S
if(!(S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType))))
exit(OVERFLOW);//存儲分配失敗
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;//初始棧容量
returnOK;
}/**********************輸入棧元素**********************/
StatusPush(SqStack&S,SElemTypee)
{
if(S.top-S.base>=S.stacksize)//棧滿,追加存儲空間
{
//可能會改變棧底地址,新棧底指針S.base
S.base=(SElemType*)realloc(S.base,//原棧底指針
(S.stacksize+STACK_INCREMENT)*sizeof(SElemType));//新大小
if(!S.base)
exit(OVERFLOW);//存儲分配失敗
//給SqStack結構對象S的3個成員賦值
S.top=S.base+S.stacksize;
S.stacksize+=STACK_INCREMENT;
}
*S.top++=e;//先把e壓入棧頂,S.top再增1指向棧頂元素e的下一個位置
returnOK;
}/**********************輸出棧元素**********************/
voidOutList(SqStackS)
{
S.top=S.base;//從棧底開始輸出
for(inti=0;i<Length;i++)//用長度控制輸出的個數
{
printf("%d ",*(S.top)++);
}
printf(" ");//輸出後換行
}
/**********************判斷棧是否是空的**********************/
StatusStackEmpty(SqStackS)
{//若棧S為空棧,則返回TRUE,否則返回FALSE
//棧頂指針S.top是否等於棧底指針S.base是判斷棧是否為空的條件
if(S.top==S.base)
returnTRUE;
else
returnFALSE;
}/**********************刪除棧頂元素**********************/
StatusPop(SqStack&S,SElemType&e)
{//若棧不空,則刪除S的棧頂元素,用e返回其值,並返回OK;否則返回ERROR
if(S.top==S.base)//如果空棧,報錯
returnERROR; e=*--S.top;//S.top先減1指向棧頂元素,再取值,交給e帶回
returnOK;
}/**********************演算法主程序**********************/
voidconversion()//演算法3.1
{//對於輸入的任意一個非負十進制整數,列印輸出與其等值的八進制數
SqStacks;//順序棧s
unsignedn,m;//非負整數
SElemTypee;//棧元素e
InitStack(s);//構造空棧s
printf("請輸入十進制數n(>=0)=");
scanf("%u",&n);//輸入非負十進制整數n
printf(" 請輸入需要轉換到的進制:");
scanf("%u",&m);//輸入非負十進制整數n
printf("十進制數%u的%d進制數是",n,m);
while(n)//只要n不等於0就循環
//從n為用戶輸入的十進制數開始,一直到n等於0為止
{
Push(s,n%m);//n除以8的余數(8進制的低位)入棧
//把n除以8的余數壓入棧s
//先壓入的余數是八進制的低位,後壓入的余數是八進制的高位
n=n/m;//令n等於n整除以8的商,進入下輪循環
}
//循環結束時,n等於0
while(!StackEmpty(s))//只要棧s沒彈空就不斷循環,
//直到彈出棧底元素棧s為空為止
{
Pop(s,e);//彈出棧頂元素且賦值給e
//依次彈出棧s的棧頂元素交給e帶回
//先彈出的是八進制的高位,後彈出的是八進制的低位
printf("%d",e);//依次輸出e
}
//循環結束時,棧s為空
printf(" ");
}/**********************主函數部分**********************/
intmain()
{
/**********************函數聲明區**********************/
StatusInitStack(SqStack&S);
StatusPush(SqStack&S,SElemTypee);
voidOutList(SqStackS);
/**********************函數執行區**********************/
conversion(); return0;
}
Ⅹ 怎麼利用Matlab進行十進制數與二進制十六進制數之間的轉換 課程設計
如bin2dec(『10101 』)為二進制轉換為十進制。dec2hex(10)為十進制轉換為十六進制。二進制與十六進制間無直接的轉換。