❶ 求c語言笑臉可上下左右的代碼
先在程序定義一個在屏幕中運動的點的結構:
struct move_point
{
int x, y;/*該點的位置,包括x坐標和y坐標*/
int xv, yv;/*該點在x軸、y軸的速度*/
};
運動的原理是,先擦去物體先前的軌跡,讓物體按其速度移動一段距離,再畫出該物體讓我們看到以下代碼:
gotoxy(man.x, man.y);/*把游標移到指定的坐標*/
printf(「「);/*輸出一個空格,把先前的字元擦去*/
然後我們讓物體按其速度運動:
man.x += man.xv;/*水平方向按x軸的速度運動*/
man.y += man.yv;/*垂直方向按y軸的速度運動*/
運動後還要判斷物體是否出界,如果出了界,就令物體反彈,即讓它下一刻的速度等於現在的速度的相反數最後列印出這個笑臉:
gotoxy(man.x, man.y);
printf(「%c\b」, 2); /*輸出ASCII碼值為2的「笑臉」字元*/
望採納,謝謝
❷ c語言題目 求代碼
#include <stdio.h>
int main()
{
int a[5],i,t;
printf("input array:");
for(i=0;i<5;++i)
scanf("%d",&a[i]);
printf("input number:");
scanf("%d",&t);
for(i=0;i<5;++i)
if(a[i]==t)
{
printf("i=%d ",i);
}
if(i==5)
{
printf("error ");
}
return 0;
}
❸ 寫出C語言中if語句上下無關文法的完整定義
if (條件) then (語句1) [else (語句2)];
就是計算條件表達式,如果為真(True),那麼執行語句1,方括弧[]內的語句可以不要,如果存在else語句,那麼執行語句2
舉個例子:
var
a:longint;
begin
read(a);//讀入一個數
if (a=1) then writeln('a=1')//如果輸入的數是1,那麼輸出a=1
else writeln('a<>1');//否則輸出a<>1
end.
❹ 求C語言代碼啊啊啊!
importjava.util.Scanner;
/**
*CreatedbyDELLon2019/5/9.
*/
publicclassTest2Main{
staticintb[][]=newint[1][1];
staticintc[][]=newint[2][2];
publicstaticvoidmain(String[]args){
b[0][0]=1;
c[0][0]=1;
c[1][0]=2;
c[0][1]=4;
c[1][1]=3;
Scannersc=newScanner(System.in);
while(true){
System.out.println("請輸入右旋方陣階數:(輸入「0」,退出程序)");
inti=sc.nextInt();
while(!checkNumber(i)){
i=sc.nextInt();
}
switch(i){
case1:
System.out.println("1 ");
break;
case2:
System.out.println("14 23 ");
break;
case0:
System.exit(0);
break;
default:
inta[][]=getData1(i);
for(intk=0;k<i;k++){
for(intl=0;l<i;l++){
System.out.print(" "+a[k][l]+"");
}
System.out.println("");
}
break;
}
}
}
privatestaticint[][]getData1(inti){
inta[][]=newint[i][i];
if(i==1){
returnb;
}
if(i==2){
returnc;
}
intd[][]=getData1(i-2);
for(intn=0;n<i;n++){
a[n][0]=n+1;
}
for(intn=1;n<i;n++){
a[i-1][n]=a[i-1][0]+n;
}
for(intn=i-2;n>=0;n--){
a[n][i-1]=a[n+1][i-1]+1;
}
for(intn=i-2;n>0;n--){
a[0][n]=a[0][n+1]+1;
}
for(intl=0;l<i-2;l++){
for(intk=0;k<i-2;k++){
a[l+1][k+1]=d[l][k]+a[0][1];
}
}
returna;
}
(doublea){
//||a>=10
if(a<0){
System.out.println("請輸入大於0的數字");
returnfalse;
}else{
returntrue;
}
}
}
我電腦只有java的IDE,將就看吧,與C的邏輯是一樣的 只是輸入輸出的命令有點區別,自己改一下咯
❺ 求注釋以下C語言代碼
這是一個背包問題,該演算法已經是最簡單的了,還有遞歸演算法,我覺得更麻煩。對你的代碼進行解釋如下://背包問題:有m件物品和一個承重為t的背包。第i件物品的重量是w[i],價值是v[i]。//求解將哪些物品裝入背包可使這些物品的重量總和不超過背包承重量t,且價值總和最大。#include #include #include int f[1010],w[1010],v[1010];//f記錄不同承重量背包的總價值,w記錄不同物品的重量,v記錄不同物品的價值int max(int x,int y){//返回x,y的最大值 if(x>y) return x; return y;}int main(){ int t,m,i,j; memset(f,0,sizeof(f)); //總價值初始化為0 scanf("%d %d",&t,&m); //輸入背包承重量t、物品的數目m for(i=1;i=w[i];j--){ f[j]=max(f[j-w[i]]+v[i],f[j]); //在放入第i個物品前後,檢驗不同j承重量背包的總價值,如果放入第i個物品後比放入前的價值提高了,則修改j承重量背包的價值,否則不變 } } printf("%d",f[t]); //輸出承重量為t的背包的總價值 printf("\n"); getch(); return 0;}
❻ 關於「上下文無關文法」的問題
B吧,是編譯原理題,給你參考吧,我有點忘了.推出的語言是終結符的串
比如:S -> aSb | ε ,
它產生的語言就是a^nb^n,(n ≥ 0),這里的終結符是,a,b ,非終結符S是不能作為最後語言的,它必須推出空字的時候結束.
這題強調的是生成了什麼語言,產生式里包含了非終結符,非終結符只是產生終結符的一個推導過程,不能作為最後的形式,最後的形式也就是語言,是終結符組成的串.
❼ 編譯原理:構造產生此語言的上下文無關文法G
對於文法G=(V, T, S, P),如果產生式的形式如下:
A -> xB
A -> x
其中A, B屬於V,x屬於T*,則稱為右線性文法;相似的,如果產生式的形式如下:
A -> Bx
A -> x
則稱為左線性文法。右線性文法和左線性文法統稱為正則文法。
正則表達式的表達能力等價於正則文法,正則表達式的定義如下:
字母表中的任意字母是正則表達式,空串和空集也是正則表達式;
如果r, s是正則表達式,那麼r|s, rs, r*, (r)也是正則表達式。
正則表達式的擴展:
r+:一個或多個重復
. :任意字元
[a-z]:字元范圍
[^abc]:不在給定集合中的任意字元
r?:可選
正則表達式只能使用終結符(字母表中的字元),因而很容易變得復雜又難懂,實際中,經常使用正則描述,正則描述允許使用非終結符定義表達式,很像EBNF,但是它限制在未完全定義之前,不能使用非終結符,也就是說不允許遞歸或自嵌套。
像正則表達式的表達能力等價於正則文法一樣,BNF範式的表達能力等價於上下文無關文法。BNF是「Backus Naur Form」的縮寫。John Backus和Peter Naur首次引入一種形式化符號來描述給定語言的語法。
BNF的元符號:
::= 表示「定義為 」,有的書上用-->
| 表示「或者」
< > 尖括弧用於括起非終結符。
BNF的擴展EBNF:
可選項被括在元符號「[」和「]」中
重復項(零個或者多個)被括在元符號「{」和「}」中
僅一個字元的終結符用引號(")引起來,以和元符號區別開來
上述操作符不是嚴格限定的,有的人喜歡直接使用擴展正則表達式的操作符描述EBNF。除了方便表達以外,引入EBNF的另一個主要原因是為了更緊密地把文法映射到遞歸下降分析程序的真實代碼。當需要手動構造歸下降分析程序的時候,通常把上下文無關文法改寫為EBNF是必需的。
如果一個上下文無關文法G不是自嵌套或自遞歸的,即不存在如下推導:
U =>* xUy
那麼L(G)是正則語言。自嵌套的上下文無關文法不一定是正則語言。事實上,一個上下文無關文法是嚴格的,既不可能由正則文法產生,當且僅當該語言的一切文法都是自嵌套的。
如果一個上下文無關文法G不是自嵌套或自遞歸的,即不存在如下推導:
U =>* xUy
那麼L(G)是正則語言。自嵌套的上下文無關文法不一定是正則語言。事實上,一個上下文無關文法是嚴格的,既不可能由正則文法產生,當且僅當該語言的一切文法都是自嵌套的。
BNF的擴展EBNF:
可選項被括在元符號「[」和「]」中
重復項(零個或者多個)被括在元符號「{」和「}」中
僅一個字元的終結符用引號(")引起來,以和元符號區別開來
上述操作符不是嚴格限定的,有的人喜歡直接使用擴展正則表達式的操作符描述EBNF。除了方便表達以外,引入EBNF的另一個主要原因是為了更緊密地把文法映射到遞歸下降分析程序的真實代碼。當需要手動構造歸下降分析程序的時候,通常把上下文無關文法改寫為EBNF是必需的。
如果一個上下文無關文法G不是自嵌套或自遞歸的,即不存在如下推導:
U =>* xUy
那麼L(G)是正則語言。自嵌套的上下文無關文法不一定是正則語言。事實上,一個上下文無關文法是嚴格的,既不可能由正則文法產生,當且僅當該語言的一切文法都是自嵌套的。
如上所述,上下文無關文法的遞歸性,對其分析方法也有很大影響。首先,用作識別這些結構的演算法必須使用遞歸調用或顯式管理的分析棧。其次,用作表示語言語義結構的數據結構現在也必須是遞歸的(通常是一顆分析樹),而不再是線性的(如同用於詞法和記號中的一樣)了。
在程序設計語言中,通常用正則表達式描述詞法規則。但是正則表示式的表達能力有限,她無法表達括弧配對等語法形式,因而,需要引入表達能力更強的上下文無關文法。編譯程序中常用正則文法表示詞法,用上下文無關文法表示語法。那麼程序語言中那些屬於詞法哪些屬於語法呢?一個簡單的辦法,把所有能用正則文法表示的規則成為詞法,即我們用盡可能的使用正則文法表示更多的東西,那些無法用正則表示式表示的成為句法,如C語言中的{ statement; }語法形式。語言中有些規則使用上下文無關文法仍然無法描述,例如變數的定義在使用之前,類型匹配等等,這些通常稱為(靜態)語義,它們在編譯程序的靜態語義檢查階段進行檢測。
如果一個上下文無關文法G不是自嵌套或自遞歸的,即不存在如下推導:
U =>* xUy
那麼L(G)是正則語言。自嵌套的上下文無關文法不一定是正則語言。事實上,一個上下文無關文法是嚴格的,既不可能由正則文法產生,當且僅當該語言的一切文法都是自嵌套的。
❽ 求大神給小弟解析一下C語言代碼,新手求救!代碼如下
#include<stdio.h>
voidmain(){
inti;//定義變數i
intf[20]={1,1};//定義一個20個整數的數組,初始化前2個數字為1
for(i=2;i<20;i++)//從數組第3個元素開始循環到第20個
f[i]=f[i-2]+f[i-1];//每個元素的值為它前面兩個數字之和
for(i=0;i<20;i++){//從第一個樹開始遍歷數組
if(i%5==0)//如果是5的倍數就換行,相當於每5個數字在一行
printf(" ");//這就是換行
printf("%12d",f[i]);//以12個字元的長度輸出每個數字,不足12字元在前面(還是後面記不清了,反正一個是"%12d"一個是"%-12d")補空格
}
printf(" ");
}
❾ 語言{a^nb^mc^nd^m|n,m>=0}是上下無關的文法
(m=a==b)|(n=c==d) (m=(0==0)|(n=(c==d)) 所以 (m=1)|(n=1); 因為|是或運算,所以兩個賦值語句均執行,即m,n的值均為1。 如果中間的|是兩條的話(即||),那麼是 (m=1)||(n=1) 根據短路求值,當m=1執行完後,整個表達式的值已經可以確定為1,所以 n=1不執行,即m的值為1,n的值為0
❿ 如何定義上下文無關文法
程序設計語言的語法基本上都是上下文無關文法,應用十分廣泛。
在計算機科學中,若一個形式文法G = (N, Σ, P, S) 的產生式規則都取如下的形式:V -> w,則稱之為上下文無關的,其中 V∈N ,w∈(N∪Σ)* 。
上下文無關文法取名為「上下文無關」的原因就是因為字元 V 總可以被字串 w 自由替換,而無需考慮字元 V 出現的上下文。一個形式語言是上下文無關的,如果它是由上下文無關文法生成的﹙條目上下文無關語言﹚。
例子 1
一個簡單的上下文無關文法的例子是:S -> aSb | ε上下文無關文法。這個文法產生了語言 {anbn : n ≥ 0} 。不難證明這個語言不是正規的。
例子 2
這個例子可以產生變數 x,y,z 的算術表達式:
S -> T + S | T - S | T
T -> T * T | T / T | ( S ) | x | y | z
例如字串 "( x + y ) * x - z * y / ( x + x )" 就可以用這個文法來產生。
例子 3
字母表 {a,b} 上 a 和 b 數目不相等的所有字串可以由下上下文無關文法述文法產生:
S -> U | V
U -> TaU | TaT
V -> TbV | TbT
T -> aTbT | bTaT | ε
這里 T 可以產生 a 和 b 數目相等的所有字串,U 可以產生 a 的數目多於 b 的數目的所有字串, V 可以產生 a 的數目少於 b 的數目的所有字串。