【推薦】學(xué)期教學(xué)計劃匯總9篇
1.溢出與越界的區(qū)別

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