IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言学习之 结构体.day1 -> 正文阅读

[C++知识库]C语言学习之 结构体.day1

1.把一个学生的信息(包括学号、姓名、性别、住址)放在一个结构体变量中,然后输出这个学生的信息。

#include<stdio.h>
#include <stdlib.h>
int main()
{
 struct student//声明结构体类型struct Student
 {
    long int num;//结构体成员
    char name[20];
    char sex;
    char addr[20];
 };
 //定义结构体变量a并初始化
 struct student a={10101,"LiMing","Man","123 Beijing Road"};
 printf("No.%ld\name:%s\nsex:%d\naddress=%s\n",a.num,a.name,a.sex,a.addr);
 return 0;
}

2.输入两个学生的学号、姓名和成绩,输出成绩较高的学生的学号、姓名和成绩。

#include<stdio.h>
int main()
{
   struct Student//声明结构体类型struct Student
   {
    int num;
    char name[20];
    float score;
   }student1,student2;//定义两个结构体变量
         //初始化
 printf("请输入学生1的信息:\n");
 scanf("%d%s%f",&student1.num,&student1.name,&student1.score);
 printf("输入学生2的信息:\n");
 scanf("%d%s%f",&student2.num,&student2.name,&student2.score);
   if(student1.score>=student2.score)
      {   //>=就输出学生1,否则输出学生2
		printf("%d  %s  %6.2f\n",student1.num,student1.name,student1.score);
		}
	else
      {
     printf("%d  %s  %6.2f\n",student2.num,student2.name,student2.score);
      }
 return 0;

}

3.有3个候选人,每个选民只能投票选一人,要求编一个统计选票的程序,先后输入被选人的名字,最后输出各人得票结果。

#include<stdio.h>
#include<string.h>
struct Person//声明结构体
{
   char name[20];//姓名
   int count;//票数
}leader[3]={{"wang",0},{"li",0},{"hong",0}};
//定义结构体数组并初始化

int main()
{
   int i,j;
   char vote_name[20];//定义字符数组
   printf("请投票:\n");
   for(i=0;i<10;i++)//比较轮数
   {
      scanf("%s",&vote_name[i]);
         //输入10次投票
      for(j=0;j<3;j++)//每轮比较次数
      {
        if(strcmp(&vote_name[i],leader[j].name)==0)
          leader[j].count++;  //姓名匹配,投票成功,票数+1
      }
   }
   printf("\n投票结果如下:\n");
   for(j=0;j<3;j++)
      printf("%5s:%-5d\n",leader[j].name,leader[j].count);
   return 0;

}

或者可以用用指针操作一下

#include<stdio.h>
#include<string.h>
struct Person//声明结构体
{
   char name[20];//姓名
   int count;//票数
}leader[3]={{"wang",0},{"li",0},{"hong",0}};
//定义结构体数组并初始化

int main()
{
   int i,j;
   char vote_name[20];//定义字符数组
   printf("请投票:\n");
   char *p;
   p=&vote_name[0];//p指针指向数组首地址
   for(i=0;i<10;i++)//比较轮数
   {
      scanf("%s",p);//将10次投票输入数组中
      for(j=0;j<3;j++)//每轮比较次数
      {
        if(strcmp(p,leader[j].name)==0)
          leader[j].count++;  //姓名匹配,投票成功,票数+1
      }
   }
   printf("\n投票结果如下:\n");
   for(j=0;j<3;j++)
      printf("%5s:%-5d\n",leader[j].name,leader[j].count);
   return 0;
}

4.有n个学生的信息(包括学号、姓名、成绩),要求按照成绩的高低顺序输出各学生的信息。

#include<stdio.h>
struct student
{
   int num;//学号
   char name[20];//姓名
   float score;//分数
};//声明结构体类型

int main()
{
   struct student stu[5]={
      {10001,"张三",70},{10002,"李四",67},
      {10003,"老王",87},{10004,"老二",85},
      {10005,"小明",76}};//定义结构体数组并初始化
   struct student p;//用来存储一个学生的信息
   //冒泡排序法进行排序
   for(int i=0;i<5;i++)//控制比较轮数
   {
      for(int j=0;j<5-i-1;j++)//控制比较次数
      {
         if(stu[j].score<stu[j+1].score)//前面分数小于后面,交换位置
            {
               p=stu[j];
               stu[j]=stu[j+1];
               stu[j+1]=p;
            }
      }
   }
   printf("学生成绩由高到低排序:\n");
   for(int i=0;i<5;i++)
   printf("%-6d%-5s%2.1f\n",stu[i].num,stu[i].name,stu[i].score);
   return 0;
}

5. 输出结构体变量中成员的信息(通过指针变量?指向结构体变量)。

#include<stdio.h>
#include<string.h>
struct Student	//声明结构体类型struct Student
{
   long num;;
   char name[20];
   char sex;
   float score;
};
int main()
{
   struct Student stu_1={10000,"小王",'M',78};//定义结构体类型的变量
   struct Student *p;//定义指向 结构体变量的指针
   p=&stu_1;//p指向stu_1的首地址
   printf("No.%ld\nname:%s\nsex:%c\nscore=%f\n",stu_1.num,stu_1.name,stu_1.sex,
          stu_1.score);

   printf("No.%ld\nname:%s\nsex:%c\nscore=%f\n",p->num,p->name,
         p->sex,p->score);
         
   printf("No.%ld\nname:%s\nsex:%c\nscore=%f\n",(*p).num,(*p).name,
         (*p).sex,(*p).score);
         //通过指针方式打印
   return 0;
}

6.有3个学生的信息,放在结构体数组中,要求输出全部学生的信息

(指向结构体数组的指针)。

#include<stdio.h>
struct student
{
  int num;
  char name[20];
  char sex;
  int age;
};//声明结构体类型struct student

int main()
{
   struct student stu[3]=
     {
      {001,"张三",'M',20},
      {002,"老王",'W',18},
      {003,"小龙",'M',21}
     }; //定义结构体变量并初始化
     struct student *p;//指向结构体变量 的指针
     printf("编号-姓名-性别-年龄:\n");
     for(p=stu;p<stu+3;p++)//p指针指向结构体数组的首地址
      printf("%3d%5s %c%3d\n",p->num,p->name,p->sex,p->age);

   return 0;
}

7.有n个结构体变量,内含学生学号、姓名和3门课程的成绩。要求输出平均成绩最高的学生的信息(包括学号、姓名、3门课程成绩和平均成绩)

(用结构体变量和结构体变量的指针作函数参数)。

#include <stdio.h>
#define N 3			//学生数为3
struct student			//建立结构体类型struct student
{	int num;			//学号
	char name[20];	//姓名
	float score[3];		//3门课成绩
	float aver;		//平均成绩
};

int main()
{
   void input(struct student stu[]);	//函数声明
	struct student max(struct student stu[]);	//函数声明
	void print(struct student );	//函数声明,形参为结构体类型变量
	struct student stu[N],*p;//p为结构体类型指针变量
	p=&stu[0];	//指向数组首地址
	input(p);						//调用input函数
	print(max(p));	//调用print函数,以max函数的返回值作为实参
	return 0;
}

void input(struct student stu[])		//定义input函数
{	int i;
	printf("请输入各学生的信息: 学号、姓名、三门课成绩:\n");
	for(i=0;i<N;i++)
	{	scanf("%d %s %f %f %f",&stu[i].num,stu[i].name,
		&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);	 //输入数据
		stu[i].aver=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3.0;
				//求平均成绩
	}
}
struct student max(struct student stu[])	//定义max函数
{	int i,m=0;			//用m存放成绩最高的学生在数组中的序号
	for(i=0;i<N;i++)
	if(stu[i].aver>stu[m].aver) m=i;
	//找出平均成绩最高的学生在数组中的序号
	return stu[m];		//返回包含该生信息的结构体元素
}

void print(struct student a) 		//定义print函数
{	printf("\n成绩最高的学生是:\n");
	printf("学号:%d\n姓名:%s\n三门课成绩:%5.1f,%5.1f,%5.1f\n平均成绩: %6.2f\n",
        a.num,a.name,a.score[0],a.score[1],a.score[2],a.aver);
}

8.用指针处理链表

建立一个简单链表,它由3个学生数据的结点组成,要求输出各结点中的数据。

#include <stdio.h>
struct student//声明结构体类型struct student
{
   int num;
   float score;
   struct student *next;

};
int main()
{
   struct student a={10101,90},b={10102,91},c={10103,92},*head,*p;
   //定义3个结构体变量作为链表的节点
   head=&a;//头指针指向a的地址
   a.next=&b;
   b.next=&c;
   c.next=NULL;//c指针指向空
   p=head;//p指针指向a节点
   do
   {
      printf("%d %5.1f\n",p->num,p->score);
      //输出p指向的节点,a的数据
      p=p->next;//p指向下一个节点

   }while(p!=NULL);//输出c节点后p值为NULL,终止循环
   return 0;
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-17 15:11:24  更:2021-08-17 15:14:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 7:34:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码