C程序设计基础及实验 习题09 复习

判断题

1-1 结构是变量的集合,可以按照对同类型变量的操作方法单独使用其成员变量。T

1-2 在定义结构类型时,关键字struct和它后面的结构名共同组成一个新的数据类型名。T

1-3 在定义嵌套的结构类型时,必须先定义成员的结构类型,再定义主结构类型。

1-4 结构数组是结构与数组的结合体,与普通数组的不同之处在于每个数组元素都是一个结构类型的数据,包括多个成员项。T

1-5 结构指针就是指向结构类型变量的指针。T

1-6 假设结构指针p已定义并正确赋值,其指向的结构变量有一个成员是int型的num,则语句 *p.num = 100; 是正确的。F “ . ”的优先级大于“ * ”,所以应该是p->num=100;

1-7 使用结构指针作为函数参数只要传递一个地址值,因此,能够提高参数传递的效率。T

单选题

2-1 对于以下定义,不正确的叙述是( )。

struct  ex { 
  int x;
  float y;
  char z ;
} example;

A.struct是定义结构类型的关键字

B.example是结构类型名

C.xyz都是结构成员名

D.struct ex是结构类型名

选择B

2-2 根据下面的定义,能打印出字母M的语句是()。

struct person{
  char name[10]; 
  int age; 
} c[10] = { "John", 17, "Paul", 19, "Mary", 18, "Adam", 16 };

A.printf("%c", c[3].name);

B.printf("%c", c[3].name[1]);

C.printf("%c", c[2].name[0]);

D.printf("%c", c[2].name[1]);

选择C

2-3 设有如下定义,则错误的输入语句是( )。

struct  ss{ 
  char  name[10];
  int age;  
  char sex;
} std[3], *p = std;

A.scanf("%d", &(*p).age);

B.scanf("%d", p->&age);

C.scanf("%c", &std[0].sex);

D.scanf("%c", &(p->sex));

选择B,应该是&(p->age)

2-4 下列程序的输出结果是( )。

struct stu{ 
  char num[10];  
  float score[3];
};

int main( )
{ 
  struct stu s[3] = {{ "20021",90,95,85},{"20022",95,80,75},{"20023",100,95,90}};
  struct stu *p = s;
  int i;   
  float sum = 0;
    
  for(i=0; i<3; i++){
    sum = sum + p->score[i];
  }
  printf("%6.2f", sum);
    
  return 0;
}

A.260.00 B.270.00 C.280.00 D.285.00

选择B

2-5 

以下定义结构变量的语句中,错误的是()。

A.

struct student{ 
   int num; 
   char name[20];
} s;

B.

struct { 
  int num; 
  char name[20]; 
} s;

C.

struct student{ 
  int num; 
  char name[20]; 
}; 
student s;

D.

struct student{ 
  int num; 
  char name[20]; 
}; 
struct student s;

选择C,应该是struct student s; 

2-6 如果结构变量s中的生日是“1984年11月11日”,下列对其生日的正确赋值是()。

struct student
{  
  int no;
  char name[20];
  char sex;
  struct{
    int year;
    int month;
    int day;
  }birth;
};
struct student s;

A.year = 1984; month = 11; day = 11;

B.birth.year = 1984; birth.month = 11; birth.day = 11;

C.s.year = 1984; s.month = 11; s.day = 11;

D.s.birth.year = 1984; s.birth.month = 11; s.birth.day=11;

选择D

2-7 以下程序段的输出结果为()。

struct { 
  int x, y;
} s[2] = { {1, 3}, {2, 7} };

printf("%d\n", s[0].y/s[1].x );

A.0 B.1 C.2 D.3

选择B,s[0].y为3,s[1].x为2,两者相除为1

2-8 设有如下定义,则对data中的a成员的正确引用是()。

struct sk{
   int a; 
   double b;
} data, *p = &data;

A.(*p).data.a B.(*p).a C.p->data.a D.p.data.a

选择B

2-9 对于以下结构定义,++p->str中的++加在()。

struct {
   int len; 
   char *str; 
} *p;

A.指针str上 B.指针p上 C.str指向的内容上 D.语法错误

选择A

2-10 若有下列定义,则以下不合法的表达式是( )。

struct student{
   int num;
   int age;
};
struct student stu[3] = {{101, 20}, {102, 19}, {103, 20}}, *p = stu;

A.(p++)->num B.p++ C.(*p).num D.p = &stu.age

选择D

2-11 C语言中结构类型变量在程序执行期间( )。

A.所有成员一直驻留在内存中

B.只有一个成员驻留在内存中

C.部分成员驻留在内存中

D.没有成员驻留在内存中

选择A

2-12 以下程序的输出结果是( )。

struct stu{
  int x; 
  int *y;
} *p;
int dt[4] = {10, 20, 30, 40};
struct stu a[4] = {50, &dt[0], 60, &dt[1], 70, &dt[2], 80, &dt[3]};

int main( )
{ 
   p=a;
   printf("%d,", ++p->x);
   printf("%d,", (++p)->x);
   printf("%d", ++(*p->y));
     
   return 0;
}

A.10,20,20 B.50,60,21 C.51,60,21 D.60,70,3

2-13 对于以下结构定义,(*p)->str++中的++加在()。

struct { 
  int len; 
  char *str
} *p;

A.指针str上 B.指针p上 C.str指向的内容上 D.语法错误

选择A,虽然char *str后面没有*,但是

2-14 有如下定义:

struct Student{
    char name[10];
    int age;
    char gender;
}std[3], *p=std;

则以下各输入语句中错误的是:

A.scanf("%d",&(*p).age);

B.scanf("%c",&std[0].gender);

C.scanf("%c",&(p->gender));

D.scanf("%s",&std.name);

选择D,字符串不需要取地址

填空题

4-1 写出下面程序段的运行结果 2,3

struct example{
    struct {
      int x; 
      int y;
    } in;
    int a; 
    int b;
  } e;
    
  e.a = 1; 
  e.b = 2;
  e.in.x = e.a * e.b;
  e.in.y = e.a + e.b;
  printf("%d,%d\n", e.in.x, e.in.y);  /* 输出数据之间没有空格分隔 */

 4-2 写出下面程序段的运行结果 23,wang,98.5,wang

struct example {
   int a; 
   double b; 
   char *c; 
}x = {23, 98.5, "wang"}, *px = &x;
printf("%d,%s,%.1f,%s\n", x.a, x.c, (*px).b, px->c);  /* 输出数据之间没有空格分隔 */

 4-3 写出下面程序段的运行结果 10,41,70(服了,千万别忘记写逗号了)

struct table {
   int x, y;         
}a[4]={{10, 20}, {30, 40}, {50, 60}, {70, 80}};
struct table *p = a;

printf("%d,", p++->x);   /* 以下输出数据之间没有空格分隔 */
printf("%d,", ++p->y);
printf("%d", (a+3)->x);  

4-4 运行以下程序段,第1行输出 2,第2行输出 7,3

struct {
  int a; int *b;
} s[4], *p;
int i, n = 1;    
for(i = 0; i < 4; i++){
      s[i].a = n;
      s[i].b = &s[i].a;
      n = n + 2;
}
p = &s[0];
printf("%d\n", ++*p->b);
p++;
printf("%d,%d\n", (++p)->a, (p++)->a);  /* 输出数据之间没有空格分隔;按从右向左的顺序求解表达式 */

 4-5 写出下面程序的运行结果 1,2,A,B

struct s1{
  char c1, c2;
  int  n;
};
struct s2{
   int n; 
   struct s1 m;
} m = {1, {‘A’, 'B’, 2} };

int main(void)
{  
   printf("%d,%d,%c,%c\n", m.n, m.m.n, m.m.c1, m.m.c2);  /* 输出数据之间没有空格分隔 */
     
   return 0;
}

 4-6 以下程序的运行结果是 2,32

#include<stdio.h>
struct ps{
  double i;
  char arr[24];
};
int main()
{
  struct ps s[3], *p1, *p2;
    
  p1=s;  
  p2=s+2;
  printf("%d,%d\n", p2-p1, sizeof(struct ps)); /* 输出数据之间没有空格分隔 */
    
  return 0;
}

4-7 以下程序的运行结果是 123213321

#include <stdio.h>
struct st{
  char c; 
  char s[80];
};
struct  st a[4] = {{'1',"123"}, {'2',"321"}, {'3',"123"}, {'4',"321"}};
char * f(struct st *t);

int main( )
{  int k;

  for(k = 0; k < 4; k++){
    printf("%s", f(a+k));
  }

  return 0;
}

char * f(struct st *t)
{   
   int k = 0;
    
   while(t->s[k] != '\0'){
        if( t->s[k] == t->c){
          return t->s+k;
        }
        k++;
    }
        
   return t->s;
}
  • 18
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北欧海盐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值