求简单C语言程序代码!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求简单C语言程序代码!相关的知识,希望对你有一定的参考价值。
输入2个正整数m和n,求其最大公约数和最小公倍数
#include
#include
int main()
int m,n,p,q,s,r;
printf("请输入两个正整数;m,n\\n");
scanf("%d,%d",&m,&n);
#include<stdio.h>
main()
int a,b,t=0;
scanf("%d %d",&a,&b);
if (a<b)
printf("%d %d %d %d %d",(a+b),(a-b),(a/b),(a*b),(a%b));
主要特点
C语言是一种结构化语言,它有着清晰的层次,可按照模块的方式对程序进行编写,十分有利于程序的调试,且c语言的处理和表现能力都非常的强大,依靠非常全面的运算符和多样的数据类型,可以轻易完成各种数据结构的构建,通过指针类型更可对内存直接寻址以及对硬件进行直接操作,因此既能够用于开发系统程序,也可用于开发应用软件。
以上内容参考:百度百科-c语言
参考技术A小游戏2048源码:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
#include<windows.h>
int jsk( ); //计算空格数
void rsgm( ); //重置游戏
void inkey( ); //按键输入
void left( ); //向左移动
void right( ); //向右移动
void up( ); //向上移动
void down( ); //向下移动
void show( ); //输出界面
void adnum( ); //添加随机数
void yes( ); //游戏是否结束(1是0否)
void gtxy(int x, int y); //控制光标位置的函数
int a[4][4]; //存储16个格子中的数字
int score = 0; //每局得分
int best = 0; //最高得分
int ifnum; //是否需要添加数字(1是0否)
int over; //游戏结束标志(1是0否)
int i,j,k;
int main( )
rsgm( ); //重置游戏
inkey( ); //按键输入
return 0;
void setColor(unsigned short ForeColor = 7, unsigned short BackGroundColor = 0)
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(handle, ForeColor + BackGroundColor * 0x10);
//用于控制字符颜色的函数
void rsgm( ) //重置游戏
score = 0; ifnum = 1; over = 0; srand((unsigned)time(0)); //启动随机数发生器
int n = rand( ) % 16; //随机函数产生0-15的数字
for (i = 0; i < 4; i++)
for (j = 0; j < 4; j++)
if (n == 0) int k = rand( ) % 3; if (k == 0 || k == 1) a[i][j] = 2;
else a[i][j] = 4; n--;
else a[i][j] = 0; n--;
adnum( );
system("cls");
CONSOLE_CURSOR_INFO cursor_info=1,0; //以下两行是隐藏光标的设置
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
setColor(14, 0); //设置字体淡红色,背景为黑色
printf("\\n\\n\\t\\t 2048小游戏"); setColor(7, 0); //恢复白字黑底
printf("\\n\\t┌──────┬──────┬──────┬──────┐");
printf("\\n\\t│ │ │ │ │");
printf("\\n\\t├──────┼──────┼──────┼──────┤");
printf("\\n\\t│ │ │ │ │");
printf("\\n\\t├──────┼──────┼──────┼──────┤");
printf("\\n\\t│ │ │ │ │");
printf("\\n\\t├──────┼──────┼──────┼──────┤");
printf("\\n\\t│ │ │ │ │");
printf("\\n\\t└──────┴──────┴──────┴──────┘");
show( );
void show( ) //输出界面
for(i=0;i<4;i++)
for(j=0;j<4;j++)
gtxy(7*j+9,2*i+4); //gtxy(7*j+9, 2*i+4)是光标到指定位置输出数字
if(a[i][j]==0)printf(" "); setColor(7, 0); printf("│");
else if(a[i][j]<10) if (a[i][j] == 2) setColor(14, 0);
else if (a[i][j] == 4) setColor(13, 0);
else if (a[i][j] == 8) setColor(12, 0);
printf(" %d ", a[i][j]); setColor(7, 0); printf("│");
else if (a[i][j] < 100)if (a[i][j] == 16) setColor(12, 0);
else if (a[i][j] == 32) setColor(10, 0);
else if (a[i][j] == 64) setColor(2, 0);
printf(" %d ", a[i][j]); setColor(7, 0); printf("│");
else if (a[i][j] < 1000) if (a[i][j] == 128) setColor(9, 0);
else if (a[i][j] == 256) setColor(1, 0);
else if (a[i][j] == 512) setColor(13, 0);
printf(" %d ", a[i][j]); setColor(7, 0); printf("│");
else if (a[i][j] < 10000) if (a[i][j] == 1024) setColor(5, 0);
else setColor(15, 0);
printf(" %d ", a[i][j]); setColor(7, 0); printf("│");
if (jsk( ) == 0)
yes( ); if (over) gtxy(9,12); setColor(10, 0);
printf("\\n\\n 游戏结束!是否继续? [ Y/N ]:");
void inkey( ) //按键输入
int key;
while (1)
key = getch( );
if (over) if (key == 89|| key == 121) rsgm( ); continue;
else if (key == 78|| key == 110) return;
else continue;
ifnum = 0;
if(key==224)key=getch( );
switch (key)
case 75: left( ); break;
case 77: right( ); break;
case 72: up( ); break;
case 80: down( );break;
if (score > best) best = score;
if (ifnum) adnum( ); show( );
int jsk( ) //计算空格数
int n = 0;
for (i = 0; i < 4; i++)
for (j = 0; j < 4; j++) if ( a[i][j] == 0) n++;
return n;
void left( ) //向左移动
for (i = 0; i < 4; i++)
for (j = 1, k = 0; j < 4; j++)
if (a[i][j] > 0)
if ( a[i][k] == a[i][j])
a[i][k] *= 2; k++;
score = score + 2 * a[i][j];
a[i][j] = 0; ifnum = 1;
else if ( a[i][k] == 0) a[i][k] = a[i][j]; a[i][j] = 0; ifnum = 1;
else a[i][k + 1] = a[i][j]; if ((k + 1) != j) a[i][j] = 0; ifnum = 1;
k++;
void right( ) //向右移动
for (i = 0; i < 4; i++)
for (j = 2, k = 3; j >= 0; j--)
if (a[i][j] > 0)
if (a[i][k] == a[i][j])
a[i][k] *= 2; k--; score = score + 2 * a[i][j]; a[i][j] = 0; ifnum = 1;
else if ( a[i][k] == 0) a[i][k] = a[i][j]; a[i][j] = 0; ifnum = 1;
else a[i][k - 1] = a[i][j]; if ((k - 1) != j) a[i][j] = 0; ifnum = 1; k--;
void up( ) //向上移动
for (i = 0; i < 4; i++)
for (j = 1, k = 0; j < 4; j++)
if (a[j][i] > 0)
if ( a[k][i] == a[j][i]) a[k][i] *= 2; k++;score = score + 2 * a[j][i];
a[j][i] = 0; ifnum = 1;
else if ( a[k][i] == 0) a[k][i] = a[j][i]; a[j][i] = 0; ifnum = 1;
else a[k + 1][i] = a[j][i]; if ((k + 1) != j) a[j][i] = 0; ifnum = 1;
k++;
void down( ) //向下移动
for (i = 0; i < 4; i++)
for (j = 2, k = 3; j >= 0; j--)
if (a[j][i] > 0)
if (a[k][i] == a[j][i])
a[k][i] *= 2; k--;score = score + 2 * a[j][i]; a[j][i] = 0; ifnum = 1;
else if (a[k][i] == 0) a[k][i] = a[j][i]; a[j][i] = 0; ifnum = 1;
else a[k - 1][i] = a[j][i];
if ((k - 1) != j) a[j][i] = 0; ifnum = 1; k--;
void adnum( ) //添加随机数
srand(time(0)); //启动随机数发生器
int n = rand( ) % jsk( );
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++)
if (a[i][j] == 0) if (n != 0) n--;
else int k = rand() % 3;
if (k == 0 || k == 1) a[i][j] = 2; return;
else a[i][j] = 4; return;
void yes( ) //游戏是否结束
for (int i = 0; i < 4; i++)
for (int j = 0; j < 3; j++)
if (a[i][j] == a[i][j + 1] || a[j][i] == a[j + 1][i]) over = 0; return;
over = 1;
void gtxy(int x, int y) //控制光标位置的函数
COORD coord;
coord.X = x;
coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
参考技术B 回答1、由键盘任意输入1个4位数整数,分别输出其中的个位、十位、百位、千位。/*expe3-10*/#include #include void main(void)intmun,ab,c,d;scanf(%d&mun);a=mun/1000;/*千位*/b=(mun%1000)/100;/*百位*/c=(mun%100)/10;/*+位*/d=(mun%10);/*个位*/printf(千位数字为=%dna);printf(百位数字为=%dnb);printf(+位数字为=%dnc);printf(个位数字为=%dnd);由键盘任意输入。2 3个数据,找出其中的最大数和最小数。#include void main(void)float a,b,c,k,g;/*k小 g大*/printf(请输入三个数);scanf(%f%f%f&a&b,&c);if(ac)/*最大*/printf(n最大的数=%52fg);elseprintf(n最大的数=%52fc);判断三角形的形状#include#include void m\\x09APP内打开\\x09请输入三角形三\\x09边);float
参考技术C程序源码及运行结果如下所示(系统会自动去掉句首空格,排版较乱请见谅):
#include<stdio.h>
int main()
int max,min;
int sum=0;
printf("请输入一个整数:");
scanf("%d",&max);
printf("请再输入一个整数:");
scanf("%d",&min);
if(min>max)
int temp;
temp = max;
max = min;
min = temp;
for(int i=min;i<=max;i++)
sum += i;
printf("两数之间的整数和是:%d\\n",sum);
return 0;
int fun(int num1, int num2);
void main()
int num1, num2;
int sum;
printf("请输入两个整数:\\n");
scanf("%d %d", &num1, &num2);
if(num1 > num2)
int tmp = num1;
num1 = num2;
num2 = tmp;
sum = fun(num1, num2);
printf("大于等于%d小于等于%d的所有整数和是%d\\n", num1, num2, sum);
int fun(int num1, int num2)
int i, sum = 0;
for(i=num1; i<=num2; i++)
sum += i;
return sum;
本回答被提问者采纳
C语言数据结构算法——简单表达式求值(支持计算小数及负数)
样例输入输出
输入为一段简单表达式(中缀),表达式中的数据可以是小数
以及整数
,负数
前后都有括号分隔,以下是一段输入样例:
4.5*(3.8-0.9*2)+2.5*(9.6/(-2.4))
输出为计算结果即 -1
。
中缀表达式转后缀表达式
代码如下,算法思路在注释里了,改进了算法加入了对小数
以及负数
的支持:
/*
以下为中缀表达式转后缀表达式:
while (从exp读取字符ch,ch!='\\0')
ch为数字:
将后续的所有数字均依次存放到postexp中,并以字符'#'标志数值串结束;
ch为左括号'(':
将此括号进栈到Optr中;
ch为右括号')':
将Optr中出栈时遇到的第一个左括号'('以前的运算符依次出栈并存放到postexp中,然后将左括号'('出栈;
ch为'+'或'-':
出栈运算符并存放到postexp中,直到栈空或者栈顶为'(',然后将'+'或'-'进栈;
ch为'*'或'/':
出栈运算符并存放到postexp中,直到栈空或者栈顶为'('、'+'或'-',然后将'+'或'-'进栈;
若exp扫描完毕,则将Optr中所有运算符依次出栈并存放到postexp中。
增添内容:
负数的判断:
表达式首出现减号一定为负数,左括号后为减号该减号代表负数
小数点的处理:
小数点直接进postexp,小数点前的数每次乘10,小数点后的数每次除以10
*/
void trans(char *exp, char postexp[])
char e;
SqStack *Optr; //定义运算符栈指针
InitStack(Optr); //初始化运算符栈
int i=0; //i作为postexp的下标
while (*exp != '\\0') //exp表达式未扫描完时循环
switch(*exp)
case '(': //判定为左括号
exp++; //获取左括号后字符
if (*exp == '-')//左括号后为减号则一定为负数
postexp[i++] = *exp; //减号进postexp
exp++;
while(*exp != ')') //依次读取完负数的数值部分
postexp[i++] = *exp;
exp++;
postexp[i++]='#';
exp++; //将负数对应的右括号处理掉(无需进栈)
break;
else
Push(Optr,'('); //左括号进栈
break;
case ')': //判定为右括号
Pop(Optr,e); //出栈元素e
while (e!='(') //不为'('时循环
postexp[i++]=e; //将e存放到postexp中
Pop(Optr,e); //继续出栈元素e
exp++; //继续扫描其他字符
break;
case '+': //判定为加号
while (!StackEmpty(Optr)) //栈不空循环
GetTop(Optr,e); //取栈顶元素e
if (e!='(') //e不是'('
postexp[i++]=e; //将e存放到postexp中
Pop(Optr,e); //出栈元素e
else //e是'(时退出循环
break;
Push(Optr,*exp); //将'+'或'-'进栈
exp++; //继续扫描其他字符
break;
case '-':
if (i == 0) //减号出现在表达式首位一定为负数
postexp[i++] = *exp;
exp++;
while(*exp != ')')
postexp[i++]=*exp;
exp++;
postexp[i++]='#';
exp++; // ')'
break;
else //以下内容同加号
while (!StackEmpty(Optr)) //栈不空循环
GetTop(Optr,e); //取栈顶元素e
if (e!='(') //e不是'('
postexp[i++]=e; //将e存放到postexp中
Pop(Optr,e); //出栈元素e
else //e是'(时退出循环
break;
Push(Optr,*exp); //将'+'或'-'进栈
exp++; //继续扫描其他字符
break;
case '*': //判定为'*'或'/'号
case '/':
while (!StackEmpty(Optr)) //栈不空循环
GetTop(Optr,e); //取栈顶元素e
if (e=='*' || e=='/')
postexp[i++]=e; //将e存放到postexp中
Pop(Optr,e); //出栈元素e
else //e为非'*'或'/'运算符时退出循环
break;
Push(Optr,*exp); //将'*'或'/'进栈
exp++; //继续扫描其他字符
break;
default: //处理数字字符和点
while ((*exp>='0' && *exp<='9') || *exp=='.') //判定为数字字符或点
postexp[i++]=*exp; //全部进postexp即可
exp++;
postexp[i++]='#'; //用#标识一个数值串结束
while (!StackEmpty(Optr)) //此时exp扫描完毕,栈不空时循环
Pop(Optr,e); //出栈元素e
postexp[i++]=e; //将e存放到postexp中
postexp[i]='\\0'; //给postexp表达式添加结束标识
DestroyStack(Optr); //销毁栈
后缀表达式求值
代码如下:
/*
后置表达式求值算法如下:
while (从postexp读取字符ch,ch!='\\0')
ch为'+':
从Opnd栈中出栈两个数值a和b,计算c=b+a;将c进栈;
ch为'-':
从Opnd栈中出栈两个数值a和b,计算c=b-a;将c进栈;
ch为'*':
从Opnd栈中出栈两个数值a和b,计算c=b*a;将c进栈;
ch为'/':
从Opnd栈中出栈两个数值a和b,若a不零,计算c=b/a;将c进栈;
ch为数字字符:
将连续的数字串转换成数值d,将d进栈;
返回Opnd栈的栈顶操作数即后缀表达式的值;
增添内容:
利用flag增添对负数的处理以及对小数点的处理
*/
double compvalue(char *postexp)
int flag = 1;
double a, b, c, d, e, i;
SqStack1 *Opnd; //定义操作数栈
InitStack1(Opnd); //初始化操作数栈
while (*postexp != '\\0') //postexp字符串未扫描完时循环
switch (*postexp)
case '+': //判定为'+'号
Pop1(Opnd, a); //出栈元素a
Pop1(Opnd, b); //出栈元素b
c = b + a; //计算c
Push1(Opnd, c); //将计算结果c进栈
postexp++;
break;
case '-': //判定为'-'号
postexp++; //获取减号后元素
if (*postexp >= '0' && *postexp <= '9') //若减号后为数字则为负数
flag = -1; //记flag为-1记录数值符号
break;
else
Pop1(Opnd, a); //出栈元素a
Pop1(Opnd, b); //出栈元素b
c = b - a; //计算c
Push1(Opnd, c); //将计算结果c进栈
break;
case '*': //判定为'*'号
Pop1(Opnd, a); //出栈元素a
Pop1(Opnd, b); //出栈元素b
c = b*a; //计算c
Push1(Opnd, c); //将计算结果c进栈
postexp++;
break;
case '/': //判定为'/'号
Pop1(Opnd, a); //出栈元素a
Pop1(Opnd, b); //出栈元素b
if (a != 0)
c = b / a; //计算c
Push1(Opnd, c); //将计算结果c进栈
postexp++;
break;
else //错误处理
printf("\\n\\t除零错误!\\n");
exit(0); //异常退出
postexp++;
break;
default: //处理数字字符
d = 0; //转换成对应的数值存放到d中
i = 1.0; //处理小数用以每往后一位数除以10
while ((*postexp >= '0' && *postexp <= '9') || *postexp == '.')
if (*postexp == '.') //小数点后没往后一位数其值除以10
i /= 10;
postexp++;
continue;
if (i >= 1) //小数点前的情况
d = 10 * d + (*postexp - '0');
postexp++;
else //小数点后的情况
d += i * (*postexp - '0');
postexp++;
Push1(Opnd, flag * d); //将数值d进栈
flag = 1; //重新记符号为正号
postexp++;
break;
GetTop1(Opnd, e); //取栈顶元素e
DestroyStack1(Opnd);//销毁栈
return e; //返回e
运行示例
编写主函数如下:
int main(int argc, char const *argv[])
char exp[]="4.5*(3.8-0.9*2)+2.5*(9.6/(-2.4))";
char postexp[MaxSize];
trans(exp, postexp);
cout << "中缀表达式 : " << exp << endl;
cout << "后缀表达式 : " << postexp << endl;
cout << "表达式的值 : " << compvalue(postexp) << endl;
return 0;
运行结果如下:
想要完整代码(就是顺序栈部分你们也可以自行百度)可下载我上传的资源:C语言数据结构算法-简单表达式求值(支持计算负数及小数),
主要重要的部分已经在这啦~
以上是关于求简单C语言程序代码!的主要内容,如果未能解决你的问题,请参考以下文章