C语言实验报告四则运算
C语言实验报告范文
![C语言实验报告范文](https://img.taocdn.com/s3/m/7561767242323968011ca300a6c30c225901f08a.png)
C语言实验报告范文一、实验目的本实验旨在通过实际操作和编程,加深对C语言的理解和掌握,同时提高解决实际问题的能力。
二、实验内容1.利用C语言设计一个简单的计算器程序,实现简单的四则运算功能。
2.利用C语言设计一个简单的学生信息管理系统,实现添加、删除、修改和查询学生信息的功能。
三、实验步骤和代码实现1.计算器程序的设计与实现(1) 定义一个函数addition,传入两个参数,实现两数相加。
(2) 定义一个函数subtraction,传入两个参数,实现两数相减。
(3) 定义一个函数multiplication,传入两个参数,实现两数相乘。
(4) 定义一个函数division,传入两个参数,实现两数相除。
(5)在主函数中,通过用户的输入选择所需进行的运算,并输出结果。
代码如下:```C#include <stdio.h>float addition(float a, float b)return a + b;float subtraction(float a, float b)return a - b;float multiplication(float a, float b)return a * b;float division(float a, float b)if (b == 0)printf("Divisor cannot be zero!\n");return 0;}return a / b;int maiint choice;float num1, num2;printf("Please enter two numbers: ");scanf("%f%f", &num1, &num2);printf("Please choose the operation (1:addition, 2:subtraction, 3:multiplication, 4:division): ");scanf("%d", &choice);switch (choice)case 1:printf("The result is: %.2f\n", addition(num1, num2)); break;case 2:printf("The result is: %.2f\n", subtraction(num1, num2)); break;case 3:printf("The result is: %.2f\n", multiplication(num1, num2)); break;case 4:printf("The result is: %.2f\n", division(num1, num2)); break;default:printf("Invalid choice!\n");break;}return 0;```2.学生信息管理系统的设计与实现(1) 定义一个结构体Student,包含学生的姓名、学号、年龄等信息。
c实验报告
![c实验报告](https://img.taocdn.com/s3/m/9b34fb6e0166f5335a8102d276a20029bc64637c.png)
c实验报告实验报告:基于C语言的简易计算器设计一、设计目的:本实验旨在通过使用C语言进行编程,设计一个简易计算器,能够完成基本的四则运算。
二、设计要求:1. 实现加、减、乘、除四种基本运算的功能;2. 能够连续计算,并显示计算结果;3. 能够进行多层嵌套运算。
三、设计原理:1. 首先通过输入函数获取用户输入的数字和运算符;2. 然后通过switch语句判断用户选择的运算符,并执行相应的运算;3. 最后将计算结果输出。
四、设计步骤:1. 首先定义变量,包括两个操作数和一个运算符的字符型变量;2. 利用scanf函数分别获取用户输入的两个操作数和运算符,并进行赋值;3. 利用switch语句判断运算符,执行相应的运算,并将结果保存在一个结果变量中;4. 利用printf函数将计算结果输出。
五、设计代码:```c#include <stdio.h>int main() {double num1, num2, result;char operator;printf("请输入第一个操作数:");scanf("%lf", &num1);getchar(); // 清除缓冲区中的换行符printf("请输入运算符:");scanf("%c", &operator);getchar(); // 清除缓冲区中的换行符printf("请输入第二个操作数:");scanf("%lf", &num2);switch(operator) {case '+':result = num1 + num2;printf("计算结果:%lf\n", result); break;case '-':result = num1 - num2;printf("计算结果:%lf\n", result); break;case '*':result = num1 * num2;printf("计算结果:%lf\n", result);break;case '/':result = num1 / num2;printf("计算结果:%lf\n", result);break;default:printf("错误的运算符\n");break;}return 0;}```六、实验结果:运行程序后,按照提示依次输入操作数和运算符,然后程序会自动计算并显示结果。
c语言实现简单四则运算
![c语言实现简单四则运算](https://img.taocdn.com/s3/m/12efceb0b1717fd5360cba1aa8114431b90d8e72.png)
c语⾔实现简单四则运算c语⾔实现简单四则运算⼀、项⽬开始⼆、阅读代码1、参考代码使⽤了随机函数:srand(unsigned( time(NULL)));通过调⽤随机函数,将⽣成的100以内的随机整数赋给不同的变量,⼀部分⽤于四则运算式数据的来源,⽽赋给变量c的随机数则⽤于结合switch语句控制程序跳转执⾏不同的分⽀,即不同的四则运算,如下:c = rand() % 5; //随机产⽣⼩于5的⾮负整数switch (c)case 0:case 1:...........case 5:2、使⽤while语句控制除数不为0while (b == 0){b = rand() % 1; //若b=0则重新⽣成b,直到b不为0}3、使⽤if语句判断减数与被减数的⼤⼩if (a > b) //使a<b{d = a;a = b;b = d;}if (m > n) //使m<n{d = m;m = n;n = d;}通过if判断并赋值的⼿段保证结果不出现负数4、原代码仅能⼀次性⽣成20个随机的四则运算式,⽽⽆法从键盘输⼊结果并判断答案正确与否。
三、修改代码由于原代码⽆法从键盘读⼊数据,所以对其进⾏了改进。
1、增加键盘读⼊功能scanf("%d",&x);从键盘读⼊输⼊的答案2、对答案进⾏正确与否的判断if(x == (a+b))printf("You are right!\n");elseprintf("You are wrong!\n");通过⽐较输⼊答案与运算得出的答案告知⽤户计算是否正确。
四、代码托管路劲五、个⼈总结通过阅读与修改代码,实现了⾃⼰想要的功能,同时也增强了⾃⼰的动⼿能⼒。
在这个过程中,体会到程序编写的乐趣,当然也伴随有挫败感,但是,当看到程序输出了⾃⼰想要的结果的时候,却也有⼀种由衷的成就感。
同时也认识到,程序的规则是死的,是严格定义的,只要花时间总是能掌握的,因此不必有太多的畏惧之⼼。
实验报告长整数四则运算
![实验报告长整数四则运算](https://img.taocdn.com/s3/m/1c09b131f111f18583d05ab3.png)
实验报告:长整数四则运算实验者:唐怡04120082 题目:设计一个实现任意长的整数进行加法运算的演示程序一.需求分析1.本演示程序中,长整数为任意长的带符号的长整数的输入及求加法后输出的长整数形式为每四位一组,组间用逗号隔开,输入以“回车符”为结束标志。
2.程度执行的命令包括:1)构造整数1,2)构造整数2,3)做加法运算,4)结束3.测试数据(1)0;0;应输出“0”(2)-2345,6789;-7654,3211;应输出“-1,0000,0000”(3)-9999,9999;1,0000,0000,0000;应输出“9999,0000,0001”(4)1,0001,0001;-1,0001,0001;应输出“0”(5)1,0001,0001;-1,0001,0000;应输出“1”(6)-9999,9999,9999;-9999,9999,9999;应输出“-1,9999,9999,9998”(7)1,0000,9999,9999;1;应输出“1,0001,0000,0000”。
二.概要设计为实现上述程序功能,应以有序表实现长整数的存储,为此,需要抽象数据类型:有序表1.有序表的抽象数据类型定义为:ADT Dulinklist{数据对象:D={ai|ai为带符号整数,1,2,…,n,n>=0}数据关系:R1={<ai-1,ai>|ai-1,ai属于集合D,ai-1<ai,i=2,…..,n}基本操作:InitDulinklist(&)操作结果:构造一个空的有序表LDestroyDulinklist(&)初始条件:有序表L已存在操作结果:销毁有序表LDulinklistLength(L)初始条件:有序表L已存在操作结果:返回有序表L的长度DulinklistEmpty(L)初始条件:有序表L已存在操作结果:若有序表L为空表,则返回TUER,否则返回FALSEGetElem(L,pos)初始条件:有序表L已存在操作结果:若干1〈=POS〈=LENGTH(L),则返回有序表L中第POS个数据元素。
c选择语句四则运算
![c选择语句四则运算](https://img.taocdn.com/s3/m/1f48c69f294ac850ad02de80d4d8d15abe23009f.png)
c选择语句四则运算C语言中的选择语句可以用来实现四则运算。
下面列举了十个例子,每个例子都包含了一个不同的四则运算操作。
1. 加法运算:```int a = 10;int b = 5;int result = a + b;printf("10 + 5 = %d\n", result);```2. 减法运算:```int a = 10;int b = 5;int result = a - b;printf("10 - 5 = %d\n", result);```3. 乘法运算:```int a = 10;int result = a * b;printf("10 * 5 = %d\n", result); ```4. 除法运算:```int a = 10;int b = 5;int result = a / b;printf("10 / 5 = %d\n", result); ```5. 求余运算:```int a = 10;int b = 5;int result = a % b;printf("10 %% 5 = %d\n", result); ```6. 复合运算符(加法和赋值):```int b = 5;a += b;printf("a += b,a的值为:%d\n", a); ```7. 前置递增运算符:```int a = 10;int result = ++a;printf("++a的值为:%d\n", result); ```8. 后置递增运算符:```int a = 10;int result = a++;printf("a++的值为:%d\n", result); ```9. 条件运算符(三元运算符):```int a = 10;int result = (a > b) ? a : b;printf("较大的数为:%d\n", result);```10. 逻辑与运算符:```int a = 10;int b = 5;if (a > 0 && b > 0) {printf("a和b都大于0\n");} else {printf("a和b不都大于0\n");}```以上是十个例子,每个例子都涉及到了不同的四则运算操作,通过选择语句可以实现不同的运算结果。
c语言四则运算实验报告
![c语言四则运算实验报告](https://img.taocdn.com/s3/m/01ca62f2f18583d0486459e5.png)
深圳大学实验报告课程名称: ________ C 语言实验 ________________实验名称: 100以内的四则运算游戏 _________学 院: ___________ 信息工程学院 ______________指导教师 ______________ 张金凤 __________________报告人: 王文杰 组号:]7 ________学号 2013130073 实验地点 教学楼D506实验时间: 2014 年 4 月 16 日提交时间: ___________ 2014.5.9 ____________________课程编号 1300050027一、实验目的一、学习和掌握c语言函数的泄义与调用:二、进一步掌握随机数、选择结构、循环控制、交互式输入输出等程序设计方法:三、进一步掌握c语言中的数组左义和引用方法:四、学习和掌握根据流程图进行模块化程序设计的思想*二、实验要求产生1到4之间的随机数,决定4则运算的符号,再产生两个0到99的随机数进行运算,并记录下做的题数以及正确的数目,当做题者输入n或N时退出程序并显示出完成题数及正确率。
int num2); int五、对流程图的简要说明:#include <std io. h> #include <stdlib. h> #include Htime. h" #include <conio. h> void max_min(int a, int b); randN1N2(int rN1f int rN2 ); rand0per4(); randL/ntlOO ();addLmt100(int num1vsubLmt100(int num1fmulLmt100(int num1fdivLmt100(int num1f/*主函数的功能如下:在主函数中调用上面定义的五个函数,在屏幕上随机循环出一道 100以内的四则运算题。
C语言四则运算测试程序设计报告
![C语言四则运算测试程序设计报告](https://img.taocdn.com/s3/m/1648553c376baf1ffc4fad8c.png)
昆明理工大学《计算机程序设计基础》课程综合实践型教学课题报告课题名称:100以内的整数四则运算测试程序设计组长:学号 040401067 姓名周绍平组员:学号 040401070 姓名邓磊学号 040401106 姓名刘云路学号姓名学号姓名学号姓名学号姓名学院:信自学院专业班级:自动化0421 指导教师:耿植林昆明理工大学计算中心2005 年 6月18日昆明理工大学计算中心《计算机程序设计基础》课程综合实践型教学课题报告课程名称:100以内的整数四则运算测试程序设计正文内容:一、问题描述这是一个进行数学计算的程序,且要求拥有多种功能,包括(1)选项菜单集成各功能函数模块(2)出题(每次出10道题目)(3)答题并评分(4)答错的题给出正确答案(5)显示答卷。
总体看来,大多数功能要求调用错题,所以面临的两个难题便是出题和保存答题者做错的题以便其它函数调用。
另外,由于除法的特殊性——其除数不能为0。
又因为这是一个用于100以内整数的四则运算的程序,又对除法这个特殊成员提出了新的要求——要使得到的结果为整数。
所以有必要把除法单独拿出来作为一个函数处理。
二、问题分析这是一个任务很明确的程序设计—用于100以内的整数的四则运算。
这个程序要求拥有选项菜单、出题、答题评分、显示答卷、错题再解、重复练习的功能。
既然是一个用于计算的程序那它的主要作用就是给练习者答题,并验证答题的正确与否。
当然,还要有一些附加功能,比如:把答卷显示出来,错题给出正解,错题再抽出来再做。
这个程序只要求100以内的四则运算,所以随机出现的数字只能是100以内的,并且要求其为整数。
不论是数据的输入与输出,都要求其为整数。
鉴于这个程序所要求达到的功能,我们小组决定把它分为计算、菜单、答卷、重做、正解、评价、除法七个函数模块。
对各成员的分工如下:计算、正解和菜单(周绍平)评价和除法(邓磊)答卷和重做(刘云路)主函数及各函数的连接则由小组成员共同完成。
c语言编写四则运算
![c语言编写四则运算](https://img.taocdn.com/s3/m/3caeb3fda0c7aa00b52acfc789eb172dec639955.png)
C语言编写四则运算#include<stdio.h>//计算器#include<malloc.h>#define STACK_SIZE100 //ma* size of the stack#define STACK_INCREMENT10 //realloc sizetypedefstruct FStack//stack of int{float* base;float* top;int stacksize;}FStack;void Init(FStack* s){s->base = (float*)malloc(STACK_SIZE * sizeof(FStack));if (!s->base){printf("overflow!\n");return;}s->top = s->base;s->stacksize = STACK_SIZE;}bool isEmpty(FStack* s){if (s->top == s->base){returntrue;}else{returnfalse;}}void Push(FStack* s, float e){if (s->top - s->base >= s->stacksize){printf("stack is full!\nrealloc %d\n", STACK_INCREMENT);s->base = (float*)realloc(s->base, (s->stacksize + sizeof(FStack))); if (!s->base){printf("overflow!\n");return;}s->top = s->base + s->stacksize;s->stacksize += STACK_INCREMENT;}*(s->top) = e;(s->top)++;}float GetTop(FStack* s){if (s->top == s->base){printf("stack is empty!\n");return 0;}float e = *(s->top - 1);return e;}void Pop(FStack* s){if (s->top == s->base){printf("stack is empty!\n");return;}s->top--;}typedefstruct CStack//stack of char{char* base;char* top;int stacksize;}CStack;void Init(CStack* s){s->base = (char*)malloc(STACK_SIZE * sizeof(CStack)); if (!s->base){printf("overflow!\n");return;}s->top = s->base;s->stacksize = STACK_SIZE;}bool isEmpty(CStack* s){if (s->top == s->base){returntrue;}else{returnfalse;}}void Push(CStack* s, int e){if (s->top - s->base >= s->stacksize){printf("stack is full!\nrealloc %d\n", STACK_INCREMENT);s->base = (char*)realloc(s->base, (s->stacksize + sizeof(CStack))); if (!s->base){printf("overflow!\n");return;}s->top = s->base + s->stacksize;s->stacksize += STACK_INCREMENT;}*(s->top) = e;(s->top)++;}char GetTop(CStack* s){if (s->top == s->base){printf("stack is empty!\n");return 0;}char e = *(s->top - 1);return e;}void Pop(CStack* s){if (s->top == s->base){printf("stack is empty!\n");return;}s->top--;}bool isOper(char ch){if (ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '%') {returntrue;}else{returnfalse;}}int Priority(char ch){int p;switch(ch){case'(':p = 0;break;case'+':case'-':p = 1;break;case'*':case'/':case'%':p = 2;break;}return p;}float Calculate(float f1, float f2, char oper){float f3;switch(oper){case'+':f3 = f1 + f2;break;case'-':f3 = f1 - f2;break;case'*':f3 = f1 * f2;break;case'%':f3 = (float)((int)f1 % (int)f2);break;case'/':if (f2 == 0){printf("\nDevided by zero!");e*it(1);}else{f3 = f1 / f2;}break;}return f3;}float StrtoFloat(char* str, int* pos){float fRes;int i = *pos;int k;char n[50];for (k = 0; str[i] >= '0' && str[i] <= '9' || str[i] == '.'; i++, k++) {n[k] = str[i];}n[k] = '\0';*pos = i;fRes = atof(n);return fRes;}bool Check(char* str){int i = 0;while (str[i] != '\0'){if (str[i] != '+' && str[i] != '-' && str[i] != '*' && str[i] != '/' && str[i] != '%'&& str[i] != '.'&& str[i] != '('&& str[i] != ')'&& (str[i] < '0' || str[i] > '9')){returnfalse;}i++;}returntrue;}void main(){char e*p[100];int i;float f, f1, f2;char oper;FStackfstack;CStackcstack;Init(&fstack);Init(&cstack);printf("The e*pression is:");gets(e*p);if (!Check(e*p)){printf("input error! e*it now!\n");e*it(1);}for (i = 0; e*p[i] != '\0' && e*p[i] != -52; i++) {if (!isOper(e*p[i])){f = StrtoFloat(e*p, &i);Push(&fstack, f);}if (isOper(e*p[i])){if (!isEmpty(&cstack)){while (!isEmpty(&cstack) && Priority(e*p[i]) <= Priority(GetTop(&cstack))){oper = GetTop(&cstack);Pop(&cstack);f2 = GetTop(&fstack);Pop(&fstack);f1 = GetTop(&fstack);Pop(&fstack);f = Calculate(f1, f2, oper);Push(&fstack, f);}Push(&cstack, e*p[i]);}else{Push(&cstack, e*p[i]);}}elseif (e*p[i] == '('){Push(&cstack, e*p[i]);}elseif (e*p[i] == ')'){while (GetTop(&cstack) != '(' && !isEmpty(&cstack)) {oper = GetTop(&cstack);Pop(&cstack);f2 = GetTop(&fstack);Pop(&fstack);f1 = GetTop(&fstack);Pop(&fstack);f = Calculate(f1, f2, oper);Push(&fstack, f);}Pop(&cstack);}}while (!isEmpty(&cstack)){oper = GetTop(&cstack);Pop(&cstack);f2 = GetTop(&fstack);Pop(&fstack);f1 = GetTop(&fstack);Pop(&fstack);f = Calculate(f1, f2, oper);Push(&fstack, f);}printf("\nThe result is:%f\n", GetTop(&fstack)); Pop(&fstack);}。
C语言实验报告四则运算
![C语言实验报告四则运算](https://img.taocdn.com/s3/m/0c2681cd9e31433239689396.png)
《C语言》课内实验报告学生姓名:及学号:学院:班级:课程名称:C语言实验题目:实验二选择结构程序设计指导教师姓名及职称:年月日一、实验目的1.掌握逻辑表达式和if语句、嵌套的if语句、switch语句和break语句的格式、语义。
2.掌握选择结构程序设计方法。
二、实验内容编写程序实现两个数的四则运算,要求从键盘输入进行运算的两个数字以及相应的运算符('+'、'-'、'*'、'/'),程序给出算数表达式及运算结果。
(如下图所示,要求使用if语句和switch语句两种方法实现)三、实验结果1、流程图2、源程序(1)使用if语句#include <stdio.h>void main(){float a,b;char c;printf("please input two numbers:");scanf("%f%f",&a,&b);getchar();printf("\nplease input the operator:");//fflush(stdin);scanf("%c",&c);printf("\n");if(c=='+')printf("%10.2f+%10.2f=%10.2f\n",a,b,a+b);else if (c=='-')printf("%10.2f-%10.2f=%10.2f\n",a,b,a-b);else if (c=='*')printf("%10.2f*%10.2f=%10.2f\n",a,b,a*b);else if (c=='/')printf("%10.2f/%10.2f=%10.2f\n",a,b,a/b);elseprintf("Input error!\n");}(2)使用switch语句#include <stdio.h>void main(){float a,b;char c;printf("please input two numbers:");scanf("%f%f",&a,&b); //输入a,b的值getchar();printf("\nplease input the operator:"); //输入操作符scanf("%c",&c);printf("\n");switch(c) //判断输入操作符{case '+': //若操作符为'+',输出a+b printf("%10.2f+%10.2f=%10.2f\n",a,b,a+b);break;case '-': //若操作符为'-',输出a-b printf("%10.2f-%10.2f=%10.2f\n",a,b,a-b);break;case '*': //若操作符为'*',输出a*b printf("%10.2f*%10.2f=%10.2f\n",a,b,a*b);break;case '/': //若操作符为'/',输出a/b printf("%10.2f/%10.2f=%10.2f\n",a,b,a/b);break;default:printf("Input error!\n");}}2、运行结果输入12、13以及+,得到结果如下:输入12、13以及-,得到结果如下:输入12、13以及*,得到结果如下:输入12、13以及/,得到结果如下:输入12、13以及a,得到结果如下:3、结果分析题目要求编程实现两个数的四则运算,因此只需判断输入的操作符为四则运算中的哪一个,编程时可以使用if语句或者switch语句实现判断过程。
大一c语言编程四则运算
![大一c语言编程四则运算](https://img.taocdn.com/s3/m/4ea3987b2f3f5727a5e9856a561252d380eb209c.png)
大一c语言编程四则运算在学习C语言过程中,四则运算是我们最常接触的基础知识之一。
四则运算包括加、减、乘、除四种基本运算,本文将以大一C语言编程四则运算为主题,详细介绍四则运算的实现方法和注意点。
一、加法运算加法运算是最简单的运算之一,只需要使用“+”符号即可实现。
例如,将两个整数a和b相加,可以使用以下代码实现:int a = 10;int b = 20;int c = a + b;其中,a和b为要相加的两个整数,c为保存结果的变量。
二、减法运算减法运算与加法运算类似,只需要使用“-”符号即可实现。
例如,将两个整数a和b相减,可以使用以下代码实现:int a = 20;int b = 10;int c = a - b;其中,a和b为要相减的两个整数,c为保存结果的变量。
三、乘法运算乘法运算需要使用“*”符号。
例如,将两个整数a和b相乘,可以使用以下代码实现:int a = 10;int b = 20;int c = a * b;其中,a和b为要相乘的两个整数,c为保存结果的变量。
需要注意的是,如果a和b中有一个是浮点数,那么结果也会是浮点数。
四、除法运算除法运算需要使用“/”符号。
例如,将两个整数a和b相除,可以使用以下代码实现:int a = 20;int b = 10;int c = a / b;其中,a和b为要相除的两个整数,c为保存结果的变量。
需要注意的是,如果a和b中有一个是浮点数,那么结果也会是浮点数。
此外,如果b为0,程序将会出现除0错误。
五、复合运算除了基本的四则运算外,还有一些复合运算,例如加等于和减等于运算。
例如,将变量a加上10,可以使用以下代码实现:int a = 10;a += 10;其中,a += 10等价于a = a + 10。
减等于运算同理。
六、小数运算除了整数运算外,C语言还支持小数运算。
小数运算需要使用浮点型变量,例如:float a = 1.23;float b = 4.56;float c = a + b;其中,a和b为要相加的两个浮点数,c为保存结果的变量。
数据结构c语言版算术四则混合运算实验报告
![数据结构c语言版算术四则混合运算实验报告](https://img.taocdn.com/s3/m/dfcc3f690166f5335a8102d276a20029bd64630a.png)
数据结构c语言版算术四则混合运算实验报告一、引言在计算机科学领域,算术四则运算是最基本的运算之一。
本实验旨在通过使用C语言编写程序,实现算术四则运算的混合运算功能。
通过该实验,我们可以提高对数据结构的理解,并掌握在C语言中实现算术四则混合运算的方法。
二、实验目的1. 理解算术四则运算的基本原理;2. 掌握数据结构在算术四则运算中的应用;3. 使用C语言编写程序,实现算术四则混合运算功能。
三、实验方法1. 首先,我们需要定义并实现一个栈数据结构,用于存储运算符和操作数;2. 然后,通过读取用户输入的表达式,将其中的运算符和操作数依次入栈;3. 在入栈的过程中,我们需要判断运算符的优先级,以确保正确的运算顺序;4. 最后,通过出栈的方式,按照正确的运算顺序进行运算,并输出结果。
四、实验步骤1. 定义并实现栈数据结构,包括入栈、出栈等基本操作;2. 读取用户输入的表达式,并将其中的运算符和操作数依次入栈;3. 根据运算符的优先级,确定出栈的顺序,并进行相应的运算;4. 将运算结果入栈,继续进行下一轮的运算,直到表达式中的所有运算符和操作数都被处理完毕;5. 最后,将最终的运算结果出栈,并输出。
五、实验结果通过本实验,我们成功实现了算术四则混合运算的功能。
经过多组测试,程序能够正确处理各种复杂的运算表达式,并给出正确的结果。
六、实验总结通过本次实验,我们进一步加深了对数据结构的理解,并成功将其应用于算术四则混合运算中。
我们掌握了C语言中实现算术四则混合运算的方法,并通过编写程序实现了该功能。
通过本次实验,我们不仅提高了对数据结构的应用能力,还提升了编程能力和问题解决能力。
在今后的学习和工作中,我们将继续深入研究数据结构和算法,不断提升自己的编程技术,为解决实际问题提供更好的解决方案。
七、致谢感谢指导老师对本实验的支持和指导,感谢实验室的同学们在实验过程中给予的帮助和建议。
本次实验的顺利完成离不开你们的支持与帮助。
C语言实现大数四则运算
![C语言实现大数四则运算](https://img.taocdn.com/s3/m/bda3594c326c1eb91a37f111f18583d049640f8e.png)
C语⾔实现⼤数四则运算⼀、简介众所周知,C语⾔中INT类型是有限制,不能进⾏超过其范围的运算,⽽如果采⽤float类型进⾏运算,由于float在内存中特殊的存储形式,⼜失去了计算的进度。
要解决整个问题,⼀种解决⽅法是通过字符串数组实现数据的存储,然后实现它们之间四则运算的函数。
⼆、数据结构为了实现字符数组之间的运算,要考虑数值的正负性,数字的长度以及具体存储的数字typedef struct num{int len; //数值长度char symbol; //数字正负形int number[LEN]; //数组}NUM,*SNUM;三、函数整个程序使⽤了⼀下的函数SNUM expToNum(char exp[]);//将输⼊字符串转换为对应结构体void reverse(int a[],int len);//数组逆序int compareAbs(SNUM left,SNUM right);//⽐较两数绝对值⼤⼩SNUM anti_add(SNUM left,SNUM right);//元加法SNUM anti_sub(SNUM left,SNUM right);//元减法SNUM add(SNUM left,SNUM right); //加法SNUM sub(SNUM left,SNUM right); //减法SNUM multiply(SNUM left,SNUM right); //乘法SNUM divide(SNUM left,SNUM right); //除法SNUM mod(SNUM left,SNUM right);//求摸运算函数的定义1 SNUM multiply(SNUM left,SNUM right){2//left作为被乘数,right作为乘数3 SNUM mul = (struct num*)malloc(sizeof(struct num));4int i,j;5for(i=0;i<LEN;i++){6 mul->number[i]=0;7 }89if(left->symbol==right->symbol){10 mul->symbol='+';11 }else{12 mul->symbol='-';13 }14151617for(i=0;i<right->len;i++){18for(j=0;j<left->len;j++){19 mul->number[i+j]+=left->number[j]*right->number[i];20 }21 }22232425////进位化简26int len = left->len+right->len-1; //长度2728//29for(i=0;i<len;i++){30 mul->number[i+1]+=mul->number[i]/10;31 mul->number[i]%=10;3233if(i==len-1){34if(mul->number[i+1]!=0){ //还存在⾼位35 len++;36 }else{ //进位完毕,退出37break;38 }39 }40 }4145for(i=len-1;i>=0;i--){46if(mul->number[i]==0){47 len--;48 }else{49break;50 }51 }52if(len==0){53 len=1;54 }5556 mul->len=len;5758free(left);59free(right);60return mul;61 }62636465//减⼀个数等于加上⼀个数的相反数66 SNUM sub(SNUM left,SNUM right){67 right->symbol=(right->symbol=='+'?'-':'+');68return add(left,right);69 }7071//⽐较两数绝对值⼤⼩72int compareAbs(SNUM left,SNUM right){73if(left->len>right->len){ //left的位数更多74return1;75 }else if(left->len<right->len){ //right的位数更多76return -1;77 }else{78int i=left->len-1;79while(i>=0){ //从⾼位开始⽐较80if(left->number[i]>right->number[i]){81return1;82 }83if(left->number[i]<right->number[i]){84return -1;85 }86 i--;87 }88return0; //两者绝对值相等89 }90 }919293 SNUM expToNum(char exp[]){9495 SNUM temp=(struct num*)malloc(sizeof(struct num)); 9697int locan=0;98//确定正负号99if(exp[0]=='+'||exp[0]=='-'){100 temp->symbol=exp[0];101 locan++;102 }else{103 temp->symbol='+';104 }105106//输⼊到数组107int count=0;108while(exp[locan]!='\0'){109 temp->number[count]=exp[locan]-'0';110 locan++;111 count++;112 }113114int i=count;115for(i=count;i<LEN-1;i++){116 temp->number[i]=0;117 }118119 temp->len=count;120121122//数组逆序从个位开始计算123 reverse(temp->number,temp->len);124125return temp;129void reverse(int a[],int len){130int i,temp;131for(i=0;i<len/2;i++){132 temp = a[i];133 a[i] = a[len-1-i];134 a[len-1-i] = temp;135 }136 }137138139140//元加法,假设left和right都为正数或0141 SNUM anti_add(SNUM left,SNUM right){142int i=0;143144while(i<left->len||i<right->len){145int sum=0;146 sum=left->number[i]+right->number[i]; 147if(sum>=10){148 left->number[i]=sum%10;149 left->number[i+1]+=sum/10; //进位150 }else{151 left->number[i]=sum; //不进位152 }153154 i++;155 }156157if(left->number[i]!=0){158 i+=1;159 }160161 left->len=i;162return left;163 }164165//实现正数或负数的加法166 SNUM add(SNUM left,SNUM right){167 SNUM temp;168if(left->symbol==right->symbol){169 temp = anti_add(left,right);170 }else{171if(compareAbs(left,right)>=0){172 temp = anti_sub(left,right);173174 }else{175 temp = anti_sub(right,left);176 }177 }178return temp;179 }180181//元减法,假设left>=right,left和right均为正数或0 182 SNUM anti_sub(SNUM left,SNUM right){183int i=0;184int count=0;185while(i<left->len){186int temp = left->number[i]-right->number[i]; 187if(temp<0){188 left->number[i+1]-=1;189 left->number[i]=temp+10; //退位190 }else{191 left->number[i]=temp;192 }193194 count+=1;195196 i++;197 }198199200201202//舍掉多余的0203for(i=count-1;i>=0;i--){204if(left->number[i]==0){205 count--;206 }else{207break;208 }213 }214215 left->len=count; 216return left;217218 }。
C语言计算器设计实验报告
![C语言计算器设计实验报告](https://img.taocdn.com/s3/m/a68d8f4a2e3f5727a5e962c4.png)
C语言计算器设计实验报告班级:11661 姓名:学号:38号一、实验目的:利用C语言编写一个简单的计算器,并能正确运行+,-,*,/四则运算。
二、实验内容:1、编写前分析;(1)、根据实验目的,要求键盘录入表达式,并运行后输出结果;由于键盘录入的表达式含数字和运算符,所以要选择用字符串数据类型输入。
(2)、由于输入的是字符串,而只有数值类型的数据才能参与运算,所以得把字符(串)类型的数据转换为数值类型的数据。
(3)、四则运算时,括号优先级高于乘除,乘除优先级高于加减,程序必须能正确判断其优先级才能得出正确的结果。
(4)、为了保证运行结果的精确度需正确选择所用变量的数据类型。
2、利用所学知识进一步分析以上内容;(1)、利用gets函数输入表达式,例如:gets(calc);(2)、C语言中将字符类型数据转化成数值类型数据方法很多,该程序利用函数库stdlib.h中的atof函数来实现这一目的。
同时注意主函数前加上预处理指令:#include<stdlib.h>。
(3)、为了能正确判断优先级,该程序利用函数间的多层嵌套,循环调用来实现;从优先级最高的括号开始判断,若有括号,再判断括号内部,若无括号判断是否为乘除,最后判断加减;括号内内容法方类似。
具体判断方法在后面将以实例详细介绍。
(4)、为了保证输出数据的精确度,该程序中函数f1()-f4()返回值均用double 类型;用g格式符输出最终结果让输出结果简明而又能保证其精确度。
3、开始编程:首先编写必要的预处理指令,声明必要的函数,定义必要的变量。
#include<stdio.h> (输入,输出函数需要该指令);#include<stdlib.h> (atof函数需要该指令);全局声明:Double f1(); (用于存放最终输出结果);Char calc[n]; (用于存放输入的表达式);Int n; (用于标注clac中的各个元素);编写主函数:int main(void){printf("请输入表达式:\n");gets(calc);(输入表达式)printf("原式=%g\n",f1());(程序将调用f1(),并输出f1()的结果)return(0);}由于四则运算先算出优先级最高的结果,并对同一优先级采用从左到右的顺序计算,所以最终的运算是对表达式进行加减运算。
深圳大学C程序设计Lab Assignment3实验报告(四则运算)
![深圳大学C程序设计Lab Assignment3实验报告(四则运算)](https://img.taocdn.com/s3/m/63a4eacbbb4cf7ec4afed0a2.png)
附件(四)本文档仅限于学习交流,禁止抄袭。
程序结果截图非本人信息,请自行修改。
深圳大学实验报告课程名称:C程序设计实验名称:Lab Assignment 3学院:信息工程学院专业:指导教师:报告人:报告人学号:班级:实验时间:报告提交时间:教务处制四、实验结果与数据分析:1.首先,这次实验把我最近学的知识穿插了起来,让我进一步掌握了随机数、选择结构、循环控制、交互式输入输出等程序设计方法。
2.我认识到了写代码的重要性,例如空格,空行,缩进等细节。
因为做到了这些细节,程序一旦发生了错误,修改的时候很容易下手,一目了然,别人看着也舒服。
3.我学会了用visio软件画流程图,这个软件简单快捷易操作。
(注:“指导教师批阅意见”栏请单独放置一页)指导教师批阅意见:实验报告内容完整性(20分)实验数据准确性(程序与程序运行结果)(30分)实验结果与数据分析(20分)实验报告(格式规范、按时完成)(20分)实验态度(实验课考勤、实验表现)(10分)完整20 较完整15不完整10准确30较准确20不够准确10正确20较正确10不正确规范20较规范15不够规范10好10较好5一般2说明:说明:说明:说明:说明:。
四则运算(c语言)
![四则运算(c语言)](https://img.taocdn.com/s3/m/f3baa83cec630b1c59eef8c75fbfc77da2699732.png)
四则运算(c语⾔)博客班级作业要求作业⽬标能够实现四则运算⼩程序的基本需求,同时练习写博客(排版等)学号3190704217⼆. 题⽬要求写⼀个能⾃动⽣成⼩学四则运算题⽬的程序,然后在此基础上扩展:1)除了整数以外,还要⽀持真分数的四则运算,例如:1/6+1/8=7/242)程序要求能处理⽤户的输⼊,判断对错,累积分数3)程序⽀持可以由⽤户⾃⾏选择加、减、乘、除运算4)使⽤-n参数控制⽣成题⽬的个数,例如Myapp.exe -n 10,将⽣成10个题⽬三. 代码#include <stdio.h>#include <stdlib.h>#include <time.h>#include <math.h>int s;//答对的题⽬数量float score;//得分(百分制)//判断答案是否正确void judge0(float a,float ta) //专为除法提供判断函数{float error=a-ta;//计算结果与真正答案的误差⼩于⼀定值if((error<=0.005)&&(error>=-0.004)){printf("回答正确!\n");s++;}elseprintf("回答错误,正确答案是 %.2f\n",ta);}void judge(int a,int ta) //加法减法,乘法的判断函数{if(a==ta){printf("回答正确!\n");s++;}elseprintf("回答错误,正确答案是 %d\n",ta);}void judge1(int a1,int a2,float ta) //真分数运算的判断函数{float a=(float)a1/(float)a2;if(a==ta){printf("回答正确!\n");s++;}elseprintf("回答错误,正确答案是 %.2f\n",ta);}//真分数的随机运算int random0(){int num,i=0;printf("请输⼊题⽬数量\n");scanf("%d",&num);srand(unsigned(time(NULL)));while(i<num){int type;//运算类型,加减乘除int left1,left2,right1,right2;int answer1,answer2;float trueanswer;left1= rand() % 100;left2= rand() % 100;type = rand() % 4;if(left1>left2) //转化为真分数{int t;t=left1;left2=left1;left1=t;}right1 = rand() % 100;right2 = rand() % 100;if(right1>right2)//转化为真分数{int t;t=right1;right2=right1;right1=t;}switch(type){case 0:trueanswer=((float)left1/(float)left2)+((float)right1/(float)right2); printf("%d/%d + %d/%d = ", left1, left2,right1,right2);scanf("%d/%d",&answer1,&answer2);judge1(answer1,answer2,trueanswer);break;case 1:trueanswer=((float)left1/(float)left2)-((float)right1/(float)right2); printf("%d/%d - %d/%d = ", left1, left2,right1,right2);scanf("%d/%d",&answer1,&answer2);judge1(answer1,answer2,trueanswer);break;case 2:trueanswer=((float)left1/(float)left2)*((float)right1/(float)right2); printf("%d/%d * %d/%d = ", left1, left2,right1,right2);scanf("%d/%d",&answer1,&answer2);judge1(answer1,answer2,trueanswer);break;case 3:trueanswer=((float)left1/(float)left2)/((float)right1/(float)right2); printf("%d/%d / %d/%d = ", left1, left2,right1,right2);scanf("%d/%d",&answer1,&answer2);judge1(answer1,answer2,trueanswer);break;}i++;}return num;}// 整数的随机运算int random(){int num,i=0;printf("请输⼊题⽬数量\n");scanf("%d",&num);srand(unsigned(time(NULL)));while(i<num){int type;//运算类型int left, right;int answer,trueanswer;left = rand() % 100;type = rand() % 4;right = rand() % 100;switch(type){case 0:trueanswer=left+right;printf("%d + %d = ", left, right); scanf("%d",&answer);judge(answer,trueanswer); break;case 1:trueanswer=left-right;printf("%d - %d = ", left, right); scanf("%d",&answer);judge(answer,trueanswer); break;case 2:trueanswer=left*right;printf("%d * %d = ", left, right); scanf("%d",&answer);judge(answer,trueanswer); break;case 3:float answer0,trueanswer0; trueanswer0=((float)left)/((float)right); printf("%d /%d = ", left, right);scanf("%f",&answer0);judge0(answer0,trueanswer0); break;}i++;}return num;}//加法int add(){int num,i=0;printf("请输⼊题⽬数量\n");scanf("%d",&num);srand(unsigned(time(NULL))); while(i<num){int left, right,answer,trueanswer;left = rand() % 100;right = rand() % 100;trueanswer=left+right;printf("%d +%d = ", left, right); scanf("%d",&answer);judge(answer,trueanswer);i++;}return num;}//减法int subtract(){int num,i=0;printf("请输⼊题⽬数量\n");scanf("%d",&num);srand(unsigned(time(NULL))); while(i<num){int left, right,answer,trueanswer; left = rand() % 100;right = rand() % 100; trueanswer=left-right;printf("%d -%d = ", left, right); scanf("%d",&answer);judge(answer,trueanswer);i++;}return num;}//乘法int multiply(){int num,i=0;printf("请输⼊题⽬数量\n");scanf("%d",&num);srand(unsigned(time(NULL))); while(i<num){int left, right,answer,trueanswer; left = rand() % 100;right = rand() % 100; trueanswer=left*right;printf("%d *%d = ", left, right); scanf("%d",&answer);judge(answer,trueanswer);i++;}return num;}//除法int divide(){int num,i=0;printf("请输⼊题⽬数量\n");scanf("%d",&num);srand(unsigned(time(NULL))); while(i<num){int left, right;float answer,trueanswer;left = rand() % 100;right = rand() % 100; trueanswer=((float)left)/((float)right); printf("%d /%d = ", left, right); scanf("%f",&answer);judge0(answer,trueanswer);i++;}return num;}//打印界⾯提⽰信息void main(){printf("welcome!\n");printf("\n");int choose,t;do{s=0;score=0;int n;printf("********************四则运算********************\n");printf("\n");printf(" 1.随即题⽬\n");printf(" 2.加法题⽬\n");printf(" 3.减法题⽬\n");printf(" 4.乘法题⽬\n");printf(" 5.除法题⽬\n");printf(" 6.分数运算\n");printf(" 7.退出\n");printf("\n");printf("******************Designed by 吴⼭茶******************\n");printf("\n");printf("请选择计算类型:");scanf("%d",&t);choose=t;printf("%d",choose);printf("\n");system("cls");switch(choose){case 1:n=random();printf("\n");break;case 2:n=add();printf("\n");break;case 3:n=subtract();printf("\n");break;case 4:n=multiply();printf("\n");break;case 5:n=divide();printf("\n");break;case 6:n=random0();printf("\n");break;default:break;}score=(float)s/(float)n;printf("得分:%.2f\n",score);}while(choose!=7);exit(0);}三.运⾏结果1.显⽰界⾯2.加法运算3.随机运算4.真分数运算任务内容计划完成需要的时间(min)实际完成需要的时间(min)计划1020任务内容计划完成需要的时间(min)实际完成需要的时间(min)估计这个任务需要多少时间,并规划⼤致⼯作步骤55开发00需求分析(包括学习新技术)1010⽣成设计⽂档00设计复审1530代码规范55具体设计2020具体编码150180代码复审1010报告00测试报告00计算⼯作量300330+事后总结,并提出过程改进计划2010。
c语言实现分数的四则运算
![c语言实现分数的四则运算](https://img.taocdn.com/s3/m/cf7dcedeafaad1f34693daef5ef7ba0d4a736d8f.png)
c语言实现分数的四则运算1. 前言分数,是我们初中数学学习的必修课程之一。
尽管在现实生活中或商业运营中,我们几乎不会用到分数的四则运算,但在计算机科学领域中,这个概念却显得尤为重要。
在这篇文章中,我们将会探究如何用C语言实现分数的四则运算,希望能对学习C语言和分数的学习者们有所帮助。
2. 定义分数结构体在C语言中,我们可以用结构体来定义一个分数类型。
一个分数包含两个整数:分子和分母。
因此,我们可以这样定义一个分数结构体:```cstruct fraction {int numerator; // 分子int denominator; // 分母};```3. 分数约分我们知道,约分是化简分数的一种基本方法,可以减少计算过程中分数的复杂性。
所以,在进行分数的四则运算之前,我们需要先将分数化简为最简形式。
例如,分数12/16可以化简为3/4,而分数6/9可以化简为2/3。
如何实现分数的约分呢?我们可以通过求出分子和分母的最大公约数(GCD),然后将它们同时除以这个最大公约数,从而得到最简形式的分数。
这样约分的好处在于能够节省内存和计算时间,同时也便于与其它化简后的分数进行比较。
下面是一个实现分数约分的函数:```cint gcd(int a, int b) { // 辗转相除法求最大公约数return (b == 0) ? a : gcd(b, a % b);}void reduce_fraction(struct fraction* f) {int g = gcd(f->numerator, f->denominator);f->numerator /= g;f->denominator /= g;}```该函数将传入的分数指针所指向的分数约去最简形式。
具体而言,我们先调用gcd函数求出分子和分母的最大公约数g,然后再将分子和分母都除以g,从而得到最简形式的分数。
4. 分数加减乘除有了分数约分函数后,我们便可以开始实现分数的四则运算。
C语言课程设计报告-长整数四则运算
![C语言课程设计报告-长整数四则运算](https://img.taocdn.com/s3/m/14ee2a65f7ec4afe04a1df51.png)
case '1':InputNumber(a,1);flag_n1=1;break;//输入第1个长整数
case '2':InputNumber(b,2);flag_n2=1;break;//输入第2个长整数
case 'O':
case 'o':opt=InputOperator();flag_opt=1;break;//输入运算符
void ClearPromptLine();//清除提示行的显示
void ClearWorkSpace();//清除工作区的显示
void InputNumberBox(int OneOrTwo);//指定两个输入数的输入窗口,如果超过这个范围文字将自动流动
void ResultBox();//指定计算结果的显示窗口,如果超过这个范围文字将自动流动
//将双向循环链表L复制到双向循环链表C中。
2、长整数的数据类型和和操作定义为:
typedef struct DuCiLinkNode LongIntNode,*LongInt;//采用双向循环链表为实际的存储结构
void OutputNumber(LongInt a);//输出一个长整型数
void InputNumber(LongInt a,int OneOrTwo);//输入一个长整型数
1)、输入长整数1;2)、输入长整数2;3)、输入执行的运算符;4)、计算并输出结果;5)、结束。
4、测试数据:(以加法为例)
(1)、0;0;+;应输出“0”。
(2)、-2345,6789;-7654,3211;+;应输出“-1,0000,0000”。
(3)、-9999,9999;1,0000,0000,0000;+;应输出“9999,0000,0001”.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《C语言》课内实验报告
学生姓名:
及学号:
学院:
班级:
课程名称:C语言
实验题目:实验二选择结构程序设计
指导教师
姓名及职称:
年月日
一、实验目的
1.掌握逻辑表达式和if语句、嵌套的if语句、switch语句和break语句的格式、语义。
2.掌握选择结构程序设计方法。
二、实验内容
编写程序实现两个数的四则运算,要求从键盘输入进行运算的两个数字以及相应的运算符('+'、'-'、'*'、'/'),程序给出算数表达式及运算结果。
(如下图所示,要求使用if语句和switch语句两种方法实现)
三、实验结果
1、流程图
2、源程序
(1)使用if语句
#include <stdio.h>
void main()
{
float a,b;
char c;
printf("please input two numbers:");
scanf("%f%f",&a,&b);
getchar();
printf("\nplease input the operator:");
//fflush(stdin);
scanf("%c",&c);
printf("\n");
if(c=='+')
printf("%10.2f+%10.2f=%10.2f\n",a,b,a+b);
else if (c=='-')
printf("%10.2f-%10.2f=%10.2f\n",a,b,a-b);
else if (c=='*')
printf("%10.2f*%10.2f=%10.2f\n",a,b,a*b);
else if (c=='/')
printf("%10.2f/%10.2f=%10.2f\n",a,b,a/b);
else
printf("Input error!\n");
}
(2)使用switch语句
#include <stdio.h>
void main()
{
float a,b;
char c;
printf("please input two numbers:");
scanf("%f%f",&a,&b); //输入a,b的值
getchar();
printf("\nplease input the operator:"); //输入操作符
scanf("%c",&c);
printf("\n");
switch(c) //判断输入操作符
{
case '+': //若操作符为'+',输出a+b printf("%10.2f+%10.2f=%10.2f\n",a,b,a+b);
break;
case '-': //若操作符为'-',输出a-b printf("%10.2f-%10.2f=%10.2f\n",a,b,a-b);
break;
case '*': //若操作符为'*',输出a*b printf("%10.2f*%10.2f=%10.2f\n",a,b,a*b);
break;
case '/': //若操作符为'/',输出a/b printf("%10.2f/%10.2f=%10.2f\n",a,b,a/b);
break;
default:
printf("Input error!\n");
}
}
2、运行结果
输入12、13以及+,得到结果如下:
输入12、13以及-,得到结果如下:
输入12、13以及*,得到结果如下:
输入12、13以及/,得到结果如下:
输入12、13以及a,得到结果如下:
3、结果分析
题目要求编程实现两个数的四则运算,因此只需判断输入的操作符为四则运算中的哪一个,编程时可以使用if语句或者switch语句实现判断过程。
另外,输入的操作符有可能非法,这时程序会输出“Input error!”。
四、思考及总结
实验过程中,连续写两个scanf函数,想分别用来输入操作数及操作符,但是在运行时并不能将操作数和操作符的输入分开。
通过上网搜索发现产生这个问题的原因是输入并不是在回车的时候结束,而是先存放在一个缓冲区中,这是输入的回车作为字符赋给操作符,这样就产生了错误。
解决的办法找到两个,一个是使用getchar()命令将回车符接收,另外一个是使用fflush(stdin)将缓冲区清空。