沈阳航空航天大学实验习题的整理,仅供参考。
一些练习
1.求三角形面积
【问题描述】输入任意三角形的三边长,不考虑构不成三角形情况,求三角形面积。
求三角形面积的公式为:
area=sqrt(s(s-a)(s-b)(s-c)), 其中 sqrt 为开根号函数,s=(a+b+c)/2。
【输入形式】输入三角形的三条边长,以回车结束。
【输出形式】三角形面积,保留小数点后2位。
【样例输入】3.1 4.2 5.17
【样例输出】6.51
#include<stdio.h>
#include<math.h>
int main()
{
float a,b,c,s,area;
scanf("%f%f%f",&a,&b,&c);
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("%.2f",area);
return 0;
}
2.找出能够组成的最大三位数
【问题描述】输入三个正整数,这三个整数数值范围在0到9之间,且互不相同,请找出由这三个整数组成的最大三位整数。
【输入形式】输入三个整数,不考虑输入错误的情况,数据之间用单个空格隔开。
【输出形式】输出组成的最大三位整数。
【样例输入】1 2 3
【样例输出】321
#include<stdio.h>
int main()
{
int a,b,c,t;
scanf("%d%d%d",&a,&b,&c);
if(a<b)
{
t=a;
a=b;
b=t;
}
if(b<c)
{
t=b;
b=c;
c=t;
}
if(a<b)
{
t=a;
a=b;
b=t;
}
t=a*100+b*10+c;
printf("%d",t);
return 0;
}
3.计算天数
【问题描述】输入年、月、日,用程序计算一下该日期是这一年的第几天。
【输入形式】输入三个整数,分别表示年、月、日,数与数之间用空格隔开。
【输出形式】输出计算的结果
【样例输入】2015 2 1
【样例输出】32
#include<stdio.h>
int main()
{
int y,m,d,i,sum=0;
scanf("%d%d%d",&y,&m,&d);
for(i=1;i<m;i++)
{
switch(i)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:sum+=31;break;
case 4:
case 6:
case 9:
case 11:sum+=30;break;
case 2: if(y%400==0||(y%4==0&&y%100!=0))
{sum+=29;break;}
else
{sum+=28;break;}
}
}
printf("%d",sum+d);
return 0;
}
4.求两个正整数的最小公倍数
【问题描述】输入两个正整数,编写函数实现求这两个正整数的最小公倍数。
【输入形式】输入两个正整数。
【输出形式】输出最小公倍数。
【样例输入】2 4
【样例输出】4
【样例输入】12 23
【样例输出】276
#include <iostream>
#include <stdio.h>
#include<stdlib.h>
int main()
{
int lcm,m,n;
scanf ("%d%d",&m,&n);
if(m<n)
{lcm=m;m=n;n=lcm;}
for(lcm=m;;lcm++)
if(lcm%m==0&&lcm%n==0)
break;
printf("%d",lcm);
return 0;
}
5.根据日期计算星期几
【问题描述】输入年、月、日,输出当天是星期几。已知2000年1月1日为星期六
【输入形式】输入三个整数,分别表示年、月、日,数与数之间用空格隔开。
【输出形式】输出一个整数。(1~7分别表示星期一至星期日)
【样例输入】2000 1 2
【样例输出】7
【样例输入】2000 1 1
【样例输出】6
【样例输入】1999 12 31
【样例输出】5
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int a[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
int main()
{
int y, m, d;
scanf("%d %d %d", &y, &m, &d);
if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
a[2] = 29;
int ans = d, i;
for (i = 1; i <= m - 1; i++)
{
ans += a[i];
}
int s, r;
s = y - 1 + (y - 1) / 4 - (y - 1) / 100 + (y - 1) / 400 + ans;
r = s % 7;
if (r == 0)
r = 7;
printf("%d\n", r);
return 0;
}
实验一、学生计算能力进阶训练程序
1. 自定义难度等级(例如:第1级为一位数和一位数的加法,减法和乘法运算;第2级为一位数和两位数的加法,减法和乘法运算;第3级为两位数和两位数的加法,减法和乘法运算),学生可以选择不同等级练习,某个等级练习的正确率在90%以上,可以升级;正确率在60%以下,则要降级;
2. 每组难度题目数量为10题,软件随机出题,学生填写答案;
3、一组题全部答完后,显示学生成绩,并根据结果自动升降级,完成通关训练。
提示:1、同学们需自行上网查找生成随机数的方法;
2、可借鉴“2023-2024(1)基本结构程序设计编程练习题”作业中“程序片段编程题”的第一题完成计算表达式的生成。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
srand((unsigned)time(NULL));
一:int s, r = 0, j;//s十题,r对,j结果
for (s = 1; s <= 10; s++)
{
int a = rand() % 10, b = rand() % 10, c = rand() % 3;//c运算符号
switch (c)
{
case 0:printf("%d+%d=", a, b); break;
case 1:printf("%d-%d=", a, b); break;
case 2:printf("%d*%d=", a, b); break;
}
scanf("%d", &j);
switch (c)
{
case 0:if (j == a + b)
{
r++;
break;
}
case 1:if (j == a - b)
{
r++;
break;
}
case 2:if (j == a * b)
{
r++;
break;
}
}
}
if (r <= 9)
goto 一;
二:r = 0;//s十题,r对,j结果
for (s = 1; s <= 10; s++)
{
int a = rand() % 100, b = rand() % 10, c = rand() % 3;//c运算符号
switch (c)
{
case 0:printf("%d+%d=", a, b); break;
case 1:printf("%d-%d=", a, b); break;
case 2:printf("%d*%d=", a, b); break;
}
scanf("%d", &j);
switch (c)
{
case 0:if (j == a + b)
{
r++;
break;
}
case 1:if (j == a - b)
{
r++;
break;
}
case 2:if (j == a * b)
{
r++;
break;
}
}
}
if (r <= 9 && r >= 6)
goto 二;
if (r < 6)
goto 一;
三:r = 0;//s十题,r对,j结果
for (s = 1; s <= 10; s++)
{
int a = rand() % 100, b = rand() % 100, c = rand() % 3;//c运算符号
switch (c)
{
case 0:printf("%d+%d=", a, b); break;
case 1:printf("%d-%d=", a, b); break;
case 2:printf("%d*%d=", a, b); break;
}
scanf("%d", &j);
switch (c)
{
case 0:if (j == a + b)
{
r++;
break;
}
case 1:if (j == a - b)
{
r++;
break;
}
case 2:if (j == a * b)
{
r++;
break;
}
}
}
if (r <= 9 && r >= 6)
goto 三;
if (r < 6)
goto 二;
printf("结束");
return 0;
}
实验二、中国著名科学家主要生平事迹查询程序
1、了解电脑系统或手机系统中万年历查询的基本功能;
2、了解中国著名科学家主要生平事迹信息;
3、输入包括年、月的日期,实现输出相应月历表,以及对应日期的科学家生平事迹信息的功能; 例如,钱学森的主要生平事迹简介:钱学森(英文:Qian Xuesen Qian XuesenQian Xuesen Qian XuesenQian XuesenQian Xuesen ,19111911 1911年12 月11 日—2009 20092009年10 月31 日),出生于上海,籍贯浙江杭州,中国共产党的优秀党员,忠诚的共产主义战士,享誉海内外的国家杰出贡献科学家和中国航天事业的奠基人,中国科学院、中国工程院资深院士,中国人民政治协商会议第六届、七届、八届全国委员会副主席,两弹一星功勋奖章获得者 。 钱学森1929 —1934 年就读于国立交通大学机械工程系 ;1939 年获得美国加州理工学院航空和数学博士学位 ;1947 年任麻省理工学院教授;1956 年任中国科学院力学研究所所长;1957 19571957年补选为中国科学院学部委员(院士);1965 1965 年任中华人民共和国第七机械工业部副部长;1970 年任中国人民解放军国防科学技术委员会副主任 ;1986 年6月任中国科学技术协会主席 ;19941994 1994年当选为中国工程院院士 ;钱学森主要从事应用力学、工程控制论、航空工程、火箭导弹技术、系统工程和系统科学、思维科学和人体科学以及马克思主义哲学等领域的研究 。 1991 年10 月钱学森被国务院、中央军委授予“国家杰出贡献科学家”荣誉称号,被中央军委授予一级英雄模范奖章。1999 19991999年9月被党中央、国务院、中央军委授予“两弹一星功勋奖章” 。2009 年10 月31 日在北京逝世,享年98 岁。 用户输入1991 ,10 ,程序能够输出此月份所在的月历表,并给出该月份的科学家事迹 1991 19911991年10 月钱学森被国务院、中央军委授予“国家杰出贡献科学家” 荣誉称号,被中央军委授予一级英雄模范奖章”。如果同月有其它事迹,也逐一列出。
4、提供主要生平事迹的查询显示功能,显示方式和形式自行设计。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
void month_cd(int months);//月历函数
int year, month, day = 1, week, i, j, k;
int years[12][6][7] = { 0 };//年历数组(?)
int monthname[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
char weekname[] = "SUN MON TUE WED THU FRI SAT";
int main() {
scanf("%d", &year);
//星期计算(固定算法)
day = year - 1 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400 + day;
week = day % 7;//week·星期几
//闰年计算
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
monthname[1] = 29;
}
scanf("%d", &month);
month_cd(month);
printf("%s\n", weekname);
for (i = 0; i < 6; i++) {
for (j = 0; j < 7; j++) {
if (years[month - 1][i][j] == 0) {
printf(" ");
}
else {
printf("%-5d", years[month - 1][i][j]);
}
}
printf("\n");
}
//输出科学家事迹
if (year == 1911)
if (month == 12)
printf("出生于上海,籍贯浙江杭州,中国共产党的优秀党员,忠诚的共产主义战士,享誉海内外的国家杰出贡献科学家和中国航天事业的奠基人,中国科学院、中国工程院资深院士,中国人民政治协商会议第六届、七届、八届全国委员会副主席,两弹一星功勋奖章获得者 。\n");
if (year >= 1929 && year <= 1934)
printf("就读于国立交通大学机械工程系\n");
if (year == 1939)
printf("获得美国加州理工学院航空和数学博士学位\n");
if (year == 1947)
printf("任麻省理工学院教授\n");
if (year == 1956)
printf("任中国科学院力学研究所所长\n");
if (year == 1957)
printf("补选为中国科学院学部委员(院士)\n");
if (year == 1965)
printf("任中华人民共和国第七机械工业部副部长\n");
if (year == 1970)
printf("任中国人民解放军国防科学技术委员会副主任\n");
if (year == 1986)
if (month == 6)
printf("任中国科学技术协会主席\n");
if (year == 1994)
printf("当选为中国工程院院士 ;钱学森主要从事应用力学、工程控制论、航空工程、火箭导弹技术、系统工程和系统科学、思维科学和人体科学以及马克思主义哲学等领域的研究 。\n");
if (year == 1991)
if (month == 10)
printf("钱学森被国务院、中央军委授予“国家杰出贡献科学家”荣誉称号,被中央军委授予一级英雄模范奖章。\n");
if (year == 1999)
if (month == 9)
printf("被党中央、国务院、中央军委授予“两弹一星功勋奖章” 。\n");
if (year == 2009)
if (month == 10)
printf("在北京逝世,享年98 岁。\n");
return 0;
}
void month_cd(int months) {//months为要计算的月份
int days = week;
int nday = 1;
for (i = 0; i < months - 1; i++) {
days += monthname[i];
}
days = days % 7;
for (i = 0; i < 6; i++) {
for (j = days; j < 7; j++) {
days = 0;
years[months - 1][i][j] = nday++;
if (nday - 1 == monthname[months - 1]) {
return;
}
}
}
}
注:原实验三为多个合作实验题目,故暂不给出源代码
实验三、国产战机性能参数比较程序
- 了解国产化战斗机发展历程,查阅并了解我国战斗机的性能参数;
- 至少录入五种以上国产战斗机的性能参数,包括飞行型号、飞机名称,机身长,机身宽,翼展,最大飞行速度,最大飞行高度,航程,作战半径,载弹量等;使用正确的数据类型对以上信息进行保存;
- 至少自定义两个函数,实现对不同参数进行排序的功能;
- 设计合理的用户交互程序,实现对这些参数的显示、查询、排序等菜单功能。
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <string.h> // 国产战斗机结构体定义 typedef struct Fighter { char model[50]; char name[50]; int length; int width; int wing_span; int max_speed; int max_height; int range; int radius; int payload; } Fighter; // 冒泡排序函数 void bubbleSort(Fighter arr[], int n) { for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - i - 1; j++) { if (arr[j].max_speed < arr[j + 1].max_speed) { Fighter temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } // 显示所有战斗机信息 void displayFighters(Fighter arr[], int n) { printf("Model\tName\tLength\tWidth\tWing Span\tMax Speed\tMax Height\tRange\tRadius\tPayload\n"); for (int i = 0; i < n; i++) { printf("%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n", arr[i].model, arr[i].name, arr[i].length, arr[i].width, arr[i].wing_span, arr[i].max_speed, arr[i].max_height, arr[i].range, arr[i].radius, arr[i].payload); } } // 查询战斗机信息 void searchFighter(Fighter arr[], int n) { char model[50]; printf("请输入要查询的飞机型号:"); scanf("%s", model); for (int i = 0; i < n; i++) { if (strcmp(model, arr[i].model) == 0) { printf("找到的飞机信息如下:\n"); printf("%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n", arr[i].model, arr[i].name, arr[i].length, arr[i].width, arr[i].wing_span, arr[i].max_speed, arr[i].max_height, arr[i].range, arr[i].radius, arr[i].payload); return; } } printf("未找到该型号的飞机。\n"); } int main() { Fighter fighters[] = { {"J-20", "歼-20", 20.3, 4.7, 13.6, 2100, 18000, 2000, 1100, 11}, {"J-15", "歼-15", 22.2, 9.7, 15.0, 1750, 15000, 3500, 1200, 8}, {"J-16", "歼-16", 21.9, 12.0, 14.7, 1800, 18000, 3900, 1500, 12}, {"J-10B", "歼-10B", 16.9, 9.8, 9.5, 1550, 16000, 1800, 1100, 7}, {"JF-17", "枭龙", 14.3, 9.1, 8.9, 1700, 16000, 1200, 800, 3} }; int n = sizeof(fighters) / sizeof(fighters[0]); while (1) { printf("\n请选择操作:\n"); printf("1. 显示所有战斗机信息\n"); printf("2. 根据最大速度排序\n"); printf("3. 查询战斗机信息\n"); printf("4. 退出程序\n"); int choice; scanf("%d", &choice); switch (choice) { case 1: displayFighters(fighters, n); break; case 2: bubbleSort(fighters, n); printf("已按照最大速度排序:\n"); displayFighters(fighters, n); break; case 3: searchFighter(fighters, n); break; case 4: return 0; default: printf("无效的选择,请重新输入。\n"); } } return 0; }