C语言习题~day23

简介: C语言习题~day23

1.关于浮点数在内存中存储描述正确的是?

A.浮点数和整型在内存中的存储是一样的

B.所有浮点数在内存中都能精确保存

C.浮点数的存储是按照IEEE754标准,存储了S、M、E相关的值,有的浮点数是不能精确保存的

D.浮点数以二进制的形式直接存储的

A 错误:整型数据使用固定大小的字节存储,而浮点数数据使用浮点表示法存储。

B 错误:浮点数的存储和表示方式使用了浮点数表示法,通常是使用IEEE 754标准。这种表示法使用有限的位数来表示一个实数,因此无法精确地表示所有的实数。

2.以下代码:

struct student
{
  int num;
  char name[32];
  float score;
}stu;

则下面的叙述不正确的是:( )

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

B.struct student 是用户定义的结构体类型

C.num, score 都是结构体成员名

D.stu 是用户定义的结构体类型名

A:正确,在C语言中需要自定义类型时,要用到struct关键字

B:正确:在C语言中,用struct定义的结构体,定义结构体类型变量时,需要用struct student

C:正确:结构体中的变量名称,称之为结构体的成员

D:错误:stu是定义的结构体类型变量,不是名称,如果想要让stu为结构体类型名称时,必须在结构体定义时添加   typedef关键字

因此:选择D

3.下面程序的输出结果是:( )

struct stu
{
    int num;
    char name[10];
    int age;
};
 
void fun(struct stu *p)
{
  printf("%s\n",(*p).name);
  return;
}
 
int main()
{
  struct stu students[3] = {{9801,"zhang",20},
               {9802,"wang",19},
                    {9803,"zhao",18} };
   fun(students + 1);
  return 0;
}

4.结构体访问成员的操作符不包含:( )

A.. 操作符

B.-> 操作符

C.* 解引用操作符

D.sizeof

答案解析:

A:正确,结构体类型变量访问结构体中成员时,使用.操作符

B:正确,指向结构体类型变量的指针访问结构体中成员时,使用->操作符

C:正确,指向结构体类型变量的指针也可以通过.方式访问成员,只不过要先通过*对该指针解引用

D:错误,sizeof是求结构体类型大小的

因此:选择D

5.下面程序要求输出结构体中成员a的数据,以下不能填入横线处的内容是( )

#include < stdio.h >
struct S
{ 
  int a;
  int b; 
};
int main( )
{ 
  struct S a, *p=&a;
  a.a = 99;
  printf( "%d\n", __________);
  return 0;
}

A.a.a

B.*p.a

C.p->a

D.(*p).a

答案解析:

结构体类型变量需要访问其成员时,用.运算符,如果是指向结构体变量的指针访问时,需要用->,或者先对指针解引用,取到指向的结构体类型的变量,再通过.访问,但是要注意优先级

因此:选择B

6.模拟实现atoi

atoi的规则是:跳过不可见字符,碰到负号或者数字开始转换,转换到非数字字符为止。

#include<stdio.h>
#include<assert.h>
#include<ctype.h>
#include<stdlib.h>
enum State
{
  VAILD,
  INVAILD
}Sta = INVAILD;//创造变量默认为非法
 
 
 
 
int my_atoi(const char* str)
{
  assert(str);
  if (*str == '\0')
  {
    return 0;
  }
  while (isspace(*str))
  {
    str++;
  }
  int flag = 1;
  if (*str == '+')
  {
    flag = 1;
    str++;
  }
  else if (*str == '-')
  {
    flag = -1;
    str++;
  }
  long long ret = 0;
  while (*str != '\0')
  {
    if (isdigit(*str))
    {
      ret = ret * 10 + flag * (*str - '0');//减去字符0,才是数字0
      if (ret > INT_MAX || ret < INT_MIN)
      {
        return 0;
      }
    }
    else
    {
      return (int)ret;//强制类型转化为int(函数的返回值是int)
    }
    str++;
  }
  if (*str == '\0')
  {
    Sta = VAILD; //正常转换完了,到末尾的 \0
  }
  return (int)ret;
 
 
 
 
}
int main()
{
  char arr[20] = "1234";
  int ret = my_atoi(arr);
  if (Sta == VAILD)
  {
    printf("合法转换:%d\n", ret);
  }
  else if (Sta == INVAILD)
  {
    printf("非法转换:%d\n", ret);
  }
  return 0;
}


目录
相关文章
TU^
|
12天前
|
存储 C语言
C语言习题~day35
C语言习题~day35
TU^
11 1
TU^
|
12天前
|
编译器 C语言
C语言习题~day31
C语言习题~day31
TU^
8 2
TU^
|
12天前
|
算法 程序员 C语言
C语言习题~day36
C语言习题~day36
TU^
15 1
TU^
|
12天前
|
存储 C语言
C语言习题~day34
C语言习题~day34
TU^
9 1
TU^
|
12天前
|
算法 C语言
C语言习题~day33
C语言习题~day33
TU^
10 1
TU^
|
12天前
|
C语言
C语言习题~day32
C语言习题~day32
TU^
9 1
TU^
|
12天前
|
C语言
C语言习题~day30
C语言习题~day30
TU^
7 1
TU^
|
12天前
|
自然语言处理 C语言 C++
C语言习题~day29
C语言习题~day29
TU^
7 1
TU^
|
12天前
|
存储 C语言
C语言习题~day28
C语言习题~day28
TU^
7 1
TU^
|
12天前
|
C语言
C语言习题~day27
C语言习题~day27
TU^
9 1