當前位置:首頁 » 編程語言 » c語言考試有bug嗎
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言考試有bug嗎

發布時間: 2022-12-19 12:07:15

1. 計算機二級c語言最後一道編程題漏洞技巧有哪些

網上碰到有二級c的作弊方法,提到了通過更改out.dat文件的內容,達到作弊的目的,自己也在二級c語言的模擬考試環境下測試過,可用,滿分,24分就來了,至於真正的二級c考試,有人說能用,也有人說,不能用,只有試試就知道了,第一次考二級,也沒試過,所以不知道是不是能用。

具體如下:

電腦常見問題解決

1、無法自動識別硬碟控制器

使用非正版的個別操作系統光碟,在安裝系統時,容易出現此錯誤。原因是非正版光碟自動載入的硬碟控制器驅動不符合電腦自身需要的驅動。這種情況就建議換正版光碟安裝操作系統。

2、手動更新錯誤的驅動程序

windows操作系統正常使用,但手動更新驅動程序把硬碟控制器的驅動程序更新錯誤,導致此故障。解決方法是進入windows系統高級菜單,選擇最後一次的正常配置,即可正常進入系統。

3、bios設置變化後所導致

windows操作系統正常,但是由於某些原因,用戶修改了bios設置,導致0x0000007b故障。

2. C語言編程題找不到BUG

循環一次裡面,sum計算了兩次,分母變成133557……與公式不一致,eps表示精度是一個浮點數,不能直接使用<>=來判斷大小。

C語言是一門面向過程的、抽象化的通用程序設計語言,廣泛應用於底層開發。C語言能以簡易的方式編譯、處理低級存儲器。C語言是僅產生少量的機器語言以及不需要任何運行環境支持便能運行的高效率程序設計語言。

盡管C語言提供了許多低級處理的功能,但仍然保持著跨平台的特性,以一個標准規格寫出的C語言程序可在包括類似嵌入式處理器以及超級計算機等作業平台的許多計算機平台上進行編譯。

(2)c語言考試有bug嗎擴展閱讀:

C語言包含的各種控制語句僅有9種,關鍵字也只有32 個,程序的編寫要求不嚴格且以小寫字母為主,對許多不必要的部分進行了精簡。

實際上,語句構成與硬體有關聯的較少,且C語言本身不提供與硬體相關的輸入輸出、文件管理等功能,如需此類功能,需要通過配合編譯系統所支持的各類庫進行編程,故c語言擁有非常簡潔的編譯系統。

C語言是一種結構化的語言,提供的控制語句具有結構化特徵,如for語句、if⋯else語句和switch語句等。可以用於實現函數的邏輯控制,方便麵向過程的程序設計。

3. 計算機二級c語言上機三道題都編譯運行出結果,而且結果都正確了為什麼還沒過

全國計算機等級考試二級c的程序題共有三道,分別是填空、改錯、編程,分值方面填空佔18分,改錯18分,編程24分,總分60分。而卷面總分(選擇+程序)60分以上,才會判定成績就合格,才能夠領到證書。

各題詳細答題方式和評分准則如下:

1、填空題:
答題方式:
在指定位置,也就是標記有類似
/********************found*************************/
for(i=0; ____1____ ; i++)
這種位置作答。
答題時,將「____1____」雙引號內的部分完全刪除,然後把作答的答案填補進去,也就是「將類似__1__這種位置標記替換為作答的答案」。

題面會給出「例如輸入***數據,得到***數據」的註解,可以藉此編譯運行程序,通過輸入和輸出的結果來判定程序是否正確。

評分准則:
填空題的評分准則並非以程序本身「能否正確運行」為准則,而是通過類似」對比答題的程序文本與命題組答案,逐行按比例給分「的方式來評分,也就是很多人所謂的「逐項(或逐個答題位置給分)「。

上述描述信息量過大,下面舉例說明:
①題面有明文要求,只允許在指定位置作答,不許添加或刪除空格、回車之類的字元,不許增減程序代碼行數,更不許改動題面的程序原始代碼。

例如:
題面如下:
int i,j,sum=0;
/**************found********************/
for(i=0; __1__ ;i++) //假設答案應為i<10或其他等價寫法
sum+=i;

答題後排版如下:
int i,j,sum=0;
/**************found********************/
for(i=0; i<10 ;i++) sum+=i; //注意這里刪除了一個回車符

卷面要求對應行數(第3行)應為
for(i=0; i<10 ;i++)
評分時判定該行內容為
for(i=0; i<10 ;i++) sum+=i;
文本與命題組答案不符,故該處答案不予給分。
同時,由於更改了行數,後續程序文本均會受影響,從而影響正常得分。

②關於上文中所謂的「命題組答案」
仍以
int i,j,sum=0;
/**************found********************/
for(i=0; __1__ ;i++) //假設答案應為i<10或其他等價寫法
sum+=i;
為例。

正確答案應該是i<10或其他等價寫法,那麼命題組會將各種「正常的」寫法作為命題組答案編撰以供評分。依舊舉例說明,等價寫法包括:
i<=9
i<9+1
i<=10-1
後續有無數種寫法就不一一例舉了
明顯只有i<10和<=9是正常寫法,後續寫法都過於奇葩,故此處在考試時只有寫入i<10或<=9才會得到正常的分數,其他寫法均不給分。

另外,這里無需擔心,命題組很貼心的將各種常見寫法都納入到」命題組答案「中,只要不是過於特立獨行的答案,均會在考試中得到本該有的分數。

總結:
填空題,在程序能夠「運行出正確的答案」,並且沒有違反①和②所強調的事項,均會得到本該有的分數。
①項通常不會違反,被此項影響得分的人數很少
②項不管是考試還是練習,在」能夠運行處正確的答案「前提下依舊丟分的幾乎全都是因為此項。
例如考試時,答案過於特立獨行,將i=i+1;寫成i=i+3-2;
而市面上絕大多數的等考模擬軟體,鑒於各種原因,都沒有使用」命題組答案「給出的姑且稱為」正確答案庫「的答案范圍,而是每個位置只給出一種在該模擬軟體中可以得分的答案寫法,其他」考試時將會正常得分「的答案寫法,造成考試時能夠得分但是在使用這些模擬軟體時均得不到分數的情況,也就是學生們經常詢問的問題:
」老師,i=i+1;和i+=1;不是一樣嗎?為什麼這道題寫i=i+1;才給分,另一道題只有寫i+=1;才給分?「

2、改錯題:
答題方式和評分准則完全等同與填空題,不再重復敘述

3、程序編寫,即俗稱的編程題:
答題方式:
題目中有明確敘述,要求書寫程序的某一部分,以實現題目要求的功能。通常要求書寫的位置是某個指定函數的函數體,或者部分主函數的函數體,代碼量6-10行左右。

評分准則:
編程題,評分依據是」能夠運行出正確的結果「,即評分依據有兩個關鍵點,一是運行,二是結果正確。
此題評分准則依舊是跟」命題組答案「對照,依舊是對比文本後逐行按比例給分,而命題組答案在此題中將會是唯一的。
編程題的評分依據,是程序編譯運行後得到的一個所謂的」out文件「,該文件在考生文件夾下,由編程運行時產生,文件名中通常帶有」out」字樣,各題具體的文件名,查看編程題中調用fopen函數時所書寫的文件名就可以確認。
例如某題面中存在如下語句:
fopen(fp,"out.dat",w);
那麼該題目對應的評分依據就是對應考生文件夾下的名為「out.dat」的文件。

編程題的評分,是將out文件的內容與命題組答案對比,逐行按比例給分。

影響得分的項目如下:
①程序存在error,無法通過編譯:
無法編譯,就無法運行。沒有運行,就不會產生out文件。沒有out文件,那麼將會得到「指定文件未找到」的錯誤,此題判0分。
另外還有一點要注意,有個別模擬軟體曾經出現過,題目中指定文件名為"out.dat",但是題面程序代碼中創建的卻是"ps35.out",造成「指定文件未找到」判0分的情況。這屬於模擬軟體的bug,不會在考試中發生。

②程序通過編譯且能夠運行,但是代碼本身存在bug。
舉個例子,寫程序找出1-15之間的素數。
命題組給出的out文件內容如下:
2
3
5
7
11
13
一共6行,因為編程題總分24分,所以每行佔4分。
如果考生答題過程中程序書寫沒有錯誤的話,一定會得到跟命題組內容與格式完全一樣的答案(文件的書寫由題面的fprintf函數負責,不允許考生改動,故文件格式是已經被指定的),將會得到滿分24分。
如果代碼有誤,程序判定過程中將7判定為非素數,得到的out文件內容與命題組答案對比及評分細則如下:
2 2 匹配,得4分
3 3 匹配,得4分
5 5 匹配,得4分
7 11 不匹配,得0分
11 13 不匹配,得0分
13 不匹配,得0分
故此題得分僅12分。
如果上述數值均正確判斷,但是錯誤的將1判斷為素數,out文件內容如下:
1
2
3
5
7
11
13
結果可想而知,逐行判定,最終肯定判0分。
額外要說明的是,大部分模擬軟體,不會進行逐行按比例給分,而是一旦out文件內容與命題組答案」不完全匹配「,直接判0分,而考試時一定是逐行按比例給分的,這點無需擔心。

③程序書寫正確無bug,但是改動過程序命令禁止改動的其他部分,例如fprintf函數,請參考②

總結:由於②導致該題丟分的幾率是最高的,一定要小心再小心。代碼出現問題時,別心急。很多時候,將已經書寫完畢的代碼整體刪掉,重新書寫,是最省事省力的解決bug的方案。

最後,補充一點,萬一程序原始結構被破壞,別著急,不要冒險關閉vc6,只要按下ctrl+z組合鍵,就能逐步恢復之前的樣式。因為ctrl+z組合鍵的功能是」撤銷「

4. 計算機二級c語言最後一道大題是按照過程給分還是只看運行結果給分的是人工閱卷,還是電腦閱卷

計算機二級c語言最後一道大題是按照過程給分,是人工閱卷。

C語言程序的結構:包括有:順序結構、分支結構、循環結構。理解和學習程序的執行過程,對於以後學習其他的編程語言,或者程序的調試,程序調Bug都有很好的幫助。

C語言考試最後一道題目是有一定難度,一般只有百分之30的人能拿滿分,建議不會做的話寫幾個解答步驟,這樣子可以拿一些公式的分數,公式一般給1~2分。

(4)c語言考試有bug嗎擴展閱讀:

計算機二級考試是全國計算機等級考試四個等級中的一個等級,由教育部考試中心主辦,考核計算機基礎知識和使用一種高級計算機語言編寫程序以及上機調試的基本技能。

考試採用全國統一命題、統一考試的形式,二級上機考試的成績由考生交卷後由計算機直接評分給出,機器閱卷,並由考點匯總並與答題卡一起提交至教育部考試中心,教育部考試中心方面將試卷評閱完畢後,會將各省的成績合格信息匯總並發回給各省的主考部門,並由各省的主考部門來決定具體的成績公布的時間。

參考資料來源:網路-計算機二級

5. c語言 為什麼總是有一個bug啊,求幫助。。。

明顯的,錯誤原因是標點符號使用錯誤,注意所有的不在雙引號之內的標點符號都使用英文的
明顯你的小於號是中文的,再檢查下還有沒有其他中文標點符號

6. C語言中或命題的BUG

C語言中存在「短路效應」,在做||運算的時候,先計算前面的一個表達式的結果。如果前面的結果是true(非零),那麼整個表達式的結果就是true,不需要計算後面的值。當p是NULL的時候,p==NULL的值為true,後面的「p->key == k」就不會被求值。如果把「p->key == k」提到前面,當p是NULL的時候,就會造成非法內存訪問,所以如果沒有結果就報錯。&&運算符也存在同樣的「短路效應」,先計算前面的一個表達式的結果,如果前面的結果是0,那麼整個表達式的結果就是0。

7. c語言java語言有BUG嗎

BUG不是語言的問題,什麼語言做出來的程序都可能有漏洞啊

8. C語言編簡單的學生成績管理系統有個bug,輸入成績的時候最後一個數學成績老是顯示4198786不能賦值進去

//姓名,學號,英語,語文,數學三種成績
#include<stdio.h>
#include<stdlib.h>
#definemaxnumber30
intstudent_number;
intcount1=0,count2=0,Operate1=3;
FILE*stream;
typedefstructstu{
intidnumber;
charname[20];
doubleEnglish_score;
doublechinese_score;
doublemath_score;
}Student;
//按學號排序

voidputout_one(Student*sp)
{
for(intj=0;j<10;j++)
printf("******");
printf(" ");
printf("%d%s%.1f%.1f%.1f ",(*sp).idnumber,(*sp).name,(*sp).English_score,(*sp).chinese_score,(*sp).math_score);
for(j=0;j<10;j++)
printf("******");
printf(" ");
}
voidputout_lot(Student*student)
{
for(inti=0;i<=Operate1;i++)
{
for(intj=0;j<10;j++)
printf("******");
printf(" ");

printf("%d%s%.1f%.1f%.1f ",student[i].idnumber,student[i].name,student[i].English_score,student[i].chinese_score,student[i].math_score);
}
for(intj=0;j<10;j++)
printf("******");
printf(" ");
}
voidinput_student(Student*S)//輸入插入學生的信息
{
//printf("請輸入第%d位學生(學號,名字,語文,英語,數學) ",i+1);
scanf("%d",&(*S).idnumber);
scanf("%s",&(*S).name);
scanf("%lf%lf%lf",&(*S).chinese_score,&(*S).English_score,&(*S).math_score);
}
voidid_find_in(Student*S,Student*q)//把新的學生信息加入表單
{
Student*p=S,*t;
while(count1<Operate1+1)
{
t=p;
p++;
count1++;
}
*t=*q;
count1=0;
Operate1++;
}
voidinsert_element(Student*S)//插入學生信息
{
printf("請輸入1位學生(學號,名字,語文,英語,數學) ");
Student*temp=(Student*)malloc(sizeof(Student)),*q=S;
input_student(temp);
id_find_in(S,temp);
}
voiddelet_element(Student*S,intid_n)
{
Student*p=S,*t;
while(count1<Operate1)
{
if((*p).idnumber==id_n)
{
t=p;
printf("已刪除%d號學生信息 ",(*p).idnumber);
while(count2<Operate1-count1-1)
{
*(t-1)=*(++t);
count2++;
}
break;
}
count1++;
p++;
}
count1=0;
count2=0;
Operate1--;
}
intjunge(char*a,char*b)
{
char*p=a,*q=b;
while(*p!='')
{
if(*p==*q)
{
p++;
q++;

continue;
}
else
break;
}
if(*p==''&&*q=='')
return1;
else
return0;
}
voidshow_stu_element(Student*S,char*sp)//顯示某人信息(功能已實現)
{
Student*p=S;
while(count1<Operate1)
{
if(junge((*p).name,sp))
{
printf("已找到此人:%s ",(*p).name);
putout_one(p);
p=S;
break;
}
else
{
p++;
count1++;
continue;
}
}
if(p!=S)
printf("查無此人! ");
count1=0;
}
voidid_sort(Student*S)
{
Student*temp=(Student*)malloc(sizeof(Student)),*q=S,*t;
intnum=Operate1;
while(count1<Operate1)
{
t=q+1;
while(count2<num)
{
if((*q).idnumber>(*t).idnumber)
{
*temp=*q;
*q=*t;
*(t)=*temp;
//printf("%d ",(*t).idnumber);
}

count2++;
t++;

//t=t+sizeof(Student);//這樣無法實現why?
}
num--;
q++;
count2=0;
count1++;

//q=q+sizeof(Student);
}
count1=0;
count2=0;
}
voidcount_passnumber(Student*S)
{
Student*p=S;
inte_p_number=0,m_p_number=0,c_p_number=0,num=0;
while(num<=Operate1)
{
if(p->English_score>=60)
e_p_number++;
if(p->math_score>=60)
m_p_number++;
if(p->chinese_score>=60)
c_p_number++;
num++;
p++;
}
printf("/***學生總人數=:%d ",Operate1);
printf("/***英語過關人數=%d數學過關人數=%d語文過關人數=%d ",e_p_number,m_p_number,c_p_number);
printf("/***英語掛科人數=%d數學掛科人數=%d語文掛科人數=%d ",Operate1+1-e_p_number,Operate1+1-m_p_number,Operate1+1-c_p_number);//因為數組下標是從0開始的
}
voidmain()
{
Studentstudent[maxnumber];
stream=freopen("in.txt","r",stdin);
intOperate=3;inti;intid_n;
charstudent_element[20];
for(i=0;i<Operate1;i++)
{
printf("請輸入第%d位學生(學號,名字,語文,英語,數學) ",i+1);
scanf("%d",&student[i].idnumber);
scanf("%s",&student[i].name);
scanf("%lf%lf%lf",&student[i].chinese_score,&student[i].English_score,&student[i].math_score);
}
//fclose(stream);
for(i=0;Operate!=0;i++)
{
printf("輸入:0.退出。1.輸入學生信息2.按姓名查找並刪除學生信息 3.按學號排序4.查找顯示一位學生信息 5.顯示統計記錄(成員數、每科平均分)6.輸出每科及格人數和不及格人數7(default).操作完成,等待用戶輸入: ");
scanf("%d",&Operate);
switch(Operate)
{
case1:insert_element(student);break;
case2:scanf("%d",&id_n);delet_element(student,id_n);break;
case3:id_sort(student);break;
case4:scanf("%s",student_element);show_stu_element(student,student_element);break;
case5:putout_lot(student);break;
case6:count_passnumber(student);break;
default:printf("請輸入: ");continue;
}
if(Operate==0)
break;
}
}

9. 計算機二級c語言考試漏洞

只要輸出MAX? 那最大的那個放5張好了 知道你為什麼放3個一樣了 因為如果最小的為2 次2小為3 那循環就了1個3之前就到過2個2了 那4就會被跳過 此為一漏洞 可能造成跳過 另外如果I到了一個不可能組合到的數 也會卡住 到結束 排序建議用冒泡法 改的話 for(ia=0;ia<=5;ia++) for(ib=0;ib<=5;ib++) for(ic=0;ic<=5;ic++) for(id=0;id<=5;id++) if(ia+ib+ic+id<=5) (把數記到數組里); 最後排序數組 去掉重復 0

10. 關於c語言編程的bug

這時很正常的問題.打代碼沒有bug才不正常.但是編譯時的錯誤還是比較容易避免的,常見的可以通過以下幾種方法解決

  1. 語法錯誤:比如說變數名打錯,少一個分號,括弧之類的錯誤,經過你不斷的打代碼,這樣的錯誤慢慢就會減少了.

  2. 編譯出錯時,一半的方法是將問題從上到下一個一個解決.因為第一個錯誤可能引發後面的很多錯誤.因此你每次只需要留意第一個錯誤.很多情況下,第一個錯誤解決了,後面的錯誤自然迎刃而解.

  3. 編譯出錯時,編譯器通常會提示出錯的行號.尋找錯誤一半從出錯的行號往上找,不需要往下找,看看編譯錯誤的原因是什麼,遇到不懂的單詞可以查查,以後就明白了.因為錯誤就那麼幾個,錯來錯去還是那幾個.

  4. 建議寫程序的時候,不要等全部代碼打完之後再一次性編譯.可以分模塊,分函數寫.寫完一個之後,嘗試著編譯,看看有沒有問題,即使有問題,尋找起來也相對會方便一點.不必大海撈針.


至於運行時的bug,這需要隨著你的代碼量的提高而減少(相對).解決bug的常用方法是debug(調試),具體調試的方法因為不同的開發環境而不同.你可以根據你的開發環境查閱相應的debug文檔.