黑马程序员——ios基础---练习:3

来源:互联网 发布:ubuntu touch 平板安装 编辑:程序博客网 时间:2024/06/01 21:32

C7--------------------------------------------------------------------

C8--------------------------------------------------------------------

     一、选择题

     1.  以下关于数组的描述正确的是(C)

     A. 数组的大小是固定的,但可以有不同的类型的数组元素

     B. 数组的大小是可变的,但所有数组元素的类型必须相同

     C. 数组的大小是固定的,所有数组元素的类型必须相同

     D. 数组的大小是可变的,可以有不同的类型的数组元素

      

     2.  以下对一维整型数组a的错误说明是(a )

     A.int a(10);                         B. int n=10,a[n];

     C.int n;                             D. #define  SIZE  10

     scanf("%d",&n);                     int  a[SIZE];

     int a[n];

      

     3.  以下对一维数组m进行错误初始化的是( A )

     A. int m[10]=(0,0,0,0) ;                 B. int m[10]={ };

     C. int m[ ]={0};                         D. int m[10]={10*2};

      

     4.  若有定义:int  bb[8];。则以下表达式中不能代表数组元bb[1]的地址的是(C  )

     A. &bb[0]+1        B. &bb[1]         C. &bb[0]++            D. bb+1

      

     5.  假定int类型变量占用两个字节,其有定义:int  x[10]={0,2,4};,则数组x在内存中所占字节数是(D  )

     A. 3               B. 6             C. 10       D. 20

      

     6.  若有以下说明:

     int a[12]={1,2,3,4,5,6,7,8,9,10,11,12};

     char c='a',d,g;

     则数值为4的表达式是(d  )

     A. a[g-c]          B. a[4]           C. a['d'-'c']          D. a['d'-c]

      

     7.  以下程序段给数组所有的元素输入数据,请选择正确答案填入( )

     #include<stdio.h>

     main()

     {

             int a[10],i=0;

             while(i<10) scanf("%d",_____A___ );

             

     }

     A. a+(i++)          B. &a[i+1]       C. a+i                 D. &a[++i]

      

     8.  执行下面的程序段后,变量k中的值为( A )

     int  k=3, s[2];

     s[0]=k;  k=s[1]*10;

     A. 不定值          B. 33              C. 30                D. 10

      

     9. 以下程序的输出结果是(c )

     main()

     {

             int   i, a[10];

             for(i=9;i>=0;i--)  a[i]=10-i;

             printf("%d%d%d",a[2],a[5],a[8]);

     }

     A. 258            B. 741             C. 852            D. 369

      

     10. 以下程序运行后,输出结果是( d )

     main()

     {

             int  n[5]={0,0,0},i,k=2;

             for(i=0;i<k;i++)  n[i]=n[i]+1;

             printf("%d\n",n[k]);

     }

     A. 不确定的值      B. 2               C. 1                  D. 0

      

              

      

     二、编程题

      

     12

     /*

       随机产生20[10 , 50]的正整数存到数组中,并求数组中的所有元素最大值、最小值、平均值以及各元素之和。

      */

     int main(int argc, const char * argv[])

     {

         //  1、定义max用于保存最最大值,将其初始化为一个小于等于最小值的数,这里初始化为,来确保找出的最大值不会有问题,同理定义min来保存最小值,其初始值为大于等于区间最大值的数,这里初始化为51,定义一个sum将其初始化为0.因为0加上任何数还是原来的数。

             int max = 0,min = 51,sum = 0;

         //  2、定义average用于记录平均值

             float average = 0;

         //  3、第一个元素个数为20的数组

             int number[20] = {0};

         //  4、使用循环产生[10,50]随机值,并计算

             for (int i = 0; i < 20; i++) {

             //arc4random_uniform(41) 用于产生 0 ~ 40 的随机数,那么

             ///arc4random_uniform(41) + 10 就是[10,50]的随机数

                     number[i] = arc4random_uniform(41) + 10;

                      

             //        printf("%d ",number[i]);

             //      获取最大值

                     max = max > number[i] ? max : number[i];

             //       获取最小值

                     min = min < number[i] ? min : number[i];

             //      计算和 

                     sum += number[i]; 

                 } 

         //  计算平均值 

             average = sum * 1.0 / 20; 

         //   输出结果 

             printf("\n%d %d %d %.2f",max,min,sum,average); 

             return 0; 

     } 

      


       

     一、选择题

      

     1. 若说明:int a[2][3];  则对a数组元素的正确引用是(c ) 

     A. a(1,2)        B. a[1,3]           C. a[1>2][!1]      D. a[2][0]越界

      

     2. 若有定义:int  b[3][4]={0};则下述正确的是(c  ) 

     A. 此定义语句不正确

     B. 没有元素可得初值0

     C. 数组b中各元素均为0

     D. 数组b中各元素可得初值但值不一定为0

      

     3. 若有以下数组定义,其中不正确的是(d  ) 

     A. int   a[2][3];

     B  int   b[][3]={0,1,2,3};

     C. int   c[100][100]={0};

     D. int   d[3][]={{1,2},{1,2,3},{1,2,3,4}};

      

     4. 若有以下的定义:int  t[5][4];能正确引用t数组的表达式是(c  )

     A. t[2][4]     B. t[5][0]          C. t[0][0]           D. t[0,0]

      

     5. 在定义int  m[ ][3]={123456};后,m[1][0]的值是(a  )

     A. 4           B. 1                C. 2                 D. 5

      

     6. 在定义int   n[5][6]后第10个元素是( c )

     A. n[2][5]     B. n[2][4]          C. n[1][3]           D. n[1][4]

      

     7. 若有以下定义语句,

     float  x[3][3]={{1.0,2.0,3.0},{4.0,5.0,6.0}};

     则表达式“x[1][1]*x[2][2]”的值是( A )

     A. 0.0           B. 4.0               C. 5.0            D. 6.0

      

     8. 以下程序运行后,输出结果是 (a  )

     main()

     {

             int  a[4][4]={{1,3,5},{2,4,6},{3,5,7}};

             printf("%d%d%d%d\n",a[0][3],a[1][2],a[2][1],a[3][0]);

     }

     A. 0650          B. 1470              C. 5430            D. 输出值不定

      

     9. 以下程序运行后,输出结果是(b )

     main()

     {

             int aa[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}};

             int i,s=0;

             for(i=0;i<4;i++)  s+=aa[i][1];

             printf(“%d\n”,s);

     }

     A. 11            B. 19                C. 13               D. 20

      

     10. 有以下程序

     main( )

     {

             int  a[3][4]={{1,2},{3,4},{5,6}},i,j,s=0;

             for(i=1;i<3;i++)

                     for(j=0;j<=i;j++)  s+=a[i][j]

                             printf("%d\n",s);

     }

     该程序的输出结果是( B )

     A. 18            B. 19                C. 20               D. 21

      

     11. 若定义如下变量和数组:

     int i;

     int x[3][3]={1,2,3,4,5,6,7,8,9};

     则下面语句的输出结果是( C )

     for(i=0;i<3;i++) printf("%d",x[i][2-i]);

     A. 1 5 9         B. 1 4 7            C. 3 5 7              D. 3 6 9

      

      

     12. 不能把字符串:Hello!赋给数组str的语句是( B )

     A. char str[10]= {'H', 'e', 'l', 'l', 'o', '! '};

     B. char str[10];str="Hello!";

     C. char str[10];strcpy(str,"Hello!");

     D. char str[10]="Hello!";

      

     13. 若给出以下定义:

     char x[ ]="abcdefg";\0

     char y[ ]={'a','b','c','d','e','f','g'};

     则正确的叙述为(C  )

     A. 数组x和数组y等价                      B. 数组x和数组y的长度相同

     C. 数组x的长度大于数组y的长度            D. 数组x的长度小于数组y的长度

      

     14. 若有数组定义: char array [ ]="China"; 则数组 array所占的空间为( c)

     A. 4个字节       B. 5个字节        C. 6个字节          D. 7个字节

      

     15. 若有定义和语句:

     char s[10];s="abcd";printf("%s\n",s);

     则结果是(以下└┘代表空格)( D )

     A. 输出abcd      B. 输出a          C. 输出abcd└┘└┘└┘└┘    D. 编译不通过

      

      

      

     16. 运行下面的程序,如果从键盘上输入:ABC时,输出的结果是(A  )

#include<string.h>

     main()

     {

             char ss[10]="12345";

             strcat(ss, "6789" );

             gets(ss);printf("%s\n",ss);

     }

     A. ABC         B. ABC9        C. 123456ABC    D. ABC456789

      

     17. 判断两个字符串是否相等,正确的表达方式是( C )

     A. while(s1==s2)                     B. while(s1=s2)

         C. while(strcmp(s1,s2)==0)           D. while(strcmp(s1,s2)=0)

              

             18. 以下程序的输出结果是( A)。

             main()

         {

                 char str[12]={ 's','t','r','i','n','g'};

                 printf("%d\n",strlen(str));

         }

     A. 6        B. 7            C. 11                D. 12

      

     19. 若有以下程序片段:

     char str[ ]="ab\n\012\\\"";

     printf("%d",strlen(str));

     上面程序片段的输出结果是 (C  )

     A. 3            B. 4            C. 6                 D. 12

      

     20. 若有以下程序段,输出结果是(A  )

     char   s[ ]="\\141\141abc\t";

     printf  ("%d\n",strlen(s)); 

     A. 9         B. 12           C. 13                D. 14 

      

     21. 设有static char str[ ]="Beijing"; 

     则执行printf("%d\n", strlen(strcpy(str,"China"))); 

     后的输出结果为 (A  )

     A. 5         B. 7              C. 12                D. 14 

      

     

     23. 以下程序运行后,输出结果是(A  )

     main() 

     { 

             char  arr[2][4]; 

             strcpy(arr,"you");  strcpy(arr[1],"me"); 

             arr[0][3]='&'; 

             printf("%s \n",arr); 

     } 

     A. you&me        B. you           C. me            D. err 

      

     三、编程题 

     1.

      

       输入6个字符串,并对它们按从小到大的顺序排序后输出。 

       


      1.

      int main(void)

      {

          char string[6][100] = {0};

          printf("please input 6 strings:\n");//遇到 空格 或者 回车 都会认为1个字符串输入结束了。

          for(int i = 0; i < 6; i++) {

              scanf("%s",string[i]);

          }

          //排序(冒泡排序)

         

           for(int i = 0; i < 6 - 1;i++){

              for (int j = 0; j < 6 - 1 - i; j++) {

                  if (strcmp(string[j], string[j+1]) > 0) {

                      char temp[100] = {0};

                      strcpy(temp, string[j]);

                      strcpy(string[j], string[j+1]);

                      strcpy(string[j+1], temp);

                  }

              }

          } 

          for (int i = 0; i < 6; i++) { 

              printf("%s\t\t",string[i]); 

          } 

      return 0; 

      }

 

C9-------------------------------------------------------------------------------------------------

     一、选择题

     1 若有说明:int a=2, *p=&a, *q=p;,则以下非法的赋值语句是(D)。

     A p=q;           B *p=*q;         C a=*q;         D q=a;

      

     2 若定义:int a=511, *b=&a;,则printf("%d\n", *b);的输出结果为:D

     A 无确定值       B a的地址       C 512           D 511

      

     3 已有定义int a=2, *p1=&a, *p2=&a; 下面不能正确执行的赋值语句是(B)。

     A a=*p1+*p2;     B p1=a;          C p1=p2;        D a=*p1*(*p2);

      

     4 变量的指针,其含义是指该变量的(B)。

     A              B 地址           C             D 一个标志

      

     5 若有说明语句:int a, b, c, *d=&c;,则能正确从键盘读入三个整数分别赋给变量abc的语句是(A)。

     A scanf("%d%d%d", &a, &b, d);

     B scanf("%d%d%d", a, b, d);

     C scanf("%d%d%d", &a, &b, &d);

     D scanf("%d%d%d", a, b,*d);

      

     7 若有语句int *p, a=10; p=&a; 下面均代表地址的一组选项是(D)。

     A a, p, *&a                             B &*a, &a, *p

     C *&p, *p, &a                           D &a, &*p, p

      

     8 若需要建立如图所示的存储结构,且已有说明double *p, x=0.2345; 则正确的赋值语句是(B)。

      

     A p=x;                                  B p=&x;

     C *p=x;                                 D *p=&x;

      

     9 若有说明:int *p, a=1, b; 以下正确的程序段是(D)。

     A p=&b;                                 B scanf("%d", &b);

     scanf("%d", &p);                            *p=b;

     C p=&b;                                 D p=&b;

     scanf("%d", *p);                             *p=a;

      

     10.有如下语句:int m=6, n=9, *p, *q; p=&m; q=&n; 如图1所示,若要实现下图所示的存储结构,可选用的赋值语句是(C)。

      

     A *p=*q;                                B p=*q;

     C p=q;                                  D *p=q;

      

     13.下面判断正确的是(C)。

     A char *s="girl";                等价于  char *s; *s="girl";

     B char s[10]={"girl"};            等价于  char s[10]; s[10]={"girl"};

     C char *s="girl";                等价于   char *s; s="girl";

     D char s[4]= "boy", t[4]= "boy";   等价于char s[4]=t[4]= "boy"

      

     14.设char *s="\ta\017bc";则指针变量s指向的字符串所占的字节数是(C)。

     A 9                   B 5            C  6             D 7

      

     15.下面程序段中,for循环的执行次数是(C)。

         char *s="\ta\018bc";

     for (*s!='\0's++) printf("*");

     A 9                   B 5            C  6             D 7

      

     16.以下不能正确进行字符串赋初值的语句是(A)。

     A. char str[5]= "good!";

     B char *str="good!";

     C. char str[]="good!";

     D char str[5]={'g', 'o','o', 'd'};

      

     18.下面程序段的运行结果是(C)。

     char *s="abcde";

     s+=2;

     printf("%d", s);

     A cde      B 字符'c'    C 字符'c'的地址     D 无确定的输出结果

      

     20.以下正确的程序段是(c)。

     A char s[20];                               B char *s;

     scanf("%s", &s);                             scanf("%s", s);

     C char s[20];                               D char s[20], *t=s;

     scanf("%s", &s[2]);                           scanf("%s", t[2]);

      

     21.下面程序段的运行结果是(C)。

#include "stdio.h"

     main()

     {

             int m=10, n=20;

             char *format="%s, m=%d, n=%d\n";

             m*=n;

             printf(format, "m*=n", m,n);

     }

     A format, "m*=n", m, n                      B format, "m*=n"

     C m*=n, m=200, n=20                        D 以上结果都不对

    

      

     24.以下正确的程序段是(C)。

     A char s[]="12345", t[]="6543d21";    strcpy( s,t);

     B char s[20], *t="12345";   strcat(s,t);

     C char s[20]=" ", *t="12345"; strcat(s, t);

     D char *s="12345", *t="54321";  strcat (s,t);

      

      

     26.若有以下定义和语句:

         int s[4][5], (*ps)[5];

         ps=s;

         则对s数组元素的正确引用形式是()。

         A ps+1        B *(ps+3)        C ps[0][2]          D *(ps+1)+3

          

     27.不合法的main函数命令行参数表示形式是:(B)。

         A main( int a, char *c[])                  B main(int argc, char *argv)

         C main( int arc, char **arv)               D main( int argv, char *argc[])

          

      

     29.若已定义char s[10];则在下面表达式中不表示s[1]地址的是(B)。

         A s+1          B s++           C &s[0]+1        D &s[1]

          

     30.下面程序段的运行结果是(D)。(注:└┘代表空格)

#include "stdio.h"

         main()

         {   char s[6];

                 s="abcd";

                 printf("\"%s\"\n", s);

             }

         A "abcd"       B "abcd└┘"       C \"abcd\"      D 编译出错

      

         37.下列程序的输出结果是(C)。

#include "stdio.h"

         main()

         {

                 int a[]={1,2,3,4,5,6,7,8,9,0}, *p;

                 p=a;

                 printf("%d\n", *p+9);

             }

         A 0                 B 1                C 10               D  9

          

      

         40.有以下程序

#include "string.h"

#include "stdio.h"

         main()

         {

                 char *p="abcde\0fghjik\0";

                 printf("%d\n", strlen(p));

             }

         程序运行后的输出结果是(D)。

         A 12             B 15             C 6              D 5

          

          

     44.下面程序的运行结果是(D)。//char *s传递的过程?

#include "stdio.h"

#include "string.h"

         fun( char *s)

         {

                 char t[10];

                 s=t;

                 strcpy(t, "example");

             }

         main()

         {

                 char *s;

                 fun(s);

                 puts(s);

             }

         Aexample└┘└┘└┘       Bexample└┘└┘         Cexample        D.不确定的值

          

     45.下列程序段的输出结果是()。// xy传递的过程?? 

#include "stdio.h" 

         void fun( int * x, int *y) 

         { 

                 printf("%d%d", *x, *y); 

                 *x=3; 

                 *y=4; 

             } 

         main() 

         { 

                 int x=1, y=2; 

                 fun(&y, &x); 

                 printf("%d %d", x, y); 

   A           }

         A 2 1 4 3           B 1 2 1 2          C 1 2 3 4           D 2 1 1 2 

          

     46.下列程序的输出结果是(C)。

#include "stdio.h" 

         main() 

         { 

                 char a[10]={9,8,7,6,5,4,3,2,1,0}, *p=a+5; 

                 printf("%d", *--p); 

             } 

         A 非法            B a[4]的地址        C 5                D 3 

          

          

     48.有以下函数:B

     

         char *fun(char *s) 

         {   … 

                 return s; 

             }  

      

         该函数的返回值是()。 

         A 无确定值                            B 形参s中存放的地址值 

         C 一个临时存储单元的地址              D 形参s自身的地址值 

          

     二、编程题。 

     1. 

     

       自己实现strcpy函数(有以下两种实现方法

    

     2. 

     

       自己实现strlen函数 

      


      

C11----------------------------------------------------------------------

     一、改错题

     1.

     void test();

      

     int main()

     {

             struct Date

             {

                     int year;

                     int month;

                     int day;

                 };

              

             test();

             return 0;

     }

      

     void test()

     {

             // struct Date这个结构体类型是在main函数中定义的

             // 因此struct Date只能用在main函数中

             // struct Date date = {2011, 9, 10};

     } 

     // 1个错误

     

     2.

     int main()

     {

             struct Date

             {

                     int year;

                     int month;

                     int day;

                 } d1 = {2011, 9, 10};

             // struct Date类型重复定义

         //struct Date d2 = {2010,10,11};

             struct Date

             {

                     int year;

                     int month;

                     int day;

                 } d2 = {2010, 10, 11};

             return 0;

     }

      

     3.

#include <stdio.h>

      

     int main()

     {

             struct Student

             {

                     int age;

                     char *name;

                 };

              

           // 定义变量时缺少struct关键字

             struct Student stu;

             //Student stu;


              

             printf("请输入年龄:\n");

             // age属性缺少地址运算符&

             scanf("%d", &stu.age);

             printf("请输入姓名:\n");

            // name属性是一个指针,本来就代表了姓名的地址,这里不用写&

            scanf("%s", stu.name);

            //scanf("%s", &stu.name);

             return 0;

     }

      

     4.

#include <stdio.h>

      

     typedef struct

     {

             int age; 

             char *name; 

     } Student; 

      

     typedef Student * StuP; 

      

     int main() 

     { 

             Student stu; 

              

             StuP p = &stu; 

              

         // p是一个指向结构体变量stu的指针

             // 指针变量访问结构体成员用的是->,不是.

             p->age = 10;

             //p.age = 10;

             p->name = "rose";

             //p.name = "rose";

             return 0; 


             return 0; 

     } 

      

     二、编程题 

     1. 

     

      2.某班有5个学生,三门课。分别编写3个函数实现以下要求: 

      1 求各门课的平均分; 

      2 找出有两门以上不及格的学生,并输出其学号和不及格课程的成绩; 

      3 找出三门课平均成绩在85-90分的学生,并输出其学号和姓名 

     1.

     typedef struct course{

             char name[20];//课程名称

             float score;//课程分数

     }Course;

      

     typedef struct student{

             int number;//学号

             char name[20];//姓名

             Course courses[3];//三门课程

     }Student;

      

     float averageScore(Student stu);

     float averageScore(Student stu){

             float average = 0;

             for (int i = 0; i < 3; i++) {

                     average += stu.courses[i].score;

                 }

             return average /= 3;

     }

      

     void printPoorStudent(Student stu);//打印两门以上不及格的学生信息

     void printPoorStudent(Student stu){

             if ((stu.courses[0].score < 60 && stu.courses[1].score < 60)||(stu.courses[0].score < 60 && stu.courses[2].score < 60)||(stu.courses[1].score < 60 && stu.courses[2].score < 60)) {

                     printf("%d\t",stu.number);

                     if (stu.courses[0].score < 60) {

                             printf("%s:%.2f\t",stu.courses[0].name,stu.courses[0].score);

                         }

                     if (stu.courses[1].score < 60) {

                             printf("%s:%.2f\t",stu.courses[1].name,stu.courses[1].score);

                         }

                     if (stu.courses[2].score < 60) {

                             printf("%s:%.2f\t",stu.courses[2].name,stu.courses[2].score);

                         }

                     printf("\n");

                 }

     }

      

     void printNBestStudentInfo(Student stu);//打印牛best学生的信息

     void printNBestStudentInfo(Student stu){

             if (averageScore(stu) >= 85 && averageScore(stu) <= 90) {

                     printf("number:%d name:%s",stu.number,stu.name);

                 }

     }

      

      

     void studentInfo(void);

     void studentInfo(void)

     {

             Student students[5] = {

                     {1,"ZhangSan",{{"YuWen",90},{"ShuXue",88},{"English",85}}},

                     {2,"LiSi",{{"YuWen",75},{"ShuXue",93},{"English",60}}},

                     {3,"WangWu",{{"YuWen",46},{"ShuXue",59},{"English",52}}},

                     {4,"ZhaoDa",{{"YuWen",80},{"ShuXue",55},{"English",2}}},

                     {5,"QianEr",{{"YuWen",58},{"ShuXue",35},{"English",86}}},

                 };

             Course averages[3] = {{"YuWen",0},{"ShuXue",0},{"English",0}};

             for (int i = 0; i < 5; i++) {//求每门课的平均成绩

                     averages[0].score += students[i].courses[0].score;

                     averages[1].score += students[i].courses[1].score; 

                     averages[2].score += students[i].courses[2].score; 

                 } 

             printf("三门课的平均成绩\n"); 

             for(int i = 0;i < 3;i++){ 

                     printf("%s:%.2f\n",averages[i].name,averages[i].score/=5); 

                 } 

              

              

              

             printf("有两门以上不及格的学生,并输出其学号和不及格课程的成绩\n"); 

             for (int i = 0; i < 5; i++) { 

                     printPoorStudent(students[i]); 

                 } 

              

             printf("三门课平均成绩在85-90分的学生,并输出其学号和姓名\n"); 

             for (int i = 0; i < 5; i++) { 

                     printNBestStudentInfo(students[i]); 

                 } 

     } 


     

       

     2. 

     

       模拟n个人参加选举的过程,并输出选举结果:假设候选人有四人,分别用ABCD表示,当选某候选人时直接输入其编号(编号由计算机随机产生),若输入的不是ABCD则视为无效票,选举结束后按得票数从高到低输出候选人编号和所得票数。 

     

     typedef struct candidate{

             char candidateName;

             int ticketCount;

     }Candidate;

      

     void vote(int totalCount);//模拟投票

     void vote(int totalCount){

              

             Candidate candidates[4] = {{'A',0},{'B',0},{'C',0},{'D',0}};

              

             for (int i = 0; i < totalCount; i++) {

                     int choosed = arc4random() % 5 + 65;

                     switch (choosed) {

                                 case 'A':

                                     candidates[0].ticketCount++;

                                     break;

                                 case 'B':

                                     candidates[1].ticketCount++;

                                     break;

                                 case 'C':

                                     candidates[2].ticketCount++;

                                     break;

                                 case 'D':

                                     candidates[3].ticketCount++;

                                     break;

                                 default:

                                     break;

                         }

                 }

              

             for (int i = 0; i < 4 - 1; i++) {

                     for (int j = 0; j < 4 - 1 - i; j++) { 

                             if (candidates[j].ticketCount < candidates[j+1].ticketCount) { 

                                     Candidate temp = candidates[j]; 

                                     candidates[j] = candidates[j+1]; 

                                     candidates[j+1] = temp; 

                                 } 

                         } 

                 } 

             for (int i = 0; i < 4; i++) { 

                     printf("%c:%d\n",candidates[i].candidateName,candidates[i].ticketCount); 

                 } 

     } 


      

     3.

     

       主函数创建5个学生的数组,写一个排序函数,让学生按姓名从小到大排序,主函数输出排序后的结果 

     typedef struct stu

     {

             char name[20];

             int age;

             float score;

     }Student;

      

     void sort_by_name(Student arr[], int arr_len)

     {

             for (int i = 0; i < arr_len-1; i++) {

                     for (int j = 0; j < arr_len-1-i; j++) {

                             if (strcmp(arr[j].name, arr[j+1].name)>0) {

                                     Student temp = arr[j];

                                     arr[j] = arr[j+1];

                                     arr[j+1] = temp;

                                 }

                         }

                 }

     }

      

     void print_stu_info(Student arr[], int arr_len)

     {

             for (int i = 0; i < arr_len; i++) {

                     printf("%-10s%5d%7.2f\n", arr[i].name, arr[i].age,arr[i].score);

                 }

     }

      

     int main(void) 

     { 

             Student stus[5] = {{"zhangsan",23, 78.8}, 

                     {"lisi",25,89.0}, 

                     {"rongyan", 43, 67.5}, 

                     {"amumu", 17, 88}, 

                     {"gailun",28,91.5}}; 

              

             sort_by_name(stus, 5); 

             print_stu_info(stus, 5); 

             return 0; 

     }


0 0