【c++/c】C语言“小小计算器”基本功能实现(包含12个实验一篇足以)

简介: C语言“小小计算器”基本功能实现(包含12个实验一篇足以)【期末大作业】

小小计算器

实验1、“小小计算器”基本功能实现(1)

编写程序,在屏幕上输出以下内容:

       **************************
       *        小小计算器       *
       **************************

实验2、“小小计算器”基本功能实现(2)

编程实现以下功能:
① 在屏幕上输出

        ***********************************
        *          小小计算器             *
        *          1 加法                 *
        *          2 减法                 *
        *          3 乘法                 *
        *          4 除法                 *
        *          5 取模运算             *
        *          6 计算圆面积           *
        ***********************************

② 定义几个变量,并赋初值,分别进行加法、加法、乘法、除法、取模运算;
③ 定义常量PI等于3.14, 计算给定半径的圆面积,将计算结果分别赋值给一个double类型和int类型的变量,掌握C中的数据类型转换,并将各个计算结果在屏幕上输出。

验收/测试用例 假设程序中定义变量并赋初始值如下: int a=8, b=2, c=0, r=2; double t;
程序运行后,在屏幕上输入如下:

a+b的结果是:10
a-b的结果是:6
a*b的结果是:16
a/b的结果是:4
圆面积整数结果是12
圆面积是12.560000

实验3、“小小计算器”基本功能实现(3)

在实验2的基础上,实现用cin从键盘上输入数据,进行相应的运算,并将结果在屏幕上输出。要求实现加法、减法和取模运算时,输入数据类型为整数,并将运算结果的10进制、8进制和16进制形式输出;乘法、除法运算的输入数据均为float,计算结果分别以小数形式和指数形式输出;求圆面积输入的数据类型为double,正常输出结果,同时还要求在输出要求保留两位小数的结果。
在实验过程中,要求结合课本把cin和cout的各种形式的格式控制都要练习到,从而掌握这两个函数的使用。
验收/测试用例

 加法
输入: 5, 15
输出: 加法结果的十进制形式是:20

     加法结果的八进制形式是:24

加法结果的十六进制形式是:14
 减法
输入: 5, 15
输出: 减法结果的十进制形式是:-10

     减法结果的八进制形式是:3777777766

减法结果的十六进制形式是:fffffff6
 取模
输入: 10, 7
输出: 取模结果的十进制形式是:3

     取模结果的八进制形式是:3

取模结果的十六进制形式是:3
 乘法
输入: 2000.5,6
输出: 乘法结果的小数形式是:12003.000000

     乘法结果的指数形式是:1.200300e+004

 除法
输入: 120,6
输出: 除法结果的小数形式是:20.000000

     除法结果的指数形式是:2.000000e+001

 求圆面积
输入: 2
输出: 该圆面积是12.560000
该圆面积保留两位小数的结果是12.56

实验4、小小计算器”基本功能实现(4)

编程实现以下功能:
① 在屏幕上输出

        ***********************************
        *          小小计算器             *
        *          1 加法                 *
        *          2 减法                 *
        *          3 乘法                 *
        *          4 除法                 *
        *          5 判断数字的位数       *
        *          6 计算圆面积           *
        ***********************************

② 除法运算时,如果输入的第二个数(除数)为0,给出提示,显示计算结果。
③ 输入一个正整数,要求在三位以内(含三位),求出这个数是几位数,并输出每一位数字。

验收/测试用例
 除法
输入: 120,6
输出: 除法结果是:20.000000

输入: 120,0
输出: 除数为0,无法进行除法运算

 判断数字的位数
输入: -120
输出: 要求输入的数为整数

输入: 1000
输出: 要求输入的数为3位以内的正整数

输入: 123
输出: 该数为3位数,百位是1,十位是2,个位是3

输入: 78
输出: 该数为2位数,十位是7,个位是8

实验5、“小小计算器”基本功能实现(5)

① 在“小小计算器”基本功能实现(4) 的基础上,用switch多分枝语句进行计算器操作选择,根据菜单提示,输入一个数字,进行对应的操作。
② 扩充计算器功能,添加判断输入的年是否是闰年

  • 7 判断闰年 *

③ 扩充计算器功能,添加成绩转换功能

  • 8 成绩转换 *
    从键盘上输入一个百分制的成绩,输出对应的等级成绩。
    100 — 90 ——> 优秀
    80 — 89 ——> 良
    70 — 79 ——> 中
    60 — 69 ——> 及格
    0 — 59 ——> 不及格

验收/测试用例
 判断闰年
输入:2000
输出:2000年是闰年

输入:2013
输出:2000年是平年

 成绩转换
输入:-10或101
输出:成绩输入错误

输入:88
输出:良

实验6、“小小计算器”基本功能实现(6)

编程实现以下功能:
① 在屏幕上输出

        ***********************************
                 小小计算器             
                 1 加法                 
                 2 减法                 
                 3 乘法                 
                 4 除法                 
                 5 判断数字的位数      
                 6 计算圆面积                 
                 7 判断闰年                              
                 8 成绩转换                              
                 9 计算从1到输入数之间的奇数和 (for)          
                 10 计算从1到输入数之间的偶数和 (while)          
                 11 输出从1到输入数之间所有3的倍数 (do-while)          
                 12 求即被3整除又被5整除的数          
                 13 求水仙花数 

14 退出

        ***********************************

② 利用循环语句,将实验5“小小计算器”基本功能实现(5)改造只有选择退出操作,程序才结束,否则执行一个操作后,提示用户进行下一个操作的输入;
③ 增加功能:
<1>“ 9 计算从1到输入数之间的奇数和 (for)”
从键盘上输入一个正整数,输出1到该数之间所有奇数和。要求用for循环语句实现。
<2> “10 计算从1到输入数之间的偶数和 (while)”
从键盘上输入一个正整数,输出1到该数之间所有偶数和。要求用while语句实现。
<3> “11 输出从1到输入数之间所有3的倍数 (do-while)”
从键盘上输入一个正整数,输出1到该数之间所有3的倍数。要求用do-while实现。
<4> “12 求即被3整除又被5整除的数”
从键盘上输入两个数,输出两个数之间第一个即被3整除又被5整除的数。

<5> “13 求水仙花数”
输出所有水仙花数。水仙花数是一个3位数,各位数字的立方之和等于他本身,例如:153= 13+53+33。

实验7、“小小计算器”基本功能实现(7)

在实验6的基础上,将小小计算器中的各个操作抽取成函数,在switch语句中,根据输入的操作,调用对应的函数。
扩充小小计算器的功能
<1> “14 求最大值”
编写一个带两个参数的函数,该函数返回这两个参数的最大值。输入两个整数,输出他们的最大值。
<2> “15 求最大最小值”
编写一个带两个参数的函数,该函数能求出这两个数的最大值和最小值,使得第一个参数存放最大值,第二个参数存放最小值。要求练习传递地址的参数。

实验8、“小小计算器”基本功能实现(8)

在实验7 “小小计算器”基本功能实现(7)的基础上,扩充以下功能:
<1> “16 冒泡排序”
从键盘上输入10个数,进行冒泡排序,输出排序结果。
<2> “17 矩阵转置”
从键盘输入一个3X4的整数矩阵,进行转置操作,并将转置结果在屏幕上输出;
<3> “18 求对角线和”
从键盘输入一个3*3整数矩阵,求主对角线元素和;
<4> “19 统计单词个数”
从键盘输入一行字符,单词之间用空格分隔开,统计其中有多少个单词, 并输出结果。

实验9、“小小计算器”基本功能实现(9)

在实验8 “小小计算器”基本功能实现(8)的基础上,扩充以下功能:
<1> “19 统计单词个数”
从键盘输入一行字符,单词之间用空格分隔开,统计其中有多少个单词, 并输出结果。

实验10、“小小计算器”基本功能实现(10)

在实验8的基础上,将功能“16 冒泡排序”的排序结果用指针形式来输出。扩充功能:
<1> “20 静态创建链表”
静态创建一个包含有4个节点的单链表,输出这个链表的所有数据。节点包含两个域:数据域(int型),指针域。
<2> “21 动态创建链表”
动态创建一个链表,依次从键盘上输入正整数,将输入的整数插入到该链表中,直到输入一个负数为止。最后将该链表中的数据在屏幕上输出。

最终代码:

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<stdlib.h>
#include<malloc.h>
#include<assert.h>
using namespace std;
#define PI 3.1415926f
#define SIZE 20
int GetMax(int m,int n)
{
   if(m>=n)
      return m;
   else
      return n;
}
int fun1(int *a)
{
    int i, b, max;
    max = a[0];                    // 先让最大值为a[0]
    for (i = 0; i < 2; i++)        // for的目的就是比较出最大值,把最大值付给b
    {
        if (a[i] >= max)
            b = a[i];
    }
    return b;                    // 反回最大值
}

int fun2(int *a)
{
    int i, c, min;
    min = a[0];                    // 先让最小值为a[0]
    for (i = 0; i < 2; i++)        // for的目的就是比较出最小值,把最小值付给c
    {
        if (a[i] <= min)
            c = a[i];
    }
    return c;                    // 反回最小值
}
 struct Node
{
int member; //节点中的成员
struct Node *next; //指向下一个节点的指针
};

//创建单链表的函数
Node* CreateSList()
{
int i = 0; //循环计数
int length = 0; //链表长度
int value = 0; //存储输入的节点成员值

//创建链表头节点并分配空间
Node* pHead = (Node*)malloc(sizeof(Node));
assert(pHead != NULL);

//创建临时节点并分配空间,用于循环控制
Node* pTemp = (Node*)malloc(sizeof(Node));
assert(pHead != NULL);

//输入需要创建的链表节点个数
printf("请输入要创建的节点个数:");
scanf("%d", &length);

//循环创建链表节点
for (i = 0; i < length; i++)
{
//输入每个节点的成员
printf("请输入第%d个节点的成员:",i + 1);
scanf("%d", &value);

//创建一个新节点,并分配空间
Node* pNew = (Node*)malloc(sizeof(Node));


//将刚才输入的节点成员赋给pNew节点
pNew->member = value;
//将pNew的下一个节点设置为NULL
pNew->next = NULL;


//如果是第一个链表节点
if (0 == i)
{
pHead = pNew; //将pNew节点赋给头节点
pHead->next = NULL; //设置头节点的下一个节点为NULL
pTemp = pHead; //将头结点赋给临时节点,用于后面的循环控制
}
//不是第一个节点
else
{
pTemp->next = pNew; //将pNew赋给pTemp节点的下一个节点
pTemp = pTemp->next;//将pTemp指向pTemp的下一个节点 
pTemp->next = NULL; //将pTemp的下一个节点的下一个节点设置为NULL
}
}
return pHead;//返回头节点
}

//遍历打印链表的函数
void TraversalSList(Node* pHead)
{
Node* pTemp = pHead; //将头节点的指针赋给临时节点pTemp
int i = 0; //循环时打印节点个数的控制变量
while (NULL != pTemp)   //若节点pTemp不为空,则循环
{
printf("第%d个节点信息:\n", i + 1);
printf("第%d个节点的成员值为:%d\n",i + 1,pTemp->member);
//节点数累加
i++;
//将pTemp指向pTemp的下一个节点
pTemp = pTemp->next;
}
return;
}



int jiafa()
{
    int a,b;
    printf("Input two integers:");
    scanf("%d%d",&a,&b);
    printf("%d+%d=%d\n",a,b,a+b);
}
int jianfa()
{
    int a,b;
    printf("Input two integers:");
    scanf("%d%d",&a,&b);
    printf("%d-%d=%d\n",a,b,a-b);
}
int chengfa()
{
    int a,b;
    printf("Input two integers:");
    scanf("%d%d",&a,&b);
    printf("%d×%d=%d\n",a,b,a*b);
}
int chufa()
{
    float a,b;
    printf("Input two integers:");
    scanf("%f%f",&a,&b);
    printf("%.1f÷%.1f=%.5f\n",a,b,a/b);
}
int    weishu(){
    void num(int a);
long a;
scanf("%ld",&a);
num(  a);
}void num(int a)
{ 
long b=0;
int i;
for(i=0;a>0;a/=10,i++)
{
b=(b*10)+a%10;
}
printf("%d位的,逆序数=%ld\n",i,b);    

}
int    juanmianji(){
    float r,area;    

printf("请输入圆的半径:");    

scanf("%f",&r);    

area=PI*r*r;    

printf("圆的面积为:%f",area);    

  
    
}
int    runnian(){
    int a;
    printf("输入年份:");
    scanf("%d",&a);
    if(a%4==0&&a%100!=0||a%400==0)
    printf("%d年是闰年\n",a);
    else
    printf("不是闰年\n");
}
int    chengji(){
   int s,y;
   y=(int)(s/10);
   printf("Input Score:");
   scanf("%d",&s);
switch(y)
{
case 9:case 10: printf("%d的等级为优秀",s);break;
case 8: printf("%d的等级为良",s);break;
case 7: printf("%d的等级为中",s);break;
case 6: printf("%d的等级为及格",s);break;
default: printf("%d的等级为不及格",s);
}
}
int    jishuhe(){
    int i,n;
    int result=0;
    printf("请输入n:");
    scanf("%d",&n);
    for(i=1; i<=n; i++) {
        if(i%2==1)
            result += i;
        

    }
    printf("奇数和为:%d\n",result);
    return 0;
}


int    oushuhe(){
    int n;
    int i=0,result=0;
    printf("请输入n:");
    scanf("%d",&n);
    while(i<=n){
        i+=2;
        result += i;
    }
    printf("偶数和为:%d\n",result);
    return 0;
}


int    beishu(){
    int n;
    int i=1;
    printf("请输入n:");
    scanf("%d",&n);
    do{
        if(3*(i+1))
        printf("%d,",3*i);
        
        i++;
    }while(3*i<=n);
                    
}
int    zhengchu(){
    int a,b,i;
    printf("Input two integers:");
    scanf("%d%d",&a,&b);
    for(i=a;i<b;i++){
        if((i%3==0)&&(i%5==0)){
    printf("%d",i);
    break;
    }    
    }
    
}
int    huashu(){
    int hun, ten, ind, n;
    printf("result is:");
    for( n=100; n<1000; n++ ) 
    {
        hun = n / 100;
        ten = (n-hun*100) / 10;
        ind = n % 10;
        if(n == hun*hun*hun + ten*ten*ten + ind*ind*ind)  
            printf("%d  ", n);
    }
    printf("\n");
   
    return 0;

}

int    zuida(){
   int x,y,max;
   printf("Inputx,y:");
   scanf("%d%d",&x,&y);
   max=GetMax(x,y);
   printf("max=%d\n",max);
   return 0;
}

int    zuidazuixiao(){
    int i, a[2];
    printf("input two counts:");
    for (i = 0; i < 2; i++)
    scanf("%d", &a[i]);
    printf("max is %d\n", fun1(a));
    printf("min is %d", fun2(a));

}
int    paixu(){
    int a[10];
    int i, j, t;
    cout<<"inpur 10 numbers:"<<endl;
    
    for(i = 0; i < 10; i++)//输入a[0]到a[9]
    {
        cin>>a[i];
    }
    cout<<endl;
 
    for(j = 1; j <= 9; j++)//共进行9轮比较
    {
        for(i = 0; i < 10; i++)//在每轮中进行(10-j)次比较
            if(a[i] > a[i+1])//把每两个数中较小的一个移到靠前的地方
            {
                t = a[i];
                a[i] = a[i+1];
                a[i+1] = t;
            }
    }
    cout<<"the sorted numbers:"<<endl;
 
    for(i = 0; i < 10; i++)//输出10个数
    {
        cout<<"a["<<i<<"] = "<<a[i]<<", ";
    }
 
    cout<<endl;
 
    return 0;
}
    



int    zhuanzhi(){
    int i,j,i1,j1,a[101][101],b[101][101];
    printf("please input the number of rows(<=100)\n");
    scanf("%d",&i1);
    printf("please input the number of columns(<=100)\n");
    scanf("%d",&j1);
    printf("please input the element\n");
    for(i=0;i<i1;i++)
        for(j=0;j<j1;j++)
            scanf("%d",&a[i][j]);
    printf("array a:\n");
    for(i=0;i<i1;i++)
    {
        for(j=0;j<j1;j++)
            printf("\t%d",a[i][j]);
        printf("\n");
    }
    for(i=0;i<i1;i++)
        for(j=0;j<j1;j++)
            b[j][i]=a[i][j];
    printf("array b:\n");
    for(i=0;i<j1;i++)
    {
        for(j=0;j<i1;j++)
            printf("\t%d",b[i][j]);
        printf("\n");
    }
    return 0;

}
int    duijiaohe(){
    #define N 3
    int a[N][N],i,j,sum=0;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
scanf("%d",&a[i][j]);
for(i=0;i<N;i++)
sum=sum+(a[i][i]+a[i][N-1-i]);
printf("%d\n",sum);

}
int    dachigeshu(){
    char str[SIZE]={'\0'};   
     int count=0;
printf("plz input the string\n");
gets(str);
puts(str);   
 int length = strlen(str);  
   for (int i=0;i<length;i++)
{
if(str[i]!=' ')
{            count++;  
         while(str[i]!=' '&&str[i]!='\0')
{
i++;
}
}
}
printf("%d\n",count); 
   return 0;

}
int    jinglianbiao(){
    Node* pHead = NULL; //创建链表的头结点,并初始化为NULL
pHead = CreateSList(); //调用CreateSList函数创建单链表
printf("\n开始打印全部节点:\n");
TraversalSList(pHead); //调用TraversalSList函数遍历打印单链表
return 0;

}
Node* CreateSList2()
{
int i = 0;
int length = 0;
int value = 0;
Node* pHead = (Node*)malloc(sizeof(Node));
Node* pTemp = (Node*)malloc(sizeof(Node));
Node* pNew = (Node*)malloc(sizeof(Node));
printf("请输入第1个节点的成员:");
scanf("%d", &pNew->member);
if (0 == pNew->member)
{
printf("第一个节点的成员就是0,故无法创建该链表!\n");
return NULL;
}
 

//while循环,当节点成员不为0时创建
while (0 != pNew->member)
{
if (0 == i)
{
pHead = pNew;
pHead->next = NULL;
pTemp = pHead;
}
else
{
pTemp->next = pNew;
pTemp = pTemp->next;
pTemp->next = NULL;
}

i++;

pNew = (Node*)malloc(sizeof(Node));

printf("请输入第%d个节点的成员:", i + 1);
scanf("%d", &pNew->member);
}

printf("第%d个节点的成员为0,故该链表长度为%d\n", i + 1, i);


return pHead;
}

void TraversalSList2(Node* pHead)
{
Node* pTmp = pHead; //将头节点的指针赋给临时节点pTemp
int i = 0; //循环时打印节点个数的控制变量
while (NULL != pTmp)   //节点p不为空,循环
{
printf("第%d个节点信息:\n", i + 1);
printf("第%d个节点的成员值为:%d\n", i + 1, pTmp->member);
i++;
pTmp = pTmp->next;
}
return;
}

int    donglianbiao(){
    Node* pHead = NULL;
pHead = CreateSList2();
printf("\n开始打印全部节点:\n");
TraversalSList2(pHead);
return 0;

}





int main()
{    
    int a,b,c,d;
    printf("***********************************\n*          小小计算器             *\n*          1 加法                 *\n*          2 减法                 *\n*          3 乘法                 *\n*          4 除法                 *\n*          5 取模运算             *\n*          6 计算圆面积           *\n*          7 判断闰年             *\n*          8 成绩转换             *\n*          9 计算从1到输入数之间的奇数和 (for)*\n*          10 计算从1到输入数之间的偶数和 (while)*\n*          11 输出从1到输入数之间所有3的倍数 (do-while)*\n*          12 求即被3整除又被5整除的数*\n*          13 求水仙花数*\n*          14 求最大值*\n*          15 求最大最小值*\n*          16 冒泡排序*\n*          17 矩阵转置*\n*          18 求对角线和*\n*          19 统计单词个数*\n*          20 静态创建链表*\n*          21 动态创建链表*\n*          22 退出*\n***********************************\n\n");
    while(1){
    printf("Chose an order:");
    scanf("%d",&a);
    switch(a){
        case 1:jiafa();break;
        case 2:jianfa();break; 
        case 3:chengfa();break;
        case 4:chufa();break;
        case 5:weishu();break;
        case 6:juanmianji();break;
        case 7:runnian();break;
        case 8:chengji();break;
        case 9:jishuhe();break;
        case 10:oushuhe();break;
        case 11:beishu();break;
        case 12:zhengchu();break;
        case 13:huashu();break;
        case 14:zuida();break;
        case 15:zuidazuixiao();break;
        case 16:paixu();break;
        case 17:zhuanzhi();break;
        case 18:duijiaohe();break;
        case 19:dachigeshu();break;
        case 20:jinglianbiao();break;
        case 21:donglianbiao();break;
        case 22:return 0;
        
            }
        
        }
    return 0;
 } 

有用的话点个赞吧🥳🥳🥳!

目录
相关文章
|
2月前
|
安全 编译器 C语言
C++入门1——从C语言到C++的过渡
C++入门1——从C语言到C++的过渡
66 2
|
9天前
|
算法 网络协议 数据挖掘
C++是一种功能强大的编程语言,
C++是一种功能强大的编程语言,
39 14
|
2月前
|
存储 C++ UED
【实战指南】4步实现C++插件化编程,轻松实现功能定制与扩展
本文介绍了如何通过四步实现C++插件化编程,实现功能定制与扩展。主要内容包括引言、概述、需求分析、设计方案、详细设计、验证和总结。通过动态加载功能模块,实现软件的高度灵活性和可扩展性,支持快速定制和市场变化响应。具体步骤涉及配置文件构建、模块编译、动态库入口实现和主程序加载。验证部分展示了模块加载成功的日志和配置信息。总结中强调了插件化编程的优势及其在多个方面的应用。
336 69
|
26天前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
48 4
|
15天前
|
算法 编译器 C语言
【C语言】C++ 和 C 的优缺点是什么?
C 和 C++ 是两种强大的编程语言,各有其优缺点。C 语言以其高效性、底层控制和简洁性广泛应用于系统编程和嵌入式系统。C++ 在 C 语言的基础上引入了面向对象编程、模板编程和丰富的标准库,使其适合开发大型、复杂的软件系统。 在选择使用 C 还是 C++ 时,开发者需要根据项目的需求、语言的特性以及团队的技术栈来做出决策。无论是 C 语言还是 C++,了解其优缺点和适用场景能够帮助开发者在实际开发中做出更明智的选择,从而更好地应对挑战,实现项目目标。
43 0
|
2月前
|
C语言 C++
C 语言的关键字 static 和 C++ 的关键字 static 有什么区别
在C语言中,`static`关键字主要用于变量声明,使得该变量的作用域被限制在其被声明的函数内部,且在整个程序运行期间保留其值。而在C++中,除了继承了C的特性外,`static`还可以用于类成员,使该成员被所有类实例共享,同时在类外进行初始化。这使得C++中的`static`具有更广泛的应用场景,不仅限于控制变量的作用域和生存期。
65 10
|
2月前
|
C语言
大学生期末C语言实验(学生成绩和鞍点)
大学生期末C语言实验(学生成绩和鞍点)
223 0
大学生期末C语言实验(学生成绩和鞍点)
|
3月前
|
算法 机器人 C语言
ROS仿真支持C++和C语言
ROS仿真支持C++和C语言
88 1
|
2月前
|
C语言 C++
实现两个变量值的互换[C语言和C++的区别]
实现两个变量值的互换[C语言和C++的区别]
24 0
|
3月前
|
网络协议 C语言
C语言 网络编程(十四)并发的TCP服务端-以线程完成功能
这段代码实现了一个基于TCP协议的多线程服务器和客户端程序,服务器端通过为每个客户端创建独立的线程来处理并发请求,解决了粘包问题并支持不定长数据传输。服务器监听在IP地址`172.17.140.183`的`8080`端口上,接收客户端发来的数据,并将接收到的消息添加“-回传”后返回给客户端。客户端则可以循环输入并发送数据,同时接收服务器回传的信息。当输入“exit”时,客户端会结束与服务器的通信并关闭连接。