先放一张最终成果图
以下为具体的基本功能实现要求,大伙可以自由跳转到需要的地方观看,源码放在了文末
目录
实验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)验收/测试用例
- 加法
输入: 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)实验目的
通过该实验,掌握C中的if控制语句的使用,熟练应用取模运算。
(2)实验内容
编程实现以下功能:
① 在屏幕上输出
***********************************
* 小小计算器 *
* 1 加法 *
* 2 减法 *
* 3 乘法 *
* 4 除法 *
* 5 判断数字的位数 *
* 6 计算圆面积 *
***********************************
② 除法运算时,如果输入的第二个数(除数)为0,给出提示,显示计算结果。
③ 输入一个正整数,要求在三位以内(含三位),求出这个数是几位数,并输出每一位数字。
(3)验收/测试用例
- 除法
输入: 120,6
输出: 除法结果是:20.000000
输入: 120,0
输出: 除数为0,无法进行除法运算
- 判断数字的位数
输入: -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)验收/测试用例
- 判断闰年
输入:2000
输出:2000年是闰年
输入:2013
输出:2000年是平年
- 成绩转换
输入:-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分后,保存到原文件中。
提示:
- 注意d:\my.txt在fopen中如何表示;—> “d:\\my.txt”
- 文件打开方式 —> r+
- 从文件中读取数据,直到文件结束,如何判断文件结束—> feof()
- 将增加10后的数据保存到原文件时,要保证从文件头开始,如何使文件指针回到文件头—> rewind()
- 在写数据时,一定要避免在最后一个数据写完后,再写一个回车,否则下次在操作时可能出错。
实验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);
}
//**********所有的源码文件请在文末自取,此处源码并不完整**************