结构体
实验目的
(1)掌握结构变量的基本使用方法
(2)掌握结构数组的基本使用方法
(3)掌握结构的简单嵌套应用
(4)掌握结构指针的概念、及结构指针作为函数参数的编程方法
实验条件:
PC 计算机,Windows7 或 Windows10 操作系统,Office2010 及以上版本,
Dev-C++5.11 及以上版本或 Code Blocks16.01 及以上版本。
实验内容
- 程序调试
计算职工工资:输入一个整数 n(3≤n≤10),再输入 n 个职员的信息(如 表 11.1),要求输出每位职员的姓名和实发工资(实发工资=基本工资+浮动工资 -支出)。
源程序(有错误)
#include<stdio.h>
int main()
{
struct emp {
char name[10];
float element_salary;
float performance_salary;
float deductions;
};
emp s[10];
int i,n;
printf("n= ");
scanf("%d", &n);
for (i=0; i<n;i++)
{
scanf("%s %f %f %f", s[i].name, s[i].&element_salary
s[i].&performance_salary, s[i].&deductions);
}
for (i=0; i<n;i++)
{
printf("%s 实发工资%f\n",
s[i].name, s[i].element_salary+
s[i].performance_salary- s[i].&deductions);
}
return 0;
}
程序清单如下:
#include<stdio.h>
int main()
{
struct emp {
char name[10];
float element_salary;
float performance_salary;
float deductions;
};
struct emp s[10];
int i,n;
printf("n= ");
scanf("%d", &n);
for (i=0; i<n;i++)
{
scanf("%s %f %f %f", s[i].name, &s[i].element_salary,//.的优先 级高于&
&s[i].performance_salary, &s[i].deductions);
}
for (i=0; i<n;i++)
{
printf("%s 实发工资%f\n",
s[i].name, s[i].element_salary+
s[i].performance_salary- s[i].deductions);
}
return 0;
}
该程序的运行结果如图一所示:
图一
2.基础编程
(1)计算两个复数之积:利用结构变量求解两个复数之积,输入复数的实
部与虚部都为整数。
样例输入:3+4i
5+6i
样例输出:-9+38i
程序清单如下:
#include<stdio.h>
struct
number
{
int a;
char b;
int c;
char d;
};
void input(struct number *p,struct number *q);
void outputresult(struct number *m,struct number *n,struct number *k);
int main()
{
struct number x,y,z;
input(&x,&y);
outputresult(&x,&y,&z);
printf("%d%c%d%c",z.a,z.b,z.c,z.d);
return 0;
}
void input(struct number *p,struct number *q)
{
printf("Please input frist complex:");
scanf("%d%c%d%c",&p->a,&p->b,&p->c,&p->d);printf("Please input second complex:");
scanf("%d%c%d%c",&q->a,&q->b,&q->c,&q->d);
}
void outputresult(struct number *m,struct number *n,struct number *k)
{
k->a=(m->a)*(n->a)-(m->c)*(n->c);
k->c=(m->a)*(n->c)+(m->c)*(n->a);
k->d='i';
if(m->b=='+'&&n->b=='+')
{
k->b='+';
}
else if(m->b=='-'&&n->b=='-')
{
k->b='+';
}
else if((m->b=='+'&&n->b=='-')||m->b=='-'&&n->b=='+')
{
k->b='-';
}
}
该程序的运行结果如图二所示:
图二
(2)查找书籍:从键盘输入 n(n<10)本书的书名和定价存入结构数组中,
从中查找定价最高和定价最低的书的名称和定价,并输出。试编写相应的程序。
样例输入:3
programming
in
C 21.5
programming
in
Java 18.5
programming
in
Python
30.0
样例输出:30.00,
programming
in
Python
18.50,
programming
in
Java
程序清单如下:
#include<stdio.h>struct book
{
char bookname[10];
float price;
};
void output(struct book x[],int n,struct book temp);
int main()
{
struct book x[10],temp;
int n,i;
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("programming in ");
scanf(" %s",&x[i].bookname);
scanf(" %f",&x[i].price);
}
output(x,n,temp);
return 0;
}
void output(struct book x[],int n,struct book temp)
{
int i,j,k;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(x[j].price>x[i].price)
{
k=j;
}
}
if(k!=i)
{temp=x[k];
x[k]=x[i];
x[i]=temp;
}
}
printf("%.2f,programming in %s \n",x[0].price,x[0].bookname);
while(getchar()!='\n');
printf("%.2f,programming in %s \n",x[n-1].price,x[n-1].bookname);
}
该程序的运行结果如图三所示:
图三