C语言——结构体与联合体

第一题:
要求你设计一个能够保存图书信息的结构。图书属性包括:书名(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

[csharp] view plain copy
print?

    #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(),参数为结构的指针。函数功能是将结构变量中的成员进行初始化。  
[csharp] view plain copy
print?

    #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,将输入的图书信息显示出来。

print?

     #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; } 

第四题:
设计一个表示汽车信息的结构。

print?

     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.比萨饼的重量。
请设计一个能够存储这些信息的结构,并编写一个使用这种结构变量的程序。
程序将请求用户输入上述信息,然后显示这些信息。

[html] view plain copy
print?

    /*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),并按照下面要求完成对于学生信息的操作。

print?

    /*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

[html] view plain copy
print?

    #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(),参数为结构的指针。函数功能是将结构变量中的成员进行初始化。

[csharp] view plain copy
print?
#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(),参数也是结构的指针。函数的功能是从键盘上接收相关学生信息,并把信息保存到指针所指向的结构变量里。

[csharp] view plain copy
print?
#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;  
    };  

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

    nt 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;  
     }

你可能感兴趣的:(C语言,结构)