runtime error (執行時錯誤)就是程式執行到一半,程式就崩潰了。
①除以零
②陣列越界:int a[3]; a[10000000]=10;
③指標越界:int * p; p=(int *)malloc(5 * sizeof(int)); *(p+1000000)=10;
④使用已經釋放的空間:int * p; p=(int *)malloc(5 * sizeof(int));free(p); *p=10;
⑤陣列開得太大,超出了棧的範圍,造成棧溢位:int a[100000000];一般來說,在
把**按樣例執行自己推演一遍,就知道錯在哪了 ,比如這裡的執行錯誤,
拿特殊案例推演(這裡用的空字串案例就發現最後**有問題),容易發現錯誤,就是推演
總時間限制:
1000ms
記憶體限制:
65536kb
描述輸入1行句子(不多於200個單詞,每個單詞長度不超過100),只包含字母、空格和逗號。單詞由至少乙個連續的字母構成,空格和逗號都是單詞間的間隔。
試輸出第1個最長的單詞和第1個最短單詞。
輸入一行句子。
輸出兩行輸出:
第1行,第乙個最長的單詞。
第2行,第乙個最短的單詞。
樣例輸入
i am studying programming language c in peking university
樣例輸出
programmingi
提示如果所有單詞長度相同,那麼第乙個單詞既是最長單詞也是最短單詞。
**習題(12-2)
**一:
1 #include2 #include3char a[25000];//
陣列要足夠大
4using
namespace
std;
5int
main()617
else
if(b > 0) //
為單詞結束符號
1824
if(b 2529 b = 0;//
單詞長度清0,開始計算下乙個單詞30}
3132
}
33//
輸出最長單詞和最短單詞
34for(int i = c; i <= c + maxn - 1; ++i)
35 cout <36 cout <37for(int i = d; i <= d + minn - 1; ++i)
38 cout <39return
0;
40 }
**一種不加第十句,會出現執行時錯誤。
10 a[l] = ' ';//不加這一句會出現runtime error再不加第十句,並且第11句換成小於l,也報執行時錯誤,原因可能是 字串沒有被訪問完全而再次訪問,也就是說字串沒有訪問到'\0'。
11 for(int i = 0; i <= l; ++i)**二:
1 #include2 #include3char a[25000];//
陣列要足夠大
4using
namespace
std;
5int
main()620
if(b 2125 b = 0;//
單詞長度清0,開始計算下乙個單詞26}
2728}29
if(a[i] != '
' && a[i] != ','
)3033else
if(b > 0) //
為單詞結束符號
3440
if(b 4145 b = 0;//
單詞長度清0,開始計算下乙個單詞46}
4748
}
49//
輸出最長單詞和最短單詞
50for(int i = c; i <= c + maxn - 1; ++i)
51 cout <52 cout <53for(int i = d; i <= d + minn - 1; ++i)
54 cout <55return
0;
56 }
runtime error可能的原因
runtime error (執行時錯誤)就是程式執行到一半,程式就崩潰了。
比如說:
①除以零
②陣列越界:int a[3]; a[10000000]=10;
③指標越界:int * p; p=(int *)malloc(5 * sizeof(int)); *(p+1000000)=10;
④使用已經釋放的空間:int * p; p=(int *)malloc(5 * sizeof(int));free(p); *p=10;
⑤陣列開得太大,超出了棧的範圍,造成棧溢位:int a[100000000];一般來說,在
oj上做題都把陣列設成全域性變數,減少5出現的可能。
有的時候再出現這樣的錯誤還會給提示
runtime error(array_bounds_exceeded) // array bounds exceed 陣列越界
runtime error(divide_by_zero) //divisor is nil 除零
runtime error(access_violation) //illegal memory access 非法記憶體讀取
runtime error(stack_overflow) //stack overflow 系統棧過載
這樣可以照著上面查詢錯誤。
出現runtime error的原因是 陣列越界訪問,原因是因為沒有非下面的c賦初值,
8 int minn = 110, maxn = 0, c, d, e, q = 0, b = 0;多組資料下,一定會造成陣列的越界訪問的
50 for(int i = c; i <= c + maxn - 1; ++i)51 cout << a[i];
52 cout << endl;
25 最長最短單詞
總時間限制 1000ms 記憶體限制 65536kb 描述輸入1行句子 不多於200個單詞,每個單詞長度不超過100 只包含字母 空格和逗號。單詞由至少乙個連續的字母構成,空格和逗號都是單詞間的間隔。試輸出第1個最長的單詞和第1個最短單詞。輸入一行句子。輸出兩行輸出 第1行,第乙個最長的單詞。第2行...
25 最長最短單詞
總時間限制 1000ms 記憶體限制 65536kb 描述輸入1行句子 不多於200個單詞,每個單詞長度不超過100 只包含字母 空格和逗號。單詞由至少乙個連續的字母構成,空格和逗號都是單詞間的間隔。試輸出第1個最長的單詞和第1個最短單詞。輸入一行句子。輸出兩行輸出 第1行,第乙個最長的單詞。第2行...
最長最短單詞
描述 輸入1行句子 不多於200個單詞,每個單詞長度不超過100 只包含字母 空格和逗號。單詞由至少乙個連續的字母構成,空格和逗號都是單詞間的間隔。試輸出第1個最長的單詞和第1個最短單詞。輸入一行句子。輸出兩行輸出 第1行,第乙個最長的單詞。第2行,第乙個最短的單詞。樣例輸入 i am studyi...