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;
}