附:
C语言实现迷宫类小游戏完整思路与代码实例:https://blog.csdn.net/qq_41915690/article/details/80463892
Design By 海与炜
效果图
完整代码
#include <stdio.h>
#include <math.h>
#include<malloc.h>
void jingtailianbiao();
void dongtailianbiao();
int stu_num;
#define LEN sizeof(struct student)
struct student
{
long num;
float score;
struct student *next;
};
struct student_score
{
long num;
char name[10];
float score;
};
int main()
{
int select;
printf("*************************************************\n");
printf("* 小小计算器 Design By 海与炜 *\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 计算从1到输入数之间的奇数和(for) *\n");
printf("* 10 计算从1到输入数之间的偶数和(while) *\n");
printf("* 11 输出从1到输入数之间所有3的倍数 *\n");
printf("* 12 求即被3整除又被5整除的数 *\n");
printf("* 13 判断数字位数 *\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("* 输入任意非功能选项序号退出小小计算器 *\n");
printf("*************************************************\n");
printf("输入菜单项:\n");
scanf("%d",&select);
switch (select)
{
case 1:
{
float num1,num2;
printf("做加法。\n");
printf("输入两个数,逗号分隔。\n");
scanf("%f,%f",&num1,&num2);
printf("%f+%f=%f\n",num1,num2,num1+num2);
break;
}
case 2:
{
float num1,num2;
printf("做减法。\n");
printf("输入两个数,逗号分隔。\n");
scanf("%f,%f",&num1,&num2);
printf("%f-%f=%f\n",num1,num2,num1-num2);
break;
}
case 3:
{
float num1,num2;
printf("做乘法。\n");
printf("输入两个数,逗号分隔。\n");
scanf("%f,%f",&num1,&num2);
printf("%f*%f=%f\n",num1,num2,num1*num2);
break;
}
case 4:
{
float num1,num2;
printf("做除法。\n");
printf("输入两个数,逗号分隔。\n");
scanf("%f,%f",&num1,&num2);
printf("%f/%f=%f\n",num1,num2,num1/num2);
break;
}
case 5:
{
float num1,num2;
printf("取模运算。\n");
printf("输入两个数,逗号分隔。\n");
scanf("%f,%f",&num1,&num2);
printf("%f%%%f=%f\n",num1,num2,fmod(num1,num2));
break;
}
case 6:
{
float r;
double s;
printf("计算圆面积。\n");
printf("请输入半径:\n");
scanf("%f",&r);
if (r >= 0)
{
s=3.14*r*r;
printf("圆面积是:%lf\n",s);
}
else
printf ("半径输入错误!\n");
break;
}
case 7:
{
int year,leap;
printf("判断闰年。\n");
printf("enter year");
scanf("%d",&year);
if((year%4==0&&year%100!=0)||(year%400==0))
leap=1;
else
leap=0;
if(leap)
printf("%d is",year);
else
printf("%d is not",year);
printf("a leap year\n");
break;
}
case 8:
{
int a;
printf("成绩转化。\n");
scanf("%d",&a);
if(a>=90)
printf("优");
else if(a>=80)
printf("良");
else if(a>=70)
printf("中");
else if(a>=60)
printf("差");
else printf("不及格");
break;
}
case 13:
{
long int num,num_t;
int digits=0,i=1;
printf("判断数字位数。\n");
printf("输入待判断数字:");
scanf("%ld",&num);
num_t=num;
do
digits++;
while((num_t/=10)>0);
printf("%ld是%d位数。\n",num,digits);
while(digits>=i);
{
printf("%ld的第%d位数是:%d\n",num,i,(num/(long)pow(10,(digits-i)))%10);
i++;
}
break;
}
case 9:
{
int n,sum=0,i;
printf("输入一个数:\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
if(i%2!=0)
sum+=i;
printf("从1到输入数之间的奇数和是:%d\n",sum);
break;
}
case 10:
{
int sum,i,n;
i=1;
sum=0;
printf("输入一个数:\n");
scanf("%d",&n);
while(i<=n)
{
if(i%2==0)
sum+=i;
i++;
}
printf("从1到输入数之间的偶数和是:%d\n",sum);
break;
}
case 12:
{
int n,i,m;
printf("输入两个数:\n");
scanf("%d,%d",&n,&m);
for(i=n;i<=m;i++)
if(i%3==0&&i%5==0)
{
printf("既能被3整除又能被5整除的数:%d\n",i);
}
break;
}
case 11:
{
int sum,i,m;
i=1;
sum=0;
printf("输入一个数:\n");
scanf("%d",&m);
do
{
if(i%3==0)
sum+=i;
i++;
}
while(i<=m);
printf("从1到输入数之间所有3的倍数:%d\n",sum);
break;
}
case 14:
{
int i=100;
int a,b,c;
for(i=100;i<1000;i++)
{
a=i/100;
b=(i-a*100)/10;
c=(i-a*100-b*10);
if(a*a*a+b*b*b+c*c*c==i)
{
printf("水仙花数:%d\n",i);
}
}
break;
}
case 15:
{
int a,b,c;
printf("请输入两个数\n");
scanf("%d,%d",&a,&b);
if(a>=b)
c=a;
else
c=b;
printf("最大值为:%d\n",c);
break;
}
case 16:
{
int a,b,c,d;
printf("请输入两个数\n");
scanf("%d,%d",&a,&b);
if(a>=b)
{
c=a;
d=b;
}
else
{
c=b;
d=a;
}
printf("最大值为:%d\n",c);
printf("最小值为:%d\n",d);
break;
}
case 17:
{
int i,j,k;
int a[10];
printf("输入十个数: \n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("\n");
for(j=0;j<9;j++)
for(i=0;i<9-j;i++)
if(a[i]>a[i+1])
{
k=a[i];
a[i]=a[i+1];
a[i+1]=k;
}
printf("排序后: \n");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
break;
}
case 18:
{
int i,j;
int array[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
int temp;
printf("原矩阵:\n");
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
printf("%d\t",array[i][j]);
}
printf("\n");
}
for(i=0;i<4;i++)
{
for(j=i;j<4;j++)
{
temp=array[i][j];
array[i][j]=array[j][i];
array[j][i]=temp;
}
}
printf("转置矩阵:\n");
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
printf("%d\t",array[i][j]);
}
printf("\n");
}
break;
}
case 19:
{
int i,j;
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
int sum=0;
printf("原矩阵:\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf("%d\t",a[i][j]);
}
sum+=a[i][i];
printf("\n");
}
printf("对角线的和等于:%d\n",sum);
break;
}
case 20:
{
char string[81],c;
int i,num=0,word=0;
printf("请输入一句话:\n");
c=getchar();
gets(string);
for(i=0;(c=string[i])!='\0';i++)
{
if(c==' ')
{
word=0;
}
else if(word==0)
{
word=1;
num++;
}
}
printf("%d words\n",num);
break;
}
case 21:
{
jingtailianbiao();
break;
}
case 22:
{
printf("请输入两个数,逗号隔开。输入负数结束。\n");
dongtailianbiao();
break;
}
case 23:
{
float sum=0;
struct student_score stu_temp,stu[10];
printf("分别输入10位学生的学号姓名和成绩 ,用空格隔开。\n");
for (int i=0;i<10;i++)
{
scanf("%d %s %f",&stu[i].num,&stu[i].name,&stu[i].score);
sum+=stu[i].score;
}
for (i=0;i<9;i++)
for (int j=0;j<9-i;j++)
if (stu[j].score>stu[j+1].score)
{
stu_temp = stu[j];
stu[j] = stu[j+1];
stu[j+1] = stu_temp;
}
printf("按成绩从低到高排序为:\n");
for (i=0;i<10;i++)
{
printf("学号:%d\t姓名:%s\t成绩:%.1f\n",stu[i].num,stu[i].name,stu[i].score);
}
printf("成绩总和为:%.1f\n",sum);
break;
}
case 24:{
printf("将为d盘根目录下的文本文件my.txt内的10位学生的学生成绩分别加10分,请确保此文件存在!\n");
int i,a[10];
FILE *fp;
fp=fopen("d:\\my.txt","r+");
for(i=0;i<10;i++)
fscanf(fp,"%d",&a[i]);
rewind(fp);
for(i=0;i<10;i++)
fprintf(fp,"%d\n",a[i]+10);
fclose(fp);
printf("保存完毕!\n");
break;
}
}
return 0 ;
}
void jingtailianbiao()
{
struct student a,b,c,d,*head,*p;
a.num=1;
a.score=96;
b.num=2;
b.score=99.5;
c.num=3;
c.score=96;
d.num=4;
d.score=98;
head=&a;
a.next=&b;
b.next=&c;
c.next=&d;
d.next=0;
p=head;
do
{
printf("%ld %5.1f\n",p->num,p->score);
p=p->next;
}
while(p!=0);
}
struct student * creat()
{
struct student *head;
struct student *p1,*p2;
stu_num=0;
p1=p2=(struct student*)malloc(LEN);
scanf("%ld,%f",&p1->num,&p1->score);
head=0;
while(p1->num>=0)
{
stu_num=stu_num+1;
if(stu_num==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(struct student*)malloc(LEN);
scanf("%ld,%f",&p1->num,&p1->score);
}
p2->next=0;
return (head);
}
void print(struct student *head)
{
struct student *p;
p=head;
printf("你输入的动态链表为:\n",stu_num);
if(head!=0)
do
{
printf("%ld %5.1f\n",p->num,p->score);
p=p->next;
}
while(p!=0);
}
void dongtailianbiao()
{
struct student *link;
link=creat();
print(link);
}