实验06结构体(2023级)吉林大学高级语言程序设计作业

请同学们先看提示,自行思考实践后无果再看通过代码。学习不要欺骗自己!!!

欢迎校友+q3023225096进行讨论交流

1. 提示:struct和int一样也可以用来定义函数,只不过返回结构体类型

题目编号 :Exp07-Basic01

题目名称:复数运算

题目描述:复数可以写成A+Bi的常规形式,其中A是实部,B是虚部,i是虚数单位,满足i^2=-1。

编写程序,分别计算两个复数的和、差、积。

输入:在一行中依次给出两个复数的实部和虚部,数字间以一个西文空格分隔。

输出:一行中按照A+Bi的格式输出两虚数的和、差、积,实部和虚部均保留2位小数;

如果B是负数,则应该写成A-|B|i的形式;如果B是零则不输出虚部;结果间以4个西文空格间隔。

样例1:

输入: 2.3 3.5 5.2 0.4

输出: 7.50+3.90i    -2.90+3.10i    10.56+19.12i

样例2:

输入: 3.3 4.5 3.3 -4.5

输出: 6.60    0.00+9.00i    31.14

这道题很好,覆盖了结构体的最基本的用法,建议细品,做出来你结构体基本就通了

#include<stdio.h>

struct complex            //结构体定义
{
	float real;
	float imag;
};

struct complex add(struct complex c1, struct complex c2);            //结构体类函数声明
struct complex subtract(struct complex c1, struct complex c2);       //函数定义在主函数后面
struct complex multiply(struct complex c1, struct complex c2);
void complexprint(struct complex c);

int main()        //主函数
{
	float r1, i1, r2, i2;
	scanf("%f%f%f%f", &r1, &i1, &r2, &i2);
	struct complex c1 = { r1,i1 }, c2 = { r2,i2 };        //结构体声明
	complexprint(add(c1, c2)); printf("    ");
	complexprint(subtract(c1, c2)); printf("    ");      //间隔打四个空格控制格式
	complexprint(multiply(c1, c2));
}

void complexprint(struct complex c)                        //输出功能函数定义
{                                                          //三种情况分开输出
	if (c.imag > 0) printf("%.2f+%.2fi", c.real, c.imag);
	else if (c.imag < 0) printf("%.2f%.2fi", c.real, c.imag);
	else printf("%.2f", c.real);
}

struct complex add(struct complex c1, struct complex c2)        //加法功能函数定义
{
	struct complex result;                    //result作为形参,否则超星报错,尽管本地通过
	result.real = c1.real + c2.real;          //比如在主函数中声明或全局声明
	result.imag = c1.imag + c2.imag;          //这导致result数据不断被覆盖
	return result;
}

struct complex subtract(struct complex c1, struct complex c2)    //减法功能函数定义
{
	struct complex result;
	result.real = c1.real - c2.real;
	result.imag = c1.imag - c2.imag;
	return result;
}

struct complex multiply(struct complex c1, struct complex c2)    //乘法功能函数定义
{
	struct complex result;
	result.real = c1.real * c2.real- c1.imag * c2.imag;
	result.imag = c1.real * c2.imag + c2.real * c1.imag;
	return result;
}

2. 提示:关键在于如何处理输入的数据

【计2016级期末试题】构造一个表示教师的结构体(包含3个字段:姓名、性别、年龄),编写函数,读入n个教师的信息,存入一个结构体数组中(如下图所示)。最后输出第n/2个教师的信息。

例如:一个教师的信息为zhangsan、false、50,另一个教师的信息为lisi、false、37。

输入:依次输入一个正整数n及n个教师的姓名、性别、年龄。(说明:n不大于10;姓名长度不超过20个英文字符;性别输入0/1表示女/男)。

输出:数组下标为n/2的教师信息。(说明:n/2直接截取整数,不进行四舍五入;性别输出Female/Male表示女/男;每个数据后均有1个空格)。

样例1:

输入:1 zhangsan 0 50

输出:zhangsan Female 50

样例2:

输入:4 zhangsan 0 50 lisi 1 28 wangwu 0 30 zhaoliu 1 34

输出:wangwu Female 30

样例3:

输入:5 zhangsan 0 50 lisi 1 28 wumei 0 30 zhaoliu 1 34 wangermazi 1 18

输出:wumei Female 30

我承认我这道题卡bug了,直接把目标数据之外的全都舍弃(滑稽)。原题考链表,改编后简化了,有时间的话可以当做链表入门题

#include<stdio.h>
struct teacher
{
	char name[21];
	int gender;
	int age;
}c;                                    //同时进行结构体的定义和声明

void output(struct teacher c);

int main()
{
	int n = getchar() - '0';
	for (int i = 0; i < n / 2 + 1; i++)                      //投机取巧
		scanf(" %s %d %d", &c.name, &c.gender, &c.age);
	output(c);
	return 0;
}

void output(struct teacher c)
{
	printf("%s ", c.name);
	if (c.gender == 0) printf("Female ");
	else printf("Male ");
	printf("%d", c.age);
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值