【程序设计基础实验】习题

沈阳航空航天大学实验习题的整理,仅供参考。

一些练习

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;
            }
        }
    }
}

注:原实验三为多个合作实验题目,故暂不给出源代码

实验三、国产战机性能参数比较程序

  1. 了解国产化战斗机发展历程,查阅并了解我国战斗机的性能参数;
  2. 至少录入五种以上国产战斗机的性能参数,包括飞行型号、飞机名称,机身长,机身宽,翼展,最大飞行速度,最大飞行高度,航程,作战半径,载弹量等;使用正确的数据类型对以上信息进行保存;
  3. 至少自定义两个函数,实现对不同参数进行排序的功能;
  4. 设计合理的用户交互程序,实现对这些参数的显示、查询、排序等菜单功能。
    #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;
    }
  • 20
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lnk_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值