当前位置:
文档之家› C语言实验 第七章 第九章2
C语言实验 第七章 第九章2
3.改错题: 下面程序是用指针法将一个字符串 a 复制到字符串 b 中,
void main() {
char a[]="I am a boy.",b[20], *p1,*p2; int i; p1=a;p2=b; for( ; *p1!=’\0’;p1++,p2++)
*p2=*p1; p2=’\0’; printf("string a is:%s\n",a); printf("string b is:"); for(i=0;b[i]!=’\0’;i++)
答案:
1、boy.age=15; 2、boy.grade=75; 3、boy.initial,boy.age,boy.grade 4、girl.initial,girl.age,girl.grade
运行结果: boy:R is 15 years old and got a grade of 75 girl:H is 14 years old and got a grade of 82
与二维数组的初始化类似。 (3)结构体指针案例。 有一个结构体变量 stu,内含学生学号、姓名和三门课成绩。要求在 mian()中赋以值,
在函数 print 中打印输出。
本题涉及结构体指针作为函数参数的使用。
#include <stdio.h>
#include <string.h>
#define FORMAT “%d\n %s\n %.1f\n %.1f\n %.1f\n”
输入: Zhang Wang Li Zhang Wang
运行结果: Zhang:2 Wang:2 Li:1
提示: (1)结构体变量还可以是数组。
如 stu[3],表示创建了 3 个结构体变量 stu[0]、stu[1]、stu[2]
(2)结构体变量可以在定义的同时赋初值,即初始化。
如:stu[3]={“Zhang”,0,”Wang”,0,”Li”,0}; 大括号内分别为 stu[0]的成员变量值、stu[1]的成员变量值、stu[2]的成员变量值,
1.填空题
(1)结构体变量案例。
编程输出两个小孩的记录信息。1 个男孩和 1 个女孩,其姓名首字母分别为“R”和“H”;
男孩 15 岁,女孩比男孩小 1 岁子;男孩的成绩为 75,女孩的成绩为 82。
该案例涉及结构体变量的定义和结构体变量成员的引用。
# include <stdio.h>
void main()
3.掌握文件处理程序的一般设计方法。
【实验内容】
1.程序分析题: 设有一文件 cj.dat 存放了 50 个人的成绩(英语、计算机、数学),存放格式为:每人一
行,成绩间由逗号分隔。计算每个人三门课平均成绩,统计个人平均成绩大于或等于 90 分 的学生人数。
#include <stdio.h>
void main() {
struct student
{
int num;
char name[20];
float score[3];
};
void print(struct student *p);
void main()
{
struct student stu;
stu.num=12345;
strcpy(,”Li Min”);
char name[20]; /*姓名*/
int count;
/*得票数*/
}stu[3]={“Zhang”,0,”Wang”,0,”Li”,0};
void main()
{
int i,j;
char leader_name[20];
for(i=1;i<=5;i++)
/*设有 5 个人参加投票*/
{scanf(“%s”, leader_name); /*输入得票人姓名*/
char cate[15]; char name[15]; union {
int grade_xiao; float grade_chu; }grade; }stu[2];
void main() {
int i; char *p,*q; for(i=0;i<2;i++) {
scanf("%s %s",stu[i].cate,stu[i].name); if(strcmp(stu[i].cate,"xiaoxue")==0)
printf("%c",b[i]); } 答案:
1.将第一个 for 循环改为 while 循环;
2.将第二个 for 循环改用一条语句完成;
第八章 结构体与共同体的应用
【实验目的】
1.掌握结构体类型变量的定义、初始化和使用;
2.掌握结构体类型数组的概念和使用;
3.了解共用体的概念与使用。
【实验内容】
{
struct childrec /*定义结构体类型*/
{
char initial; /*姓名首字母*/
int age;
/*年龄*/
int grade;
/*成绩*/
}boy,girl;
boy.initial=’R’; girl. initial=’H’;
1 2 girl.age=boy.age-1; girl.grade=82; printf(“boy:%c is %d years old and got a grade of %d\n”, 3 ); printf(“girl:%c is %d years old and got a grade of %d\n”, 4 ); }
for(j=0;j<3;j++)
if(strcmp(leader_name,stu[j].name)==0)
1
;
}
printf(“\n”);
for(i=0; 2 ; 3 )
printf(“%5s: %d\n”, stu[i].name , 4 );
}
答案: 1、 stu[j].count++ 2、i<3 3、i++
FILE *fp; int num=0; float x , y , z ; fp=fopen ("cj.dat","r"); while(!feof(fp)) {
fscanf (fp,"%f,%f,%f",&x,&y,&z); if((x+y+z)/3>=90) num=num+1; } printf("平均分数高于 90 的人数为:%d 人",num); fclose(fp); }
提示: (1) 结构体变量的定义:
struct 结构体名 { 成员变量定义 }结构体变量列表; 即在定义结构体的同时定义结构体变量。
(2)结构体成员变量的引用: 结构体变量名.成员变量名
(2)结构体数组案例。 设有三个候选人,Zhang,Wang 和 Li,设有 10 个人参加投票,每次输入一个得票的候 选人的名字,要求最后输出各候选人的得票结果,请设计程序对候选人的得票数进行统计。 该案例涉及结构体变量的定义、初始化和结构体变量成员的引用。 # include <stdio.h> # include <string.h> struct person /*候选人信息结构体,这是一个全局的结构体数组*/ {
scanf (“%s”,s)的结果为:
a
n
y
\0
gets (s)的结果为:
any
b o y \0
2。补充程序题 输入 15 个整数存入一维数组,再按逆序重新调整该数组中元素的顺序然后再输出。下
面给出部分程序的内容,请将程序补充完整,然后上机调试。 部分程序清单如下: #include <stdio.h> void main() { int a[15],*p1,*p2,x; for(p1=a;p1<a+15;p1++) scanf("%d",p1); for(p1=a,p2=a+14;p1<a+7;p1++,p2--) { x=*p1; *p1=*p2; *p2=x; } …… }
else printf("%s,%s,%.1f\n",stu[i].cate,stu[i].name,stu[i].grade.grade_chu);
} }
输入: xiaoxue zhangli 85 chuzhong wangming 84.5
运行结果: xiaoxue,zhangli,85 chuzhong,wangming,84.5
stu.score[0]=68;
stu.score[1]=87;
stu.score[2]=98.5f;
print(&stu);
}
void print(struct student *p)
{
printf(FORMAT,p->num,
);
printf(“\n”) ;
}
答案: p->name ,p->score[0], p->score[1], p->score[2]
结构体指针变量名—>成员变量名 如:p->name
2.读程题 共用体案例。 现需要输入学生成绩,学生分为小学生和初中生,小学生成绩为整型,初中生成绩为浮
点型。其他信息一致,使用共用体来处理(将小学生与初中生的成绩放在同一段内存中)。
本题涉及共用体的应用。 #include <stdio.h> #include <string.h> struct student {