C/C++程序设计实验报告综合作业 | 小小计算器

本文整理自博主本科大一《C/C++程序设计》专业课的课内实验报告,适合C语言初学者们学习、练习。

编译器:gcc 10.3.0

----

注:

1.虽然课程名为C++程序设计,但实际上当时校内该课的内容大部分其实都是C语言,C++的元素最多可能只是体现在输入输出。

2.博主当时给出的实验代码可能并不是最优解,这里只是整理并未重编,因此希望各位前来学习的小伙伴们注意辨别,独立思考。

目录

一、实验目的

二、实验内容

1、菜单

2、 加减乘除运算

3、数位位数计算

4、 圆形面积计算

5、判断闰年

6、成绩转换

7、计算从1到输入数区间内的奇数和

8、计算从1到输入数区间内的偶数和

9、输出从1到输入数之间所有3的倍数

10、求区间内既被3整除又被5整除的数 

11、求水仙花数

12、求两个数的最大值

13、求两个数的最大值与最小值

14、冒泡排序

15、矩阵转置

16、求对角线和

17、统计单词个数

18、创建静态链表

(1)创建学生结构体

(2)创建静态链表

19、创建动态链表

(1)定义相关的结构体类型

(2)创建动态链表 

(3)输出链表与释放链表

20、结构体排序

(1)定义结构体

(2)结构体排序(冒泡排序)

21、main函数流程控制逻辑

三、完整源码

四、运行结果

功能11-15

功能16-20 

功能21-22

五、实验总结


一、实验目的

  1. 掌握设计开发一个小程序的流程。
  2. 能够将本学期各个重要知识点进行综合运用

二、实验内容

1、菜单

void menu(){
	cout<<"  ******************************************"<<endl;
	cout<<"  *             【小小计算器】             *"<<endl;
	cout<<"  *    1 加法                              *"<<endl;
	cout<<"  *    2 减法                              *"<<endl;
	cout<<"  *    3 乘法                              *"<<endl;
	cout<<"  *    4 除法                              *"<<endl;
	cout<<"  *    5 判断数字的位数                    *"<<endl;
	cout<<"  *    6 计算圆面积                        *"<<endl;
	cout<<"  *    7 判断闰年                          *"<<endl;
	cout<<"  *    8 成绩转换                          *"<<endl;
	cout<<"  *    9 计算从1到输入数间奇数和           *"<<endl;
	cout<<"  *    10 计算从1到输入数间偶数和          *"<<endl;
	cout<<"  *    11 输出从1到输入数之间所有3的倍数   *"<<endl;
	cout<<"  *    12 求既被3整除又被5整除的数         *"<<endl;
	cout<<"  *    13 求水仙花数                       *"<<endl;
	cout<<"  *    14 求最大值                         *"<<endl;
	cout<<"  *    15 求最大值与最小值                 *"<<endl;
	cout<<"  *    16 指针冒泡排序                     *"<<endl;
	cout<<"  *    17 矩阵转置                         *"<<endl;
	cout<<"  *    18 求对角线和                       *"<<endl;
	cout<<"  *    19 统计单词个数                     *"<<endl;
	cout<<"  *    20 静态创建链表                     *"<<endl;
	cout<<"  *    21 动态创建链表                     *"<<endl;
	cout<<"  *    22 学生成绩排序                     *"<<endl;
	cout<<"  ******************************************"<<endl;
	cout<<endl<<endl;
}

2、 加减乘除运算

对应菜单功能1、2、3、4。

int add(int x,int y){
	return x+y;
}
int sub(int x,int y){
	return x-y;
}
float mul(float x,float y){
	return x*y;
}
float div(float x,float y){
	return x/y;
}

注意除法运算除数不能为0,对于除数的判断逻辑加在了调用方即main函数中。

3、数位位数计算

对应菜单功能5。

int weishu(int x){
	int ge,shi,bai;
	ge=x%10;
	shi=x/10%10;
	bai=x/100%10;
	if(bai!=0){
		printf("个位:%d\t",ge);
		printf("十位:%d\t",shi);
		printf("百位:%d\n",bai);
		cout<<"这个数的位数是:";
		return 3;
		
	}else if(bai==0 && shi!=0){
		printf("个位:%d\t",ge);
		printf("十位:%d\n",shi);
		cout<<"这个数的位数是:";
		return 2;
	}else{
		printf("个位:%d\n",ge);
		cout<<"这个数的位数是:";
		return 1;
	}
}

4、 圆形面积计算

对应菜单功能6。

double area(double x){
	return PI*x*x;
}

5、判断闰年

对应菜单功能7。

void year(int x){
	if((x%4 == 0 && x%100 != 0) || x%400 == 0){
		printf("%d是闰年!",x);
	}else{
		printf("%d不是闰年!",x);
	}
}

6、成绩转换

对应菜单功能8。

void score(int x){
	while(x<0 || x>100){
		cout<<"成绩输入错误!"<<endl;
		cout<<"请再输入一个成绩:";
	}
	switch (x/10) {
	case 10:
	case 9:
		cout<<"优秀"<<endl;
		break;
	case 8:
		cout<<"良"<<endl;
		break;
	case 7:
		cout<<"中"<<endl;
		break;
	case 6:
		cout<<"及格"<<endl;
		break;
		default:
			cout<<"不及格"<<endl;
			break;
	}	
}

7、计算从1到输入数区间内的奇数和

对应菜单功能9。

int oddSum(int x){
	int sum=0;
	int i;
	for(i=1;i<=x;i+=2){
		sum+=i;
	}
	return sum;
}

8、计算从1到输入数区间内的偶数和

对应菜单功能10。 

int evenSum(int x){
	int sum=0;
	int j=2;
	while(j<=x){
		sum+=j;
		j+=2;
	}
	return sum;
}

9、输出从1到输入数之间所有3的倍数

对应菜单功能11。

void threeMul(int x){
	int i=1;
	do{
		if(i%3==0){
			cout<<i<<"  ";
		}
		i++;
	}while(i<=x);
}

10、求区间内既被3整除又被5整除的数 

对应菜单功能12。

void Number(int x,int y){
	int i;
	for(i=x;i<=y;i++){
		if(i%3==0 && i%5==0){
			cout<<i<<endl;
			break;
		}
	}
}

11、求水仙花数

对应菜单功能13。

void flowerN(){
	int ge,shi,bai;
	int i;
	for(i=100;i<1000;i++){
		ge=i%10;
		shi=i/10%10;
		bai=i/100%10;
		if(i==ge*ge*ge+shi*shi*shi+bai*bai*bai){
			cout<<i<<"  ";
		}
	}	
}

12、求两个数的最大值

对应菜单功能14。 

// main函数中直接调用库函数,输出最大值
cout<<"最大的数是: "<<max(p,q)<<endl;

13、求两个数的最大值与最小值

对应菜单功能15。

void maxmin(double x,double y){
	double p,q;
	p=max(x,y);
	q=min(x,y);
	x=p;
	y=q;
	printf("较大值为:%4.2f\n",x);
	printf("较小值为:%4.2f\n",y);
}

14、冒泡排序

对应菜单功能16。

void bubbleSort(int *p,int len){
	int xch;
	for(int i=0;i<len-1;i++){
		xch = 0;
		for(int j=0;j<len-1-i;j++){
			if( *(p+j) < *(p+j+1) ){
				int tmp;
				tmp = *(p+j);
				*(p+j) = *(p+j+1);
				*(p+j+1) = tmp;
				xch = 1;
			}
		}
		if(!xch){
			break;
		}
	}
	for(int i=0;i<len;i++){
		cout<<p[i]<<'\t';
	}
}

15、矩阵转置

对应菜单功能17。

// main函数中逻辑
int a1[3][4];
int b1[4][3];
for(int i=0;i<3;i++){
	for(int j=0;j<4;j++){
    	cin>>a1[i][j];
    }
}
for(int i=0;i<3;i++){
	for(int j=0;j<4;j++){
		b1[j][i]=a1[i][j];
	}
}
for(int i=0;i<4;i++){
	for(int j=0;j<3;j++){
		cout<<b1[i][j]<<'\t';
    }
	cout<<endl;
}

16、求对角线和

对应菜单功能18。

void asum(int a[][3],int len){
	int sum = 0;
	for(int i=0;i<len;i++){
		for(int j=0;j<3;j++){
			if(i==j){
				sum+=a[i][j];
			}
		}
	}
	cout<<"主对角线的元素和sum= "<<sum;
	cout<<endl;
}

17、统计单词个数

对应菜单功能19。

void countWord(char str[]){    //19
	int num = 0;
	int word = 0;
	for(int i=0;str[i]!='\0';i++){
		if(!((str[i]>='a' && str[i]<='z')||(str[i]>='A' && str[i]<='Z'))){
			word=0;
		}else if(word==0){
			word=1;
			num++;
		}
	}
	cout<<endl;
	cout<<"共有 "<<num<<" 个单词。"<<endl;
}

18、创建静态链表

对应菜单功能20。

(1)创建学生结构体

typedef struct Student{
	int sno;
	struct Student *next;
}STU;

(2)创建静态链表

STU stu1,stu2,stu3,stu4;
STU *head,*t;
stu1.sno = 101; stu2.sno = 102;
stu3.sno = 103; stu4.sno = 104;
head = &stu1;
stu1.next = &stu2; stu2.next = &stu3;
stu3.next = &stu4; stu4.next = NULL;
t = head;
int i;
i = 0;
do{
    i++;
    printf("stu%d.sno = %d \n",i,t->sno);
    t = t->next;
}while(t != NULL);

19、创建动态链表

对应菜单功能21。

(1)定义相关的结构体类型

struct ZH *Create();
void Shu(struct ZH *head2);
void Fang(struct ZH **head2);
struct ZH{
	int z;
	struct ZH *next;
};

(2)创建动态链表 

struct ZH *Create(){
	struct ZH *head2=NULL,*p,*p1;
	p=(struct ZH*)malloc(LEN);
	scanf("%d",&p->z );
	p->next =NULL;
	while(p->z >= 0){
		if(head2==NULL){
			head2=p;
			p1=p;
		}else{
			p1->next =p;
			p1=p;
		}
		p=(struct ZH*)malloc(LEN);
		scanf("%d",&p->z);
		p->next =NULL;
	}
	p1->next =NULL;
	return head2;
}

(3)输出链表与释放链表

//输出链表
void Shu(struct ZH *head2){
	struct ZH *p;
	p=head2;
	while(p!=NULL){
		printf("%3d",p->z );
		p=p->next ;
	}
	putchar('\n');
}
//释放链表
void Fang(struct ZH **head2){
	struct ZH *p;
	while(*head2!=NULL){
		p=*head2;
		*head2=(*head2)->next ;
		free(p);
	}
	*head2=NULL;
}

20、结构体排序

对应菜单功能22。

(1)定义结构体

typedef struct Student{
	int sno;
	struct Student *next;
}STU;
struct stu {
	int sno;
	char name[20];
	float grade;
}Stu[10]{
	{101,"AAA",80},
	{102,"BBB",99},
	{103,"CSS",50},
	{104,"FTP",76.5},
	{105,"DNS",90.5},
	{106,"RMB",34},
	{107,"FBI",89},
	{108,"NBA",78},
	{109,"UFO",77},
	{110,"ERF",61}
};
typedef struct stu STUX;

(2)结构体排序(冒泡排序)

void bubbleSort2(STUX *p,int len){
	void print(STUX x);
	int xch;
	for(int i=0;i<len-1;i++){
		xch = 0;
		for(int j=0;j<len-1-i;j++){
			if( (p+j)->grade > (p+1+j)->grade ){
				struct stu tmp;
				tmp = *(p+j);
				*(p+j) = *(p+j+1);
				*(p+j+1) = tmp;
				xch = 1;
			}
		}
		if(!xch){
			break;
		}
	}
	for(int i=0;i<len;i++){
		print(Stu[i]);
		cout<<endl;
	}
}

21、main函数流程控制逻辑

int main(){
	int a,b;
	float c,d;
	int flag=0;//判断是否退出程序
	int N;
	
	cout<<"【小小计算器】请选择模式 输入模式前序号>: ";


	do{
		scanf("%d",&N);
		cout<<endl;
		switch (N) {
		case 1://加法运算
			int addResult;
			cout<<"1、加法--请输入两个整数a、b:"<<endl;
			cin>>a>>b;
			addResult=add(a,b);
			cout<<"a+b= ";	
			printf("%d (dec)",addResult);
			printf("  %o (otc)",addResult);
			printf("  %x (hex)\n\n",addResult);
			break;
		case 2://减法运算
			int subResult;
			cout<<"2、减法--请输入两个整数a、b:"<<endl;
			cin>>a>>b;
			subResult=sub(a,b);
			cout<<"a-b= ";	
			printf("%d (dec)",subResult);
			printf("  %o (otc)",subResult);
			printf("  %x (hex)\n\n",subResult);
			break;
		case 3://乘法运算
			float mulResult;
			cout<<"3、乘法--请输入两个实数c、d:"<<endl;
			cin>>c>>d;
			mulResult=mul(c,d);
			cout<<"c*d= ";	
			printf("%f (小数)\t",mulResult);
			printf("%e (指数)\n\n",mulResult);
			break;
		case 4://除法
			float divResult;
			cout<<"4、除法--请输入两个实数c、d:"<<endl;
			cin>>c>>d;
			while(d==0){
				cout<<"除数为0,无法进行除法运算!!"<<endl;
				cout<<"请再输入:d= ";
				cin>>b;
			}
			divResult=div(c,d);
			cout<<"c÷d= ";	
			printf("%f (小数)\t",divResult);
			printf("%e (指数)\n\n",divResult);
			break;
		case 5://计算位数
			int n;
			cout<<"5、判断数字的位数--输入一个正整数n(0~999):";
			cin>>n;
			cout<<weishu(n)<<endl;
			break;
		case 6://计算圆面积
			double r;
			cout<<"6、计算圆面积--请输入圆的半径r:  ";
			cin>>r;
			printf("面积为:%f\n",area(r));
			printf("保留两位小数:%6.2f\n\n\n",area(r));
			break;
		case 7://判断闰年
			int nian;
			cout<<"7、判断闰年--请输入一个年份:";
			cin>>nian;
			year(nian);
			break;
		case 8://成绩转换
			int grade;
			cout<<"8、成绩转换--请输入一个百分制成绩(0~100):";
			cin>>grade;
			score(grade);
			break;
		case 9://计算从1到输入数间奇数和 
			int oN;
			cout<<"9、计算从1到n之间所有的奇数和--请输入一个数n:";
			cin>>oN;
			cout<<"1到"<<oN<<"之间的奇数和为 "<<oddSum(oN)<<endl;
			break;
		case 10://计算偶数和
			int eN;
			cout<<"10、计算从1到n之间所有的偶数和--请输入一个数n:";
			cin>>eN;
			cout<<"1到"<<eN<<"之间的偶数和为 "<<evenSum(eN)<<endl;
			break;
		case 11://输出从1到输入数之间所有3的倍数
			int n_3;
			cout<<"11、输出1到n间所有3的倍数--请输入一个正整数n:";
			cin>>n_3;
			threeMul(n_3);
			cout<<endl;
			break;
		case 12://求既被3整除又被5整除的数
			int a,b;
			cout<<"12、输出n1、n2两数间第一个既被3整除又被5整除的数\n请输入两个数:";
			cin>>a>>b;
			cout<<"这个数为: ";
			Number(a,b);
			break;
		case 13://求水仙花数
			cout<<"13、计算100-1000间所有的水仙花数: "<<endl;
			flowerN();
			cout<<endl;
			break;
		case 14://最大值
			double p,q;
			cout<<"14、计算最大值--请输入两个实数: ";
			cin>>p>>q;
			cout<<"最大的数是: "<<max(p,q)<<endl;
			break;
		case 15://求最大值最小值
			double n1,n2;
			cout<<"15、计算最大值与最小值--请输入两个实数:";
			cin>>n1>>n2;
			maxmin(n1,n2);	
			break;
		case 16://冒泡排序
			int c[5];
			int *w;
			w = c;
			for(int i=0;i<5;i++){
				cin>>c[i];
			}
			bubbleSort(w,5);
			break;
		case 17://矩阵转置
			int a1[3][4];
			int b1[4][3];
			for(int i=0;i<3;i++){
				for(int j=0;j<4;j++){
					cin>>a1[i][j];
				}
			}
			for(int i=0;i<3;i++){
				for(int j=0;j<4;j++){
					b1[j][i]=a1[i][j];
				}
			}
			for(int i=0;i<4;i++){
				for(int j=0;j<3;j++){
					cout<<b1[i][j]<<'\t';
				}
				cout<<endl;
			}
			break;
			
		case 18://求对角线和
			int x[3][3];
			cout<<"18、求对角线和--请输入一个3*3的整数矩阵:";
			for(int i=0;i<3;i++){
				for(int j=0;j<3;j++){
					cin>>x[i][j];
				}
			}
			asum(x,3);
			break;
			
		case 19://统计单词个数
			char str[101];
			cout<<"19、统计单词个数--请输入一行单词,单词间用空格分隔开:"<<endl;
			fflush(stdin);
			gets(str);
			countWord(str);
			cout<<endl;
			break;
			
		case 20://静态链表
			STU stu1,stu2,stu3,stu4;
			STU *head,*t;
			stu1.sno = 101; stu2.sno = 102;
			stu3.sno = 103; stu4.sno = 104;
			head = &stu1;
			stu1.next = &stu2; stu2.next = &stu3;
			stu3.next = &stu4; stu4.next = NULL;
			t = head;
			int i;
			i = 0;
			do{
				i++;
				printf("stu%d.sno = %d \n",i,t->sno);
				t = t->next;
			}while(t != NULL);
			break;
			
		case 21://创建动态链表
			cout << "21、输出动态链表--从键盘上输入正整数,当输入一个负数后将链表中的数据输出。" << endl;
			struct ZH *head2,*pointer;
			head2=Create();
			Shu(head2);
			pointer = head2;
			while(pointer != NULL){
				pointer = pointer->next;
			}
			putchar('\n');
			Fang(&head2);
			break;
				
		case 22://结构体排序
			cout << "22、按照10位同学的分数进行排序";
			STUX *s;
			s = Stu;
			bubbleSort2(s,10);
			float s_sum;
			s_sum = 0;
			for(int i=0;i<10;i++){
				s_sum += Stu[i].grade; 
			}
			float s_avg;
			s_avg = s_sum / 10;
			cout << "10位学生的总成绩为 " << s_sum << endl;
			cout << "10位学生的平均成绩为 " << s_avg << endl;
			break;
			
		default:
			cout<<"▲请选择正确的模式序号!!!";
			break;
		}
		char judge;
		cout<<"..............................."<<endl;
		cout<<"【是否退出程序?】\n▲按(Y)退出程序,按其它任意键继续..."<<endl;
		cin>>judge;
		if(judge=='Y'){
			flag=1;
			break;
		}else{
			cout<<"▲请重新选择模式:";
		}	
	}while(flag==0);
	return 0;
}

三、完整源码

#include<iostream>
#include<string.h>
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(struct ZH)
#define PI 3.14
using namespace std;

int add(int x,int y){
	return x+y;
}
int sub(int x,int y){
	return x-y;
}
float mul(float x,float y){
	return x*y;
}
float div(float x,float y){
	return x/y;
}
int weishu(int x){
	int ge,shi,bai;
	ge=x%10;
	shi=x/10%10;
	bai=x/100%10;
	if(bai!=0){
		printf("个位:%d\t",ge);
		printf("十位:%d\t",shi);
		printf("百位:%d\n",bai);
		cout<<"这个数的位数是:";
		return 3;
		
	}else if(bai==0 && shi!=0){
		printf("个位:%d\t",ge);
		printf("十位:%d\n",shi);
		cout<<"这个数的位数是:";
		return 2;
	}else{
		printf("个位:%d\n",ge);
		cout<<"这个数的位数是:";
		return 1;
	}
}
double area(double x){
	return PI*x*x;
}
void year(int x){
	if((x%4 == 0 && x%100 != 0) || x%400 == 0){
		printf("%d是闰年!",x);
	}else{
		printf("%d不是闰年!",x);
	}
}
void score(int x){
	while(x<0 || x>100){
		cout<<"成绩输入错误!"<<endl;
		cout<<"请再输入一个成绩:";
	}
	switch (x/10) {
	case 10:
	case 9:
		cout<<"优秀"<<endl;
		break;
	case 8:
		cout<<"良"<<endl;
		break;
	case 7:
		cout<<"中"<<endl;
		break;
	case 6:
		cout<<"及格"<<endl;
		break;
		default:
			cout<<"不及格"<<endl;
			break;
	}	
}
int oddSum(int x){
	int sum=0;
	int i;
	for(i=1;i<=x;i+=2){
		sum+=i;
	}
	return sum;
}
int evenSum(int x){
	int sum=0;
	int j=2;
	while(j<=x){
		sum+=j;
		j+=2;
	}
	return sum;
}
void threeMul(int x){
	int i=1;
	do{
		if(i%3==0){
			cout<<i<<"  ";
		}
		i++;
	}while(i<=x);
}
void Number(int x,int y){
	int i;
	for(i=x;i<=y;i++){
		if(i%3==0 && i%5==0){
			cout<<i<<endl;
			break;
		}
	}
}
void flowerN(){
	int ge,shi,bai;
	int i;
	for(i=100;i<1000;i++){
		ge=i%10;
		shi=i/10%10;
		bai=i/100%10;
		if(i==ge*ge*ge+shi*shi*shi+bai*bai*bai){
			cout<<i<<"  ";
		}
	}	
}
void maxmin(double x,double y){
	double p,q;
	p=max(x,y);
	q=min(x,y);
	x=p;
	y=q;
	printf("较大值为:%4.2f\n",x);
	printf("较小值为:%4.2f\n",y);
}
void bubbleSort(int *p,int len){
	int xch;
	for(int i=0;i<len-1;i++){
		xch = 0;
		for(int j=0;j<len-1-i;j++){
			if( *(p+j) < *(p+j+1) ){
				int tmp;
				tmp = *(p+j);
				*(p+j) = *(p+j+1);
				*(p+j+1) = tmp;
				xch = 1;
			}
		}
		if(!xch){
			break;
		}
	}
	for(int i=0;i<len;i++){
		cout<<p[i]<<'\t';
	}
}
void asum(int a[][3],int len){
	int sum = 0;
	for(int i=0;i<len;i++){
		for(int j=0;j<3;j++){
			if(i==j){
				sum+=a[i][j];
			}
		}
	}
	cout<<"主对角线的元素和sum= "<<sum;
	cout<<endl;
}
void countWord(char str[]){    //19
	int num = 0;
	int word = 0;
	for(int i=0;str[i]!='\0';i++){
		if(!((str[i]>='a' && str[i]<='z')||(str[i]>='A' && str[i]<='Z'))){
			word=0;
		}else if(word==0){
			word=1;
			num++;
		}
	}
	cout<<endl;
	cout<<"共有 "<<num<<" 个单词。"<<endl;
}

typedef struct Student{
	int sno;
	struct Student *next;
}STU;
struct stu {
	int sno;
	char name[20];
	float grade;
}Stu[10]{
	{101,"AAA",80},
	{102,"BBB",99},
	{103,"CSS",50},
	{104,"FTP",76.5},
	{105,"DNS",90.5},
	{106,"RMB",34},
	{107,"FBI",89},
	{108,"NBA",78},
	{109,"UFO",77},
	{110,"ERF",61}
};
typedef struct stu STUX;

void print(STUX x){
	cout << "学号:" << x.sno << endl;
	cout << "姓名:" << x.name << endl;
	cout << "分数:" << x.grade << endl;
}
void bubbleSort2(STUX *p,int len){
	void print(STUX x);
	int xch;
	for(int i=0;i<len-1;i++){
		xch = 0;
		for(int j=0;j<len-1-i;j++){
			if( (p+j)->grade > (p+1+j)->grade ){
				struct stu tmp;
				tmp = *(p+j);
				*(p+j) = *(p+j+1);
				*(p+j+1) = tmp;
				xch = 1;
			}
		}
		if(!xch){
			break;
		}
	}
	for(int i=0;i<len;i++){
		print(Stu[i]);
		cout<<endl;
	}
}

struct ZH *Create();
void Shu(struct ZH *head2);
void Fang(struct ZH **head2);
struct ZH{
	int z;
	struct ZH *next;
};

void menu(){
	cout<<"  ******************************************"<<endl;
	cout<<"  *             【小小计算器】             *"<<endl;
	cout<<"  *    1 加法                              *"<<endl;
	cout<<"  *    2 减法                              *"<<endl;
	cout<<"  *    3 乘法                              *"<<endl;
	cout<<"  *    4 除法                              *"<<endl;
	cout<<"  *    5 判断数字的位数                    *"<<endl;
	cout<<"  *    6 计算圆面积                        *"<<endl;
	cout<<"  *    7 判断闰年                          *"<<endl;
	cout<<"  *    8 成绩转换                          *"<<endl;
	cout<<"  *    9 计算从1到输入数间奇数和           *"<<endl;
	cout<<"  *    10 计算从1到输入数间偶数和          *"<<endl;
	cout<<"  *    11 输出从1到输入数之间所有3的倍数   *"<<endl;
	cout<<"  *    12 求既被3整除又被5整除的数         *"<<endl;
	cout<<"  *    13 求水仙花数                       *"<<endl;
	cout<<"  *    14 求最大值                         *"<<endl;
	cout<<"  *    15 求最大值与最小值                 *"<<endl;
	cout<<"  *    16 指针冒泡排序                     *"<<endl;
	cout<<"  *    17 矩阵转置                         *"<<endl;
	cout<<"  *    18 求对角线和                       *"<<endl;
	cout<<"  *    19 统计单词个数                     *"<<endl;
	cout<<"  *    20 静态创建链表                     *"<<endl;
	cout<<"  *    21 动态创建链表                     *"<<endl;
	cout<<"  *    22 学生成绩排序                     *"<<endl;
	cout<<"  ******************************************"<<endl;
	cout<<endl<<endl;
}

int main(){
	int a,b;
	float c,d;
	int flag=0;//判断是否退出程序
	int N;
	
	cout<<"【小小计算器】请选择模式 输入模式前序号>: ";


	do{
		scanf("%d",&N);
		cout<<endl;
		switch (N) {
		case 1://加法运算
			int addResult;
			cout<<"1、加法--请输入两个整数a、b:"<<endl;
			cin>>a>>b;
			addResult=add(a,b);
			cout<<"a+b= ";	
			printf("%d (dec)",addResult);
			printf("  %o (otc)",addResult);
			printf("  %x (hex)\n\n",addResult);
			break;
		case 2://减法运算
			int subResult;
			cout<<"2、减法--请输入两个整数a、b:"<<endl;
			cin>>a>>b;
			subResult=sub(a,b);
			cout<<"a-b= ";	
			printf("%d (dec)",subResult);
			printf("  %o (otc)",subResult);
			printf("  %x (hex)\n\n",subResult);
			break;
		case 3://乘法运算
			float mulResult;
			cout<<"3、乘法--请输入两个实数c、d:"<<endl;
			cin>>c>>d;
			mulResult=mul(c,d);
			cout<<"c*d= ";	
			printf("%f (小数)\t",mulResult);
			printf("%e (指数)\n\n",mulResult);
			break;
		case 4://除法
			float divResult;
			cout<<"4、除法--请输入两个实数c、d:"<<endl;
			cin>>c>>d;
			while(d==0){
				cout<<"除数为0,无法进行除法运算!!"<<endl;
				cout<<"请再输入:d= ";
				cin>>b;
			}
			divResult=div(c,d);
			cout<<"c÷d= ";	
			printf("%f (小数)\t",divResult);
			printf("%e (指数)\n\n",divResult);
			break;
		case 5://计算位数
			int n;
			cout<<"5、判断数字的位数--输入一个正整数n(0~999):";
			cin>>n;
			cout<<weishu(n)<<endl;
			break;
		case 6://计算圆面积
			double r;
			cout<<"6、计算圆面积--请输入圆的半径r:  ";
			cin>>r;
			printf("面积为:%f\n",area(r));
			printf("保留两位小数:%6.2f\n\n\n",area(r));
			break;
		case 7://判断闰年
			int nian;
			cout<<"7、判断闰年--请输入一个年份:";
			cin>>nian;
			year(nian);
			break;
		case 8://成绩转换
			int grade;
			cout<<"8、成绩转换--请输入一个百分制成绩(0~100):";
			cin>>grade;
			score(grade);
			break;
		case 9://计算从1到输入数间奇数和 
			int oN;
			cout<<"9、计算从1到n之间所有的奇数和--请输入一个数n:";
			cin>>oN;
			cout<<"1到"<<oN<<"之间的奇数和为 "<<oddSum(oN)<<endl;
			break;
		case 10://计算偶数和
			int eN;
			cout<<"10、计算从1到n之间所有的偶数和--请输入一个数n:";
			cin>>eN;
			cout<<"1到"<<eN<<"之间的偶数和为 "<<evenSum(eN)<<endl;
			break;
		case 11://输出从1到输入数之间所有3的倍数
			int n_3;
			cout<<"11、输出1到n间所有3的倍数--请输入一个正整数n:";
			cin>>n_3;
			threeMul(n_3);
			cout<<endl;
			break;
		case 12://求既被3整除又被5整除的数
			int a,b;
			cout<<"12、输出n1、n2两数间第一个既被3整除又被5整除的数\n请输入两个数:";
			cin>>a>>b;
			cout<<"这个数为: ";
			Number(a,b);
			break;
		case 13://求水仙花数
			cout<<"13、计算100-1000间所有的水仙花数: "<<endl;
			flowerN();
			cout<<endl;
			break;
		case 14://最大值
			double p,q;
			cout<<"14、计算最大值--请输入两个实数: ";
			cin>>p>>q;
			cout<<"最大的数是: "<<max(p,q)<<endl;
			break;
		case 15://求最大值最小值
			double n1,n2;
			cout<<"15、计算最大值与最小值--请输入两个实数:";
			cin>>n1>>n2;
			maxmin(n1,n2);	
			break;
		case 16://冒泡排序
			int c[5];
			int *w;
			w = c;
			for(int i=0;i<5;i++){
				cin>>c[i];
			}
			bubbleSort(w,5);
			break;
		case 17://矩阵转置
			int a1[3][4];
			int b1[4][3];
			for(int i=0;i<3;i++){
				for(int j=0;j<4;j++){
					cin>>a1[i][j];
				}
			}
			for(int i=0;i<3;i++){
				for(int j=0;j<4;j++){
					b1[j][i]=a1[i][j];
				}
			}
			for(int i=0;i<4;i++){
				for(int j=0;j<3;j++){
					cout<<b1[i][j]<<'\t';
				}
				cout<<endl;
			}
			break;
			
		case 18://求对角线和
			int x[3][3];
			cout<<"18、求对角线和--请输入一个3*3的整数矩阵:";
			for(int i=0;i<3;i++){
				for(int j=0;j<3;j++){
					cin>>x[i][j];
				}
			}
			asum(x,3);
			break;
			
		case 19://统计单词个数
			char str[101];
			cout<<"19、统计单词个数--请输入一行单词,单词间用空格分隔开:"<<endl;
			fflush(stdin);
			gets(str);
			countWord(str);
			cout<<endl;
			break;
			
		case 20://静态链表
			STU stu1,stu2,stu3,stu4;
			STU *head,*t;
			stu1.sno = 101; stu2.sno = 102;
			stu3.sno = 103; stu4.sno = 104;
			head = &stu1;
			stu1.next = &stu2; stu2.next = &stu3;
			stu3.next = &stu4; stu4.next = NULL;
			t = head;
			int i;
			i = 0;
			do{
				i++;
				printf("stu%d.sno = %d \n",i,t->sno);
				t = t->next;
			}while(t != NULL);
			break;
			
		case 21://创建动态链表
			cout << "21、输出动态链表--从键盘上输入正整数,当输入一个负数后将链表中的数据输出。" << endl;
			struct ZH *head2,*pointer;
			head2=Create();
			Shu(head2);
			pointer = head2;
			while(pointer != NULL){
				pointer = pointer->next;
			}
			putchar('\n');
			Fang(&head2);
			break;
				
		case 22://结构体排序
			cout << "22、按照10位同学的分数进行排序";
			STUX *s;
			s = Stu;
			bubbleSort2(s,10);
			float s_sum;
			s_sum = 0;
			for(int i=0;i<10;i++){
				s_sum += Stu[i].grade; 
			}
			float s_avg;
			s_avg = s_sum / 10;
			cout << "10位学生的总成绩为 " << s_sum << endl;
			cout << "10位学生的平均成绩为 " << s_avg << endl;
			break;
			
		default:
			cout<<"▲请选择正确的模式序号!!!";
			break;
		}
		char judge;
		cout<<"..............................."<<endl;
		cout<<"【是否退出程序?】\n▲按(Y)退出程序,按其它任意键继续..."<<endl;
		cin>>judge;
		if(judge=='Y'){
			flag=1;
			break;
		}else{
			cout<<"▲请重新选择模式:";
		}	
	}while(flag==0);
	return 0;
}

动态链表
struct ZH *Create(){
	struct ZH *head2=NULL,*p,*p1;
	p=(struct ZH*)malloc(LEN);
	scanf("%d",&p->z );
	p->next =NULL;
	while(p->z >= 0){
		if(head2==NULL){
			head2=p;
			p1=p;
		}else{
			p1->next =p;
			p1=p;
		}
		p=(struct ZH*)malloc(LEN);
		scanf("%d",&p->z);
		p->next =NULL;
	}
	p1->next =NULL;
	return head2;
}
//输出链表
void Shu(struct ZH *head2){
	struct ZH *p;
	p=head2;
	while(p!=NULL){
		printf("%3d",p->z );
		p=p->next ;
	}
	putchar('\n');
}
//释放链表
void Fang(struct ZH **head2){
	struct ZH *p;
	while(*head2!=NULL){
		p=*head2;
		*head2=(*head2)->next ;
		free(p);
	}
	*head2=NULL;
}

四、运行结果

功能11-15

功能16-20 

功能21-22


五、实验总结

本次实验我的总结如下:

  1. 基本掌握了设计开发一个小程序的流程,能熟练地够将本学期各个重要知识点进行综合运用。
  2. 巩固了用函数来封装程序,实现功能的编写方法,函数功能具有通用性,能体现数据的传递。
  3.  能独立完成程序的编写设计,对于对于实现过程中产生的问题进行了总结。
  4. 熟练地使用debug来查找程序中的漏洞。
  5. 在指针和数组作为函数形参方面还有些不熟练,应当予以及时复习。
  6. 要有程序优化的想法,在设计完一个程序后,思考是否还有更优解。
  7. 应及时巩固复习,并对程序予以必要的维护。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/584661.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mac用Homebrew安装MySQL并配置远程登录

1. 简介 MySQL 是一个开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;由瑞典 MySQL AB 公司开发&#xff0c;后被 Oracle 公司收购。MySQL 使用 SQL&#xff08;Structured Query Language&#xff09;作为查询语言&#xff0c;并提供了强大的功能和性能…

鸿蒙开发面试真题——面向对象

鸿蒙开发面向对象的面试题是近年来在软件开发领域中备受关注的话题。作为一种新兴的操作系统&#xff0c;鸿蒙系统的开发者需要具备扎实的面向对象编程知识和丰富的开发经验。在面试中&#xff0c;面试官常常会通过一系列的问题来考察面试者对于鸿蒙开发面向对象的理解和应用能…

ES 深度分页问题及针对不同需求下的解决方案[ES系列] - 第509篇

历史文章&#xff08;文章累计500&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 《…

春游江淮 请来池州 | 五一池州文旅活动时间表大集合,都在这里

快到五一,想好去哪里玩吗?来池州,各景区缤纷活动登场&#xff0c; 速速划重点、敲黑板! 五一放大招!到底怎么玩?文旅活动、阅读推广 非遗展示......现在都已经为你整理好啦!这份超齐全的 五一假期文旅活动时间表,助力您玩转各景区,整个假期嗨不停~ 旅游惠民活动 表演类活动…

salesforce 如何访问lwc组件

访问lwc有哪些途径呢? Action ButtonTabAura use lwc(拓展)如何区分是新建页面还是编辑页面 Action Button xml文件中要配置tab<?xml version"1.0" encoding"UTF-8"?> <LightningComponentBundle xmlns"http://soap.sforce.com/2006/04/…

使用fitten code插件(vscode),替换通义千问,识别需求中的输入输出

今天我们介绍一个工具,具体介绍可以参考我的这篇文章的介绍,支持vs code 插件,Fitten Code是一款由非十科技开发的AI代码助手,旨在通过大模型驱动来提升编程效率和体验-免费神器-CSDN博客https://blog.csdn.net/lijigang100/article/details/137833223?spm=1001.2014.3001…

MySQL怎么看死锁记录

这个结果分成三部分&#xff1a; (1) TRANSACTION&#xff0c;是第一个事务的信息&#xff1b; (2) TRANSACTION&#xff0c;是第二个事务的信息&#xff1b; (3)WE ROLL BACK TRANSACTION (1)&#xff0c;是最终的处理结果&#xff0c;表示回滚了第一个事务。 第一个事务的信…

文件批量重命名:高效添加前缀顺序编号,让文件整理变得轻松简单

电脑中的文件数量日益增长&#xff0c;如何有效地管理和整理这些文件成为了许多人的难题。你是否曾在大量的文件中迷失&#xff0c;寻找某个特定文件时感到困惑和疲惫&#xff1f;现在&#xff0c;我们为您带来了一款全新的文件改名工具——"一键式文件改名神器"&…

计算机复试项目:SpringCloud实战高并发微服务架构设计

秒杀购物商城--环境搭建 秒杀购物商城基础服务组件--详细介绍 秒杀购物商城基础服务--权限中心 秒杀购物商城业务服务--收货地址 秒杀购物商城业务服务--秒杀活动服务 秒杀购物商城--购物车的功能设计及分析 秒杀购物商城基础服务-用户中心 秒杀购物商城业务服务--商品中…

通过共享网络使树莓派4联网

一、问题 尝试配置/boot/dhcpcd.conf文件无效&#xff0c;wifi依然无法联网&#xff0c;且通过桌面选择wifi输入密码后同样无法联网&#xff1b; 二、环境 1、可以通过网线连接电脑&#xff0c;并且可以连接串口&#xff1b; 2、可以通过静态地址通过网线访问树莓派ssh端口&…

misc学习

一.知识点 1.BMP文件 BMP文件主要有四部分组成&#xff0c;位图头、位图信息、调色板、位图数据。 bmp文件头(bmp file header)&#xff1a;提供文件的格式、大小等信息 位图信息头(bitmap information)&#xff1a;提供图像数据的尺寸、位平面数、压缩方式、颜色索引等信息…

[C++][算法基础]整数划分(统计动态规划)

一个正整数 &#x1d45b; 可以表示成若干个正整数之和&#xff0c;形如&#xff1a;&#x1d45b;&#x1d45b;1&#x1d45b;2…&#x1d45b;&#x1d458;&#xff0c;其中 &#x1d45b;1≥&#x1d45b;2≥…≥&#x1d45b;&#x1d458;,&#x1d458;≥1。 我们将这…

SDB2F5 1.5A,高达28V输出1.2MHz升压转换器芯片IC

一般说明 该SDB2F5是一个恒定的频率&#xff0c;5针SOT23电流模式升压转换器&#xff0c;低功耗应用。SDB2F5交换机位于1.2MHz&#xff0c;并允许使用高度小于或等于2mm的微小、低成本电容器和电感器。内部软启动的结果在小浪涌电流和延长电池寿命。 该SDB2F5操作从一个…

【15-聚类分析入门:使用Scikit-learn进行K-means聚类】

文章目录 前言K-means聚类的原理Scikit-learn中的K-means实现安装与导入生成模拟数据应用K-means聚类可视化聚类结果选择K的值总结前言 聚类分析是一种无监督学习方法,用于将数据集中的样本分组成若干个簇(cluster)。K-means是最广泛使用的聚类算法之一,其核心思想是将数据点…

爱普生RX8111CE工厂流水线控制模块实现超长待机

经过多年的高速发展&#xff0c;我国已基本实现工业机械化&#xff0c;但距离工业自动化还有很大差距。随着机器人、工业自动化趋势愈演愈烈&#xff0c;未来发展前景日趋明朗。工厂流水线的要求也日益增加&#xff0c;其中包括对计件、计时等定量的要求&#xff0c;还有对设备…

【算法每日一练】

蛮有意思的的一道题&#xff0c;最后要判断能否成为一种1~n的全排列&#xff0c;我最这样做的&#xff1a; 整个数组先排序一下。假设遍历到了i&#xff0c;那就判断前面b和r的个数&#xff0c;但是有想到了后面可能还会对前面的结果产生影响&#xff0c;所以就抛弃了这个想法…

Now in Android 4月份更新速览

Now in Android 4月份更新速览 1. 引言 Android 15 Beta的发布标志着Android生态系统的新一轮更新。这次更新旨在提升用户体验和开发效率&#xff0c;让我们一起来了解其中的重要内容。 2. Android 15 Beta介绍 Android 15 Beta带来了一系列新功能&#xff0c;其中包括默认边…

JAVA同城服务美容美发到店服务上门服务系统源码微信小程序+微信公众号+H5+APP

随着科技的飞速发展&#xff0c;互联网和移动互联网已经渗透到我们生活的方方面面&#xff0c;同城服务美容美发到店服务上门服务系统应运而生&#xff0c;为整个行业带来了巨大的变革和无限的可能。该系统的重要性和优势不言而喻&#xff0c;对于行业发展和用户需求的影响深远…

文件系统学习

软连接&#xff1a;可以跨不同的磁盘块&#xff0c;创建出不同的inode节点 应连接&#xff1a;相同的inode节点&#xff0c;不同的文件名字记录在父亲节点目录中 分区(fdisk)&#xff0c;格式化(mkfs)&#xff0c;挂载(mount)&#xff0c;大于2T分区&#xff08;parted&#…

Go常用的标准库——fmt,time

一.fmt fmt包实现了类似C语言printf和scanf的格式化I/O。主要分为向外输出内容和获取输入内容两大部分。 1.1 向外输出 标准库fmt提供了以下几种输出相关函数。 Print Print系列函数会将内容输出到系统的标准输出&#xff0c;区别在于Print函数直接输出内容&#xff0c;没有换…
最新文章