c語言基數
1. c語言中分子和分母用什麼表示
c語言中分子和分母用基數和序數表示。
在C預言的環境中,分子用基數詞,分母用序數詞。分子如果是1以上,分母用復數。同時分數可以表示為「分子/分母」的形式。編寫一個程序,要求用戶輸入一個分數,然後將其約分為最簡分式。
簡介:
C語言是一門面向過程的、抽象化的通用程序設計語言,廣泛應用於底層開發。C語言能以簡易的方式編譯、處理低級存儲器。C語言是僅產生少量的機器語言以及不需要任何運行環境支持便能運行的高效率程序設計語言。
盡管C語言提供了許多低級處理的功能,但仍然保持著跨平台的特性,以一個標准規格寫出的C語言程序可在包括類似嵌入式處理器以及超級計算機等作業平台的許多計算機平台上進行編譯。
2. 求c語言基數排序與桶排序的源代碼
基數排序:
#include<math.h>
testBS()
{
inta[]={2,343,342,1,123,43,4343,433,687,654,3};
int*a_p=a;
//計算數組長度
intsize=sizeof(a)/sizeof(int);
//基數排序
bucketSort3(a_p,size);
//列印排序後結果
inti;
for(i=0;i<size;i++)
{
printf("%d ",a[i]);
}
intt;
scanf("%d",t);
}
//基數排序
voidbucketSort3(int*p,intn)
{
//獲取數組中的最大數
intmaxNum=findMaxNum(p,n);
//獲取最大數的位數,次數也是再分配的次數。
intloopTimes=getLoopTimes(maxNum);
inti;
//對每一位進行桶分配
for(i=1;i<=loopTimes;i++)
{
sort2(p,n,i);
}
}
//獲取數字的位數
intgetLoopTimes(intnum)
{
intcount=1;
inttemp=num/10;
while(temp!=0)
{
count++;
temp=temp/10;
}
returncount;
}
//查詢數組中的最大數
intfindMaxNum(int*p,intn)
{
inti;
intmax=0;
for(i=0;i<n;i++)
{
if(*(p+i)>max)
{
max=*(p+i);
}
}
returnmax;
}
//將數字分配到各自的桶中,然後按照桶的順序輸出排序結果
voidsort2(int*p,intn,intloop)
{
//建立一組桶此處的20是預設的根據實際數情況修改
intbuckets[10][20]={};
//求桶的index的除數
//如798個位桶index=(798/1)%10=8
//十位桶index=(798/10)%10=9
//百位桶index=(798/100)%10=7
//tempNum為上式中的1、10、100
inttempNum=(int)pow(10,loop-1);
inti,j;
for(i=0;i<n;i++)
{
introw_index=(*(p+i)/tempNum)%10;
for(j=0;j<20;j++)
{
if(buckets[row_index][j]==NULL)
{
buckets[row_index][j]=*(p+i);
break;
}
}
}
//將桶中的數,倒回到原有數組中
intk=0;
for(i=0;i<10;i++)
{
for(j=0;j<20;j++)
{
if(buckets[i][j]!=NULL)
{
*(p+k)=buckets[i][j];
buckets[i][j]=NULL;
k++;
}
}
}
}
桶排序
#include<stdio.h>
#defineMAXNUM100
voidbucksort(intarr[],intN,intM)
{
intcount[MAXNUM];
for(inti=0;i<=M;i++)
{
count[i]=0;
}
for(inti=0;i<N;i++)
{
++count[arr[i]];
}
for(inti=0;i<=M;i++)
{
for(intj=1;j<=count[i];j++)
{
printf("%d",i);
}
}
}
intmain()
{
inta[]={2,5,6,12,4,8,8,6,7,8,8,10,7,6};
bucksort(a,sizeof(a)/sizeof(a[0]),12);
return0;
}
3. c語言,基數排序
如圖
//#pragmaGCCdiagnosticerror"-std=c11"
#include<stdlib.h>//有隨機數庫
#include<malloc.h>
#include<time.h>//用於產生隨機數種子
#include<string.h>
#include<stdio.h>
#defineLEN30//要多長這里改就行
intA[LEN];
intascend(constvoid*a,constvoid*b){
return*((int*)a)-*((int*)b);
}
voidprintArr(intA[],intlen){
inti;
for(i=0;i<len;++i){
printf("%d",A[i]);
if((i+1)%10==0)putchar('
');//10個數換一行
}
}
intmain(){
inti;
srand(time(0));//置隨機數種子
printf("生成隨機數:↓
");
for(i=0;i<LEN;++i){
A[i]=rand();
}
printArr(A,LEN);
printf("
排序後:↓
");
qsort(A,LEN,sizeof(int),ascend);
printArr(A,LEN);
return0;
}
4. C語言,基數排序
#include <stdio.h>
typedef struct node {
int data;
int next;
} node;
int head; //這里的head是全局變數
int fr[10];
int re[10];
void Distribute(node *a, int w) //第一次w=1
{
int i;
for (i=0; i<10; i++) { //初始化
fr[i] = -1;
}
for (i=head; i!=-1; i=a[i].next) { //第一次i=0
int x = a[i].data / w % 10; //這是以前求一個數各個位的方法例:98%10=8(個位) 98/10%10=9(十位)
if (fr[x] == -1) {
fr[x] = re[x] = i;
}
else {
a[re[x]].next = i;
re[x] = i;
}
}
for (i=0; i<10; i++) {
if (fr[i] != -1) {
a[re[i]].next = -1;
}
}
}
void Collect(node *a)
{
int i, last;
last = -1;
for (i=0; i<10; i++) {
if (fr[i] != -1) {
if (last == -1) {
head = fr[i];
last = re[i];
}
else {
a[last].next = fr[i];
last = re[i];
}
}
}
a[last].next = -1;
}
void Out(node *a, int w)
{
int i, p, k;
printf("weight == %d\n", w);
for (i=0; i<10; i++) {
printf("fr[%d] ", i);
p = fr[i];
k = 0;
while (p != -1) {
printf("->%4d ", a[p].data);
p = a[p].next;
k++;
}
while (k<3) printf("-------"),k++;
printf("-> re[%d]\n", i);
}
}
void Output(node *a, int head) //結構體指針 ,這里的head是形參,調用此函數結束後即釋放,不影響全局變數head的值
{
while (head != -1) {
printf("%4d", a[head].data);
head = a[head].next;
}
printf("\n");
}
void main()
{
//對於無數據的數組排序會出錯~~~
//614 738 921 485 637 101 215 530 790 306
node a[10]; //結構體數組
int i, n = 10, max;
max = 0x80000000; //此處對0x80000000及MAX的意思不理解
printf("max == %d\n", max);
printf("Please intput %d numbers~\n", n);
for (i=0; i<n; i++) {
scanf("%d", &a[i].data); //賦值
a[i].next = i + 1;
if (a[i].data > max) max=a[i].data;
}
head = 0;
a[n - 1].next = -1;
Output(a, head);
for (i=1; i<=max; i*=10) {
Distribute(a, i);
Out(a, i);
Collect(a);
Output(a, head);
}
}
5. C語言中置基數為什麼意識
是在輸出中的說明符么?%d是以十進制輸出,%o是八進制,%x是十六進制,基數分別就是10、8、16
6. C語言尋找基數問題
/*
輸入數字串(空格結束) : 360F
360F(16) ←→ 13839(10)
360F(17) ←→ 16488(10)
360F(18) ←→ 19455(10)
360F(19) ←→ 22758(10)
360F(20) ←→ 26415(10)
360F(21) ←→ 30444(10)
360F(22) ←→ 34863(10)
360F(23) ←→ 39690(10)
360F(24) ←→ 44943(10)
360F(25) ←→ 50640(10)
360F(26) ←→ 56799(10)
360F(27) ←→ 63438(10)
360F(28) ←→ 70575(10)
360F(29) ←→ 78228(10)
360F(30) ←→ 86415(10)
360F(31) ←→ 95154(10)
360F(32) ←→ 104463(10)
360F(33) ←→ 114360(10)
360F(34) ←→ 124863(10)
360F(35) ←→ 135990(10)
360F(36) ←→ 147759(10)
輸入數字串(空格結束) :
*/
#include<stdio.h>
#include<string.h>
intMin_base(chars[]){//尋找最小基數函數
inti,temp,min=0;
for(i=0;s[i];i++){//將字母轉換為數字,如A=10
if(s[i]>='0'&&s[i]<='9'){//阿拉伯數字
temp=s[i]-'0';
if(min<temp)min=temp;
}
elseif(s[i]>='A'&&s[i]<='Z'){//大寫英文字母
temp=s[i]-'A'+10;
if(min<temp)min=temp;
}
elseif(s[i]>='a'&&s[i]<='z'){//小寫英文字母
temp=s[i]-'a'+10;
if(min<temp)min=temp;
}
//其他字元,如小數點等不作處理
}
returnmin+1;
}
unsignedlongChange(chars[],intbase){//將base進制的數字串轉換為10進制數
unsignedlongi,num=0;
for(i=0;s[i];++i){
if(s[i]>='0'&&s[i]<='9')num=base*num+s[i]-'0';
elseif(s[i]>='A'&&s[i]<='Z')num=base*num+s[i]-'A'+10;
elseif(s[i]>='a'&&s[i]<='z')num=base*num+s[i]-'a'+10;
elsebreak;//非數字字元結束轉換
}
returnnum;
}
/*
用英文字母(不分大小寫)和阿拉伯數字組成的數基數在2到36之間。下面的函
數將給定的數字以可能進制數輸出。單一情況是,若數字串中僅含有0和1,
那麼這個數只能是2進制。多種情況是,當數字串中含有'F'或'f'時,這個數
可能是16進制到36進制之間的數。
*/
voidShow(chars[]){
inti,min=Min_base(s);
for(i=min;i<=36;i++)
printf("%s(%02d)←→%u(10) ",s,i,Change(s,i));
}
intmain(){
chars[10];
while(1){
printf("輸入數字串(空格結束):");
gets(s);
if(s[0]=='')break;
Show(s);
}
return0;
}