结构体
/********************************************************************************************************************
题目:编写input()和output()函数输入,输出5个学生的数据记录。(用结构体设计,学生记录中包括学号、姓名、四门课程成绩)
程序源代码:
**********************************************************************************************************************/
#include <stdio.h>
#define N 5
struct student
{
char num[6];
char name[8];
int score[4];
} stu[N];//定义一个结构体类型student和结构体变量stu。
/*********************************************************************/
void input(struct student stu[]);
void print(struct student stu[]);//声明输入和输出函数
/************************************************************************/
void main()
{
input(stu);
print(stu);
}/********主函数执行输入和输出函数****************************************/
void input(struct student stu[])/*结构体变量为形参*/
{
int i,j;
for(i=0;i<N;i++)
{
printf("\nplease input %d of %d\n",i+1,N);
printf("num: ");
scanf("%s",stu[i].num);
printf("name: ");
scanf("%s",stu[i].name);
for(j=0;j<3;j++)
{
printf("score %d__",j+1);
scanf("%d",&stu[i].score[j]);
}
printf("\n");
}
}/**********定义输入函数input()***************************************************/
void print(struct student stu[])
{
int i,j;
printf("\nNo. Name Score1 Score2 Score3\n");
for(i=0;i<N;i++)
{
printf("%-3s%-9s",stu[i].num,stu[i].name);//%3s是为了和上面的标题对齐所采用的格式控制办法。
for(j=0;j<3;j++)
printf("%-8d",stu[i].score[j]);
printf("\n");
}
}/******************定义输出函数********************************************************/
/*建立100名学生的信息表,每个学生的数据包括学号、姓名、及一门课的成绩,要求从键盘输入这100名学生的信息,
并按照每一行显示一名学生信息的格式将他们的信息显示出来。*/
#include <stdio.h>
#define N 3
/*************************定义结构体类型,不包含结构体变量***************************************************/
struct student
{
int num;
char name[20];
int score;
};
/****************************************************************************/
void main()
{
int i;
struct student s[N]; /*定义结构体类型数组,长度100,这里为了测试方便设为3,相当于结构体变量*/
for(i=0;i<N;i++)
{
printf("input number:");
scanf("%d",&s[i].num);
printf("input name:");
scanf("%s",s[i].name);//输入字符串时,字符串变量前边不用添加&符号。使用%s
printf("input score:");
scanf("%d",&s[i].score);
}//结构体赋值采用for循环结构对成员逐个赋值。
printf("Number: Name: score:\n");//打印标题
for(i=0;i<N;i++)
printf("%-9d%-9s%d\n",s[i].num,s[i].name,s[i].score);//循环打印,注意控制对齐方式
}
【程序3】
题目:创建一个链表。
程序源代码:
/*creat a list*/
#include "stdlib.h"
#include <stdio.h>
#define N 3
struct list
{
int data;
struct list *next;
};
typedef struct list node;
typedef node *link;
void main()
{
link ptr,head;
int num,i;
int j;
printf("please input numbers==>");
scanf("%d",&j);
ptr=(link)malloc(sizeof(node));
head=ptr;
printf("please enter numbers:");
for(i=0;i<=j-1;i++)
{
scanf("%d",&num);
ptr->data=num;
ptr->next=(link) malloc(sizeof(node));
if(i==j-1)
ptr->next=NULL;
else
ptr=ptr->next;
}
ptr=head;
while(ptr!=NULL)
{
printf("The value is ==>%d\n",ptr->data);
ptr=ptr->next;
}
}
==============================================================
【程序4】
题目:反向输出一个链表。
1.程序分析:
2.程序源代码:
/*reverse output a list*/
#include "stdlib.h"
#include <stdio.h>
struct list
{
int data;
struct list *next;
};
typedef struct list node;
typedef node *link;
void main()
{
link ptr,head,tail;
int num,i;
int j;
printf("please input numbers==>");
scanf("%d",&j);
tail=(link)malloc(sizeof(node));
tail->next=NULL;
ptr=tail;
printf("\nplease input data==>");
for(i=0;i<=j-1;i++)
{
scanf("%d",&num);
ptr->data=num;
head=(link)malloc(sizeof(node));
head->next=ptr;
ptr=head;
}
ptr=ptr->next;
while(ptr!=NULL)
{
printf("The value is ==>%d\n",ptr->data);
ptr=ptr->next;
}
}