分类: C/C++
2008-06-14 14:31:46
c语言 结构体与共用体学习笔记1
Author:yuexingtian
Date:Thursday, June 12, 2008
1结构变量的赋值
/*给结构变量赋值并输出其值*/ main() { struct stu { int num; char *name; char sex; float score; }boy1,boy2; boy1.num=15; boy1.name="yuexingtian"; printf("input sex and score\n"); scanf("%c %f",&boy1.sex,&boy1.score); boy2=boy1; printf("Number=%d\nName=%s\n",boy2.num,boy2.name); printf("Sex=%c\nScore=%f\n",boy2.sex,boy2.score); getch(); } |
测试结果:
本程序中用赋值语句给num和name两个成员赋值,name是一个字符串指针变量。用scanf函数动态地输入sex和score成员值,
然后把boy1的所有成员的值整体赋予boy2。最后分别输出boy2的各个成员值。本例表示了结构变量的赋值、输入和输出的方法。
2结构变量的初始化
对结构变量的初始化(还拿上例举例)
程序如下:
main()
{ struct stu /*定义结构*/
{
int num;
char *name;
char sex;
float score;
}boy2,boy1={15,"yuexingtian",'m',88.8};
boy2=boy1;
printf("Number=%d\nName=%s\nSex=%c\nScore=%f",
boy2.num,boy2.name,boy2.sex,boy2.score);
getch(); } |
测试结果:
说明:
本例中,boy2,boy1均被定义为外部结构变量,并对boy1作了初始化赋值。在main函数中,把boy1的值整体赋予boy2,
然后用两个printf语句输出boy2各成员的值。
3结构数组的定义
例1、计算学生的平时成绩和不及格的人数
struct stu { int num;
char *name;
char sex;
float score;
}boy[6]={
{101,"yuexingtian",'M',88},
{102,"yuechaotian",'M',98},
{103,"tianyuexing",'M',96.5},
{104,"tianyuechao",'M',99.5},
{105,"tianjingli",'F',59.5},
{106,"tianjingshan",'M',58},
};
main()
{ int i,c=0;
float ave,s=0;
for(i=0;i<6;i++)
{
s+=boy[i].score;
if(boy[i].score<60) c+=1;
}
printf("s=%f\n",s);
ave=s/6;
printf("average=%f\ncount=%d\n",ave,c);
getch(); } |
测试结果:
说明:
程序中定义了一个外部结构数组boy,共6个元素,并作了初始化赋值。在main函数中用for语句逐个累加各元素的score 成员值存于s之中,
如score的值小于60(不及格)即计数器C加1,循环完毕后计算平均成绩,并输出全班总分,平均分及不及格人数。
4建立同学录
#include"stdio.h" #define NUM 3
struct mem
{
char name[20];
char phone[11];
};
main()
{ struct mem man[NUM];
int i;
for(i=0;i {
printf("input name:\n");
gets(man[i].name);
printf("input phone:\n");
gets(man[i].phone);
}
printf("name\t\t\tphone\n\n");
for(i=0;i printf("%s\t\t\t%s\n\n",man[i].name,man[i].phone);
getch(); } |
测试结果:
说明:
本程序中定义了一个结构mem,它有两个成员name和phone用来表示姓名和电话号码。在主函数中定义man为具有mem 类型的结构数组。
在for语句中,用gets函数分别输入各个元素中两个成员的值。然后又在for语句中用printf语句输出各元素中两个成员值。
yuexingtian2008-06-16 14:51:44
更正:例4【建立同学录】中有越界现象,第五句中 char phone[11] 这句导致后面输入11个电话号码数字的时候出现越界的现象,因为 '/0' 还要占一个置,如果将此句改为 char phone[12] 后就不会出现越界现象! 大家可以上机试一下哟! 呵呵……有进步了! :>