编写一个程序,定义一个菜单,用switch结构显示选择的菜单项
时间: 2023-03-28 15:03:58 浏览: 119
好的,以下是程序代码:
#include <stdio.h>
int main() {
int choice;
printf("请选择菜单项:\n");
printf("1. 新建\n");
printf("2. 打开\n");
printf("3. 保存\n");
printf("4. 退出\n");
scanf("%d", &choice);
switch(choice) {
case 1:
printf("您选择了新建。\n");
break;
case 2:
printf("您选择了打开。\n");
break;
case 3:
printf("您选择了保存。\n");
break;
case 4:
printf("您选择了退出。\n");
break;
default:
printf("您输入的菜单项不存在。\n");
break;
}
return ;
}
相关问题
利用Gl/Glu/Glut库,编写一个OpenGL程序,实现以下功能: 设计并绘制一辆汽车模型以及一个简单的直线跑道;其中,车轮可以用glutCylinder来绘制。关于glutCylinder的使用可以参照下面的例子: GLUquadricObj *quadratic; int InitGL(GLvoid) // 此处开始对OpenGL进行所有设置 { quadratic=gluNewQuadric(); // 创建二次几何体 } int DrawGLScene(GLvoid) // 从这里开始进行所有的绘制 { gluCylinder(quadratic,0.6f,0.6f,0.4f,32,32);//画圆柱 } 缺省视图是从外面一个固定的视点观察汽车和跑道; 利用鼠标和键盘控制汽车前进、后退、转弯、加速和减速; 制作一个弹出菜单,上面的菜单项用来控制车身和车轮的颜色以及退出程序; 定义对应于ReShape事件的回调函数,使得当用户改变窗口的大小时,显示的汽车不会变形。
以下是一个简单的OpenGL程序,实现了上述功能:
```
#include <GL/glut.h>
// 定义汽车的位置和速度
float car_x = 0.0f, car_y = 0.0f, car_z = 0.0f;
float car_angle = 0.0f, car_speed = 0.1f;
// 定义菜单选项的ID
const int COLOR_BODY = 1;
const int COLOR_WHEEL = 2;
const int COLOR_EXIT = 3;
// 定义汽车和轮子的颜色
float body_color[] = { 1.0f, 0.0f, 0.0f };
float wheel_color[] = { 0.0f, 0.0f, 1.0f };
// 初始化函数
void init() {
glClearColor(0.0, 0.0, 0.0, 0.0);
glEnable(GL_DEPTH_TEST);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
}
// 绘制汽车
void draw_car() {
// 车身
glColor3fv(body_color);
glPushMatrix();
glTranslatef(car_x, car_y, car_z);
glRotatef(car_angle, 0.0f, 1.0f, 0.0f);
glutSolidCube(2.0f);
glPopMatrix();
// 车轮
glColor3fv(wheel_color);
glPushMatrix();
glTranslatef(car_x - 1.0f, car_y - 1.0f, car_z + 1.0f);
glRotatef(car_angle, 0.0f, 1.0f, 0.0f);
glutSolidCylinder(0.5f, 0.3f, 32, 32);
glPopMatrix();
glPushMatrix();
glTranslatef(car_x - 1.0f, car_y - 1.0f, car_z - 1.0f);
glRotatef(car_angle, 0.0f, 1.0f, 0.0f);
glutSolidCylinder(0.5f, 0.3f, 32, 32);
glPopMatrix();
glPushMatrix();
glTranslatef(car_x + 1.0f, car_y - 1.0f, car_z + 1.0f);
glRotatef(car_angle, 0.0f, 1.0f, 0.0f);
glutSolidCylinder(0.5f, 0.3f, 32, 32);
glPopMatrix();
glPushMatrix();
glTranslatef(car_x + 1.0f, car_y - 1.0f, car_z - 1.0f);
glRotatef(car_angle, 0.0f, 1.0f, 0.0f);
glutSolidCylinder(0.5f, 0.3f, 32, 32);
glPopMatrix();
}
// 绘制跑道
void draw_track() {
glBegin(GL_LINES);
glColor3f(1.0f, 1.0f, 1.0f);
glVertex3f(-10.0f, -1.0f, -10.0f);
glVertex3f(10.0f, -1.0f, -10.0f);
glVertex3f(10.0f, -1.0f, -10.0f);
glVertex3f(10.0f, -1.0f, 10.0f);
glVertex3f(10.0f, -1.0f, 10.0f);
glVertex3f(-10.0f, -1.0f, 10.0f);
glVertex3f(-10.0f, -1.0f, 10.0f);
glVertex3f(-10.0f, -1.0f, -10.0f);
glEnd();
}
// 绘制函数
void display() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// 设置摄像机视角
glLoadIdentity();
gluLookAt(0.0f, 5.0f, 20.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f);
// 绘制跑道和汽车
draw_track();
draw_car();
glutSwapBuffers();
}
// 键盘事件处理函数
void keyboard(unsigned char key, int x, int y) {
switch (key) {
case 'w':
car_z -= car_speed;
break;
case 's':
car_z += car_speed;
break;
case 'a':
car_angle += 5.0f;
break;
case 'd':
car_angle -= 5.0f;
break;
case 'q':
car_speed -= 0.1f;
break;
case 'e':
car_speed += 0.1f;
break;
default:
break;
}
}
// 弹出菜单处理函数
void menu(int value) {
switch (value) {
case COLOR_BODY:
body_color[0] = 1.0f;
body_color[1] = 0.0f;
body_color[2] = 0.0f;
break;
case COLOR_WHEEL:
wheel_color[0] = 0.0f;
wheel_color[1] = 0.0f;
wheel_color[2] = 1.0f;
break;
case COLOR_EXIT:
exit(0);
break;
default:
break;
}
}
// 窗口大小改变回调函数
void reshape(int width, int height) {
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f, (GLfloat)width / (GLfloat)height, 0.1f, 100.0f);
glMatrixMode(GL_MODELVIEW);
}
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(800, 600);
glutCreateWindow("Car Racing");
init();
// 创建菜单并绑定菜单回调函数
glutCreateMenu(menu);
glutAddMenuEntry("Red body", COLOR_BODY);
glutAddMenuEntry("Blue wheel", COLOR_WHEEL);
glutAddMenuEntry("Exit", COLOR_EXIT);
glutAttachMenu(GLUT_RIGHT_BUTTON);
// 注册回调函数
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}
```
在上述代码中,我们使用了GLUT库来创建窗口、注册回调函数和创建菜单。在初始化函数`init()`中,我们启用了深度测试、颜色材质和灯光。在绘制函数`display()`中,我们首先通过`glLoadIdentity()`和`gluLookAt()`函数设置摄像机视角,然后分别调用`draw_track()`和`draw_car()`函数绘制跑道和汽车。在键盘事件处理函数`keyboard()`中,根据用户按下的键来改变汽车的位置、角度和速度。在弹出菜单处理函数`menu()`中,根据用户选择的菜单项来改变汽车和轮子的颜色或退出程序。在窗口大小改变回调函数`reshape()`中,我们使用`glViewport()`和`gluPerspective()`函数来设置视口和透视投影矩阵,以保证显示的汽车不会变形。
用c语言编写一个程序,要求是1.用c语言编写一个简单的学生信息管理程序,能实现对学生信息的简单管理。 2.具体要求:建立一个N个学生的信息登记表,每个学生的信息包括:学号,姓名,2 门课程的成绩(DataStructure,C,)和总分(SUM)。 3.程序运行时显示一个简单的菜单,例如: ****(1):信息输入(INPUT)*************************** ****(2):总分统计(COUNT)************************** ****(3):按DataStructure项排序(SortDataStructure)****** ****(4):按C项排序(SortC)************************** ****(5):按SUM项排序(SortSUM)******************** ****(6):输入C成绩,查找该成绩位置******************** ****请选择输入(1-6): *************************** 4.根据菜单项从键盘输入数字(1-6)选择执行不同的功能,三个排序应采用不同的排序方法(直接插入排序、希尔排序、快速排序),在菜单中显式说明,并在执行对应的算法后,输出排序结果。 5.输入数字6调用折半查找函数查找某一C成绩的记录并输出。 参考结构类型定义: #define N 4 typedef struct { int no; char name[20]; int DataStructure; int C; int SUM; }student; typedef structure{ student STU[N]; int length; }STUDENT;
以下是一个简单的学生信息管理程序的代码实现,具体要求已经在题目中给出:
```c
#include <stdio.h>
#include <string.h>
#define N 4
typedef struct {
int no;
char name[20];
int DataStructure;
int C;
int SUM;
} student;
typedef struct {
student STU[N];
int length;
} STUDENT;
void input(STUDENT *stu) {
printf("请输入学生信息:\n");
for (int i = 0; i < N; i++) {
printf("请输入第%d个学生的学号,姓名,DataStructure成绩和C成绩:\n", i + 1);
scanf("%d %s %d %d", &(stu -> STU[i].no), stu -> STU[i].name, &(stu -> STU[i].DataStructure), &(stu -> STU[i].C));
stu -> STU[i].SUM = stu -> STU[i].DataStructure + stu -> STU[i].C;
}
stu -> length = N;
}
void print(STUDENT *stu) {
printf("学号\t姓名\tDataStructure\tC\tSUM\n");
for (int i = 0; i < stu -> length; i++) {
printf("%d\t%s\t%d\t\t%d\t%d\n", stu -> STU[i].no, stu -> STU[i].name, stu -> STU[i].DataStructure, stu -> STU[i].C, stu -> STU[i].SUM);
}
}
void sortDataStructure(STUDENT *stu) {
int i, j;
student temp;
for (i = 1; i < stu -> length; i++) {
temp = stu -> STU[i];
for (j = i; j > 0 && stu -> STU[j - 1].DataStructure > temp.DataStructure; j--) {
stu -> STU[j] = stu -> STU[j - 1];
}
stu -> STU[j] = temp;
}
}
void sortC(STUDENT *stu) {
int i, j;
student temp;
for (i = 1; i < stu -> length; i++) {
temp = stu -> STU[i];
for (j = i; j > 0 && stu -> STU[j - 1].C > temp.C; j--) {
stu -> STU[j] = stu -> STU[j - 1];
}
stu -> STU[j] = temp;
}
}
void sortSUM(STUDENT *stu) {
int i, j;
student temp;
for (i = 1; i < stu -> length; i++) {
temp = stu -> STU[i];
for (j = i; j > 0 && stu -> STU[j - 1].SUM > temp.SUM; j--) {
stu -> STU[j] = stu -> STU[j - 1];
}
stu -> STU[j] = temp;
}
}
int binarySearch(STUDENT *stu, int target) {
int left = 0, right = stu -> length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (stu -> STU[mid].C == target) {
return mid;
} else if (stu -> STU[mid].C < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
int main() {
STUDENT stu;
int choice = 0;
do {
printf("****(1):信息输入(INPUT)***************************\n");
printf("****(2):总分统计(COUNT)**************************\n");
printf("****(3):按DataStructure项排序(SortDataStructure)******\n");
printf("****(4):按C项排序(SortC)**************************\n");
printf("****(5):按SUM项排序(SortSUM)********************\n");
printf("****(6):输入C成绩,查找该成绩位置********************\n");
printf("****请选择输入(1-6): ***************************\n");
scanf("%d", &choice);
switch (choice) {
case 1:
input(&stu);
break;
case 2:
print(&stu);
break;
case 3:
sortDataStructure(&stu);
printf("按DataStructure项排序后的结果为:\n");
print(&stu);
break;
case 4:
sortC(&stu);
printf("按C项排序后的结果为:\n");
print(&stu);
break;
case 5:
sortSUM(&stu);
printf("按SUM项排序后的结果为:\n");
print(&stu);
break;
case 6:
int target;
printf("请输入要查找的C成绩:\n");
scanf("%d", &target);
int index = binarySearch(&stu, target);
if (index == -1) {
printf("没有找到C成绩为%d的学生\n", target);
} else {
printf("C成绩为%d的学生位置为:%d\n", target, index + 1);
}
break;
default:
printf("输入有误,请重新输入\n");
break;
}
} while (choice != 0);
return 0;
}
```
注意,上述代码中只是简单地实现了三种排序方法,如果需要使用更高效的排序算法,可以自行替换。
阅读全文