C语言课程设计报告书 简易计算器

时间:2024.4.14

C语言课程设计报告书    

课程名称:C语言课程设计

课题名称:简易计算器

班级:      

学号:   

姓名:   

指导老师: 

成绩:

20##6

一、     课程设计目的

1.  通过一个学期的学习,我认为要学好C语言程序这门课程,不仅要认真阅读课本知识,更重要的是要通过上机实践才能增强和巩固我的知识。特别是作为本科生,更要注重实践这一环节,只有这样我们才能成为合格的计算机人材。通过这次课程设计,进一步巩固所学的语句,如语句嵌套等;加深对循环,分支等结构的运用;最后还可以熟悉四则运算﹑三角函数等经典算法。

2.  通过此次课程设计扩展自己的知识面,课本上的东西是远远不够的,可以通过去图书馆查资料,上网找资料等手段学到一些新知识,比如画图函数,颜色填充函数等。

3.  通过课程设计,加深对结构化程序设计思想的理解,能进行一个系统功能需求分析,并设计合理的模块化结构。提高程序开发能力。

二、设计内容

我设计的是一款简易计算器,界面清楚,操作方便,它能实现以下功能:

1.以界面形式给出计算器功能

2.简单的四则混合运算(支持小括号、优先级)

3.弦、余弦函数计算

4.指数、对数的运算

三、总体设计

简单计算器由五大模块组成,模块设计如下:

C语言课程设计报告书    简易计算器

                  图1    模块调用图

1.  主函数 void main()

         功能:调用各个主要模块,实现简单计算器的整体功能。

2.  主界面函数void JieMian() 

功能:使用有关图形函数模拟出可视化的计算器外观界面,并提供用户输入窗口。  

3.  四则混合运算函数void SiZeHunHeYunSuan()

功能:实现简单的加减乘除混合运算,并支持优先级和带括号的运算。

4.  三角运算函数void SanJiaoYunSuan()

功能:实现基本的三角函数运算:sin(x)和cos(x)。         

5.  指对数函数void ZhiDuiShuYunSuan()

功能:实现基本的指数和对数运算。

四、详细设计

(一)数据结构设计

1.用initgraph函数初始化图形界面,用outtextxy函数在图形模式下显示需输出内容,用setcolor和setbkcolor函数设置边框颜色和填充颜色,用circle 和rectangle函数来画计算器界面的按键,用gotoxy将数字送入显示区。

函数原型为:

void far initgraph(int far *graphdriver, int far *graphmode, char far *pathtodriver)

void far outtextxy(int x, int y, char far *textstring)

void far setcolor ( int color)

void far setbkcolor ( int color)

void far circle (int x, int y, int r)

void far rectangle (int x, int y, int x, int y)

void far gotoxy(int x, int y)

具体形式:(按键以部分为例,其余相同)

 { initgraph(&driver,&mode,"c:\tc\\bgi");

 setcolor(GREEN);

 setbkcolor(BLUE);

 rectangle(18,18,500,300);

 rectangle(30,25,488,65);

 circle(50,105,20);

 circle(50,175,20);

 circle(50,245,20);

outtextxy(318,240,"/");

 outtextxy(435,135,"ln");

 outtextxy(365,135,"log");

 gotoxy(5,3)

2.将表达式转换成波兰式void change(char *work),用两个指针分别指向操作数和运算符。从字符串中依次分离出操作数与运算符。当操作符串为空时,直接存入。当不为空时,与指针最后一个元素,比较优先级,若大于直接存入,否则弹出操作数最后两位进行运算。

(二)模块接口设计:

1.四则混合运算:void SiZeHunHeYunSuan()

首先判断优先级,其过程为

int compare(char symbol)

{ int      jud = 0;

switch (symbol)

{case '(': jud = 1: break;

 case '*':

 case '/':

 jud = sym[tops] == '/'?-1:1; break;case ')':

 jud=0; break;

 case '+':

case '-':

jud = (sym[tops] != '*' && sym[tops] != '/')?1:-1;break;

default:

break;}

return jud;}

四则混合运算包括的子函数的函数原型:

void sizeyunsuan(double num1, char symbol, double num2)

把表达式转化成波兰式

void change(char *work)

  

                         图2 四则混合运算函数调用图

2.三角运算:void SanJiaoYunSuan()

包括的子函数的函数原型:

1) double hudu(double x);      

把接受到的实数转化为弧度返回。

2) double to_double(char *p);      

将字符串转化为实数。

3) double read();                 

将连续输入的字符整合成一个浮点数并在屏幕上逆向输出将其返回。       

4) double sin(double x);          

求sinx,实数型参数,返回实数型值。

5) double cos(double x);           

求cosx,实数型参数,返回实数型值。

C语言课程设计报告书    简易计算器

                         图3 三角运算函数调用图

4.指对数运算:void ZhiDuiShuYunSuan()

包括的子函数的函数原型:

1) double read();                  

将连续输入的字符整合成一个浮点数在屏幕上逆向输出将其返回。

2) double exp(double x);             

求e的x次方,返回双精度实数值。

3) double lnx(double x);             

求lnx的值,返回双精度实数值。

C语言课程设计报告书    简易计算器

 图4 指数对数运算函数调用图

() 流程图:

1.  主函数流程图

C语言课程设计报告书    简易计算器                                                                               

                                 图5   主函数调用图

1. 优先级:接收四则运算多项式的每相邻两个字符,并判断是否是操作符,如是操作符,与之前存入的操作符进行优先级比较。按顺序存入对应数组。

C语言课程设计报告书    简易计算器

                     图6    运算级优先级流程图

2. 正弦函数

C语言课程设计报告书    简易计算器

                        图7 正弦函数流程图

3. ln函数:

C语言课程设计报告书    简易计算器

                          图8 lnx函数流程图

五、调试与测试

遇到的问题:

1.计算器的界面不会做,有时数字显示在边框外面。

2.在四则混合运算中,运算符号的优先级比较难判断。

3.编写ln函数遇到困难。

4.在做计算器界面的时候有些函数没有学过。

采取的解决措施:

1.去图书馆借相关图书,上网查资料,通过自己的阅读,研究,不断的尝试,运行,修改,最终做出了简单的界面,但仍存在很多不足的地方,只能模拟出大体的外观,没能模拟出计算器中的各个键。

2.查在界面显示的函数原型,对比自己的程序,不断修改,对比,调试,检查,反思,最后发现是语句顺序错误,显示写在了判断的后面,修改成功。

3.在编写ln函数的时候,遇到很大困难,最后通过查阅资料,向别人请教编写出了函数。

界面截图及相关说明:

(1)主界面:

  

  等待输入表达式

(2)四则混合运算截图:

    

以上是对四则混合运算1+4*5-2*(3+2)运算结果的界面截图。

(3)三角函数截图:

以上是对Sin 30 运算结果的界面截图

 (4)指数函数截图:

 

以上是对对数函数ln0.999998运算界面的截图。


第二篇:C语言程序设计-计算器C语言程序


#include<stdio.h>

#include<windows.h>

int main()

{

void top();

void

no1(),no2(),no3(),no4(),no5(),no6(),no7(),no8(),no9(),no10(),no11(),no12(),no13(),no14(),no15(),no16(),no17(),no18(),no19(),no20(),no21(),no22(),no23(),no24(),no25();

void menu();

int k=1;char m;

char select;

while(1)

{ system("cls"); //清屏

menu();

system("color 0a"); //绿化 scanf("%c",&select); switch(select) { case'a':no1();break; case'b':no2();break; case'c':no3();break; case'd':no4();break; case'e':no5();break; case'f':no6();break; case'g':no7();break; case'h':no8();break; case'i':no9();break; case'j':no10();break; case'k':no11();break; case'l':no12();break; case'm':no13();break; case'n':no14();break; case'o':no15();break; case'p':no16();break; case'q':no17();break; case'r':no18();break; case's':no19();break; case't':no20();break; case'u':no21();break; case'v':no22();break; case'w':no23();break; case'x':no24();break;

}

scanf("%d",&k);

if(k==0)break;

if(k==1){printf("\n");}

}

return 0;

}

void menu()

{

//printf("\n 老师您好!我是通信2班的陈国昌 学号201130095092\n\n"); printf(" 请键入字母选择功能,按其他键退出:\n\n");

printf(" a.整数加法 h.小数乘法 o.八转十六 v.二进制加法运算\n\n"); printf(" b.整数减法 i.小数除法 p.十进转二 w.二进制减法运算\n\n"); printf(" c.整数乘法 j.二进转八 q.十进转八 x.二进制原补反码\n\n"); printf(" d.整数除法 k.二进转十 r.十转十六\n\n");

printf(" e.整除求余 l.二转十六 s.十六转二\n\n");

printf(" f.小数加法 m.八进转二 t.十六转八\n\n");

printf(" g.小数减法 n.八进转十 u.十六转十\n");

}

void no1()

{ int i,k=1,sum1=0,sum2=0;char num[20],rem[20];

while(k==1){

printf("整数加法,请输入第一个数:\n");

scanf("%s",num);

for(i=0;num[i]!=0;i++)

{if(num[i]>47&&num[i]<58){sum1=sum1*10+num[i]-48;k=0;}

else{printf("输入错误,输入的只能是0…9的数字,请重新输入:\n");k=1;break;}}} k=1;

while(k==1){

printf("请输入第二个数:\n");

scanf("%s",rem);

for(i=0;rem[i]!=0;i++)

{if(rem[i]>47&&rem[i]<58){sum2=sum2*10+rem[i]-48;k=0;}

else{printf("输入错误,输入的只能是0…9的数字,请重新输入:");k=1;break;}}} printf("%d+%d=%d\n",sum1,sum2,sum1+sum2);

printf("键入1键继续,键入0键退出.\n");

}

void no2()

{ int i,k=1,sum1=0,sum2=0;char num[20],rem[20];

while(k==1){

printf("整数减法,请输入第一个数:\n");

scanf("%s",num);

for(i=0;num[i]!=0;i++)

{if(num[i]>47&&num[i]<58){sum1=sum1*10+num[i]-48;k=0;}

else{printf("输入错误,输入的只能是0…9的数字,请重新输入:\n");k=1;break;}}} k=1;

while(k==1){

printf("请输入第二个数:\n");

scanf("%s",rem);

for(i=0;rem[i]!=0;i++)

{if(rem[i]>47&&rem[i]<58){sum2=sum2*10+rem[i]-48;k=0;}

else{printf("输入错误,输入的只能是0…9的数字,请重新输入:");k=1;break;}}} printf("%d-%d=%d\n",sum1,sum2,sum1-sum2);

printf("键入1键继续,键入0键退出.\n");

}

void no3()

{ int i,k=1,sum1=0,sum2=0;char num[20],rem[20];

while(k==1){

printf("整数乘法,请输入第一个数:\n");

scanf("%s",num);

for(i=0;num[i]!=0;i++)

{if(num[i]>47&&num[i]<58){sum1=sum1*10+num[i]-48;k=0;}

else{printf("输入错误,输入的只能是0…9的数字,请重新输入:\n");k=1;break;}}} k=1;

while(k==1){

printf("请输入第二个数:\n");

scanf("%s",rem);

for(i=0;rem[i]!=0;i++)

{if(rem[i]>47&&rem[i]<58){sum2=sum2*10+rem[i]-48;k=0;}

else{printf("输入错误,输入的只能是0…9的数字,请重新输入:");k=1;break;}}} printf("%d*%d=%d\n",sum1,sum2,sum1*sum2);

printf("键入1键继续,键入0键退出.\n");

}

void no4()

{ int i,k=1,sum1=0,sum2=0;char num[20],rem[20];

while(k==1){

printf("整数除法,请输入第一个数:\n");

scanf("%s",num);

for(i=0;num[i]!=0;i++)

{if(num[i]>47&&num[i]<58){sum1=sum1*10+num[i]-48;k=0;}

else{printf("输入错误,输入的只能是0…9的数字,请重新输入:\n");k=1;break;}}} k=1;

while(k==1){

printf("请输入第二个数:\n");

scanf("%s",rem);

for(i=0;rem[i]!=0;i++)

{if(rem[i]>47&&rem[i]<58){sum2=sum2*10+rem[i]-48;k=0;}

else{printf("输入错误,输入的只能是0…9的数字,请重新输入:");k=1;break;}}} printf("%d/%d=%d\n",sum1,sum2,sum1/sum2);

printf("键入1键继续,键入0键退出.\n");

}

void no5()

{ int i,k=1,sum1=0,sum2=0;char num[20],rem[20];

while(k==1){

printf("整除求余,请输入第一个数:\n");

scanf("%s",num);

for(i=0;num[i]!=0;i++)

{if(num[i]>47&&num[i]<58){sum1=sum1*10+num[i]-48;k=0;}

else{printf("输入错误,输入的只能是0…9的数字,请重新输入:\n");k=1;break;}}} k=1;

while(k==1){

printf("请输入第二个数:\n");

scanf("%s",rem);

for(i=0;rem[i]!=0;i++)

{if(rem[i]>47&&rem[i]<58){sum2=sum2*10+rem[i]-48;k=0;}

else{printf("输入错误,输入的只能是0…9的数字,请重新输入:");k=1;break;}}} i=sum1/sum2;

printf("%d除%d商为%d余数为%d\n",sum1,sum2,sum1/sum2,sum1-i); printf("键入1键继续,键入0键退出.\n");

}

void no6()

{

float x,y;

printf("小数加法,请输入第一个数:\n");

scanf("%f",&x);

printf("请输入第二个数:\n");

scanf("%f",&y);

printf("%5.2f+%5.2f=%5.3f\n\n",x,y,x+y);

printf("键入1键继续,键入0键退出.\n");

}

void no7()

{

float x,y;

printf("小数减法,请输入第一个数:\n");

scanf("%f",&x);

printf("请输入第二个数:\n");

scanf("%f",&y);

printf("%5.2f-%5.2f=%5.3f\n\n",x,y,x-y);

printf("键入1键继续,键入0键退出.\n");

}

void no8()

{

float x,y;

printf("小数乘法,请输入第一个数:\n");

scanf("%f",&x);

printf("请输入第二个数:\n"); scanf("%f",&y); printf("%5.2f*%5.2f=%5.3f\n\n",x,y,x*y);

printf("键入1键继续,键入0键退出.\n");

}

void no9()

{

float x,y;

printf("小数除法,请输入第一个数:\n");

scanf("%f",&x);

printf("请输入第二个数:\n");

scanf("%f",&y);

printf("%5.2f/%5.2f=%5.3f\n\n",x,y,x/y);

printf("键入1键继续,键入0键退出.\n");

}

void no10()

{

int i,j,k=1,sum=0;char num[20],rem[20];

printf("二进转八,请输入二进制数组:\n");

while(k==1){

scanf("%s",num);

for(i=0;num[i]!=0;i++)

{

if(num[i]!='0'&&num[i]!='1'){printf("输入错误,输入的只能是0和1,请重新输入:\n");k=1;break;}

else{sum=sum*2+num[i]-48;k=0;}

}}

for(j=0;j<=20;j++)

{

rem[j]=sum%8;

if(sum<=7){rem[j]=sum;break;}

else{sum=sum-sum%8;i=sum/8;sum=i;}

}

printf("二进制数组:");

for(i=0;num[i]!=0;i++)

{

printf("%d",num[i]-48);

}

printf(" 的八进制表示为:"); for(i=j;i>=0;i--) { printf("%d",rem[i]); }

printf("\n键入1键继续,键入0键退出.\n");

}

void no11()

{

int i,j,k=1,sum=0;char num[20],rem[20];

printf("二进转十,请输入二进制数组:\n");

while(k==1){

scanf("%s",num);

for(i=0;num[i]!=0;i++)

{

if(num[i]!='0'&&num[i]!='1'){printf("输入错误,输入的只能是0和1,请重新输入:\n");k=1;break;}

else{sum=sum*2+num[i]-48;k=0;}

}}

for(j=0;j<=20;j++)

{

rem[j]=sum%10;

if(sum<=9){rem[j]=sum;break;}

else{sum=sum-sum%10;i=sum/10;sum=i;}

}

printf("二进制数组:");

for(i=0;num[i]!=0;i++)

{

printf("%d",num[i]-48);

}

printf(" 的十进制表示为:");

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

{

printf("%d",rem[i]);

}

printf("\n键入1键继续,键入0键退出.\n");

}void no12()

{

int i,j,k=1,sum=0;char num[20],rem[20];

printf("二转十六,请输入二进制数组:\n");

while(k==1){

scanf("%s",num);

for(i=0;num[i]!=0;i++)

{

if(num[i]!='0'&&num[i]!='1'){printf("输入错误,输入的只能是0和1,请重新输入:\n");k=1;break;}

else{sum=sum*2+num[i]-48;k=0;}

}}

for(j=0;j<=20;j++)

{

rem[j]=sum%16;

if(sum<=15){rem[j]=sum;break;}

else{sum=sum-sum%16;i=sum/16;sum=i;}

}

printf("二进制数组:"); for(i=0;num[i]!=0;i++) { printf("%d",num[i]-48); }

printf(" 的十六进制表示为:");

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

{

if(rem[i]>9&&rem[i]<16){printf("%c",rem[i]+55);}

else{printf("%d",rem[i]);}

}

printf("\n键入1键继续,键入0键退出.\n");

}

void no13()

{

int i,j,k=1,sum=0;char num[20],rem[20];

printf("八进转二,请输入八进制数组:\n");

while(k==1){

scanf("%s",num);

for(i=0;num[i]!=0;i++)

{

if(num[i]<56&&num[i]>47){sum=sum*8+num[i]-48;k=0;}

else {printf("输入错误,输入的只能为0…7的数字,请重新输入:\n");k=1;break;} }}

for(j=0;j<=20;j++)

{

rem[j]=sum%2;

if(sum<=1){rem[j]=sum;break;}

else{sum=sum-sum%2;i=sum/2;sum=i;}

}

printf("八进制数组:");

for(i=0;num[i]!=0;i++) { printf("%d",num[i]-48); } printf(" 的二进制表示为:"); for(i=j;i>=0;i--) { printf("%d",rem[i]); }

printf("\n键入1键继续,键入0键退出.\n");

}

void no14()

{

int i,j,k=1,sum=0;char num[20],rem[20];

printf("八进转十,请输入八进制数组:\n"); while(k==1){ scanf("%s",num); for(i=0;num[i]!=0;i++) { if(num[i]<56&&num[i]>47){sum=sum*8+num[i]-48;k=0;}

else {printf("输入错误,输入的只能为0…7的数字,请重新输入:\n");k=1;break;} }}

for(j=0;j<=20;j++)

{

rem[j]=sum%10;

if(sum<=9){rem[j]=sum;break;}

else{sum=sum-sum%10;i=sum/10;sum=i;}

}

printf("八进制数组:");

for(i=0;num[i]!=0;i++)

{

printf("%d",num[i]-48);

}

printf(" 的十进制表示为:");

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

{

printf("%d",rem[i]);

}

printf("\n键入1键继续,键入0键退出.\n");

}

void no15()

{

int i,j,k=1,sum=0;char num[20],rem[20];

printf("八转十六,请输入八进制数组:\n"); while(k==1){ scanf("%s",num); for(i=0;num[i]!=0;i++) { if(num[i]<56&&num[i]>47){sum=sum*8+num[i]-48;k=0;} else {printf("输入错误,输入的只能为0…7的数字,请重新输入:\n");k=1;break;} }} for(j=0;j<=20;j++) { rem[j]=sum%16; if(sum<=15){rem[j]=sum;break;} else{sum=sum-sum%16;i=sum/16;sum=i;} } printf("八进制数组:"); for(i=0;num[i]!=0;i++) { printf("%d",num[i]-48); }

printf(" 的十六进制表示为:");

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

{

if(rem[i]>9&&rem[i]<16){printf("%c",rem[i]+55);}

else{printf("%d",rem[i]);}

}

printf("\n键入1键继续,键入0键退出.\n");

}

void no16()

{

int i,j,k=1,sum=0;char num[20],rem[20];

printf("十进转二,请输入十进制数组:\n");

while(k==1){

scanf("%s",num);

for(i=0;num[i]!=0;i++)

{

if(num[i]<58&&num[i]>47){sum=sum*10+num[i]-48;k=0;}

else {printf("输入错误,输入的只能为0…9的数字,请重新输入:\n");k=1;break;} }}

for(j=0;j<=20;j++)

{

rem[j]=sum%2;

if(sum<=1){rem[j]=sum;break;}

else{sum=sum-sum%2;i=sum/2;sum=i;} } printf("十进制数组:"); for(i=0;num[i]!=0;i++) { printf("%d",num[i]-48); } printf(" 的二进制表示为:"); for(i=j;i>=0;i--) { printf("%d",rem[i]); }

printf("\n键入1键继续,键入0键退出.\n"); }

void no17()

{

int i,j,k=1,sum=0;char num[20],rem[20];

} printf("十进转八,请输入十进制数组:\n"); while(k==1){ scanf("%s",num); for(i=0;num[i]!=0;i++) { if(num[i]<58&&num[i]>47){sum=sum*10+num[i]-48;k=0;} else {printf("输入错误,输入的只能为0…9的数字,请重新输入:\n");k=1;break;} }} for(j=0;j<=20;j++) { rem[j]=sum%8; if(sum<=7){rem[j]=sum;break;} else{sum=sum-sum%8;i=sum/8;sum=i;} } printf("十进制数组:"); for(i=0;num[i]!=0;i++) { printf("%d",num[i]-48); } printf(" 的八进制表示为:"); for(i=j;i>=0;i--) { printf("%d",rem[i]); } printf("\n键入1键继续,键入0键退出.\n");

void no18()

{

int i,j,k=1,sum=0;char num[20],rem[20];

printf("十转十六,请输入十进制数组:\n");

while(k==1){

scanf("%s",num);

for(i=0;num[i]!=0;i++)

{

if(num[i]<58&&num[i]>47){sum=sum*10+num[i]-48;k=0;}

else {printf("输入错误,输入的只能为0…9的数字,请重新输入:\n");k=1;break;} }}

for(j=0;j<=20;j++)

{

rem[j]=sum%16;

if(sum<=15){rem[j]=sum;break;}

else{sum=sum-sum%16;i=sum/16;sum=i;}

}

printf("十进制数组:");

for(i=0;num[i]!=0;i++)

{

printf("%d",num[i]-48);

}

printf(" 的十六进制表示为:");

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

{

if(rem[i]>9&&rem[i]<16){printf("%c",rem[i]+55);}

else{printf("%d",rem[i]);}

}

printf("\n键入1键继续,键入0键退出.\n");

}

void no19()

{

int i,j,k=1,sum=0;char num[20],rem[20];

printf("十六转二,请输入十六进制数组:\n");

while(k==1){

scanf("%s",num);//开始时我想到用getchar()的,但时做时输入都要把getchar()循环,很麻烦,所以就用scanf("%s",num);

for(i=0;num[i]!=0;i++)//num[i]!=0;的i值可以确定,下面会用到时。

{if(num[i]>47&&num[i]<58){rem[i]=num[i]-48;k=0;}

//初始化k=0;下面若成功运行k继续为0。

else if(num[i]>64&&num[i]<71){rem[i]=num[i]-55;k=0;}

/*大写字母ABCDEF转化成10.11.12.13.14.15来存在num[i]数组里;一直不输错就k=0;自动跳出for循环。*/

else if(num[i]>96&&num[i]<103){rem[i]=num[i]-87;k=0;}

//小写字母abcdef转化成10.11.12.13.14.15来存在num[i]数组里;一直不输错就k=0;自动跳出for循环。

else {printf("输入错误,只能输入数字0…9或大小写字母A…F,a…f.请重新输入:\n");k=1;break;}

//若输错就令k=1;跳出循环重新提示输入。

}} for(i=0;num[i]!=0;i++){sum=sum*16+rem[i];}

for(j=0;j<=20;j++)

{

rem[j]=sum%2;

if(sum<=1){rem[j]=sum;break;}//sum<=1时直接把sum赋给rem[j]并跳出循环;因为不管sum怎么%2,它的余数都最小也只能是0和1。

else{sum=sum-sum%2;i=sum/2;sum=i;}

}

printf("十六进制数组:");

for(i=0;num[i]!=0;i++)

{

printf("%c",num[i]);

}

printf(" 的二进制表示为:");

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

{

printf("%d",rem[i]);

}

printf("\n键入1键继续,键入0键退出.\n");

}

void no20()

{

int i,j,k=1,sum=0;char num[20],rem[20];

printf("十六转八,请输入十六进制数组:\n");

while(k==1){

scanf("%s",num);

for(i=0;num[i]!=0;i++)

{if(num[i]>47&&num[i]<58){rem[i]=num[i]-48;k=0;}

else if(num[i]>64&&num[i]<71){rem[i]=num[i]-55;k=0;}

else if(num[i]>96&&num[i]<103){rem[i]=num[i]-87;k=0;}

else {printf("输入错误,只能输入数字0…9或大小写字母A…F,a…f.请重新输入:\n");k=1;break;}

}} for(i=0;num[i]!=0;i++){sum=sum*16+rem[i];}

for(j=0;j<=20;j++)

{

rem[j]=sum%8;

} if(sum<=7){rem[j]=sum;break;} else{sum=sum-sum%8;i=sum/8;sum=i;} printf("十六进制数组:"); for(i=0;num[i]!=0;i++) { printf("%c",num[i]); }

printf(" 的八进制表示为:");

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

{

printf("%d",rem[i]);

}

printf("\n键入1键继续,键入0键退出.\n");

}

void no21()

{

int i,j,k=1,sum=0;char num[20],rem[20];

printf("十六转十,请输入十六进制数组:\n"); while(k==1){ scanf("%s",num); for(i=0;num[i]!=0;i++) {if(num[i]>47&&num[i]<58){rem[i]=num[i]-48;k=0;} else if(num[i]>64&&num[i]<71){rem[i]=num[i]-55;k=0;} else if(num[i]>96&&num[i]<103){rem[i]=num[i]-87;k=0;}

else {printf("输入错误,只能输入数字0…9或大小写字母A…F,a…f.请重新输入:\n");k=1;break;}

}} for(i=0;num[i]!=0;i++){sum=sum*16+rem[i];}

for(j=0;j<=20;j++)

{

rem[j]=sum%10;

if(sum<=9){rem[j]=sum;break;}

else{sum=sum-sum%10;i=sum/10;sum=i;}

}

printf("十六进制数组:");

for(i=0;num[i]!=0;i++)

{

printf("%c",num[i]);

}

printf(" 的十进制表示为:");

for(i=j;i>=0;i--) { printf("%d",rem[i]); }

printf("\n键入1键继续,键入0键退出.\n");

}

void no22()

{

int i,j,k=1,sum=0,sum1=0,sum2=0;//

char num[20],rem[20],three[25];

printf("二进制加法请输入第一组二进制数组,按回车确定:\n");

while(k==1){

sum1=0;

scanf("%s",num);

for(i=0;num[i]!=0;i++)

{

if(num[i]!='0'&&num[i]!='1'){printf("输入错误,输入的只能是0和1,请重新输入第一组二进制数组:\n");k=1;break;}

else{sum1=sum1*2+num[i]-48;k=0;}

}}

k=1;

printf("请输入第二组二进制数组,按回车确定:\n");

while(k==1){

sum2=0;

scanf("%s",rem);

for(i=0;rem[i]!=0;i++)

{

if(rem[i]!='0'&&rem[i]!='1'){printf("输入错误,输入的只能是0和1,请重新输入第二组二进制数组:\n");k=1;break;}

else{sum2=sum2*2+rem[i]-48;k=0;}

}}

sum=sum1+sum2;

printf("它们的和为:%d ;",sum); for(k=0;k<=50;k++) { three[k]=sum%2; if(sum<=1){three[k]=sum;break;} else{sum=sum-sum%2;i=sum/2;sum=i;} } printf("用二进制表示为:"); for(i=k;i>=0;i--) { printf("%d",three[i]);

}printf(".");

printf("\n");

printf("\n键入1键继续,键入0键退出.\n");

}

void no23()

{

int i,j=0,k=1,sum=0,sum1=0,sum2=0;

char num[20],rem[20],three[25];

printf("二进制减法请输入第一组二进制数组,按回车确定:\n");

while(k==1){

sum1=0;

scanf("%s",num);

for(i=0;num[i]!=0;i++)

{

if(num[i]!='0'&&num[i]!='1'){printf("输入错误,输入的只能是0和1,请重新输入第一组二进制数组:\n");k=1;break;}

else{sum1=sum1*2+num[i]-48;k=0;}

}}

k=1;

printf("请输入第二组二进制数组,按回车确定:\n");

while(k==1){

sum2=0;

scanf("%s",rem);

for(i=0;rem[i]!=0;i++)

{

if(rem[i]!='0'&&rem[i]!='1'){printf("输入错误,输入的只能是0和1,请重新输入第二组二进制数组:\n");k=1;break;}

else{sum2=sum2*2+rem[i]-48;k=0;}

}}

sum=sum1-sum2;

printf("它们的差为:%d ;",sum); if(sum<0){sum=-sum;j=1;} for(k=0;k<=50;k++) { three[k]=sum%2; if(sum<=1){three[k]=sum;break;} else{sum=sum-sum%2;i=sum/2;sum=i;} } printf("用二进制表示为:"); if(j==1){printf("-");} for(i=k;i>=0;i--) {

printf("%d",three[i]); }printf("."); printf("\n");

printf("\n键入1键继续,键入0键退出.\n");

}

void no24()//二进制数原反补码

{

int h=0,i,j=0,k=1,l=0,sum=0,sum1=0,sum2=0;

char num[10],rem[10],three[10];

printf("二进制原反补码\n\n请输入一组位数为1…7位的二进制数组正数不用带+号,负数要带-号,按回车确定:\n");

while(k==1){

sum1=0;

scanf("%s",num);

if(num[0]==45){num[0]='0';h=1;}

//判断输入的第一个字符是不是负号,如果是,就让它等于0,并令h=1,使下一步执行负数的求原反补码。

for(i=0;num[i]!=0;i++)

{

if(num[i]!='0'&&num[i]!='1'){printf("输入错误,输入的只能是0和1,请重新输入:\n");k=1;break;}

else{sum=sum*2+num[i]-48;k=0;}

}}

if(h==0){//原来h就已经赋初值为0,默认输入正数就执行这一个模块。

printf("它的原码为:");

printf("0");

for(l=7-i;l>0;l--){printf("0");}

for(l=0;l<i;l++){printf("%d",num[l]-48);}

printf(" 反码为:");

printf("0");

for(l=7-i;l>0;l--){printf("0");}

for(l=0;l<i;l++){printf("%d",num[l]-48);}

printf(" 补码为:");

printf("0");

for(l=7-i;l>0;l--){printf("0");}

for(l=0;l<i;l++){printf("%d",num[l]-48);}

}

else {/*定义了一个新数组three[10]用以记录反码数组,为下面的补码比反码大1作一个准备,*/

//当输入负数时会检测到负号并令h=1,使上面的模块就不能执行而执行这一模块。 printf("它的原码为:");

printf("1");//不管负数是多少,第一个都是1;所以输出1;(注意的是不能加\n来换

行)

for(l=8-i;l>0;l--){printf("0");}

/*我是这样想的,当输入一个三位的负数,若输入的是-110时,

我在上面已经把这个数组变成了0110,并使i记录下了位数是3+1=4位, 所以除去开头的1占了一位,余下的还有8-1-i(i我现在假设是4)=3位,

这3位的座次依次是[1],[2]…[7-i],这个范围的数组都可以直接输出0,

而之前又把负号变成了0,所以实际操作时直接把[1],[2]…[8-i]的位置输出作0;(不能加\n换行)*/

for(l=1;l<i;l++){printf("%d",num[l]-48);}

printf(" 反码为:"); for(l=8-i;l>0;l--){printf("1");three[l]=1;} /*除去第一位及从[9-i]…[7](即最后一位),的都输出1,并在数 */ j=9-i; for(l=0;l<i;l++){ if(num[l]=='0'){printf("1");three[j]=1;j=j+1;} else{printf("0");three[j]=0;j=j+1;}} //上面两行代码确定了数组three[]从第9-i位开始至数级最后一位的值 sum=0; for(l=1;l<9;l++){sum=sum*2+three[l];} printf("补码为:"); h=1; //three数组记录了反码,求和 sum=sum+1; if(sum>254){printf("000000000");h=0;}

/*这里用以判断用户是不是输入-1111111;

因为输入这样的数后反码会变成11111111,

加一后变成100000000,共九位,而实际规定要写成00000000,

所以有点不按常规*/

while(h==1){/*上面判断到输入的不是-1111111时h的值依然为1,

按常规执行这一模块把数%2后以数组形式输出。*/

for(j=0;j<=7;j++)

{

num[j]=sum%2;

if(sum<=1){num[j]=sum;break;}

else{sum=sum-sum%2;i=sum/2;sum=i;}

}

for(i=j;i>=0;i--){printf("%d",num[i]);} h=2;

}

}

printf("\n键入1键继续,键入0键退出.\n");

}

更多相关推荐:
《C语言程序设计》课程设计报告(小组)

东莞理工学院《C语言程序设计》课程设计题目:图书信息管理系统院系:电子工程学院专业:电子信息工程年级:20##班别:2班指导教师:##组长:##同组成员:##目录一、目的....................…

c语言课程设计报告

C语言程序设计课程设计学生姓名学号系院专业设计论文题目学生选课系统管理完成日期20xx年6月指导教师目录一实验目的二实验内容三总体设计四详细设计五运行结果六课程设计体会一实验目的1通过课程设计加深对结构化程序设...

C语言课程设计报告

河南理工大学计算机科学与技术学院课程设计报告20XX20XX学年第一学期课程名称C语言课程设计设计题目《小学算术运算测试》学生姓名学号专业班级计算机07-2班指导教师20XX年9月12日目录1.设计任务书21.…

C语言课程设计报告范例

C语言课程设计报告设计题目专业班级学号姓名任课老师时间目录一课程设计题目及所涉及知识点二课程设计思路及设计流程图三课程设计中遇到的难点及解决办法四小结五附录原程序2一课程设计题目及所涉及知识点一课程设计题目1基...

厦门理工学院11级C语言C语言程序设计课程设计报告

C语言程序设计课程设计报告20xx20xx学年第1学期题目专业班级姓名学号指导教师成绩计算机科学与技术系20xx年12月31日目录一课程设计的目的与要求1二方案实现与调试221掷骰子游戏222射击游戏323汽车...

C语言程序设计课程设计报告

C语言程序设计课程设计报告20xx20xx学年第1学期专业计算机科学与技术班级姓名学号指导教师成绩计算机科学与技术系20xx年12月31日目录一课程设计的目的与要求3二方案实现与调试321掷骰子游戏322汽车加...

c语言程序贪吃蛇课程设计报告

山东工商学院信电学院自动111班第一组贪吃蛇课程设计报告高级语言程序设计课程设计报告ExperimentDesigningreporter课程名称高级语言程序设计英文名称CProgramExperimentDe...

C语言程序设计基础课程设计报告

程序设计基础课程设计报告课程名称课程设计题目程序设计基础课程设计学生信息管理系统姓名系专业年级学号指导教师职称计算机科学技术系计算机网络技术讲师20xx年1月1日一设计题目及要求1题目学生信息管理系统2要求1建...

《C语言程序设计》课程设计报告格式 (2)

C语言程序设计课程设计报告20xx20xx学年第1学期专业软件工程软件测试服务班级1班姓名学号陈家汀指导教师谢小竹成绩计算机与信息工程学院20xx年1月12日目录一课程设计的目的与要求页码二方案实现与调试页码2...

C语言课程设计报告---学籍信息管理系统

中国地质大学本科生课程论文封面1课程设计评语注1无评阅人签名成绩无效2必须用钢笔或圆珠笔批阅用铅笔阅卷无效3如有平时成绩必须在上面评分表中标出并计算入总成绩2目录课程设计评语2目录31课程论文题目42程序设计思...

C语言课程设计报告_运动会分数统计系统

C语言课程设计报告_运动会分数统计系统一.需求分析1问题描述运动会分数统计系统参加运动会有n个系,系编号为1n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1m,女子m+1m+w。不同的项目取前五名或前…

C语言课程设计报告-图书管理系统

课程设计报告图书馆管理系统目录1题目与要求22系统总体设计要给出必要的文字说明及必要的图示321功能需求分析明确选题的功能需求322系统功能模块划分要给出系统功能模块图43详细设计431重要数据的数据结构设计即...

c语言程序设计课程设计报告(34篇)