c语言结构体和联合体例题

时间:2022-09-05 18:38:41

第一题:
要求你设计一个能够保存图书信息的结构。图书属性包括:书名(title)、作者(author)和单价信息(

price),并按照下面要求完成对于各种图书的相关操作。
/*
 struct books {
 char title[100];
 char author[20];
 double price;
 } doyle = { "My life as a budgie", "Mack Tom", 14.6 };
 int main(void) {
 struct books dicken = { "Thinking in C++", "Stephen Prata", 78 };
 struct books panshin = { .title = "C++ Primer", .author = "Stanley Lippman",
 .price = 92.5 };

 printf("The title is :%s\nThe author is :%s\nThe price is :%lf\n",
 doyle.title, doyle.author, doyle.price);
 printf("\n");
 printf("The title is :%s\nThe author is :%s\nThe price is :%lf\n",
 dicken.title, dicken.author, dicken.price);
 printf("\n");
 printf("The title is :%s\nThe author is :%s\nThe price is :%lf\n",
 panshin.title, panshin.author, panshin.price);
 printf("\n");
 printf("“Thinking in C++”这本书的价格调整后为:\n");
 printf("\n");
 printf("The title is :%s\nThe author is :%s\nThe price is :%lf\n",
 dicken.title, dicken.author, dicken.price = 85);
 return EXIT_SUCCESS;
 }
 */

第二题:
为上面的关于图书的程序,添加三个函数:
/*(1)编写显示图书信息函数show()。参数为结构的指针。显示图书信息的结构如下:
The title is :My life as a budgie
The author is :Mack Tom
The price is :14.6

#include <stdio.h>
#include <stdlib.h>

struct Library {
 const char title[20];
 const char author[10];
 double price;
} panshin;

void show(struct Library *doy) {

 printf("The title is: %s\n The author is : %s\n The price is : %.1lf",doy->title,

doy->author, doy->price);
}

int main(void) {

 struct Library doyle = { "My life as a budgie", "Mack Tom", 14.6 };
 show(&doyle);
 return EXIT_SUCCESS;
}*/
/*(2)编写初始化结构变量函数init(),参数为结构的指针。函数功能是将结构变量中的成员进行初始化。

#include <stdio.h>
#include <stdlib.h>

struct Library {
 const char title[20];
 const char author[10];
 double price;
} panshin;

void init(struct Library *doyle, struct Library *dicken, struct Library *panshin) {
 doyle ->title;
 dicken ->author;
 panshin ->price;

}
int main(void) {

 struct Library doyle = { "My life as a budgie", "Mack Tom", 14.6 };
 struct Library dicken ={ "Thinking in C++", "Stephen Prata", 78 };
 struct Library panshin = { "C++ Prinner", "Stanley Lippman", 92.5 };
 init(&doyle,&dicken,&panshin);
 printf("The title is: %s\n The author is : %s\n The price is : %.1lf",
    doyle->title, doyle->author, doyle->price);
 printf("The title is: %s\n The author is : %s\n The price is : %.1lf",
    dicken->title, dicken->author, dicken->price);
 printf("The title is: %s\n The author is : %s\n The price is : %.1lf",
    panshin->title, panshin->author, panshin->price);
 return EXIT_SUCCESS;
}
 */
/*(3)编写从键盘上接受图书信息的函数input(),参数为结构的指针。函数的功能是从键盘上接收相关图

书信息,并将信息保存到指针所执行的图书结构变量里。

#include <stdio.h>
#include <stdlib.h>
struct Library {
 const char title[20];
 const char author[10];
 double price;
};

void input(struct Library *doyle,struct Library dicken,){
 scanf("%s%s%lf", doyle->title, doyle->author,&doyle->price);
 scanf("%s%s%lf",dicken->title, dicken->author, &dicken->price);
 scanf("%s%s%lf", panshin->title, panshin->author, &panshin->price);

 }
int main(void) {

 struct Library doyle;
 struct Library dicken;
 struct Library panshin ;
 input(&doyle,&dicken,&panshin);
 printf("The title is: %s\n The author is : %s\n The price is : %.1lf",
    doyle->title, doyle->author, doyle->price);
 printf("The title is: %s\n The author is : %s\n The price is : %.1lf",
    dicken->title, dicken->author, dicken->price);
 printf("The title is: %s\n The author is : %s\n The price is : %.1lf",
    panshin->title, panshin->author, panshin->price);
 return EXIT_SUCCESS;
}*/

/*(4)主程序按照下面流程完成功能实现:
a)定义三个图书对象doyle、dicken、panshin。
b)对结构对象进行初始化。
c)从键盘上接收图书信息,分别保存到三个图书对象中。
d)输出三个图书对象的图书信息。


#include <stdio.h>
#include <stdlib.h>
struct Library {
 const char title[20];
 const char author[10];
 double price;
}doyle,dicken,panshin;
int main(void) {

 struct Library doyle;
 struct Library dicken;
 struct Library panshin ;
 scanf("%s%s%lf", &doyle.title, &doyle.author, &doyle.price);
 scanf("%s%s%lf",&dicken.title, &dicken.author, &dicken.price);
 scanf("%s%s%lf", &panshin.title, &panshin.author, &panshin.price);

 printf("The title is: %s\n The author is : %s\n The price is : %.1lf",
    doyle.title, doyle.author, doyle.price);
 printf("The title is: %s\n The author is : %s\n The price is : %.1lf",
    dicken.title, dicken.author, dicken.price);
 printf("The title is: %s\n The author is : %s\n The price is : %.1lf",
    panshin.title, panshin.author, panshin.price);
 return EXIT_SUCCESS;
}
 */

第三题:
创建一个图书馆library(结构数组),里面一共包含了上面这三本书。
创建一个结构数组library,使用上面所设计的函数init()对每本书进行初始化。
使用上面所设计的函数input()从键盘上接收图书信息。
使用上面的函数show,将输入的图书信息显示出来。
#include <stdio.h>
#include <stdlib.h>
struct Library {
 const char title[20];
  const char author[10];
  double price;
} book[3];

void input(struct Library *(book+1),struct Library *(book+2),struct Library *(book+3)){
 scanf("%s%s%lf", (book+1)->title, (book+1)->author,&(book+1)->price);
 scanf("%s%s%lf",(book+2)->title, (book+2)->author, &(book+2)->price);
 scanf("%s%s%lf",(book+3)->title, (book+3)->author, &(book+3)->price);

 }

void init() {
 struct Library book[3];

}

void show(struct Library *(book+1), struct Library *(book+2), struct Library *(book+3)) {
 printf("The title is: %s\n The author is : %s\n The price is : %.1lf",
    (book+1)->title, (book+1)->author, (book+1)->price);
 printf("The title is: %s\n The author is : %s\n The price is : %.1lf",
    (book+2)->title,(book+2)->author, (book+2)->price);
 printf("The title is: %s\n The author is : %s\n The price is : %.1lf",
    (book+3)->title, (book+3)->author, (book+3)->price);

}

int main(){
 input(&(book+1),&(book+2),&(book+3));
 init();
 show(&(book+1),&(book+2),&(book+3));
 return EXIT_SUCCESS;
}

第四题:
设计一个表示汽车信息的结构。
int main(){
struct car {
 char name[20];
 char sex[5];
 char buyDate[20];
} owner = { "Jone", "M", "2008-01-01" };

struct company {
 char name[20];
 char tel[10];
} leaseCompany = { "hualong", "010-88064420" };
union data {
 struct car owner;
 struct company leaseCompany;
};
struct carData {
 char make[20];
 int status;
 union data {
  struct car owner;
  struct company leaseCompany;
 } ownerInfo;
} ;
struct carData flits = { .status = 0, .make = "volvo", .ownerInfo.ownerCar.sex =
  'M', .ownerInfo.ownerCar.buyDate = '2008-11-21',
  .ownerInfo.ownerCar.name = 'Rebort Carter' };
return 0;
}

第五题:
Wiliam Wingate从事比萨分析服务。对于每个比萨饼,他都需要记录下列信息:
1.比萨饼公司的名称。可以有多个单词组成。
2.比萨饼的直径。
3.比萨饼的重量。
请设计一个能够存储这些信息的结构,并编写一个使用这种结构变量的程序。
程序将请求用户输入上述信息,然后显示这些信息。
/*int main(){
 struct pisa{
  char name[20];
  int zhijing;
  int zhongliang;
 }a={"Wiliam Wingate",6,2};
 printf("比萨饼公司的名称:%s\n比萨饼的直径:%d\n比萨饼的重量:%d

\n",a.name,a.zhijing,a.zhongliang);
 return 0;
}*/

第六题:
要求设计一个能够保存学生信息的结构。学生信息包括:姓名(Name)、年级(Grade)和成绩(score)

,并按照下面要求完成对于学生信息的操作。
/*struct stu {
 char Name[100];
 char Grade[20];
 int score;
 } stu1 = { "姜楠", "二年级", 78};
 int main(void) {
 struct stu stu2 = { "何北", "二年级", 85 };
 struct stu stu3 = { .Name = "董璐", .Grade = "二年级",
 .score = 99 };

 printf("The Name is :%s\nThe Grade is :%s\nThe Score is  :%d\n",
 stu1.Name, stu1.Grade, stu1.score);
 printf("\n");
 printf("The Name is :%s\nThe Grade is :%s\nThe Score is  :%d\n",
  stu2.Name, stu2.Grade, stu2.score);
 printf("\n");
 printf("The Name is :%s\nThe Grade is :%s\nThe Score is  :%d\n",
  stu3.Name, stu3.Grade, stu3.score);
 printf("\n");
 return EXIT_SUCCESS;
 }*/

第七题:
为上面关于学生信息的程序添加三个函数:
1.编写显示学生信息的函数showInfo(),参数为结构的指针。显示学生信息的结构如下:
The Name is:Donglu
The Grade is:Two
The Score is:99


#include <stdio.h>
#include <stdlib.h>
struct Student {
 char Name[20];
 int Grade[4];
 int score;
};

void showInfo(struct Student *stu3) {
 printf("The Name is:%s\n The Grade is:%d\n The Score is :%d", stu3->Name,
   stu3->Grade,stu3->score);
}

int main() {
 struct Student stu3 = { 'Donglu', 'Two', 99 };
 showInfo(&stu3);
 return EXIT_SUCCESS;
}
 *
 */
/*
 * 2.编写初始化结构变量的函数init(),参数为结构的指针。函数功能是将结构变量中的成员进行初始

化。

#include <stdio.h>
#include <stdlib.h>
struct Student {
 char Name[20];
 int Grade[4];
 int score;
};
void init(struct Student *stu1,struct Student *stu2,struct Student *stu3){
 stu1->Name;
 stu1->Grade;
 stu1->score;
 stu2->Name;
 stu2->Grade;
 stu2->score;
 stu3->Name;
 stu3->Grade;
 stu3->score;
}
 */
/*3.编写从键盘上接收学生信息的函数input(),参数也是结构的指针。函数的功能是从键盘上接收相关

学生信息,并把信息保存到指针所指向的结构变量里。


#include <stdio.h>
#include <stdlib.h>
struct Student {
 char Name[20];
 int Grade[4];
 int score;
};
void input(struct Student *stu1,struct Student *stu2,struct Student *stu3){
 scanf("%s%d%d",&stu1->Name,&stu1->Grade,&stu1->score);
 scanf("%s%d%d",&stu2->Name,&stu2->Grade,&stu2->score);
 scanf("%s%d%d",&stu3->Name,&stu3->Grade,&stu3->score);
}
*/
/*4.主函数按照下面流程完成功能实现:
a)定义三个学生对象stu1,stu2,stu3.
b)对结构对象进行初始化.
c)从键盘上接收学生信息,分别保存到三个学生对象中。
d)输出三个学生对象的信息。

#include <stdio.h>
#include <stdlib.h>

struct Student {
 char Name[20];
 int Grade[4];
 int score;
};


void input(struct Student *stu1,struct Student *stu2,struct Student *stu3){
 scanf("%s%d%d",&stu1->Name,&stu1->Grade,&stu1->score);
 scanf("%s%d%d",&stu2->Name,&stu2->Grade,&stu2->score);
 scanf("%s%d%d",&stu3->Name,&stu3->Grade,&stu3->score);
}

int main(){
 struct Student stu1;
 struct Student stu2;
 struct Student stu3;
 input(&stu1,&stu2,&stu3);
 printf("The Name is:%s\n The Grade is:%d\n The Score is :%d", stu1->Name,stu1-

>Grade,stu1->score);
 printf("The Name is:%s\n The Grade is:%d\n The Score is :%d", stu2->Name,stu2-

>Grade,stu2->score);
 printf("The Name is:%s\n The Grade is:%d\n The Score is :%d", stu3->Name,stu3-

>Grade,stu3->score);
}

*/

第八题:
用一个数组存放图书信息,每本图书包含书名(booktitle)、作者(author)、出版年月(date)、出版

社(publishunit)、借出数目(lendnum)、库存数目(stocknum)等信息。编写程序输入若干本图书的

信息,按出版年月排序后输出。
#include <stdio.h>
#include <stdlib.h>
struct Data {
 int year;
 int month;
 int day;
};

struct library {
 char booktitle[50];
 char author[10];
 struct Data data;
 char publishunit[100];
 int lendnum;
 int stocknum;
};

int main() {
 int i, j, n, temp = 0;
 struct library book[n];
 printf("请输入要处理的图书数量:\n");
 fflush(stdout);
 scanf("%d", &n);
 for (i = 0; i < n; i++) {
  printf("请输入第%d本书的信息:\n", i + 1);
  printf("书名:");
  fflush(stdout);
  scanf("%s", &book[i].booktitle);
  printf("作者:");
  scanf("%s", &book[i].author);
  printf("出版年月:");
  scanf("%s", &book[i].data);
  printf("出版社:");
  scanf("%s", &book[i].publishunit);
  printf("借出数:");
  scanf("%s", &book[i].lendnum);
  printf("库存数:");
  scanf("%s", &book[i].stocknum);
 }
 for (i = 0; i < n - 1; i++) {
  for (j = i + 1; j < n; j++) {
   if (book[i].publishunit < book[j].publishunit) {
    temp = book[i];
    book[i] = book[j];
    book[j] = temp;
   }
  }
  printf("\n排序后的图书信息:");
  for (i = 0; i < n; i++) {
   printf(
     "\n书名:  %s\n, 作者:  %s\n, 出版年月:  %s\n, 出版

社:  %s\n, 借出数:  %s\n, 库存数:%s\n",
     book[i].booktitle, book[i].author, book[i].data,
     book[i].publishunit, book[i].lendnum, book

[i].stocknum);
  }
 }
 return EXIT_SUCCESS;
}

第九题:
编写程序,用union实现两个数的加、减、乘、除运算,每种运算用函数完成,并请考虑多个数的运算如何

实现。
union yunsuan{
 int a;
 int b;
}f;

int add(int a,int b)
{
 int sum =0;
 f.a = a;
 sum+= f.a;
 f.b = b;
 sum+=f.b;
 printf("%d\n",sum);
 return sum;
}

int jian(int a,int b){
 int sum =0;
 f.a = a;
 sum-=f.a;
 f.b =b;
 sum-=f.b
 printf("%d\n",sum);
 return sum;
}


int cheng(int a,int b){
 int sum =0;
 f.a = a;
 sum*=f.a;
 f.b =b;
 sum*=f.b
 printf("%d\n",sum);
 return sum;
}

int chu(int a,int b){
 int sum =0;
 f.a = a;
 sum/=f.a;
 f.b =b;
 sum*/=f.b
 printf("%d\n",sum);
 return sum;
}