#2
Mr_doge2018-11-20 16:18
|
程序代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct {
int *base;
int *top;
int stacksize;
}stack;
int initstack(stack &s) {
s.base = (int*)malloc(sizeof(int) * 20);
if (!s.base)exit(-2);
s.top = s.base;
s.stacksize = 20;
return 1;
}
int push(stack &s, int e) {
if (s.top == s.base + s.stacksize) {
s.base = (int*)realloc(s.base, sizeof(int) * 10);
if (!s.base)exit(-2);
s.top = s.base + s.stacksize;
s.stacksize += 10;
}
*s.top++ = e;
return 1;
}
int pop(stack &s, int &e) {
if (s.base == s.top)return 0;
e = *--s.top;
return 1;
}
void conversion(int num) {
int n;
stack s;
initstack(s);
while (num) {
push(s, num % 2);
num /= 2;
}
while (s.top != s.base) {
pop(s, n);
printf("%d", n);
}
printf("\n");
}
int main()
{
int m;
printf("请输入要测试的组数:");
scanf_s("%d", &m);
int i, num;
for (i = 0; i < m; i++) {
scanf_s("%d", &num);
conversion(num);
}
system("pause");
return 0;
}
#include<stdlib.h>
typedef struct {
int *base;
int *top;
int stacksize;
}stack;
int initstack(stack &s) {
s.base = (int*)malloc(sizeof(int) * 20);
if (!s.base)exit(-2);
s.top = s.base;
s.stacksize = 20;
return 1;
}
int push(stack &s, int e) {
if (s.top == s.base + s.stacksize) {
s.base = (int*)realloc(s.base, sizeof(int) * 10);
if (!s.base)exit(-2);
s.top = s.base + s.stacksize;
s.stacksize += 10;
}
*s.top++ = e;
return 1;
}
int pop(stack &s, int &e) {
if (s.base == s.top)return 0;
e = *--s.top;
return 1;
}
void conversion(int num) {
int n;
stack s;
initstack(s);
while (num) {
push(s, num % 2);
num /= 2;
}
while (s.top != s.base) {
pop(s, n);
printf("%d", n);
}
printf("\n");
}
int main()
{
int m;
printf("请输入要测试的组数:");
scanf_s("%d", &m);
int i, num;
for (i = 0; i < m; i++) {
scanf_s("%d", &num);
conversion(num);
}
system("pause");
return 0;
}
看一下形参里面就是地址符,这样调用函数中值的改变主函数中也会变的
只有本站会员才能查看附件,请 登录
然后看一下把.cpp改成.c后的结果是编译前就报错了,看一下
只有本站会员才能查看附件,请 登录
改成了.c后就得改了,一开始一头雾水的,不过还是写好了,看一下代码
程序代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct {
int *base;
int *top;
int stacksize;
}stack;
int initstack(stack *s) {
s->base = (int*)malloc(sizeof(int) * 20);
if (!s->base)exit(-2);
s->top = s->base;
s->stacksize = 20;
return 1;
}
int push(stack *s, int e) {
if (s->top == s->base + s->stacksize) {
s->base = (int*)realloc(s->base, sizeof(int) * 10);
if (!s->base)exit(-2);
s->top = s->base + s->stacksize;
s->stacksize += 10;
}
*s->top++ = e;
return 1;
}
int pop(stack *s, int *e) {
if (s->base == s->top)return 0;
*e = *--s->top;
return 1;
}
void conversion(int num) {
int n;
stack s;
initstack(&s);
while (num) {
push(&s, num % 2);
num /= 2;
}
while (s.base != s.top) {
pop(&s, &n);
printf("%d", n);
}
printf("\n");
}
int main()
{
int m;
printf("请输入要测试的组数:");
scanf_s("%d", &m);
int i, num;
for (i = 0; i < m; i++) {
scanf_s("%d", &num);
conversion(num);
}
system("pause");
return 0;
}
#include<stdlib.h>
typedef struct {
int *base;
int *top;
int stacksize;
}stack;
int initstack(stack *s) {
s->base = (int*)malloc(sizeof(int) * 20);
if (!s->base)exit(-2);
s->top = s->base;
s->stacksize = 20;
return 1;
}
int push(stack *s, int e) {
if (s->top == s->base + s->stacksize) {
s->base = (int*)realloc(s->base, sizeof(int) * 10);
if (!s->base)exit(-2);
s->top = s->base + s->stacksize;
s->stacksize += 10;
}
*s->top++ = e;
return 1;
}
int pop(stack *s, int *e) {
if (s->base == s->top)return 0;
*e = *--s->top;
return 1;
}
void conversion(int num) {
int n;
stack s;
initstack(&s);
while (num) {
push(&s, num % 2);
num /= 2;
}
while (s.base != s.top) {
pop(&s, &n);
printf("%d", n);
}
printf("\n");
}
int main()
{
int m;
printf("请输入要测试的组数:");
scanf_s("%d", &m);
int i, num;
for (i = 0; i < m; i++) {
scanf_s("%d", &num);
conversion(num);
}
system("pause");
return 0;
}
只有本站会员才能查看附件,请 登录
同一个c程序代码,c文件里形式参数不能带地址符,而c++文件能带地址符,而能带地址符是很方便的,调用函数是只需要写变量就好了,自定义函数也更好写。
你们在.c和.cpp这两的程序里面看到这样子有什么样的想法和观点,欢迎评论。代码是vs2017写的。