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

news2025/1/12 8:50:28

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

编译器:gcc 10.3.0

----

注:

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

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

源码仓库:https://github.com/wyd333/HENU_experiment_report

目录

一、实验目的

二、实验内容

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.coloradmin.cn/o/1650869.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024年第九届数维杯数学建模B题思路分享

文章目录 1 赛题思路2 比赛日期和时间3 竞赛信息4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间&#xff1a;2024…

六级段落匹配

一个段落最多匹配2个句子 一个段落对应&#xff1a;0-2 适当放题 找到三个对应点就可以选 每看三个句子划关键词之后再自己回忆一遍关键词&#xff0c;看了36 37 38 就复述一遍关键词看了39 40 41就又从36开始复述关键词&#xff08;334&#xff09;看到最后一句话就又从头…

测试平台开发:Django开发实战之注册界面实现(下)

1、 评论和用户建立关联 1&#xff09;修改model: 软关联还是硬关联默认值是什么关联方被删除怎么办如何根据评论找到用户如何根据用户找到评论 然后执行命令&#xff1a; pdm run M pdm run init 这样在表里面就会多一个user_id的字段 2&#xff09;修改视图&#xf…

电脑提示mfc140u.dll文件丢失了?怎么快速修复mfc140u.dll文件

当你的电脑提示你的mfc140u.dll文件丢失了&#xff0c;那么就要小心了&#xff0c;可能你的某些程序出问题了&#xff01;这时候需要我们去进行相关的修复&#xff0c;只有修复了这个mfc140u.dll文件&#xff0c;才能正常的使用某些程序。下面一起来了解一下mfc140u.dll文件吧。…

Deeplab的复现(pytorch实现)

DeepLab复现的pytorch实现 本文复现的主要是deeplabv3。使用的数据集和之前发的文章FCN一样&#xff0c;没有了解的可以移步到之前发的文章中去查看一下。 1.该模型的主要结构 对于代码部分&#xff0c;主要只写了模型部分的&#xff0c;其他部分内容基本和FCN的一致&#xf…

笔试强训Day18 字符串 排序 动态规划

[编程题]压缩字符串(一) 题目链接&#xff1a;压缩字符串(一)__牛客网 (nowcoder.com) 思路&#xff1a; 跟着思路写就完了。 AC code&#xff1a; #include <iostream> #include<string> using namespace std; string a; string ans; int main() {cin >>…

【Java基础】Maven继承

1. 前言 Maven 在设计时&#xff0c;借鉴了 Java 面向对象中的继承思想&#xff0c;提出了 POM 继承思想。 2. Maven继承 当一个项目包含多个模块时&#xff0c;可以在该项目中再创建一个父模块&#xff0c;并在其 POM 中声明依赖&#xff0c;其他模块的 POM 可通过继承父模…

DMAR: [INTR-REMAP] Present field in the IRTE entry is clear 的解决办法

问题描述 在使用FPGA开发PCIe的MSI-X中断相关功能时&#xff0c;一次测试过程中dmesg打印出如下错误&#xff0c;使用cat /proc/interrupts查看FPGA的PCIe驱动程序未收到MSIX中断。使用的系统为基于Intel x86_64的linux&#xff08;RHEL8.9&#xff09;&#xff0c;基于Xilinx …

回归分析的理解

1.是什么&#xff1a; 2.回归问题的求解&#xff1a; 首先是根据之前的数据确定变量和因变量的关系根据关系去预测目标数据根据结果做出判断 2.1如何找到关系&#xff1f; y’是根据模型生成的预测结果&#xff1a; y’axb&#xff0c;而我们的目的是y’和y(正确的结果)之间…

微信小程序相对于H5和原生APP有哪些优势?开发小程序的步骤是什么?

微信小程序是什么&#xff1f; 小程序是小型、轻量级的原生移动应用&#xff0c;你可以使用它们来订餐、预约出租车或支付账单。它们建立在微信平台上&#xff0c;可以通过微信的“小程序”目录进行访问。 与普通应用不同&#xff0c;小程序不需要安装。你可以直接打开并使用…

Ansible --- playbook 脚本+inventory 主机清单

一 inventory 主机清单 Inventory支持对主机进行分组&#xff0c;每个组内可以定义多个主机&#xff0c;每个主机都可以定义在任何一个或 多个主机组内。 如果是名称类似的主机&#xff0c;可以使用列表的方式标识各个主机。vim /etc/ansible/hosts[webservers]192.168.10.1…

js 图片渐变

1. 点击图片&#xff0c;使其渐变为另一张图片 通过定义keyframes来创建一个淡入淡出的动画效果。当图片被点击时&#xff0c;先添加淡出动画使图片透明度从0渐变到1&#xff0c;然后在1秒后切换图片源并添加淡入动画使新图片透明度从0渐变到1&#xff0c;实现图片渐变效果。 …

Hive Views 视图

Hive Views 视图 在Hive中&#xff0c;视图&#xff08;Views&#xff09;是虚拟表&#xff0c;它只包含查询定义&#xff0c;而不包含实际的数据。视图可以简化复杂查询&#xff0c;隐藏数据结构&#xff0c;提供安全性&#xff0c;以及促进数据访问和重用。 创建视图的语法如…

推荐网站(5)Pika文字生成视频,ai视频创作

今天推荐一个网站&#xff0c;Pika文字生成视频&#xff0c;通过问题描述&#xff0c;帮我们生成对应的视频&#xff0c;非常的实用。 比如输入&#xff1a;一只小狗在河边洗澡 当然我们还可以在生成的视频上编辑 点击编辑后出来一些属性&#xff0c;可以修改区域&#xff0c…

MyBatis入门例子

1、建立与数据库对应的POJO类 2、建立mybatis的配置文件 修改后如下&#xff1a; 3、创建POJO对象和Mysql数据的表之间的映射配置 4、建一个测试方法 实现从数据库中取数一条数据&#xff0c;封装成User对象返回 注意点&#xff1a; 这点&#xff0c;大家应该不陌生了&#x…

2024最新行业领域名词解释大全

2024最新行业领域名词解释大全 &#x1f680; 大家好&#xff01;我是你们的老朋友猫头虎&#x1f42f;。今天要为大家带来2024年最新的行业领域名词解释大全&#xff01;在这个信息爆炸的时代&#xff0c;准确了解不同领域的行业动态、工作机会和职业前景至关重要。下面我会分…

Java -- (part22)

一.缓冲流 字节缓冲流 BufferedOutputStream 1.构造 BufferedOutputStream(OutputStream out) 2.用法 和FileOutputStream一样 BufferedInputStream 1.构造 BufferedInputStream(InputStream in) 2.用法 和FileInputStream一样 字符缓冲流 BufferedWriter 1.构造…

Pytorch 实现情感分析

情感分析 情感分析是 NLP 一种应用场景&#xff0c;模型判断输入语句是积极的还是消极的&#xff0c;实际应用适用于评论、客服等多场景。情感分析通过 transformer 架构中的 encoder 层再加上情感分类层进行实现。 安装依赖 需要安装 Poytorch NLP 相关依赖 pip install t…

解决3D模型只显示线框材质的方法---模大狮模型网

在3D建模和渲染过程中&#xff0c;正确的材质和纹理是呈现逼真效果的关键。然而&#xff0c;有时候用户可能会遇到一个常见问题&#xff0c;即3D模型在渲染或查看时只显示线框材质&#xff0c;而没有正确的表面纹理和颜色。本文将介绍解决这一问题的几种方法&#xff0c;帮助用…

工厂自动化升级改造(2)-RS485与Modbus通信协议

在工业控制、电力通信、智能仪表等领域,数据交换通常依赖于串口通信。最初,RS232接口是主流选择,然而,由于工业现场的复杂性,各种电气设备产生的电磁干扰可能导致信号传输错误。 RS232和RS485是两种不同的串行通信协议,它们在电气特性、传输距离和拓扑结构等方面有所不同…