用结构体解决实际问题中构造数据类型。
- 实验内容
(1)题目:编写input()和output()函数输入,输出5个学生的数据记录。学生数据定义如下:
#define N 5
struct student
{ char num[6];
char name[8];
int score[4];
} stu[N];
input(struct student stu[])
{
int i,j;
for(i=0;i<N;i++)
{
printf("\n please input %d of %d\n",i+1,N);
printf("name:\n");
scanf("%s",stu[i].name);
printf("num:\n");
scanf("%s",stu[i].num);
for(j=0;j<3;j++)
{
printf("score %d\n",j+1);
scanf("%d",&stu[i].score[j]);
}
printf("\n");
}
}
print(stu)
struct student stu[];
{
int i,j;
for(i=0;i<N;i++){
printf("%-6s%-10s",stu[i].num,stu[i].name);
for(j=0;j<3;j++){
printf("%-8d",stu[i].score[j]);
}
printf("\n");
}
}
int main(){
input(stu);
output(stu);
}
实验结果:
(2)根据定义类型,找到年龄最大的人,并输出。
#define N 4
#include "stdio.h"
static struct man
{ char name[20];
int age;
} person[N]={"li",18,"wang",19,"zhang",20,"sun",22};
main()
{
struct man *q,*p;
int i,m=0;
p=person;
for (i=0;i<N;i++)
{
if(m<p->age)
q=p++;
m=q->age;
}
printf("%s,%d",(*q).name,(*q).age);
return 0;
}
实验结果:
(3)题目:看下面代码,写出运行结果(结构体变量传递)。
1.程序分析:
2.程序源代码:
#include "stdio.h"
struct student
{ int x;
char c;
} a;
f(struct student b)
{
b.x=20;
b.c='y';
printf("%d,%c\n",b.x,b.c);
}
main()
{a.x=3;
a.c='a';
f(a);
printf("%d,%c\n",a.x,a.c);
}
(4)题目:有五个学生(定义如下),每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩并输出。
#include "stdio.h"
struct student
{ char num[6];
char name[8];
int score[3];
float avr;
} stu[3];
main()
{
int i,j,sum;
for(i=0;i<3;i++)
{
printf("\n please input No.%d score:\n",i);
printf("stuNo:");
scanf("%s,stu[i].num");
printf("name:");
scanf("%s,stu[i].name");
sum=0;
for(j=0;j<3;j++)
{
printf("score %d",j+1);
scanf("%d,stu[i].score[j]");
sum+=stu[i].score[j];
}
stu[i].avr=sum/3.0;
printf("average score %f",stu[i].avr);
}
printf("score output\n");
}
编写程序时,不可避免的会犯错误。每一个程序都离不开反复的调试、修改最终才能完成,所以说,调试程序是编程过程中必不可少的一个过骤,
1.语法错误
在计算机科学中,语法错误是指程序员的语法有误,编译器或解释器在词法分析时无法将其转换为适当的编程语言。在编程语言中,语法错误一定只在编译期出现。
每行包含了一个学生的学号(整数)、名字(长度不超过19的无空格字符串)和3门课程的成绩(0至100之间的整数)。
结构体变量作为函数参数[实参与形参]时,形参结构体变量成员值的改变不影响对应的实参构体变量成员值的改变。
结构体数组或结构体指针变量作为函数参数时,形参结构体数组元素成员值的改变将影响对应的实参构体数组成员值的改变。
结构体变量可作为函数的参数,函数可返回一结构体类数据
p=&b; 使结构体指针变量p指向结构体变量b的空间。
p->num:表示通过指针变量引用结构体变量b的成员num。
p=a;或p=&a[0];将结构体指针变量指向结构体数组a。
2.语义(逻辑)错误
与语法错误不同的是,语义错误符合语法规范,代码能通过编译,但逻辑思维有问题,运行结果与预期不符。语义错误的唯一表现就是错误的运
可能是语句中出现了差错(比如公式写错)、算法中的错误,甚至选择了错误的算法。此外,还有一些其他的原因,如类型转换错误变量作用域错误、遗漏的代码段、对问题或需求的理解有误等等。
如果公式stu[i].avr=sum/3.0;错误,会导致运行结果与预期不符,所以一定要保证公式无误,才能的得出正确的结果。