《C语言及程序设计》实践项目——初练结构体

返回:贺老师课程教学链接

【项目1-复数结构体】

编写一个程序,首先定义一个复数数据类型,即结构类型。然后按照复数的运算规则进行计算,并按照复数表示的格式进行输出,请将程序补充完整。

#include <stdio.h>
struct complex
{
    int re;
    int im;
};
int main()
{
    struct complex x,y,s,p;
    scanf("%d%d",&x.re,&x.im);
    scanf("%d%d",&y.re,&y.im);
    //复数s是复数x和y的和
    s.re=_______(1)_______;
    s.im=_______(2)_______;
    printf("   sum=%5d+%5di\n",s.re,s.im);
    //复数p是复数x和y的积
    p.re=_______(3)_______;
    p.im=x.re*y.im+x.im*y.re;
    printf("   product=%5d+%5di\n",p.re,p.im);
    return 0;
}

[参考解答]


【项目2-学生成绩处理】

(1)定义学生结构体,在结构体数组中,输入了学生学号和两门课的成绩,计算均分后,输出成绩单,请在下面的程序基础上,将程序补充完整。

#include <stdio.h>
#define N 100  /*N表示最多允许的学生人数*/
struct Student
{
   int num; //学号
   int c; //C语言成绩
   int math; //数学成绩
   float aver;  //两科均分
};
int main( )
{
   int n;
   //定义结构体数组存放多名同学的成绩
   struct Student stu[N];
   printf("请输入学生人数: ");
   scanf("%d", &n);
   printf("请输入学号、C和数学课的成绩: \n");
   //输入数据

   //输出成绩单

   return 0;
} 

(2)请在上面的程序的基础上增加功能,使运行结果如下图:

其中,需要做出的改动是:

  • 计算每名学生的学分绩——各科成绩乘以学分的和,再除以总学分(本题中,C语言和数学课的学分分别是3和4);
  • 计算各科的均分;
  • 输出得奖学金的同学学号清单——奖学金规则是,学分绩要高于80且没有挂科。
    [参考解答]

【项目3-点结构体】

下面定义了一个表示平面上一点的结构体类型:

struct Point
{
    float x;  //横坐标
    float y;  //纵坐标
};  

(1)请编写程序,输入一点的横纵坐标,输出该点到原点的距离
(2)请编写程序,输入两点p1和p2的坐标,输出两点之间的距离,以及p1关于x轴的对称点,p2关于原点的对称点,运行结果如下图所示:

[参考解答]


【项目4-体重监测器】

根据世界卫生组织推荐的体重标准,男性的标准体重=(身高cm-80)×70﹪,女性的标准体重=(身高cm-70)×60﹪。标准体重正负10﹪为正常体重;标准体重正负10﹪~ 20﹪为体重过重或过轻;标准体重正负20﹪以上为肥胖或体重不足,其中超重计算公式为:超重(%)=[(实际体重-标准体重)/(标准体重)]×100%,体重的单位是kg。
请编程序,输入一个人的姓名、性别、身高、体重,用一句人性味浓的话语输出其体重情况(正常、过重、过轻、肥胖或体重不足),这个程序可以用于体重计上为人们实时报告体重情况。
要求使用下面的结构体类型表示人的相关信息。

struct Person
{
    char name[20];
    char sex;  //'F'-女,'M'-男
    double height;  //cm
    double weight;  //kg
};

[参考解答]


【项目5-个税计算器之码数分离】

在学习分支结构时,我们做过一个个人所得税计算器if语句版,在其中,税率等数据直接写进了程序。这并不是一个好的方案。
下面定义了一个结构体数组,保存各个收入范围个税计算的基础数据,这样,一定程度上,将代码与数据分离,这是工程中常见的做法。
请先对照附后的个人所得税计算方法,理解下面的结构体数组:

struct TaxNode
{
    int payTax;
    double rate;
    int deducted;
} taxNode[10]=
{
    {0,0.03,0},
    {1500,0.10,105},
    {4500,0.20,555},
    {9000,0.25,1005},
    {35000,0.30,2755},
    {55000,0.35,5505},
    {80000,0.45,13505}
};

编写程序,利用这个结构体数组,输入个人月收入总额,计算并输出他本月应缴税款和税后收入。
附:关于个人所得税的有关背景知识
计算方法:个人所得税=(收入总额-3500)*税率-速算扣除数
从2011年9月1日起,我国个人所得税起征点基数为3500元,超出部分按以下7级计算。
计算。

序号 收入范围 税率 速算扣除数
1 超过0至1500 3% 0
2 超过1500元至4500元的部分 10% 105
3 超过4500元至9000元的部分 20% 555
4 超过9,000元至35,000元的部分 25% 1005
5 超过35,000元至55,000元的部分 30% 2755
6 超过55,000元至80,000元的部分 35% 5505
7 超过80,000以上 45% 13505

例如:王某月收入总额3600元,个人所得税=(3600-3500)*3%=3元;
再例:李某月收入13500元,个人所得税=(13500-3500)*25%-1005=2500-1005=1495元。
更多了解速算扣除数,请找百度百科。
[参考解答]


【项目6-日期结构体】

(1)定义一个结构体变量(包括年、月、日),要求输入年、月、日,计算输出该日是该年的第几天。

#include <stdio.h>
struct Date
{
    int year;
    int month;
    int day;
};
int main()
{
    struct Date date;
    printf("input year,month,day:");
    scanf("%d %d %d", &date.year, &date.month, &date.day);
    int days;
    //计算days

    printf("%d月%d日是%d年的第%d天.\n", date.month, date.day, date.year, days);
    return 0;
}

(2)输入两个人的生日,求出他们相差多少天。
[参考解答]


【项目7-紧急救援】

洪水突降,人们被困在各个屋顶上。如图所示:

救生船每次将从大本营出发,救了人之后将人送回大本营。已知救生船速度50米/分钟,逐个屋顶救人,每人上船1分钟,下船0.5分钟。以救援大本营为原点,输入每个屋顶的位置坐标和屋顶上的人数,求出所有人都到达大本营并登陆所用的时间。
要求使用结构体表示屋顶的坐标和人数。
[参考解答]

时间: 2024-09-19 20:39:03

《C语言及程序设计》实践项目——初练结构体的相关文章

C语言及程序设计进阶例程-11 体验结构体

贺老师教学链接  C语言及程序设计进阶 本课讲解 结构体类型变量的定义方法 #include <stdio.h> struct Student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; int main( ) { struct Student student1, student2; printf("%d\n", sizeof(student1)); return 0

C语言及程序设计进阶例程-15 指向结构体的指针

贺老师教学链接  C语言及程序设计进阶 本课讲解 指向结构体变量的指针的应用 #include <stdio.h> #include <string.h> struct Student { int num; char name[12]; char sex; float score; }; int main( ) { struct Student stu; stu.num=10301; strcpy(stu.name, "Wang Fun"); stu.sex='

C语言及程序设计进阶例程-16 当结构体成员为指针

贺老师教学链接  C语言及程序设计进阶 本课讲解 有问题吗? #include <stdio.h> #include <string.h> struct Test { int x; char *str; }; int main() { struct Test a; a.x=100; char s[]="Hello"; strcpy(a.str,s); printf("%d %s\n", a.x, a.str); return 0; } 正解-

C语言程序设计实践(OJ)-结构体

2428: 计算该日在本年中是第几天 Description 定义一个结构体变量(包括年.月.日).编写一个函数days,由主函数将年.月.日传递给函数days,计算出该日在本年中是第几天并将结果传回主函数输出. Input 年月日 Output 当年第几天 Sample Input 2000 12 31 Sample Output 366 HINT 主函数已给定如下,提交时不需要包含下述主函数 /* C代码 */ int main() { y_m_d date; int days(y_m_d)

C++第2周(春)项目3 文件+结构体实现实用系统

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目3-文件+结构体实现实用系统]score.txt(本文后提供了一部分数据,自行copy建文本文件)中是一些同学的学号.姓名.C++.高数.英语成绩,利用前两个项目中定义的结构体数组,读取文件中的数据,完成下面的应用: (1)从文件中读出数据,存放到结构体数组中: 博文"C++文件操作初体验"http://blog.csdn.ne

C语言 socket 如何发送带指针的结构体?

问题描述 C语言 socket 如何发送带指针的结构体? 发送一个带指针的结构体,我知道怎么发送? 先把结构体转换成字符串,然后发出.但是接收的时候,怎么接收到结构体中?thanks! 解决方案 发送: struct f;char *ffff[sizeof(f)];memcpy(ffff &f sizeof(f)); 接收: struct f; ffff为收到的数据 memcpy(&f ffff sizeof(ffff)); 解决方案二: C语言---结构体指针C语言--结构体中的指针C语

c-萌妹纸@C语言大神,学科平均分用结构体,此题跪求代码?

问题描述 萌妹纸@C语言大神,学科平均分用结构体,此题跪求代码? 题目: 班里10名同学,选修物理和数学的同学各有若干名. 现在录入同学学号,姓名,选修课程编号,以及其成 绩, 要求计算出物理.数学课程的平均分,各成绩段学 生数和比例,最高分及学生信息. 其中,分数(含平均分)都按百分制(整数处理) ,比例按浮点数处理,精确到小数点后两位.平均 分取整时按四舍五入处理,例如,74.5,四舍五入为 75.最高分可能有多个.(要求,分别建立班级类 ,课程类.班级类包含所有学生信息,课程类实例为 物理

C++第1周项目2——日期结构体

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565 [项目2-日期结构体]定义一个结构体变量(包括年.月.日),要求输入年.月.日,计算输出该日是该年的第几天? /* * 程序的版权和版本声明部分 * Copyright (c)2013, 烟台大学计算机学院学生 * All rightsreserved. * 文件名称: date.cpp * 作 者: * 完成日期: 年 月 日 * 版本号: v1.0 * 输入描述:年月

C语言及程序设计初步例程-7 分支结构程序体验

贺老师教学链接  C语言及程序设计初步 本课讲解 例:给两个数,求两数中的大者(双分支) #include <stdio.h> int main( ) { int a,b,c; scanf("%d %d", &a, &b); if(a>b) { c=a; //if语句,如果a>b,则将a的值赋给c } else { c=b; //否则,将b的值赋给c } printf("max=%d\n",c); return 0; } 再解