有关c程序设计八进制

有关c程序设计八进制,第1张

答案是10

int x = 011; 以0开头表示8进制, x的值为9

printf("%d\n",++x); ++x先执行+1 *** 作,x值为10, 然后执行printf() *** 作,输出x的当前十进制值,为10

%d表示10进制

看代码样子是C,但C能用一个变量来作为大小声明数组吗?像int n;double x[n]这样[]中用一个变量n都是非法的,而且n还没有赋值!我不知道你用的是什么编译器竟能使代码运行起来,这应该连编译都过不了的。

这个问题好说,是你用了\t制表符的原因。\t的大小(多少个字符)是事先设置好的,实际输出字符数超过极限了就“挤”到下一段了,你应该发现变化格式的那一行从第二个字段起都多了一个字符!

这个代码没有“多组”循环,主函数执行完了就结束了。

供参考。

#include<stdioh> //头文件

main() //主函数

{

int i=-1; //定义变量i为整型,并初始化

printf("\ni:dec=%d,oct=%o,hex=%x\n",i,i,i); //输出i 的值,%d是以十进制数输出的值

//%o是以八进制数输出,%x是以十六进

//制数输出

}

1顺序表基本 *** 作

#include<stdioh>

#include<malloch>

#define MaxSize 50

typedef char ElemType;

typedef struct

{ ElemType elem[MaxSize];

int length;

}SqList;

void InitList(SqList &L)

{

L=(SqList )malloc(sizeof(SqList));

L->length=0;

}

void DestroyList(SqListL)

{

free(L);

}

int ListEmpty(SqList L)

{

return(L->length==0);

}

int ListLength(SqList L)

{

return(L->length);

}

void DispList(SqList L)

{

int i;

if(ListEmpty(L)) return;

for(i=0;i<L->length;i++)

printf("%c",L->elem[i]);

printf("\n");

}

int GetElem(SqList L,int i,ElemType &e)

{

if(i<1||i>L->length)

return 0;

e=L->elem[i-1];

return 1;

}

int LocateElem(SqList L,ElemType e)

{

int i=0;

while(i<L->length&&L->elem[i]!=e)i++;

if(i>=L->length)

return 0;

else

return i+1;

}

int ListInsert(SqList &L,int i,ElemType e)

{

int j;

if(i<1||i>L->length+1)

return 0;

i--;

for(j=L->length;j>i;j--)

L->elem[j]=L->elem[j-1];

L->elem[i]=e;

L->length++;

return 1;

}

int ListDelete(SqList &L,int i,ElemType &e)

{

int j;

if(i<1||i>L->length)

return 0;

i--;

e=L->elem[i];

for(j=i;j<L->length-1;j++)

L->elem[j]=L->elem[j+1];

L->length--;

return 1;

}

void main()

{

SqList L;

ElemType e;

printf("(1)初始化顺序表L\n");

InitList(L);

printf("(2)依次采用尾插法插入a,b,c,d,e元素\n");

ListInsert(L,1,'a');

ListInsert(L,2,'b');

ListInsert(L,3,'c');

ListInsert(L,4,'d');

ListInsert(L,5,'e');

printf("(3) 输出顺序表L:");

DispList(L);

printf("(4)顺序表L长度=%d\n",ListLength(L));

printf("(5)顺序表L为%s\n",(ListEmpty(L)"空":"非空"));

GetElem(L,3,e);

printf("(6)顺序表L的第3个元素=%c\n",e);

printf("(7)元素a的位置=%d\n",LocateElem(L,'a'));

printf("(8)在第4个元素位置上插如f元素\n");

ListInsert(L,4,'f');

printf("(9)输出顺序表L:");

DispList(L);

printf("(10)删除L的第3个元素\n");

ListDelete(L,3,e);

printf("(11)输出顺序表L:");

DispList(L);

printf("(12)释放顺序表L\n");

DestroyList(L);

}

2单链表基本 *** 作

#include<stdioh>

#include<stdlibh>

typedef struct LNode

{

char data;

struct LNode next;

}LNode,LinkList;

void InitList(LinkList L) //初始化

{

L = (LinkList)malloc(sizeof(LNode));

(L)->next = NULL;

}

char GetElem(LinkList L,int i) //返回i 位置的元素

{

//L为带头结点的单链表的头指针。

LinkList p;

int j;

p = L->next; j = 1; //初始化,p指向第一个结点,j为计数器

while(p && j<i)

{

p = p->next;

++j;

}

if(!p || j>i) exit(1); //i位置元素不存在

return(p->data);

}

void ListInsert(LinkList L,int i,char e)//插入

{

//在带头结点的单链线性表L中第i个位置前插入元素e

LinkList p,s;

int j;

p = L; j = 0;

while(p && j<i-1)//寻找第i-1个结点

{

p = p->next;

++j;

}

if(!p || j>i-1) exit(1); //i位置不正确

s = (LinkList)malloc(sizeof(LNode)); //新结点

s->data = e;

s->next = p->next;

p->next = s;

}

void ListDelete(LinkList L,int i)//删除i位置元素

{

LinkList p,q;

int j;

p = L; j = 0;

while(p->next && j<i-1)//寻找第i个结点

{//这以p->next开始是为了避开头结点,头结点不可删除

//而且这样是必须的,这样是为了有被删除点前面结点的地址,这样才能有前继结点,连接删除点的后继结点

p = p->next;

++j;

}

if(!(p->next) || j>i-1) exit(1); //删除位置不合理

q = p->next; //删除该点

p->next = q->next;

free(q);

}

void CreateList(LinkList L,int n)

{

//逆位序输入n个元素的值,建立带表头结点的单链线性表L

int i;

LinkList p;

(L) = (LinkList)malloc(sizeof(LNode));

(L)->next = NULL; //先建立带头结点的单链表

for(i=n;i>0;--i)

{

p = (LinkList)malloc(sizeof(LNode)); //生成新结点

scanf("%c",&p->data);

fflush(stdin);

p->next = (L)->next;

(L)->next = p;

}

//另一插入法

q = L = (LinkList)malloc(sizeof(LNode));

(L)->next = NULL;

for(i=n;i>0;--i)

{

p = (LinkList)malloc(sizeof(LNode));

scanf("%c",&p->data);

fflush(stdin);

p->next = NULL;

q->next = p;

q = p;

//q->next = p;

}

//

}

void MergeList(LinkList La,LinkList Lb,LinkList Lc)

{

//链表La,Lb按递增排列

LinkList pa,pb,pc;

pa = (La)->next;

pb = (Lb)->next;

(Lc) = pc = (La);

while(pa && pb)

{

if(pa->data <= pb->data)

{

pc->next = pa;

pc = pa;

pa = pa->next;

}

else

{

pc->next = pb;

pc = pb;

pb = pb->next;

}

}

pc->next = papa:pb; //插入剩余段

//free(Lb); //释放Lb头结点

}

void display(LinkList L)

{

LinkList di;

di = (L)->next;

while(di!=NULL)

{

printf("%c\t",di->data);

di = di->next;

}

printf("\n");

}

void main()

{

LinkList link,link2,link3;

InitList(&link);

InitList(&link2);

CreateList(&link,5);

CreateList(&link2,5);

display(&link);

display(&link2);

MergeList(&link,&link2,&link3);

display(&link3);

}

3二分查找算法的实现

#include<stdioh>

#include<stdlibh>

#include<timeh>

void xuanzhe(int a[], int n)

{

int i, j, min, t;

for (i=0; i<n-1; i++) /要选择的次数:0~n-2共n-1次/

{

min = i; /假设当前下标为i的数最小,比较后再调整/

for (j=i+1; j<n; j++)/循环找出最小的数的下标是哪个/

{

if (a[j] < a[min])

{

min = j; /如果后面的数比前面的小,则记下它的下标/

}

}

if (min != i) /如果min在循环中改变了,就需要交换数据/

{

t = a[i];

a[i] = a[min];

a[min] = t;

}

}

}

int main(){

int i,n,x;

int mid,left=0,right=999;

int find1=0,find2=0;

double y;

int a[1000];

for(i=0;i<1000;++i){

a[i]=rand();

}

xuanzhe(a,1000);

scanf("%d",&x);

printf("顺序查找:\n");

for(i=0;i<1000;++i){

while(x==a[i]){

printf("找到X=%d,a[%d]\n",x,i);

find1=1;

break;

}

}

if(find1==0){

printf("没有你要找的数\n");

}

printf("%fs\n",clock()/CLOCKS_PER_SEC);

y=clock();

printf("二分查找:\n");

while(!find2&&left<right)

{

mid=(left+right)/2;

if(x==a[mid])

find2=1;

else if(x<a[mid])

right=mid-1;

else left=mid+1;

}

if(find2==1)

printf("找到x=%d ,a[%d]\n",x,mid);

else

printf("没有你要找的数\n");

printf("%fs\n",(clock()-y)/CLOCKS_PER_SEC);

}

4你可以搜一下,网上很多。这个就不帮你谢了。

5固定分区的主存分配思想,用C语言设计并实现模拟固定分区分配方法

#include <stdlibh>

#include <stdioh>

#include <stringh>

typedef int datatype;

//主存分配表的结构体

typedef struct node

{

datatype Num,Size,Address;

int State;//0表示空闲状态,1表示已分配

char Name[10];//作业名,为0表示空闲状态,定义成字符串

struct node next;

}linknode;

typedef linknode linklist;

//作业列表的结构体

typedef struct job

{

char Name[10];

int Size;

struct job next;

}linkjob;

typedef linkjob joblist;

/尾插法创建作业队列/

joblist creatjoblist()

{

joblist head,r,s;

char ch[10];

int x;

head=r=(joblist)malloc(sizeof(linkjob));

printf("\nShanglogo\n");

printf("\nCopyright @ Shanglogo\n");

printf("\n先创建作业队列:\n");

printf("\n");

printf("请分别输入作业的名字及大小并以0结束:\n");

scanf("%s %d",&ch,&x);

while(x)

{

s=(joblist)malloc(sizeof(linkjob));

strcpy(s->Name,ch);

s->Size=x;

r->next=s;

r=s;

scanf("%s %d",&ch,&x);

}

r->next=NULL;

return head;

}

/尾插法创建带头结点的主存分配表/

linklist creatlinklist()

{

linklist head,r,s;

int a,b,c,d;

char ch[10];

head=r=(linklist)malloc(sizeof(linknode));

printf("现将主存分区,状态均为空闲:\n");

printf("\n");

printf("请分别输入分区的分区号、大小、起始地址、状态及占用分区的作业名并以0结束:\n");

scanf("%d %d %d %d %s",&a,&b,&c,&d,&ch);

while (a)

{

s=(linklist)malloc(sizeof(linknode));

s->Num=a;

s->Size=b;

s->Address=c;

s->State=d;

strcpy(s->Name,ch);

r->next=s;

r=s;

scanf("%d %d %d %d %S",&a,&b,&c,&d,&ch);

}

r->next=NULL;

return head;

}

/输出带头结点的单链表/

void print(linklist head)

{

linklist p;

p=head->next;

printf("此时的主存分配表为:\n");

printf("Num Size Address State Name\n");

while(p)

{

printf("%d%6d%6d%9d%7s\n",p->Num,p->Size,p->Address,p->State,p->Name);

p=p->next;

}

printf("\n");

}

void main()

{

joblist start,q;

linklist head,pre,p;

start=creatjoblist();//创建作业队列

head=creatlinklist();//创建主存分配表

print(head);

q=start->next;

pre=head;

p=head->next;

while(p)

{

while(q&&p->Size>=q->Size&&p->State==0)//q不为空并作业q的长度小于分区p的长度并且状态为空闲

{

p->State=1;

strcpy(p->Name,q->Name);

print(head);

q=q->next;

pre=head;

p=head->next;

}

if(q!=NULL)

{

pre=p;

p=p->next;

}

}

}

费了那么大劲,应该对你有所帮助吧!

以上就是关于有关c程序设计八进制全部的内容,包括:有关c程序设计八进制、关于C语言程序运行,代码如下,、有关C程序设计,答案如何分析的,要分析过程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10076869.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存