【C语言】 “小小计算器”基本功能实现

先放一张最终成果图

 以下为具体的基本功能实现要求,大伙可以自由跳转到需要的地方观看,源码放在了文末

目录

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

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

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

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

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

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

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

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

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

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

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

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

​​​​​​​实验13、“小小计算器”输出结果链表存储(13)

以下为源码片段

以下为源码下载链接:



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

(1)实验目的

通过该实验,让学生理解程序和程序设计的含义,掌握C语言的基本概念以及一个C程序的组成要素,熟悉VC开发环境的基本操作,掌握VC环境下开发程序的操作流程,对printf函数的简单使用有个感性认识。

(2)实验内容

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

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

*        小小计算器       *

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

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

(1)实验目的

通过该实验,进一步让学生熟练掌握printf函数的功能,能实现显示不同类型的数据,让学生掌握基本数据类型、变量的命名和常量的定义的概念,能熟练掌握变量和常量使用。

(2)实验内容

编程实现以下功能:

①  在屏幕上输出

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

            *          小小计算器             *

            *          1 加法                 *

            *          2 减法                 *

            *          3 乘法                 *

            *          4 除法                 *

            *          5 取模运算             *

            *          6 计算圆面积           *

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

② 定义几个变量,并赋初值,分别进行加法、加法、乘法、除法、取模运算;

③ 定义常量PI等于3.14, 计算给定半径的圆面积,将计算结果分别赋值给一个double类型和int类型的变量,掌握C中的数据类型转换,并将各个计算结果在屏幕上输出。

(3)验收/测试用例

假设程序中定义变量并赋初始值如下:

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.560 000

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

(1)实验目的

通过该实验,进一步掌握printf和scanf函数的应用,加深对C中数据类型转换的理解。

(2)实验内容

在实验2的基础上,实现用scanf从键盘上输入数据,进行相应的运算,并将结果在屏幕上输出。要求实现加法、减法和取模运算时,输入数据类型为整数,并将运算结果的10进制、8进制和16进制形式输出;乘法、除法运算的输入数据均为float,计算结果分别以小数形式和指数形式输出;求圆面积输入的数据类型为double,正常输出结果,同时还要求在输出要求保留两位小数的结果。

在实验过程中,要求结合课本把scanf和printf的各种形式的格式控制都要练习到,从而掌握这两个函数的使用。

(3)验收/测试用例

  1. 加法

输入:   5, 15

输出:   加法结果的十进制形式是:20

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

加法结果的十六进制形式是:14

  1. 减法

输入:   5, 15

输出:   减法结果的十进制形式是:-10

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

减法结果的十六进制形式是:fffffff6

  1. 取模

输入:   10, 7

输出:   取模结果的十进制形式是:3

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

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

  1. 乘法

输入:   2000.5,6

输出:   乘法结果的小数形式是:12003.000000

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

  1. 除法

输入:   120,6

输出:   除法结果的小数形式是:20.000000

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

  1. 求圆面积

输入:   2

输出:   该圆面积是12.560000

该圆面积保留两位小数的结果是12.56

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

(1)实验目的

通过该实验,掌握C中的if控制语句的使用,熟练应用取模运算。

(2)实验内容

编程实现以下功能:

①  在屏幕上输出

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

            *          小小计算器             *

            *          1 加法                 *

            *          2 减法                 *

            *          3 乘法                 *

            *          4 除法                 *

            *          5 判断数字的位数       *

            *          6 计算圆面积           *

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

② 除法运算时,如果输入的第二个数(除数)为0,给出提示,显示计算结果。

③ 输入一个正整数,要求在三位以内(含三位),求出这个数是几位数,并输出每一位数字。

(3)验收/测试用例

  1. 除法

输入:   120,6

输出:   除法结果是:20.000000

输入:   120,0

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

  1. 判断数字的位数

输入:   -120

输出:   要求输入的数为正整数

输入:   1000

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

输入:   123

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

输入:   78

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

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

(1)实验目的

通过该实验,掌握C中if语句和switch多分枝语句,特别是对switch语句中的break和default的理解。

(2)实验内容

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

② 扩充计算器功能,添加判断输入的年是否是闰年

*          7 判断闰年           *

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

*          8 成绩转换           *

   从键盘上输入一个百分制的成绩,输出对应的等级成绩。

   100 — 90   ——> 优秀

   80  — 89   ——> 良

   70  — 79   ——> 中

   60  — 69   ——> 及格

   0   — 59   ——> 不及格

(3)验收/测试用例

  1. 判断闰年

输入:2000

输出:2000年是闰年

输入:2013

输出:2000年是平年

  1. 成绩转换

输入:-10或101

输出:成绩输入错误

输入:88

输出:良

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

(1)实验目的

通过该实验,使学生掌握C中的循环语句的使用。

(2)实验内容

编程实现以下功能:

①  在屏幕上输出

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

                     小小计算器            

                     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)

(1)实验目的

通过该实验,让学生理解掌握C语言中函数的概念,能够编写带参数的函数,掌握函数参数的概念,能够掌握传递数值传递地址两种参数形式的区别。

(2)实验内容

在实验6的基础上,将小小计算器中的各个操作抽取成函数,在switch语句中,根据输入的操作,调用对应的函数。

扩充小小计算器的功能

  <1> “14 求最大值”

   编写一个带两个参数的函数,该函数返回这两个参数的最大值。输入两个整数,输出他们的最大值。

 <2> “15 求最大最小值”

   编写一个带两个参数的函数,该函数能求出这两个数的最大值和最小值,使得第一个参数存放最大值,第二个参数存放最小值。要求练习传递地址的参数

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

(1)实验目的

通过该实验,使学生理解掌握C语言中数组的概念,能够灵活应用数组。

(2)实验内容

在实验7 “小小计算器”基本功能实现(7)的基础上,扩充以下功能:

<1> “16 冒泡排序”

   从键盘上输入10个数,进行冒泡排序,输出排序结果。

<2> “17 矩阵转置”

从键盘输入一个3X4的整数矩阵,进行转置操作,并将转置结果在屏幕上输出;

<3> “18 求对角线和”

   从键盘输入一个3*3整数矩阵,求主对角线元素和;

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

(1)实验目的

通过该实验,使学生理解掌握C语言中字符串的概念,能够灵活应用数组。

(2)实验内容

在实验8 “小小计算器”基本功能实现(8)的基础上,扩充以下功能:

<1> “19 统计单词个数”

从键盘输入一行字符,单词之间用空格分隔开,统计其中有多少个单词, 并输出结果。

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

(1)实验目的

通过该实验,使学生理解C中指针的概念。

(2)实验内容

在实验8的基础上,将功能“16 冒泡排序”的排序结果用指针形式来输出。扩充功能:

<1> “20 静态创建链表”

静态创建一个包含有4个节点的单链表,输出这个链表的所有数据。节点包含两个域:数据域(int型),指针域。

<2> “21 动态创建链表”

动态创建一个链表,依次从键盘上输入正整数,将输入的整数插入到该链表中,直到输入一个负数为止。最后将该链表中的数据在屏幕上输出。

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

(1)实验目的

通过该实验,使学生掌握C中结构体。

(2)实验内容

扩充小小计算器功能:

<1> “22 学生成绩排序”

  定义学生结构体数组,长度为10,依次输入这十个学生的学号、姓名、成绩,利用冒泡排序,对这10个学生排序,从小到大输出这10个学生的信息,然后输出10个学生的总成绩和平时成绩

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

(1)实验目的

通过该实验,使学生掌握C语言对文件的操作。

(2)实验内容

扩充小小计算器功能:

<1> “23 学生成绩普涨10分”

  d盘根目录下存在一个文本文件my.txt,里面存放了10个学生的成绩,一行一个成绩,从文件中读取学生的成绩,每个成绩都加10分后,保存到原文件中。

提示:

  1. 注意d:\my.txt在fopen中如何表示;—> “d:\\my.txt”
  2. 文件打开方式 —> r+
  3. 从文件中读取数据,直到文件结束,如何判断文件结束—> feof()
  4. 将增加10后的数据保存到原文件时,要保证从文件头开始,如何使文件指针回到文件头—> rewind()
  5. 在写数据时,一定要避免在最后一个数据写完后,再写一个回车,否则下次在操作时可能出错。

​​​​​​​实验13、“小小计算器”输出结果链表存储(13)

(1)实验目的

通过该实验,使学生掌握C中链表。

(2)实验内容

扩充小小计算器功能:

<1> “24 学生成绩链表”

  创建一个链表,按照实验12读取10个学生成绩后,将10个学生的总成绩存入链表,并依次完成链表初始化、遍历、节点查找、插入、删除、清空

以下为源码片段

/*若编译出现错误:
[Error] 'for' loop initial declarations are only allowed in C99 or C11 mode 
请更换C99标准进再行编译*/

#include <stdio.h>
#define PI 3.14		//定义常量PI 

void function_1(void);
void function_2(void);
void function_3(void);
void function_4(void);
void function_5(void);
void function_6(void);
void function_7(void);
void function_8(void);
void function_9(void);
void function_10(void);
void function_11(void);
void function_12(void);
void function_13(void);
int function_14(int a, int b);
void function_15(int *a,int *b);
void function_16(void);
void function_17(void);
void function_18(void);
void function_19(void);

int main(){
	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\
***************************************************************\n\
*          13 求水仙花数                                      *\n\
*          14 求最大值                                        *\n\
*          15 求最大最小值                                    *\n\
*          16 冒泡排序                                        *\n\
*          17 矩阵转置                                        *\n\
*          18 求对角线和                                      *\n\
*          19 统计单词个数                                    *\n\
*          20 静态创建链表                                    *\n\
*          21 动态创建链表                                    *\n\
*          22 学生成绩排序                                    *\n\
*          23 学生成绩普涨10分                                *\n\
*          24 学生成绩链表                                    *\n\
*          25 退出                                            *\n\
***************************************************************");
	label:printf("\n请选择您要进行的运算:"); 
	
	/*int num1, num2, answer; //实验3定义的变量 
	float num3, num4, answer2;
	double R, S;
	
	int value, temp, bits, one_p, two_p, three_p;  //实验4定义的变量 
	int year, score;  //实验5定义的变量 
	long long int num5, answer3, o;   //实验6定义的变量*/
	int max, num1, num2;
	int choose;//getchar只能接收单个字符,不适合此时超越9个的switch选择 
	scanf("%d", &choose);
	switch(choose){
		case 1:
			function_1();
			break;
		case 2:
			function_2();
			break;
		case 3:
			function_3();
			break;
		case 4:
			function_4();
			break;
		case 5:
			function_5();
			break;
		case 6:
			function_6();
			break;
		case 7:
			function_7();
		    break;
		case 8:
			function_8();
			break;
		case 9:
			function_9(); 
			break;
		case 10:
			function_10(); 
			break;
		case 11:
			function_11();
			break;
		case 12:
			function_12();
			break;
		case 13:
			function_13();
			break;
		case 14:
			scanf("%d %d", &num1, &num2);
			max = function_14(num1, num2);
			printf("最大值为:%d",max);
			break;
		case 15:
			scanf("%d %d", &num1, &num2);
			function_15(&num1, &num2);
			printf("最大值为:%d  最小值为:%d ", num1, num2);
			break;
		case 16:
			function_16();
			break;
		case 17:
			function_17();
			break;
		case 18:
			function_18();
			break;
		case 19:
			function_19();
			break;
		case 20:
			//**********所有的源码文件请在文末自取,此处源码并不完整**************
		case 21:
			
		case 22:
			
		case 23:
			
		case 24:
			
		case 25:
			return 0;
		default:
			printf("不存在此结果,请重新输入!!");
			
	}
	goto label;
}

void function_1(){
	int num1, num2, answer;
	scanf("%d %d", &num1, &num2);
	answer=num1+num2;
	printf("加法结果的十进制形式是:%d\n",answer);
	printf("加法结果的八进制形式是:%o\n",answer);
	printf("加法结果的十六进制形式是:%x",answer);
}
void function_2(){
	int num1, num2, answer;
	scanf("%d %d", &num1, &num2);
	answer=num1-num2;
	printf("减法结果的十进制形式是:%d\n",answer);
	printf("减法结果的八进制形式是:%o\n",answer);
	printf("减法结果的十六进制形式是:%x",answer);
}
void function_3(){
	float num3, num4, answer2;
	scanf("%f %f", &num3, &num4);
	answer2=num3*num4;
	printf("乘法结果的小数形式是:%f\n",answer2);
	printf("乘法结果的指数形式是:%e",answer2);
}
void function_4(){
	float num3, num4, answer2;
	scanf("%f %f", &num3, &num4);
	if(num4==0){
		printf("除数不能为0!!");
	}
	else{
		answer2=num3/num4;
		printf("除法结果的小数形式是:%f\n",answer2);
		printf("除法结果的指数形式是:%e",answer2);	
	}
	
	
}
void function_5(){
	int answer, value, temp, bits, one_p, two_p, three_p;
	scanf("%d", &value);
	
	if(value<0){				//比较输入值是否符合标准 
		printf("要求输入的数为正整数");
	}
	if(value>999){
		printf("要要求输入的数为3位以内的正整数");
	}else{
		
		temp=value;					//计算位数(bits) 
		bits=0;
		for(int i=1;i<=3;i++){
			answer=temp%10;
			if(answer!=0){
				bits++;
			}
			temp/=10;
		}
		
		switch(bits){				//计算并显示每一位的值 
			case 1:
				one_p=value%10;
				printf("该数为1位数,个位是%d", one_p);
				break;
			case 2:
				one_p=value%10;
				value/=10;
				two_p=value%10;
				printf("该数为2位数,十位是%d,个位是%d", two_p, one_p);
				break;
			case 3:
				one_p=value%10;
				value/=10;
				two_p=value%10;
				value/=10;
				three_p=value%10;
				printf("该数为3位数,百位是%d, 十位是%d,个位是%d", three_p, two_p, one_p);
				break;
		}
	}
}
void function_6(){
	long long int num5, answer3, o;
	double R, S;
	scanf("%lf", &R);
	S=R*R*PI;
	printf("该圆面积是:%f\n", S);
	printf("该圆面积保留两位小数的结果是:%.2f", S);
}
void function_7(){
	int year;
    scanf("%d",&year);
    if((year%400==0) || (year%4==0&&year%100!=0)){
        printf("%d年是闰年", year);
	}else{
		printf("%d年是平年", year);
  	}	
}
void function_8(){
	int score;
	scanf("%d", &score);
	if(score<=100 && score>=90){
		printf("优秀");
	}
	else if(score<=89 && score>=80){
		 printf("良");
	}
	else if(score<=79 && score>=70){
		 printf("中");
	}
	else if(score<=69 && score>=60){
		 printf("及格");
	}
	else{
		 printf("不及格");
	}
}
void function_9(){
	long long int num5, answer3, o;
	answer3=0;
	scanf("%d", &num5);
	for(o=1; o<=num5; o++){
		if(o % 2 != 0){
			answer3+=o;
		}
	}
	printf("%d", answer3);
}
void function_10(){
	long long int num5, answer3, o;
	answer3=0;
	o=1;
	scanf("%d", &num5);
	while(o<=num5){
		if(o % 2 == 0){
			answer3+=o;
		}
		o++;
	}
	printf("%lld", answer3);
}
void function_11(){
	long long int num5, answer3, o; 
	answer3=0;
	o=1;
	scanf("%d", &num5);
	do{
		if(o % 3== 0){
			answer3+=o;
		}
		o++;
	}while(o<=num5);
	printf("%lld", answer3);	
}
void function_12(){
	long long int num5, o;
	scanf("%d%d", &o, &num5);
	do{
		if(o % 3 == 0 && o % 5 == 0){
			printf("%lld ", o);
			break;
		}
		o++;
	}while(o<=num5);
	
}
void function_13(){
	int o, one_p, two_p, three_p;
	for( o=100; o<1000; o++ )
   	{
		three_p = o / 100;
        two_p = (o-three_p*100) / 10;
        one_p = o % 10;
        if(o == three_p*three_p*three_p + two_p*two_p*two_p + one_p*one_p*one_p){
			printf("%d  ", o);
  		}
   	}
}
int function_14(int num1, int num2){
	if(num1>num2){
		return num1;
	}
	return num2;
}
void function_15(int *num1, int *num2){
	if(*num1 < *num2){
		int temp = *num1;
		*num1 = *num2;
		*num2 = temp;
	}
}
void function_16(){
	int num[10]={};
	for(int i=0; i<10; i++){			//输入十个数据 
		scanf("%d", &num[i]);
	}
	
	for(int i=9; i>0; i--){				//冒泡排序 
		for(int j=0; j<i; j++){
			if(num[j]>num[j+1]){
				int temp = num[j];
				num[j]=num[j+1];
				num[j+1]=temp;
			}
		}
	}
	
	for(int i=0; i<10; i++){			//输出排序后的十个数据 
		printf("%d ", num[i]);
	}
}
void function_17(){
	int num[4][3]={};
	for(int i=0; i<3; i++){			//输入 
		for(int j=0; j<4; j++){
			scanf("%d", &num[j][i]);
		}
	}
	for(int i=0; i<4; i++){			//输出
		printf("\n");		 
		for(int j=0; j<3; j++){
			printf("%d ", num[i][j]);
		}
	}
}
void function_18(){
	int num[3][3]={};
	for(int i=0; i<3; i++){			//输入 
		for(int j=0; j<3; j++){
			scanf("%d", &num[i][j]);
		}
	}
	printf("%d", num[0][0]+num[1][1]+num[2][2]);
}
void function_19(){
	char str[999],c;
	int num=0, word=0;
	
	fflush(stdin);				//清空缓存区,避免scanf遗留的'\n'作为gets的输入值 
	gets(str);
	for(int i=0; str[i]!='\0'; i++)
	{
		if(str[i]==' ')           
			word=0;
		else if(word==0)    
		{
			word=1;
			num++;
		}
	}
	printf("单词总数为:%d. ",num);
}

//**********所有的源码文件请在文末自取,此处源码并不完整**************

******所有的源码文件请在文末自取,此处源码并不完整*********

以下为源码下载链接:

C语言基础练习小小计算器源码总和-其它文档类资源-CSDN文库  

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幻酌

爸爸真帅!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值