c語言編譯時不檢查語法
㈠ 全國計算機等級考試二級c語言歷年試題及答案
這里有一份最全的考研歷年真題資料分享給你
鏈接:
通過不斷研究和學習歷年真題,為考生沖刺階段復習提分指點迷津,做真題,做歷年真題集,對照考綱查缺補漏,提高實戰素養,制定做題策略,規劃方向;
若資源有問題歡迎追問!
㈡ 關於C語言的一道題目 內部函數 外部函數
因為
C語言編譯時要檢查語法,所以A不對;
C語言沒有過程,只有函數,所以B不對;
C語言函數內不能定義函數,既不能嵌套定義,所以C不對。
排除法也知道是D了。當然由「函數內不能定義函數」也可以推出所有函數都是外部函數。
—— 其實這種說法對外部函數的理解也還值得商榷。但其它的是完全不對,也就選它吧。
㈢ 幾道C語言問題 請高手給看一下 找個答案 謝謝了
5.下面運算符優先順序最高的是 [C]
A)<= B)= C)% D)&&
6.以下程序的輸出結果是 [B]
main()
{ int a,b;
printf("%d\n",(a=2)&&(b= -2));
}
A)無輸出 B)1 C)-1 D)結果不確定
16.在C語言中,函數的隱含存儲類別是 [C]
A)auto B)static C)extern D)無存儲類別
17.下列敘述中正確的是 [C]
A)C語言編譯時不檢查語法 B)C語言的子程序有過程和函數兩種
C)C語言的函數可以嵌套定義 D)C語言所有函數都是外部函數
27.輸入一個無符號整數後求出它的各位數之和並輸出。例如若輸入123,則將各位之和6(即1+2+3)輸出。
unsiged int f(unsigned int num;)
{ unsigned int k=0;
do
{ k+=______;
num/=10;
} while(num);
______;
}
main( )
{ unsigned int n;
scanf(〃%d〃,&n);
printf(〃%u\n〃,f(n));
}
28.輸入一段英文,統計其中單詞的個數,句中各單詞用空格分開。程序如下:
main()
{ char a[1000],i,w=0,n=0;
printf("Input char a[1000]=");
scanf("%s",a);
for(i=0; a[i]!='\0'; i++)
if(a[i]==' ') w=0;
else if(w=0)
{ w=1; n++;
}
printf("There are %d words in the line\n",n);
}
第28題是書上的原題,最後一題我不懂.
㈣ 關於C語言的基礎題。
e <iostream>
#include <stdlib.h>
#include <ctime>
#include <conio.h>
using std::cin;
using std::cout;
using std::endl;
//計算式 數量
int const Num = 100;
//計算式中 最大數
int const MaxNum = 100;
//每題分數
int const PerMark = 1;
//計算結果最大值
int const MaxResult = 100;
//計算結果最小值
int const MinResult = 0;
enum enOp;
//將 枚舉類型轉換為字元類型,以便輸出。
char enum2char(enOp op)
{
switch (op)
{
case Add:
return '+';
case Subtract:
return '-';
case Multiply:
return 'x';
case Divide:
return '/';
}
return ' ';
}
//計算生成表達式的正確結果。
int myResult(int left,int right,enOp op)
{
switch (op)
{
case Add:
return left+right;
case Subtract:
return left-right;
case Multiply:
return left *right;
case Divide:
return left/ right;
}
return 0;
}
//檢查生成計算式的正確與否。其中 減法結果不能為負數,除法結果不能為小數。
bool checkFormula(int left,int right,enOp op)
{
switch (op)
{
case Add:
{
return true;
}
case Subtract:
{
if(left < right)
return false;
return true;
}
case Multiply:
{
return true;
}
case Divide:
{
if(right == 0)
return false;
if(double(left/right) != double(double(left)/double(right)))
return false;
return true;
}
}
return false;
}
//依據給定操作符,生成符合條件的表達式。
void getFormula(int* left,int*right,enOp op)
{
//srand(time(NULL));
for(;;)
{
*left = 1 + rand() % MaxNum;
*right = 1 + rand() % MaxNum;
if(checkFormula(*left,*right,op) && myResult(*left,*right,op)<= MaxResult && myResult(*left,*right,op)>= MinResult)
break;
}
}
int main()
{
//操作符左值
int left[Num];
//操作符右值
int right[Num];
//用戶輸入計算結果
int result[Num];
//操作符 +-*/
enOp oper[Num];
//正確答案個數
int answerRight = 0;
cout<<"正在生成,請稍等。"<<endl;
//隨機種子
srand(time(NULL));
//開始生成計算表達式。
for(int i = 0;i<Num;i++)
{
//srand( (unsigned)time(NULL));
//操作符
oper[i] = enOp(rand()%4);
getFormula(&left[i],&right[i],oper[i]);
}
cout<<"生成計算式完成,開始答題!"<<endl;
//輸出表達式,讓用戶答題
for(int i = 0;i<Num;i++)
{
//輸出表達式
cout<<"第 "<<i+1<<" 題: \n";
cout<<left[i]<<' '<<enum2char(oper[i])<<' '<<right[i]<< " = ";
//獲取用戶答案
cin>>result[i];
//比對用戶答案是否正確,正確輸出 right,answerRigth加一,否則輸出not correct。
if(result[i] == myResult(left[i],right[i],oper[i]))
{
cout<<"Right!\n";
answerRight++;
}
else
{
cout<<"Not correct!\n";
}
}
//全部答題完畢,輸出正確答案個數及得分。
cout<<"終止答題,共 "<<Num<<" 題,每題 "<<PerMark<<" 分 ,答對 "<<answerRight<<" 題,得分 :"
<<answerRight*PerMark<<" 分。";
//屏幕停止。
getch();
return 0;
}
㈤ C語言編程
10個C語言新手編程時常犯的錯誤及解決方式
C語言的最大特點是:功能強、使用方便靈活。C編譯的程序對語法檢查並不象其它高級語言那麼嚴格,這就給編程人員留下「靈活的餘地」,但還是由於這個靈活給程序的調試帶來了許多不便,尤其對初學C語言的人來說,經常會出一些連自己都不知道錯在哪裡的錯誤。看著有錯的程序,不知該如何改起,小編通過對C的學習,積累了一些C編程時常犯的錯誤,寫給各位學員以供參考。
1、將字元常量與字元串常量混淆。
char c;
c="a";
在這里就混淆了字元常量與字元串常量,字元常量是由一對單引號括起來的單個字元,字元串常量是一對雙引號括起來的字元序列。C規定以「\」作字元串結束標志,它是由系統自動加上的,所以字元串「a」實際上包含兩個字元:『a'和『\0',而把它賦給一個字元變數是不行的。
2、輸入數據時,企圖規定精度。
scanf("%7.2f",&a);
這樣做是不合法的,輸入數據時不能規定精度。
3、輸入字元的格式與要求不一致。
在用「%c」格式輸入字元時,「空格字元」和「轉義字元」都作為有效字元輸入。
scanf("%c%c%c",&c1,&c2,&c3);
如輸入a b c
字元「a」送給c1,字元「 」送給c2,字元「b」送給c3,因為%c只要求讀入一個字元,後面不需要用空格作為兩個字元的間隔。
4、輸入輸出的數據類型與所用格式說明符不一致。
例如,a已定義為整型,b定義為實型
a=3;b=4.5;
printf("%f%d\n",a,b);
編譯時不給出出錯信息,但運行結果將與原意不符。這種錯誤尤其需要注意。
5.switch語句中漏寫break語句。
例如:根據考試成績的等級列印出百分制數段。
switch(grade)
{
case 'A':printf("85~100\n");
case 'B':printf("70~84\n");
case 'C':printf("60~69\n");
case 'D':printf("<60\n");
default:printf("error\n");
}
由於漏寫了break語句,case只起標號的作用,而不起判斷作用。因此,當grade值為A時,printf函數在執行完第一個語句後接著執行第二、三、四、五個printf函數語句。正確寫法應在每個分支後再加上「break;」。例如
case 'A':printf("85~100\n");break;
6、定義數組時誤用變數。
int n;
scanf("%d",&n);
int a[n];
數組名後用方括弧括起來的是常量表達式,可以包括常量和符號常量。即C不允許對數組的大小作動態定義。7、在不應加地址運算符&的位置加了地址運算符。
scanf("%s",&str);
C語言編譯系統對數組名的處理是:數組名代表該數組的起始地址,且scanf函數中的輸入項是字元數組名,不必要再加地址符&。應改為:
㈥ c語言編譯器怎麼檢查錯誤的
C語言編譯器有好多種
大同小異
有DEV-C++
VC6.0等
檢查錯誤
都能檢查
但只能檢查出語法錯誤
不能檢查出邏輯錯誤
㈦ CodeBlocks編譯C語言時語法錯誤
和設置一般沒什麼關系,code::blocks也是調用標準的編譯器進行編譯的,提升你錯了你最好仔細看看,另外,即使編譯正確,運行也不一定能成功,因為編譯器只能檢查一部分錯誤,而且主要是語法錯誤。關於你說的int這個問題,請放代碼
㈧ c語言編譯時需要檢查嗎
你問的需要檢查,是檢查什麼?
C語言編譯時會檢查語法是否正確,類型是否匹配等。不檢查數組越界,死循環,無限遞歸等。
㈨ c語言編譯時有無語法錯誤
c語音應用編譯,可能會有語法錯誤的,包括還有一些其他的規則,如果沒有遵守,會報錯錯誤的類別的。