本文最后更新于2022年02月24日,已超过4天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!
struct student{
long int no;
char name[20];
char sex;
float score;
};
struct student stu[3];
stu[i].no;
stu[i].name;
stu[i+ 1].sex;
&stu[i- 1].score;
struct student{
int num;
char name[20];
char sex;
int age;
}
struct student stu[3]={
{100,"Wang Lin",M',20},
{101,"Li Gang", 'M',19},
{110,"Liu Yan", F,19}
};
有3个候选人,每个选民只能投票选一人,要求编一个统计选票的程序,先后输入被选人的名字,进行投票,最后输出各人得票结果。
#include <stdio.h>
#include <string.h>
void main() {
struct Person {
char name[20];
int count;
}leader[3] = { {"Zhangsan",0},{"Lisi",0},{"Wangwu",0} };
int i, j;
char leader_name[20];
printf("请输入支持的候选人名字:\n");
for (i = 0; i < 10; i++) {
scanf_s("%s", leader_name,20);
for (j = 0; j < 3; j++) {
// strcmp函数比较字符串是否相同,相同就返回 0
if (strcmp(leader_name, leader[j].name) == 0) {
leader[j].count++;
}
}
}
printf("\n");
for (i = 0; i < 3; i++) {
printf("%s:%d\n", leader[i].name, leader[i].count);
}
}
有n个学生的信息(包括学号、姓名、成绩),要求按照成绩的高低顺序输出各学生的信息。
#include <stdio.h>
struct Student {
int no;
char name[20];
float score;
};
void main() {
struct Student stu[5] = {
{10001,"Zhangsan",98.5},
{10002,"Lisi",80.5},
{10003,"Wangwu",80.5},
{10004,"Zhaoliu",100},
{10005,"Xiqi",59}
};
struct Student temp;
// 定义常量
const int n = 5;
int i, j, k;
printf("成绩排行榜\n");
for (i = 0; i < n; i++) {
for (j = i + 1; j < n; j++) {
if (stu[j].score>stu[i].score) {
temp = stu[j];
stu[j] = stu[i];
stu[i] = temp;
}
}
}
for (i = 0; i < n; i++) {
printf("%d %10s %.2f\n",stu[i].no,stu[i].name,stu[i].score);
}
}
struct
结构体名
*结构体指针变量名
struct Student stu;
struct Student *pt;
pt = &stu;
(*结构体指针变量).成员名
括号不能省略,因为 “.” 运算符优先级高于 “*” 的(*sp).name
结构体指针变量 -> 成员名
C语言提供了一种简便的结构体指针变量取成员运算 “->”称为指向成员运算符(或箭头运算符),和 “.” 优先级差不多,结合性都是从左往右。sp -> name
(&结构体变量) -> 成员名
(&stu) -> namae
sp -> no
sp指向结构体变量stu, sp -> no
等价于 stu.no
sp -> no++
指向运算符 “->” 高于 “++” ,等价于 (sp -> no)++
。先引用sp -> no
值,即 stu.no
作为表达式的值;再使其值加1,即stu.no
值加1。++sp -> no
指向运算符 “->” 高于 “++” ,等价于 ++(sp -> no)
即先使 sp->no
值加1,即 stu.no
值加1;然后引用修改之后的 sp -> no
值作为表达式的值。#include <stdio.h>
struct Student {
int no;
char name[20];
float score;
};
void main() {
struct Student *p;
struct Student stu = {10001,"Zhangsan",98.5};
p = &stu;
printf("学号:%d\n姓名:%s\n成绩:%.2f\n",(*p).no,p -> name,(&stu) -> score);
}
有3个学生的信息,放在结构体数组中,要求全部学生的信息。
#include <stdio.h>
struct Student {
int no;
char name[20];
float score;
};
void main() {
struct Student *p;
struct Student stu[5] = {
{10001,"Zhangsan",98.5},
{10002,"Lisi",80.5},
{10003,"Wangwu",80.5},
{10004,"Zhaoliu",100},
{10005,"Xiqi",59}
};
for (p = stu; p<stu+5; p++) {
printf("%d %10s %.2f\n",p->no, p->name, p->score);
}
stu[1].num
或 stu[2].name
作函数实参,将实参值传给形参。有n个结构体变量,内含学生学号、姓名和3门课程的成绩。要求输出平均成绩最高的学生的信息(包括学号、姓名、3门课程成绩和平均成绩)。
#include <stdio.h>
#define N 3
struct Student {
int no;
char name[20];
float score[3];
float aver;
};
void main() {
void input(struct Student stu[]);
struct Student max(struct Student stu[]);
void print(struct Student stu);
struct Student *p;
struct Student stu[N];
p = stu;
input(p);
print(max(p));
}
void input(struct Student stu[]) {
int i;
printf("请输入各学生信息:\n");
for (i = 0; i < N; i++) {
scanf_s("%d %s %f %f %f",
&stu[i].no, stu[i].name,20, &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;
}
}
struct Student max(struct Student stu[]) {
int i,m=0;
int temp;
for (i = 0; i < N; i++) {
if (stu[i].aver > stu[m].aver) {
m = i;
}
}
return stu[m];
}
void print(struct Student stud) {
printf("学号:%d\n姓名:%s\n三门成绩:%.2f %.2f %.2f\n平均成绩:%.2f\n",
stud.no, stud.name, stud.score[0], stud.score[1], stud.score[2], stud.aver);
}