网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月05日漏签0天
easyx吧 关注:10,938贴子:46,984
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 1 2 下一页 尾页
  • 26回复贴,共2页
  • ,跳到 页  
<<返回easyx吧
>0< 加载中...

计算器 我的C语言综合实验作业

  • 只看楼主
  • 收藏

  • 回复
  • yingguang58
  • 二年级
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
有点小BUG 负号只能在最前面数字拥有


  • yingguang58
  • 二年级
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include <graphics.h>
#include <stdlib.h>
#define SIZE (sizeof(struct List))
void Mouse(int,int); //鼠标控制
void MNumber(int,int,int,int,int,int);//输出
void Welcome(); //初始化界面
void Draw(int,int,int,int,int); //在指定地点绘制
void Game(); //计算开始
void Deal(int); //处理各种链表关系
void Output(int); //输出结果到屏幕
const int num[]={63,6,91,79,102,109,125,7,127,111,128};//0-9 和 .
const int mark[]={10,20,30,40,50,60}; // = + - * / <-
/*输出屏幕数字的链表结构*/
typedef struct List {
int number;
int x,y; //= + - * /
struct List *next;
}Lis;
struct DYuan{
int size;
Lis *head;
}Yuan;
void Welcome()
{
initgraph(340,410);
setcolor(WHITE);
for(int y=0;y<410;y++)
line(0,y,340,y);
setcolor(BLUE);
rectangle(10,10,335,60); //整体框架
rectangle(10,80,250,320);
rectangle(255,80,335,400);
rectangle(10,330,250,400);
line(10,160,250,160); //数字键盘
line(10,240,250,240);
line(90,80,90,320);
line(170,80,170,320);
line(90,330,90,400);
for(y=60;y<=240;y+=60)
line(255,80+y,335,80+y);
line(170,330,170,400);
MNumber(10,80,num[1],20,1,40);MNumber(90,80,num[2],20,1,40);
MNumber(170,80,num[3],20,1,40);MNumber(10,160,num[4],20,1,40);
MNumber(90,160,num[5],20,1,40);MNumber(170,160,num[6],20,1,40);
MNumber(10,240,num[7],20,1,40);MNumber(90,240,num[8],20,1,40);
MNumber(170,240,num[9],20,1,40);MNumber(10,320,num[0],20,1,40);
MNumber(90,320,num[10],20,1,40);MNumber(170,320,mark[0],20,1,40);
MNumber(255,80,mark[1],20,1,40);MNumber(255,140,mark[2],20,1,40);
MNumber(255,200,mark[3],20,1,40);MNumber(255,260,mark[4],20,1,40);
MNumber(255,340,mark[5],30,1,40);
}
/************************///链表操作
int Empty(struct DYuan yuan) //判断空表
{
if(yuan.size == 0) return(1);
else return(0);
}
Lis* Creat(Lis *head,int number) //创建链表
{
head = (Lis*)malloc(SIZE);
head->number = number;
head->x = -10;
head->y = 5;
head->next=NULL;
Yuan.size+=1;
return(head);
}
Lis* Add(Lis *head,int number) //插入元素
{
Lis *p = head;
Lis *p1 = (Lis*)malloc(SIZE);
p1->next=NULL;
while(p->next != NULL)
p=p->next;
p->next = p1;
p1->number = number;
p1->x = p->x+30;
p1->y=5;
Yuan.size+=1;
return(head);
}
void Del(Lis *head) //删除屏幕从最后开始
{
Lis *DEL = head;
Lis *p;
while(DEL->next != NULL)
p = DEL,DEL=DEL->next;
if(DEL->number==128) MNumber(DEL->x,DEL->y,DEL->number,10,0,20);
else MNumber(DEL->x,DEL->y,DEL->number,10,0,40);
if(head==DEL) Yuan.size=0;
else {
free(DEL);



2025-08-05 20:03:53
广告
不感兴趣
开通SVIP免广告
  • yingguang58
  • 二年级
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
p->next=NULL;
Yuan.size-=1;
}
}
void Put(Lis *head) //输出屏幕
{
if(Empty(Yuan));
else {
while(1) {
if(head->number==128) MNumber(head->x,head->y,head->number,10,1,20);
else MNumber(head->x,head->y,head->number,10,1,40);
if(head->next == NULL) break;
else head=head->next;
}
}
}
/*******************************///链表处理系统
void Output(float sum)
{
int a,sum2,i=1,n=0,t;
if(sum<0) sum*=-1,t=1;
sum2 = (int) sum; //sum2为整数部分
a = sum2;
while(a!=0) a/=10,n++;
n-=1; //计算位数10^n位 ! while(n>0) i*=10,n--; //i为该数字的最高位
a = i;
while(a!=0) sum -= (sum2/a)*a,a/=10;//sum 为小数部分
if( sum < 0.005) sum=0;//小于2位数的舍去
while(!Empty(Yuan)) Del(Yuan.head);
if(t==1) Deal(30);
while(i!=0) Deal(num[sum2/i]),sum2 -= (sum2/i)*i,i/=10;
if(sum!=0) {
Deal(num[10]); //如果有逗号的话
Deal(num[(int)(sum/0.1)]);
sum -= (int)(sum/0.1)*0.1;
Deal(num[(int)(sum/0.01)]);
}
Put(Yuan.head);
}
int Depand(int number)
{
if(number%10 != 0 && number !=128) {
for(int n=0;n<=9;n++)
if(number==num[n]) return(n); //0-9返回值
}
else if(number==128) return(10); //逗号返回值
else if(number==20 || number==30)return(11);//+-
else return(12); //*/
} void Count(Lis* head)
{
float sum[10],SUM=0;
int i=0,n,k=0;
float j;
int douhao=0;
Lis *p1;
p1 = head;
for(n=0;n<10;n++) sum[n]=0;
if(Yuan.size < 3) ; //=不在里面
else { //记录数字
while(p1 != NULL) {
j=Depand(p1->number);
if(j<10 && douhao==0) {
if(sum[i] ==0) sum[i]=j;
else sum[i]= sum[i]*10 +j;
}
else if(j<10 && douhao!=0) {
for(n=0;n<douhao;n++)
j/=10;
sum[i] += j;douhao++;
}
if(j==10&&douhao==0) douhao=1;
if(j>10) i++,douhao=0;
p1 = p1->next;
}
}
p1 = head;n=0;
while(p1 != NULL) {
if(Depand(p1->number)<11) {
while(Depand(p1->number)<11) {
p1=p1->next; //跳过数字
if(p1==NULL) break;
}
}
else if( Depand(p1->number)==11) {
n++;
p1->number==30 ? sum[n]=-sum[n]:0;
p1=p1->next;
}
else if( Depand(p1->number)==12) {
if(p1->number ==40)
sum[n+1]*=sum[n];
else if(p1->number==50) sum[n+1] = sum[n]/sum[n+1];
sum[n]=0;
n++;
p1=p1->next;
}
}
for(n=0;n<10;n++)
SUM+=sum[n];
Output(SUM);
}
void Deal(int number) //导入数字进行输出屏幕操作 各种链表操作
{
if(number != mark[0] && number != mark[5]) {
if(Empty(Yuan)) {



  • yingguang58
  • 二年级
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
Yuan.head = Creat(Yuan.head,number);
}
else {
Yuan.head = Add(Yuan.head,number);
}
Put(Yuan.head);
}
else {
if(number == mark[5]) {
if(Empty(Yuan)) ;
else Del(Yuan.head);
Put(Yuan.head);
}
else if(number == mark[0]) {
Count(Yuan.head);
}
}
}
/************************/ void MNumber(int x,int y,int number,int size,int n,int wide)
{
if(n==1) setcolor(BLACK);
else setcolor(WHITE);
Draw(x,y,number,size,wide);
}
void Draw(int x,int y,int number,int size,int wide) //绘制数字和各个键
{
int a1,b1,a2,b2,mid1,mid2;
a1=x+40-size;a2=x+40+size;
b1=y+40-size;b2=y+40+size;
mid1 = x+wide;
mid2 = y+wide;
//键盘
if(number%10==0) {
switch(number/10){
case 1:line(a1,mid2-10,a2,mid2-10);
line(a1,mid2+10,a2,mid2+10);break;
case 2:line(mid1,b1,mid1,b2);
line(a1,mid2,a2,mid2);break;
case 3:line(a1,mid2,a2,mid2);break;
case 4:line(a1,b1,a2,b2);
line(a1,b2,a2,b1); break;
case 5:line(a1,mid2,a2,mid2);
circle(mid1,mid2-8,2);
circle(mid1,mid2+8,2);
break;
case 6:line(a1,mid2,a2,mid2);
line(a1+20,mid2-10,a1,mid2);
line(a1+20,mid2+10,a1,mid2);break;
}
number=0;
}
//数字
if(number>=128) { number-=128; // 1
circle(mid1+10,b2,1); // -------
} // 6 | |2
if(number>=64){ number-=64; // | |
line(a1,y+40,a2,y+40); // 7
} // --------
if(number>=32){ number-=32; // 5 | |3
line(a1,b1,a1,y+40); // | 口 8 |
} // --------
if(number>=16){ number-=16; // 4
line(a1,y+40,a1,b2);
}
if(number>=8){ number-=8;
line(a1,b2,a2,b2);
}
if(number>=4){ number-=4;
line(a2,y+40,a2,b2);
}
if(number>=2){ number-=2;
line(a2,b1,a2,y+40);
}
if(number>=1){ number-=1;
line(a1,b1,a2,b1);
}
}
void Mouse(int x,int y)
{
if(x<255) {
switch(y/80) {
case 1:switch((x-10)/80) {
case 0:MNumber(10,80,num[1],20,1,40);Deal(num[1]);break;
case 1:MNumber(90,80,num[2],20,1,40);Deal(num[2]);break;
case 2:MNumber(170,80,num[3],20,1,40);Deal(num[3]);break;
default:break;
}break;
case 2:switch((x-10)/80) {
case 0:MNumber(10,160,num[4],20,1,40);Deal(num[4]);break;
case 1:MNumber(90,160,num[5],20,1,40);Deal(num[5]);break;
case 2:MNumber(170,160,num[6],20,1,40);Deal(num[6]);break;
default:break;
}break;
case 3:switch((x-10)/80) {
case 0:MNumber(10,240,num[7],20,1,40);Deal(num[7]);break;
case 1:MNumber(90,240,num[8],20,1,40);Deal(num[8]);break;
case 2:MNumber(170,240,num[9],20,1,40);Deal(num[9]);break;
default:break;
}break;
case 4:switch((x-10)/80) {
case 0:MNumber(10,320,num[0],20,1,40);Deal(num[0]);break;
case 1:MNumber(90,320,num[10],20,1,40);Deal(num[10]);break;
case 2:MNumber(170,320,mark[0],20,1,40);Deal(mark[0]);break; // 等于在这里!
default:break;
}break;
default:break;
}
}
else if(x>255 && x<335){
switch((y-80)/60)
{
case 0:MNumber(255,80,mark[1],20,1,40);Deal(mark[1]);break;
case 1:MNumber(255,140,mark[2],20,1,40);Deal(mark[2]);break;
case 2:MNumber(255,200,mark[3],20,1,40);Deal(mark[3]);break;
case 3:MNumber(255,260,mark[4],20,1,40);Deal(mark[4]);break;
case 4:MNumber(255,340,mark[5],30,1,40);Deal(mark[5]);break; //回车在这里!
default :break;
}
}
}
/****************************************************************/
void Game()
{
MOUSEMSG m;
while(1) {
m = GetMouseMsg();
switch(m.uMsg)
{
case WM_LBUTTONDOWN:Mouse(m.x,m.y);break;
}
}
} void main()
{
Yuan.size=0;
Welcome();
Game();
}


  • KrissiZH
  • 五年级
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
写的真好!加精华~~


  • 贴吧用户_0A8SbZ2
  • 三年级
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
最好来个截图


  • yingguang58
  • 二年级
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
呵呵 。。谢了


  • yingguang58
  • 二年级
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼



2025-08-05 19:57:53
广告
不感兴趣
开通SVIP免广告
  • bdtb2417
  • 六年级
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
计算结果大于10,显示就不正常


  • bdtb2417
  • 六年级
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼





  • KrissiZH
  • 五年级
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我也试了,就是有 bug。


  • zhangjb90s
  • 六年级
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

嘿嘿,偶用单片机做的计算器


  • zhangjb90s
  • 六年级
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼



  • KrissiZH
  • 五年级
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
14 楼强大!


2025-08-05 19:51:53
广告
不感兴趣
开通SVIP免广告
  • mrkangkang957
  • 学前班
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这个是turbo c??


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1 2 下一页 尾页
  • 26回复贴,共2页
  • ,跳到 页  
<<返回easyx吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示