深入了解ISO/IEC 9899: C语言标准文档

版权申诉
0 下载量 94 浏览量 更新于2024-10-25 收藏 1.16MB ZIP 举报
资源摘要信息:"C语言标准文档ISO/IEC 9899:1990" C语言是一种广泛使用的计算机编程语言,它具有高效、灵活和可移植性等特性。C语言的发展历程中,标准化是一个非常重要的里程碑。ISO/IEC 9899是由国际标准化组织(ISO)和国际电工委员会(IEC)共同制定的C语言的官方标准文档,通常被称为ANSI C或C89。该标准最初发布于1990年,并在随后的年份中经历了几次修订,其中较重要的版本包括C99和C11。本资源摘要信息将主要介绍1990年的ISO/IEC 9899标准,即C89标准。 ### C89标准的特点与组成 1. **结构化编程**:C89标准强调了结构化编程的概念,支持程序的模块化设计和开发,这有利于提高程序的可读性和可维护性。 2. **数据类型和表达式**:C89定义了一组丰富的数据类型,包括基本类型(如int、char)、派生类型(如数组、结构体)和限定类型(如const、volatile)。此外,提供了丰富的运算符和表达式,用于数据处理和控制程序流程。 3. **控制语句**:C89支持多种控制语句,例如if、switch、while、do-while和for循环,这些控制结构是构成程序逻辑的关键部分。 4. **函数**:C89标准中定义了函数的声明和定义,以及参数传递机制。函数是程序中的独立代码块,可以被重复调用,是实现模块化编程的基本单位。 5. **标准库**:C89标准提供了一套丰富的标准库,包括输入输出(I/O)、字符串处理、数学计算、日期和时间处理等多个方面。标准库的定义使得程序员可以不必重新发明轮子,同时也促进了代码的可移植性。 6. **兼容性**:C89标准制定时,考虑到了已有的广泛使用的C语言实践,确保了新标准的代码可以在不同平台和编译器上编译和运行。 ### 标准化过程 在C89标准制定之前,C语言已经有了多年的实际使用和经验积累。1983年,ANSI委员会成立了一个专门小组来标准化C语言,他们以当时流行的C语言版本为基础,并对其进行了改进和补充,最终形成了ANSI C标准。1989年,ANSI标准被国际标准化组织接受并成为国际标准ISO/IEC 9899,后续版本的C语言标准都是在这个基础上进行的扩展和完善。 ### 影响与应用 C89标准对C语言及其后继版本的发展起到了基础性的作用。它的发布为C语言的普及和广泛应用提供了坚实的基础。C89标准在学术界和工业界得到了广泛认可,成为众多操作系统、应用程序和硬件驱动开发的首选语言。 随着计算机技术的快速发展,后续的C99和C11标准分别增加了新的语言特性和库功能,以应对新的编程挑战和提高开发效率。但C89作为C语言发展的基石,其确立的标准和实践仍然对现代C语言编程有着深远的影响。 本资源所附带的《C Standard.pdf》文件,是ISO/IEC 9899标准的权威文档,对于了解C语言的历史背景、语言规范、标准库等内容具有极大的价值。无论是对于初学者还是经验丰富的开发者,该文档都是学习和参考的重要资源。通过深入学习该标准文档,开发者可以获得对C语言更深刻的理解,并能够编写出符合国际标准、更具质量和可移植性的代码。

给以下代码写注释,要求每行写一句:class CosineAnnealingWarmbootingLR: # cawb learning rate scheduler: given the warm booting steps, calculate the learning rate automatically def __init__(self, optimizer, epochs=0, eta_min=0.05, steps=[], step_scale=0.8, lf=None, batchs=0, warmup_epoch=0, epoch_scale=1.0): self.warmup_iters = batchs * warmup_epoch self.optimizer = optimizer self.eta_min = eta_min self.iters = -1 self.iters_batch = -1 self.base_lr = [group['lr'] for group in optimizer.param_groups] self.step_scale = step_scale steps.sort() self.steps = [warmup_epoch] + [i for i in steps if (i < epochs and i > warmup_epoch)] + [epochs] self.gap = 0 self.last_epoch = 0 self.lf = lf self.epoch_scale = epoch_scale # Initialize epochs and base learning rates for group in optimizer.param_groups: group.setdefault('initial_lr', group['lr']) def step(self, external_iter = None): self.iters += 1 if external_iter is not None: self.iters = external_iter # cos warm boot policy iters = self.iters + self.last_epoch scale = 1.0 for i in range(len(self.steps)-1): if (iters <= self.steps[i+1]): self.gap = self.steps[i+1] - self.steps[i] iters = iters - self.steps[i] if i != len(self.steps)-2: self.gap += self.epoch_scale break scale *= self.step_scale if self.lf is None: for group, lr in zip(self.optimizer.param_groups, self.base_lr): group['lr'] = scale * lr * ((((1 + math.cos(iters * math.pi / self.gap)) / 2) ** 1.0) * (1.0 - self.eta_min) + self.eta_min) else: for group, lr in zip(self.optimizer.param_groups, self.base_lr): group['lr'] = scale * lr * self.lf(iters, self.gap) return self.optimizer.param_groups[0]['lr'] def step_batch(self): self.iters_batch += 1 if self.iters_batch < self.warmup_iters: rate = self.iters_batch / self.warmup_iters for group, lr in zip(self.optimizer.param_groups, self.base_lr): group['lr'] = lr * rate return self.optimizer.param_groups[0]['lr'] else: return None

139 浏览量

优化这段代码:def calTravelCost(route_list,model): timetable_list=[] distance_of_routes=0 time_of_routes=0 obj=0 for route in route_list: timetable=[] vehicle=model.vehicle_dict[route[0]] travel_distance=0 travel_time=0 v_type = route[0] free_speed=vehicle.free_speed fixed_cost=vehicle.fixed_cost variable_cost=vehicle.variable_cost for i in range(len(route)): if i == 0: next_node_id=route[i+1] travel_time_between_nodes=model.distance_matrix[v_type,next_node_id]/free_speed departure=max(0,model.demand_dict[next_node_id].start_time-travel_time_between_nodes) timetable.append((int(departure),int(departure))) elif 1<= i <= len(route)-2: last_node_id=route[i-1] current_node_id=route[i] current_node = model.demand_dict[current_node_id] travel_time_between_nodes=model.distance_matrix[last_node_id,current_node_id]/free_speed arrival=max(timetable[-1][1]+travel_time_between_nodes,current_node.start_time) departure=arrival+current_node.service_time timetable.append((int(arrival),int(departure))) travel_distance += model.distance_matrix[last_node_id, current_node_id] travel_time += model.distance_matrix[last_node_id, current_node_id]/free_speed+\ + max(current_node.start_time - arrival, 0) else: last_node_id = route[i - 1] travel_time_between_nodes = model.distance_matrix[last_node_id,v_type]/free_speed departure = timetable[-1][1]+travel_time_between_nodes timetable.append((int(departure),int(departure))) travel_distance += model.distance_matrix[last_node_id,v_type] travel_time += model.distance_matrix[last_node_id,v_type]/free_speed distance_of_routes+=travel_distance time_of_routes+=travel_time if model.opt_type==0: obj+=fixed_cost+travel_distance*variable_cost else: obj += fixed_cost + travel_time *variable_cost timetable_list.append(timetable) return timetable_list,time_of_routes,distance_of_routes,obj

2023-06-11 上传