n的阶乘(递归)
#include <stdio.h>
#include <stdlib.h>
int fun(int n){
int t;
if(n==1||n==0){
t=1;
}
else{
t=fun(n-1)*n;
}
return t;
}
int main()
{
int m,n;
scanf("%d",&n);
if(n<0){
printf("´íÎó");
}
else{
m=fun(n);
printf("%d",m);
}
system("pause");
return 0;
}
n的阶乘(非递归)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int ace(int n)
{
int i,t=1;
for(i=1;i<n+1;i++){
t=t*i;
}
if(n==0){
t=1;
}
return t;
}
int main()
{
int n,m;
scanf("%d",&n);
if(n<0){
printf("´íÎó");
}
else{
m=ace(n);
printf("%d",m);
}
system("pause");
return 0;
}
斐波那契数列(递归)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int fun(int n){
if(n<0){
printf("错误");
}
if(n==0){
return 0;
}
if(n==1){
return 1;
}
return fun(n-1)+fun(n-2);
}
int main(int argc,char **argv)
{
clock_t start_time,end_time;
start_time=clock();
int n,i;
printf("要输出斐波那契数列的位数:");
scanf("%d",&n);
for(i=0;i<n;i++){
printf("%d ",fun(i));
}
printf("\n");
end_time=clock();
printf("程序运行时间:%lf",(double)(end_time-start_time)/CLOCKS_PER_SEC);
system("pause");
return 0;
}
斐波那契数列(非递归)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int fun(int n){
int i,j=1,k=1,temp=0;
if(n<0){
printf("错误");
}
if(n==0){
return 0;
}
if(n<=2&&n>0){
return 1;
}
if(n>2){
for(i=0;i<=n-3;i++){
temp=j+k;
j=k;
k=temp;
}
return temp;
}
}
int main(int argc,char **argv)
{
clock_t start_time,end_time;
start_time=clock();
int n,i;
printf("要输出斐波那契数列的位数:");
scanf("%d",&n);
for(i=0;i<n;i++){
printf("%d ",fun(i));
}
printf("\n");
end_time=clock();
printf("程序运行时间:%lf",(double)(end_time-start_time)/CLOCKS_PER_SEC);
system("pause");
return 0;
}
回文判断
#include <stdio.h>
#include <stdlib.h>
typedef struct Stack
{
int top;
char str[100];
}STACK;
int main()
{
int len,i,mid,next;
char str[100];
STACK s;
s.top=0;
gets(str);
len=strlen(str);
mid=len/2;
for(i=0;i<mid;i++)
{
s.str[s.top]=str[i];
s.top++;
}
if(len%2!=0)
{
next=mid+1;
}else{
next=mid;
}
while(s.top!=0)
{
if(s.str[s.top-1]==str[next])
{
s.top--;
next++;
}
else
{
break;
}
}
if(s.top==0)
{
printf("是回文\n");
}
else
{
printf("不是回文\n");
}
return 0;
}
任意进制转换
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int ChangeTen(int n, char str[]);
void ChangeX(int n, int x);
int main()
{
char str[100]; //由于待转换数的进制未知,可能存在字母表达,所以用字符串储存
int n, x, s;
printf("输入待转换数及其进制:\n");
scanf("%s %d", str, &n);
s = ChangeTen(n, str);
printf("输入待转换进制:\n");
scanf("%d", &x);
printf("转换后为:\n");
ChangeX(s, x);
return 0;
}
int ChangeTen(int n, char str[]) //将n进制数转换成10进制数
{
int len = strlen(str), i, sum = 0, t = 1;
for (i = len - 1; i >= 0; i--)
{
if (str[i] > 'A') //当高于10进制时,会用‘A’及其后表达
{
sum += (str[i] - 55)*t;
}
else
{
sum += (str[i] - 48)*t;
}
t *= n;
}
return sum;
}
void ChangeX(int n, int x) //利用递归思想把10进制数转换为x进制
{
int a;
if(n)
{
ChangeX(n/x, x);
a = n%x;
if (a < 10)
{
printf("%d", a);
}
else
{
printf("%c", a+55);
}
}
}
栈的基本操作
#include "stdio.h"
#include "stdlib.h"
int Max_SIZE=100;
typedef struct LinkStackNode
{
int data;
LinkStackNode *next;
}LinkStackNode;
typedef struct LinkStack
{
LinkStackNode *top;
int length;
}LinkStack;
LinkStack *initialize_stack()//链栈的初始化
{
LinkStack *p = (LinkStack *) malloc(sizeof(LinkStack));
p->length = 0;
p->top = NULL;
return p;
}
int Isempty(LinkStack *p)//判断栈是否为空
{
if(p->length==0)
{
printf("栈为空\n");
return 1;
}
else
{
printf("栈不为空\n");
return 0;
}
}
int Isenough(LinkStack *p)//判断栈满
{
if(p->length==Max_SIZE) {
printf("栈满\n");
return 1;
}
else
{
printf("栈不为满\n");
return 0;
}
}
LinkStack* Clear_Stack(LinkStack *p)//栈的清空
{
LinkStackNode *temp;
while(p->top)
{
temp=p->top;
p->top=p->top->next;
p->length--;
free(temp);
}
return p;
}
void Destory_stack(LinkStack *p)//栈的销毁
{
LinkStack *ptr;
ptr=Clear_Stack(p);
free(ptr);
}
LinkStack *Push_LinkstackNode(LinkStack *p,int data)//入栈 每次返回栈的头部
{
if(!p) exit(0);
LinkStackNode *temp=(LinkStackNode *) malloc(sizeof(LinkStackNode));
temp->data=data;
temp->next=p->top;
p->top=temp;
p->length++;
}
void pop_LinkStack(LinkStack *p)//出栈 每次从头部出栈 返回出栈完后的头
{
if(!p) exit(1);
int data;
LinkStackNode *temp=p->top;
data=temp->data;
printf("%d\n",data);
p->top=temp->next;
p->length--;
free(temp);
}
void GEt_Top_stack(LinkStack *p)//得到栈顶元素
{
if(!p) exit(0);
int data;
LinkStackNode *temp=p->top;
data=temp->data;
printf("栈顶元素=%d\n",data);
}
void Traverse_Stack(LinkStack *p)//栈的遍历
{
LinkStackNode *temp;
while(p->top)
{
temp=p->top;
int data=temp->data;
p->top=p->top->next;
printf("%d",data);
}
printf("\n");
}
void menu(LinkStack *p)
{
int choice;
while(1)
{
printf("请输入你想要选择的功能:\n");
printf("1.入栈\n");
printf("2.出栈\n");
printf("3.栈空判断\n");
printf("4.栈满判断\n");
printf("5.获取栈顶元素\n");
printf("6.栈的遍历\n");
printf("7.退出程序\n");
printf("请输入你的选择:");
scanf("%d",&choice);
switch (choice) {
case 1:
int data;
setbuf(stdin,NULL);
printf("输入你想要录入的数据\n");
scanf("%d",&data);
Push_LinkstackNode(p,data);
break;
case 2:
pop_LinkStack(p);
break;
case 3:
Isempty(p);
break;
case 4:
Isenough(p);
break;
case 5:
GEt_Top_stack(p);
break;
case 6:
Traverse_Stack(p);
break;
case 7:
exit(0);
default:
break;
}
}
}
int main()
{
LinkStack *Stack=initialize_stack();
menu(Stack);
return 0;
}