分类:软考/初级_程序员    来源:软考
【说明】 对于大于1的正整数n,(x+1)n可展开为 ![]() 下面流程图的作用是计算(x+1)n展开后的各项系数 ![]() ![]() ![]() ![]() 例如,计算(x+1)3的过程如下: 先计算 (x+1)2 ( 即k=2) 的各项系数,然后计算(x+1)3(即k=3)的各项系数。 K=2时,需要计算 ![]() ![]() ![]() ![]() ![]() ![]() k=3 时,需要计算 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
问题:1.1
【流程图】![]() 注:循环开始框内应给出循环控制变量的初值和终值,默认递增值为1。 格式为:循环控制变量=初值,终值,递增值。 |
【说明】 对n个元素进行简单选择排序的基本方法是:第一趟从第1个元素开始,在n个元素中选出最小者,将其交换至第一个位置,第二趟从第2个元素开始,在剩下的n-1个元素中选出最小者,将其交换至第二个位置,依此类推,第i趟从n=i+1个元素中选出最小元素,将其交换至第i个位置,通过n-1趟选择最终得到非递减排序的有序序列。 |
问题:2.1
【代码】 #include <stdio.h> void selectSort(int data[ ],int n) //对 data[0]~data[n-1]中的n个整数按非递减有序的方式进行排列 { int i,j,k; int temp; for(i=0;i<n-1;i++){ for(k=i,j=i+1;(1);(2)) //k表示data[i]~data[n-1]中最小元素的下标 if(data[j]<data[k]) (3) if(k!=i) { //将本趟找出的最小元素与data[i]交换 temp=data[i]; (4) ;data[k]=temp; } } } int main() { int arr[ ]={79,85,93,65,44,70,100,57}; int i,m; m=sizeof(arr)/sizeof(int); //计算数组元素的个数,用m表示 (5); //调用selectSort对数组arr进行非递减排序 for((6);i <m;i++) //按非递减顺序输出所有的数组元素 printf(“%d\t”,arr[i]); printf(“\n”); return 0; } |
【代码1】 typedef enum {A,B,C,D} EnumType; EnumType f(int yr) { if(0 == yr%400) { return A; } else if (!(yr%4)) { if(0!=yr%100) return B; else return C; } return D; } 【代码2】 #include<stdio.h> int main() { int score; scanf("%d",&score); switch (score) { case 5: printf("Excellent!\n"); case 4: printf("Good!\n"); break; case 3: printf("Average!\n"); case 2: case 1: case 0: printf("Poor!\n"); default: printf("Oops,Error\n"); } return 0; } 【代码3】 #include<stdio.h> int main() { int i,j,k; for(i=0; i<2; i++) for(j=0; j<3;j++) for( k=0; k<2;k++) { if(i!=j&&j!=k) printf("%d %d %d\n", i,j,k); } return 0; } |
问题:3.1
(4分) 对于代码1,写出下面的函数调用后x1、x2、x3和x4的值。 x1=f(1997); x2=f(2000); x3=f(2100); x4=f(2020); |
问题:3.2
(5分) (1)写出代码2进行时输入为3的输出结果; (2)写出代码2进行时输入为5的输出结果。 |
问题:3.3
(6分) 写出代码3运行后的输出结果。 |
【说明】 当数组中的元素已经排列有序时,可以采用折半查找(二分查找)法查找一个元素。下面的函数biSearch(int r[],int low,int high,int key)用非递归方式在数组r中进行二分查找,函数biSearch_rec(int r[],int low,int high,int key)采用递归方式在数组r中进行二分查找,函数的返回值都为所找到元素的下标;若找不到,则返回-1。 【C函数1】 int biSearch(int r[],int low,int high,int key) //r[low..high] 中的元素按非递减顺序排列 //用二分查找法在数组r中查找与key相同的元素 //若找到则返回该元素在数组r的下标,否则返回-1 { int mid; while((1)) { mid = (low+high)/2 ; if (key ==r[mid]) return mid; else if (key<r[mid]) (2); else (3); }/*while*/ return -1; }/*biSearch*/ 【C 函数2】 int biSearch_rec(int r[],int low,int high,int key) //r[low..high]中的元素按非递减顺序排列 //用二分查找法在数组r中查找与key相同的元素 //若找到则返回该元素在数组r的下标,否则返回-1 { int mid; if((4)) { mid = (low+high)/2 ; if (key ==r[mid]) return mid; else if (key<r[mid]) return biSearch_rec((5),key); else return biSearch_rec((6),key); }/*if*/ return -1; }/*biSearch_rec*/ |
问题:4.1
(12分) 请填充C函数1和C函数2中的空缺,将解答填入答题纸的对应栏内。 |
问题:4.2
(3分) 若有序数组中有n个元素,采用二分查找法查找一个元素时,最多与( )个数组元素进行比较,即可确定查找结果。 (7)备选答案: A.[log2(n+1)] B.[n/2] C.n-1 D.n |
【说明】 以下Java代码实现一个超市简单销售系统中的部分功能,顾客选择图书等物件 (Item)加入购物车(ShoppingCart),到收银台(Cashier)对每个购物车中的物品统计其价格进行结账。设计如图5-1所示类图。 ![]() 图5-1类图 |
问题:5.1
【Java代码】 interface Item{ public void accept(Visitor visitor); public double getPrice(); } class Book (1){ private double price; public Book(double price){(2);} public void accept(Visitor visitor){ //访问本元素 (3); } public double getPrice() { return price; } } //其它物品类略 interface Visitor { public void visit(Book book); //其它物品的visit方法 } class Cashier(4){ private double totalForCart; //访问Book类型对象的价格并累加 (5){ //假设Book类型的物品价格超过10元打8折 if(book.getPrice()<10.0){ totalForCart+=book.getPrice(); } else totalForCart+=book.getPrice()*0.8; } //其它visit方法和折扣策略类似,此处略 public double getTotal() { return totalForCart; } } class ShoppingCart { //normal shopping cart stuff private java.util.ArrayList<Item>items=new java.util.ArrayList<>(); public double calculatePrice() { Cashier visitor=new Cashier(); for(Item item:items) { (6); } double total=visitor.getTotal(); return total; } public void add(Item e) { this.items.add(e); } } |
【说明】 以下C++代码实现一个超市简单销售系统中的部分功能,顾客选择图书等物品(Item)加入购物车(ShoppingCart),到收银台(Cashier)对每个购物车中的物品统计其价格进行结账,设计如图6-1所示类图。 ![]() 图6-1 类图 |
问题:6.1
【C++代码】 using namespace std; class Book; class Visitor { public: virtual void visit(Book* book)=0; //其它物品的visit方法 }; class Item { public:virtual void accept(Visitor* visitor)=0; virtual double getPrice()=0; }; class Book (1){ private: double price; public: Book (double price){ //访问本元素 (2); } void accept(Visitor* visitor) { (3); } double getPrice() { return price; } }; class Cashier(4){ private; double totalForCart; public: //访问Book类型对象的价格并累加 (5){ //假设Book类型的物品价格超过10元打8折 if(book->getPrice()<10.0) { totalForCart+=book->getPrice(); } else totalForCart+=book->getPrice()*0.8; } //其它visit方法和折扣策略类似,此处略 double getTotal() { return totalForCart; } }; class ShoppingCart { private: vector<item*>items; public: double calculatePrice() { Cashier* visitor=new Cashier(); for(int i=0;i <items.size();i++) (6); } double total=visitor->getTotal(); return total; } void add(Item*e) { items.push_back(e); } }; |