【推薦】學期教學計劃匯總9篇
1.溢出與越界的區別

2.指出如下代碼中的錯誤
int main()
{
char a;
char* p = &a;
strcpy(p, "Hello");
printf("p is %s", p);
return 0;
}
3.指出如下代碼的輸出結果
void fun(char str[])
{
void* p = malloc(100);
printf("%d\n%d", sizeof(str), sizeof(p));
}
int main()
{
char str[100] = "Hello";
fun(str);
return 0;
}
4.利用TCP發送數據的時候,調用send發送5次,每次發送100字節,問接收方調用recv最少幾次,最多幾次?
5.自定義實現字符串轉為整數的算法,例如把“123456”轉成整數123456.(輸入中可能存在符號,和數字)
6.給出一棵二叉樹的前序和中序遍歷,輸出后續遍歷的結果,假設二叉樹中存儲的均是ASCII碼。如前序:ABDHECFG,中序:HDBEAFCG,則輸出后序為:HDECFGCA。
7.給出了一個n*n的矩形,編程求從左上角到右下角的路徑數(n > =2),限制只能向右或向下移動,不能回退。例如當n=2時,有6條路徑。
參考答案:
1.溢出主要指的是超出了自身的范圍,常見的有整數溢出和緩沖區溢出;而越界則指的是操作數組的下標超出了數組應有的長度范圍。
2.由于p指向的只是一個字節的地址,strcpy拷貝溢出。
3.數組作為函數參數時會退化為指針,所以sizeof(str)為4;而p本身就是一個指針,所以sizeof(p)為4。
4.TCP的基本工作流程:send時會先發送到發送緩沖區,接收時會從接收緩沖區取數據。由于緩沖區的大小不定,按題意,最少recv接收1次,最多500次。
5.可以參見c中的stoi函數實現,主要是要考慮各種特殊情況,例如符號和溢出,下面是示例實現代碼。
/pic/p>
enum Status {VALID,IN_VALID};
int gStatus = VALID;
int strToInt(const char* str)
{
long long result = 0;/pic/p>
gStatus = IN_VALID; /pic/p>
if(str != NULL)
{
const char* digit = str;
bool minus = false;
if(*digit == '+')
digit++;
else if(*digit == '-')
{
digit++;
minus = true;
}
while(*digit != '\0')
{
if(*digit >= '0' && *digit <= '9')
{
result = result * 10 + (*digit -'0');
/pic/p>
if(result > std::numeric_limits::max())
{
result = 0;
break;
}
digit++;
}
/pic/p>
else
{
result = 0;
break;
}
}
if(*digit == '\0')
{
gStatus = VALID;
if(minus)
result = 0 - result;
}
}
return static_cast(result);
}
6.思路:先利用前序和中序構建出二叉樹,然后后序遍歷輸出結果
/**
*返回二叉樹的根節點
*preOrder:前序遍歷序列
*inOrder:中序遍歷序列
*len:節點數目
*/
Node* getBinaryTree(char* preOrder, char* inOrder, int len)
{
if(preOrder == NULL || *preOrder == '\0' || len<=0)
return NULL;
Node* root = (Node*) malloc(sizeof(Node));
if(root == NULL)
exit(EXIT_FAILURE);
/pic/p>
root->data = *preOrder;
int pos = 0;/pic/p>
while(true)
{
if(*(inOrder+pos) == root->data)
break;
pos++;
}
/pic/p>
if(pos == 0)
root->lchild = NULL;
else
root->lchild = getBinaryTree(preOrder+1, inOrder, pos);
if(len-pos-1 == 0)
root->rchild = NULL;
else
root->rchild = getBinaryTree(preOrder+pos+1, inOrder+pos+1,len-pos-1);
return root;
}
/**
*后續遍歷二叉樹
*
*/
void postOrder(Node* root)
{
if(root == NULL)
return;
postOrder(root->lchild);
postOrder(root->rchild);
printf("%c", root->data);
}
/**
*根據前序遍歷和中序遍歷輸出后續遍歷
*
*/
void printPostOrderViaPreOrderAndInorder(char* preOrder, char* inOrder)
{
Node* root = getBinaryTree(preOrder, inOrder, strlen(preOrder));
postOrder(root);
}
7.一是利用數學知識,從左上角到右下角總共要走2n步,其中橫向要走n步,所以總共就是C2n~n。
二是利用遞歸實現
/**
*返回總路徑數
*參數m:表示矩形的橫向格子數
*參數n:表示矩形的縱向格子數
*/
int getTotalPath(int m, int n)
{
/pic/p>
if(m == 1)
return n + 1;
/pic/p>
if(n == 1)
return m + 1;
/pic/p>
/pic/p>
/pic/p>
return getTotalPath(m-1, n) + getTotalPath(m, n-1);
}
【學期教學計劃】相關文章:
學期教學計劃03-08
學期教學計劃中班上學期教學計劃05-26
學期教學計劃小班 本學期教學計劃小班03-18
學期教育教學計劃02-03
學期教學計劃范文03-10
整學期的教學計劃05-22
學期教學計劃音樂05-07
學期班教學計劃03-18
英語學期教學計劃02-27
學期教學計劃集合01-11