|
A、该题用语言描述是指:第i行第一个输出*,然后输出i-1个.,重复上i次。 #include #define N 8 int main() { int i; int j; int k; for(i=0;i<=N;i++) { for(j=1;j<=i;j++) { printf("*"); for(k=1;k printf("."); } printf("n"); } return 0; B、降序排列数组,很常见的,这里我采用冒泡排序法还有选择排序法: 冒泡排序: #include void sort(int *array,int num ); int main() { int num=9,i; int array[]={45,56,76,234,1,34,23,2,3}; sort(array,num); for(i=0;i printf("%dt",array); return 0; } void sort(int *array,int num) { int i,j; int temp; for(i=0;i { for(j=0;j { if(array[j] { temp=array[j]; array[j]=array[j+1]; array[j+1]=temp; } } } } 选择排序: #include void sort(int *array,int num ); int main() { int num=9,i; int array[]={45,56,76,234,1,34,23,2,3}; sort(array,num); for(i=0;i printf("%dt",array); return 0; } void sort(int *array,int num) { int i,j,k; int temp; for(i=0;i { k=i; //每次一趟结束后就从新的一个值开始,无需从头来,因为每一次排完后都是最大的了 for(j=i+1;j if(array[k] { k=j; } if(k!=i) //如果k不等于i就说明有更大的值,交换二值 { temp=array; array=array[k]; array[k]=temp; } } } C、该题考查同学们对递归算法的认识程度,在这里我们采用迭代算法,优点是程序运行效率高,而且不用担心堆栈溢出,在运算值大的情况下比递归算法可以提高上万倍的速度,比如同样计算30,递归算法用时 0.019s,而迭代算法则只用了0.003s,可见是递归算法的八分之一,值更大时这种越明显。缺点是程序比较不容易懂。有兴趣的可以参见《C和指针》127页,具体程序如下: 递归法: #include int Pheponatch(int); int main() { printf("The 10th is %d",Pheponatch(30)); return 0; } int Pheponatch(int N) { if(N<=2) return 1; return Pheponatch(N-1)+Pheponatch(N-2); } 迭代法: #include int Pheponatch(int); int main() { printf("The 10th is %d",Pheponatch(30)); return 0; } int Pheponatch(int n) { long result; long previous_result; long next_older_result; result=previous_result=1; while(n>2) { n-=1; next_older_result=previous_result+result; previous_result=result; result=next_older_result; } return result; } D、源程序如下,红笔写出的是修改的地方:(其实这个程序有好多漏洞,不知为什么会那这个程序来考) #include #include typedef struct{ TNode* left; TNode* right; int value; } TNode; TNode* root=NULL; void append(int N); int main() { append(63); append(45); append(32); append(77); append(96); append(21); append(17); // Again, 数字任意给出 } void append(int N) { TNode* NewNode=(TNode *)malloc(sizeof(TNode)); NewNode->value=N; NewNode->right=NULL; NewNode->left=NULL; if(root==NULL) { root=NewNode; return; } else { TNode* temp; temp=root; while((N>=temp.value && temp.left!=NULL) || (N right !=NULL )) { while(N>=temp.value && temp.left!=NULL) temp=temp.left; while(N temp=temp.right; } if(N>=temp.value) temp.left=NewNode; else temp.right=NewNode; return; } } 原因:因为新节点的左右指针没有赋 NULL 值,至使下面的 while循环不能正确结束而导致内 存越界,最后崩溃(注意结束条件是 temp->left!= NULL 或 temp->right!=NULL)。 (责任编辑:职场达人) |


