仅供参考!
注意:同路径文件夹下放置名为 学生成绩.txt文件
如图:
#include<bits/stdc++.h>
using namespace std;
#include<iostream>
#define PI 3.14
void page(); //用于页面的制造
void function(); //负责主菜单的显示和用户进行功能的选择
void add(); //两数进行加法
void subtract(); //两数进行减法
void absolute(); //两数之间取模
void multiply(); //计算两数的乘积
void divide(); //计算两数的商
void area(); //求圆的面积
void place(); //判断数字的位数
void year(); //判断闰年
void chengji(); //百分制成绩转换为五分制
void shi(); //计算范围内奇数的和
void shiyi(); //计算范围内偶数的和
void shier(); //计算范围内3的倍数的和
void integer(); //计算范围内15的倍数的和
void daffodil(); //水仙花数
int max( int x,int y ); //求最大值
void max_f();
void max_min( int *p,int *q ); //求最大最小值
void shiliu();
void sort( float *a ); //冒泡排序
void sort_f();
void transpose(); //矩阵转置
void diagonal(); //求对角线上数字的和
void ershi();
typedef struct node{ //定义链表的节点
int num;
struct node * next;
}node;
node * head_f(); //定义头指针
void j_chain(); //定义静态链表
void output( node * head ); //输出链表
void insert( node * head ); //插入链表中的节点
void delet( node * head ); //删除链表中的节点
void s_menu( node * head ); //动态链表的二级菜单
void d_chain(); //定义动态链表
struct student{ //定义学生信息的结构体
int sno;
char name[10];
float score;
};
void grade(); //对学生成绩进行排序
void score(); //利用文件实现学生成绩普涨10分的操作
char sushu();
void ershiwu(); //判断素数
int main()
{
function();
return 0;
}
void function()
{
int n;
while( 1 )
{
page();
printf("请选择要进行第几项功能:");
scanf("%d",&n);
system("cls");
if( n==26 ) //n得到输入的数然后进行判断执行哪段代码
break;
switch( n )
{
case 1:
add();break;
case 2:
subtract();break;
case 3:
absolute();break;
case 4:
multiply();break;
case 5:
divide();break;
case 6:
area();break;
case 7:
place();break;
case 8:
year();break;
case 9:
chengji();break;
case 10:
shi();break;
case 11:
shiyi();break;
case 12:
shier();break;
case 13:
integer();break;
case 14:
daffodil();break;
case 15:
max_f();break;
case 16:
shiliu();break;
case 17:
sort_f();break;
case 18:
transpose();break;
case 19:
diagonal();break;
case 20:
ershi();break;
case 21:
j_chain();break;
case 22:
d_chain();break;
case 23:
grade();break;
case 24:
score();break;
case 25:
ershiwu();break;
}
printf("\n");
system("pause");
getchar();
system("cls");
}
}
void page()
{
printf(" *************************************\n");
printf(" * 小小计算器 *\n");
printf(" * 1 加法 *\n");
printf(" * 2 减法 *\n");
printf(" * 3 取模 *\n");
printf(" * 4 乘法 *\n");
printf(" * 5 除法 *\n");
printf(" * 6 求圆面积 *\n");
printf(" * 7 判断数字的位数 *\n");
printf(" * 8 判断闰年 *\n");
printf(" * 9 成绩转换 *\n");
printf(" * 10 计算从1到n的奇数和 *\n");
printf(" * 11 计算从1到n的偶数和 *\n");
printf(" * 12 计算从1到n的3的倍数的和 *\n");
printf(" * 13 求即被3整除又被5整除的数 *\n");
printf(" * 14 求水仙花数 *\n");
printf(" * 15 求最大值 *\n");
printf(" * 16 求最大最小值 *\n");
printf(" * 17 冒泡排序 *\n");
printf(" * 18 矩阵转置 *\n");
printf(" * 19 求对角线和 *\n");
printf(" * 20 统计单词个数 *\n");
printf(" * 21 创建静态链表 *\n");
printf(" * 22 创建动态链表 *\n");
printf(" * 23 学生成绩排序 *\n");
printf(" * 24 成绩普涨10分 *\n");
printf(" * 25 素数判断 *\n");
printf(" * 26 退出程序 *\n");
printf(" *************************************\n");
}
void add()
{
int a,b;
printf("请输入两个整数进行加法(中间以空格隔开):");
scanf("%d %d",&a,&b);
printf("\n加法结果的十进制形式是:%d\n",a+b);//十进制形式输出
printf("加法结果的八进制形式是:%o\n",a+b);//八进制形式输出
printf("加法结果的十六进制形式是:%x\n",a+b);//十六进制形式输出
}
void subtract()
{
int a,b;
printf("请输入两个整数进行减法(中间以空格隔开):");
scanf("%d %d",&a,&b);
printf("\n加法结果的十进制形式是:%d\n",a-b);
printf("加法结果的八进制形式是:%o\n",a-b);
printf("加法结果的十六进制形式是:%x\n",a-b);
}
void absolute()
{
int a,b,value;
printf("请输入两个整数进行取模运算(中间以空格隔开):");
scanf("%d %d",&a,&b);
value=abs(a-b);
printf("\n取模结果的十进制形式是:%d\n",value);
printf("取模结果的八进制形式是:%o\n",value);
printf("取模结果的十六进制形式是:%x\n",value);
}
void multiply()
{
float a,b;
printf("请输入两个数进行乘法(中间以空格隔开):");
scanf("%f %f",&a,&b);
printf("\n乘法结果的小数形式是:%f\n",a*b);
printf("乘法结果的指数形式是:%e\n",a*b);
}
void divide()
{
float a,b;
printf("请输入两个数进行除法(中间以空格隔开):");
scanf("%f %f",&a,&b);
if( b==0.0 )
printf("\n除数为0,无法进行除法运算\n");
else
{
printf("\n除法结果的小数形式是:%f\n",a/b);
printf("除法结果的指数形式是:%e\n",a/b);
}
}
void area()
{
float r;
printf("请输入圆的半径:");
scanf("%f",&r);
printf("\n该圆面积是%f\n",PI*r*r);
printf("该圆的面积保留两位小数结果是:%1.2f\n",PI*r*r);
}
void place()
{
int a,x,y,z;
printf("请输入一个3位以内正整数进行位数的判断:");
scanf("%d",&a);
if( a<=0 )
printf("\n要求输入的数为正整数");
else if( a>=1000 )
printf("\n要求输入的数为3位以内的正整数");
else if( a>=100 && a<=999 )
{
x=a/100;
y=a/10-x*10;
z=a%100-y*10;
printf("\n该数为3位数,百位是%d,十位是%d,个位是%d",x,y,z);
}
else if( a>=10 && a<=99 )
{
x=a/10;
y=a%10;
printf("\n该数为2位数,十位是%d,个位是%d",x,y);
}
else if( a>=0 && a<=9 )
printf("\n该数为1位数,它是%d",a);
}
void year()
{
int y;
printf("请输入年份:");
scanf("%d", &y);
if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)
printf("%d是闰年\n",y);
else
printf("%d不是闰年\n",y);
}
void chengji()
{
int x;
printf("请输入成绩:");
scanf("%d",&x);
if( x>100 || x<0 )
printf("成绩输入错误");
else
switch(x/10)
{
case 10:
case 9:
printf("优秀");break;
case 8:
printf("良");break;
case 7:
printf("中");break;
case 6:
printf("及格");break;
default:
printf("回家种地!");
}
}
void shi()
{
int a,su=0,l;
printf("输入数据:");
scanf("%d",&l);
for(a=1;a<l;){
a=2*a+1;
su=a+su;
printf("\n1到%d之间所有奇数的和为%d",su);}
}
void shiyi()
{
int p,su2=0,l2;
printf("输入数据:");
scanf("%d",&l2);
for(p=1;p<l2;){
p=2*p;
su2=p+su2;
printf("\n1到%d之间所有偶数的和为%d",su2);
}
}
void shier()
{
int n,i=3,sum=0;
printf("请输入n的值:");
scanf("%d",&n);
if( n>=3 )
do
{
sum+=i;
i+=3;
}while( i<=n );
printf("\n1到%d之间所有3的倍数的和为%d",n,sum);
}
void integer()
{
int a,b,i,sum=0,t;
printf("用两个数之间的数进行求和:");
scanf("%d %d",&a,&b);
if( a>b )
{
t=a;
a=b;
b=t;
}
for( i=a;i<=b;i++ )
if( i%3==0 && i%5==0 )
sum+=i;
printf("\n和是:%d",sum);
}
void daffodil()
{
int a,b,c;
printf("水仙花数有:");
for( a=1;a<=9;a++ )
for( b=0;b<=9;b++ )
for( c=0;c<=9;c++ )
if( a*100+b*10+c==a*a*a+b*b*b+c*c*c )
printf("%6d",a*100+b*10+c);
}
int max( int x,int y )
{
int ret;
if( x>y )
ret=x;
else
ret=y;
return ret;
}
void max_f()
{
int a,b;
printf("请输入两个整数(中间以空格隔开):");
scanf("%d %d",&a,&b);
printf("\n最大值是:%d",max(a,b));
}
void max_min( int *p,int *q )
{
int *t;
if( *p<*q )
{
t=p;
p=q;
q=t;
}
printf("\n最大的数是%d,最小的数是%d",*p,*q);
}
void shiliu()
{
int a,b;
int *p,*q;
printf("输入两个正整数即可求出最大与最小(中间以空格隔开):");
scanf("%d %d",&a,&b);
max_min(&a,&b);
}
void sort( float *a )
{
float t;
int i,j;
//定义两个变量 从第一位开始对其一个个做比较
for( j=0;j<9;j++ )
for( i=0;i<9-j;i++ )
//把数大的 往后挪 第二次从第二个数开始依次 重复
if( a[i]>a[i+1] )
{
t=a[i];
//直到最后一次重复把所有大的数放到了小数后
a[i]=a[i+1];
a[i+1]=t;
}
printf("\n从小到大的排序结果为:\n");
for( i=0;i<10;i++ )
printf("%1.4f ",a[i]);
}
void sort_f()
{
float a[10];
int i;
printf("请输入10个数,即可得到排序结果:\n");
for( i=0;i<10;i++ )
//先定义数组然后对其输入
scanf("%f",&a[i]);
sort(a);
}
void transpose()
{
int a[4][4]={0},i,j,t;
printf("请输入一个3*4的整数矩阵,进行转置操作:\n");
for( i=0;i<3;i++ )
for( j=0;j<4;j++ )
scanf("%d",&a[i][j]);
printf("转置后的整数矩阵为:\n");
for( i=0;i<4;i++ )
for( j=i;j<4;j++ )
if( i!=j )
{
t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;
}
for( i=0;i<4;i++ )
{
for( j=0;j<3;j++ )
printf("%4d",a[i][j]);
printf("\n");
}
}
void diagonal()
{
int a[3][3],i,j,sum=0;
printf("请输入一个3*3的整数矩阵:\n");
printf("(同一行的数字用空格隔开,不同行的数字用回车隔开)");
for( i=0;i<3;i++ )
for( j=0;j<3;j++ )
scanf("%d",&a[i][j]);
for( i=0;i<3;i++ )
sum+=a[i][i];
printf("\n对角线上的和为:%d",sum);
}
void ershi()
{
char string[81];
int i,num=0,word=0;
gets(string);
for(i=0;(string[i]!='\0');i++)
if(string[i]==' ') word=0;
else if(word==0)
{
word=1;
num++;
}
printf("共有有%d个字母。\n",num);
}
node * head_f()
{
node *head;
head=(node*)malloc(sizeof(node));
head->next=NULL;
return head;
}
void j_chain()
{
node *head,*p,*pre;
int a[4]={5,6,7,8},i;
head=head_f();
pre=head;
for( i=0;i<=3;i++ )
{
p=(node*)malloc(sizeof(node));
//申请空间 头节点定义两个区 一个是数值区
p->num=a[i];
p->next=NULL;
//一个指针域 然后让上一个节点的地址域指向下一个节点的数值区
pre->next=p;
pre=p;
}
printf("该链表所含的数字为:\n");
p=head->next;
while( p!=NULL )
{
printf("%d",p->num); //最后一个节点为空才停止
p=p->next;
}
}
void output( node * head )
{ //输出链表视频讲解
node *p;
cout<<"该链表所含数字为:\n";
p=head->next;
while( p!=NULL )
{
printf("%4d",p->num);
p=p->next;
}
}
void insert( node * head )
{
int n,x,count;
output(head);
cout<<"\n请输入要插入的位置:\n";
cin>>n;
cout<<"请输入要插入的数:\n";
cin>>x;
node *p,*q;
p=head;
count=1;
while( count<n && p->next )
{
p=p->next;
count++;
}
if( count!=n )
cout<<"输入的位置有错误\n";
else
{
q=(node*)malloc(sizeof(node));
q->num=x;
q->next=p->next;
p->next=q;
}
output(head);
}
void delet( node * head )
{
output(head);
int n,count;
cout<<"\n请输入要删除的位置:\n";
cin>>n;
node *p,*q;
p=head;
count=1;
while( count<n && p->next->next )
{
p=p->next;
count++;
}
if( count!=n )
cout<<"输入的位置有错误\n";
else
{
q=p->next;
p->next=q->next;
free(q);
}
output(head);
}
void s_menu( node * head )
{
int n=0;
while( 1 )
{
cout<<"*************************************\n";
cout<<"* 1.输出链表 *\n";
cout<<"* 2.链表中插入数字 *\n";
cout<<"* 3.删除节点 *\n";
cout<<"* 4.退出 *\n";
cout<<"*************************************\n";
cout<<"请选择功能:";
scanf("%d",&n);
system("cls");
if( n==4 )
break;
switch( n )
{
case 1:
output(head);
cout<<"\n按任意键继续......";
break;
case 2:
insert(head);
cout<<"\n按任意键继续......";
break;
case 3:
delet(head);
cout<<"\n按任意键继续......";
break;
}
getchar();
getchar();
system("cls");
}
}
void d_chain() //动态链表视频讲解
{
node *head,*p,*pre;
int x;
printf("请输入一些数:(输入负数即可结束输入)\n");
head=head_f();
pre=head;
while( 1 )
{
cin>>x;
if( x<0 )
break;
p=(node*)malloc(sizeof(node));
p->num=x;
p->next=NULL;
pre->next=p;
pre=p;
}
system("cls");
s_menu(head);
}
void grade()
{
struct student stu[10],t;
int n=0,i,j;
float sum=0.0;
printf("请输入10位学生的学号,姓名,分数:\n");
for( n=0;n<10;n++ )
{
scanf("%d",&stu[n].sno);
scanf("%s",&stu[n].name);
scanf("%f",&stu[n].score);
}
for( i=0;i<9;i++ )
for( j=0;j<9-i;j++ )
{
if( stu[j].score>stu[j+1].score )
{
t=stu[j];
stu[j]=stu[j+1]; //冒泡法排序
stu[j+1]=t;
}
}
printf("\n从小到大的结果为:\n");
for( n=0;n<10;n++ )
{
printf("%d ",stu[n].sno);
printf("%s ",stu[n].name); //定义结构体
printf("%1.2f\n",stu[n].score);
sum+=stu[n].score;
}
printf("这10个学生的总成绩为:%1.2f",sum); //结构体的输出 格式
printf("\n平均成绩为:%1.2f",sum/10);
}
void score()
{
int i=0;
FILE *fp;
int s[10]={0};
if((fp=fopen("成绩.txt","r+"))==NULL)
{
cout<<"Error!";
exit(1);
}
cout<<"分数普涨前是:(最高100分)\n";
while( !feof(fp) && i!=10 )
{
fscanf(fp,"%d",&s[i]);
//首先判断一下在90~100直接变为100 否则+10
printf("%4d",s[i]);
if( s[i]>=90 )
s[i]=100;
else
s[i]+=10;
i++;
}
cout<<"\n分数普涨后是:\n";
for(i=0;i<10;i++)
printf("%4d",s[i]);
rewind(fp);
for( i=0;i<10;i++ )
{
fprintf(fp,"%d",s[i]);
fprintf(fp,"\n");
}
rewind(fp);
fclose(fp);
}
char sushu(int i)
{int n;
for(i=2;i<=n;i++)
if(n%i==0)break;
if(i>n)return 0;
if(i<n)return 1;}
void ershiwu(){
printf("请输入要判断的数字:");
int i,x;
scanf("%d",&i);
x=sushu(i);
if(x=1) printf("是素数");
if(x=0) printf("不是素数");
}