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