演算法正確的程序
Ⅰ 為什麼演算法正確的程序可以是零輸入,但不能是零輸出
最基本的一個程序必須有輸出 ,,可以沒有輸入 !!!程序的入門一般都是寫的一個只有輸出的簡單程序 !!!
Ⅱ <<數據結構>> 一個演算法是正確的是指什麼意思
正確分為4個層次
1.程序沒有語法錯誤
2.程序對於幾組輸入的數據能夠得到滿足規格說明要求的結果
3.程序對於精心選擇的典型,苛刻而帶有刁難性的幾組輸入數據也能產生滿足規格說明要求的結果
4.程序對於一切合法的輸入數據都能產生滿足規格說明要求的結果
通常一個演算法滿足第3個層次就說它是正確的了
Ⅲ 請設計一個演算法C語言C程序C編程(很難)
沒看清題目,原來你還要求——每一次的交換必須是上一組兩個同學之間的交換,其實用遞歸函數遞歸還是可以的呀!只需要增加一個數組n[4](如果是N個同學之間的交換就設n[N-1]).
deal(l)函數——它只負責找出l號位置該站哪位同學,這名同學只能從上次0~(l-1)位置上已經站好的同學中選擇出,並與l位置的同學作交換,(deal(l)函數會把「具體」找l號以下位置應該站哪些同學的任務交由deal(l-1)來處理),直到deal(0)負責0位置該站誰(此時已經結束,0號位置以下已經沒同學可與0位置同學作交換了)。
這種思想仍然是遞歸,也就是回答者: sujie325 所說的思想!
問題的關鍵是:
對於deal(l)函數,我們必須要保證每一次被交換到l號位置的同學都是不同的,用什麼來保證呢?設置一個數組n[4]!
它的作用是:
記錄l號位置的同學變動情況(l號位置的同學只能與l號位置以下的同學交換),然後利用以下語句,在0~(l-1)位置中尋找出在n[4]中沒有的同學(這名同學的位置是k),然後把此同學交換到l號位置。另外也不要忘記把l號位置的同學記錄到n[]數組中!!
============================================================================
for(k=0;k<l;k++)
{ flagy=1;
for(n_i=0;n_i<=n_p;n_i++)
{
if(b[ml][k]==n[n_i])
{flagy=0;break;}
}
if(flagy)
{break;}
}
n[++n_p]=b[ml][l];
b[m][l]=b[ml][k],b[m][k]=b[ml][l];/*第k號位置處的同學與第l號位置的同學交換位置*/
==================================================================================
整個程序在如下:
#include<stdio.h>
#define N 5
int b[120][N]={1,2,3,4,5};
int m=0;
int deal(int l)
{int i,j;
int ml;
int n[4]={0};
int n_p=-1,n_i,n_j;
int k=0;
int flagy;
if(l==0)
return ++m;
deal(l-1);
for(i=0;i<l;i++)
{ ml=m-1;
for(j=0;j<5;j++)
{
b[m][j]=b[ml][j];
}
for(k=0;k<l;k++)
{ flagy=1;
for(n_i=0;n_i<=n_p;n_i++)
{
if(b[ml][k]==n[n_i])
{flagy=0;break;}
}
if(flagy)
{break;}
}
n[++n_p]=b[ml][l];
b[m][l]=b[ml][k],b[m][k]=b[ml][l];/*第k號位置處的同學與第l號位置的同學交
換位置*/
deal(l-1);
}
}
void main()
{
int l=N-1;int i,j;unsigned char pause=0x80;
deal(l);
for(i=0;i<120;i++)
{if((pause=pause>>1)==0)
{getchar();pause=0x80;}
for(j=4;j>=0;j--)
printf("%d ",b[i][j]);
printf("\n");
}
printf("It has %d categorys in total!\n",m);
}
=====================================================================================
上次的程序(只找出120種組合情況)
#include<stdio.h>
int b[120][5]={1,2,3,4,5};
int m=0;
int deal(int l)
{int i,j;
int ml=m;
if(l==0)
return ++m;
deal(l-1);
for(i=0;i<l;i++)
{
for(j=0;j<5;j++)
{
b[m][j]=b[ml][j];
}
b[m][l]=b[ml][i],b[m][i]=b[ml][l];/*第i號同學與l號同學交換位置*/
deal(l-1);
}
}
void main()
{
int l=4;int i,j;char c=0x10;
deal(l);
for(i=0;i<120;i++)
{if((c=c>>1)==1)/*由於數據組合種類很多,這條if語句實現的是顯示暫停(getchar())*/
{getchar();c=0x10;}
for(j=4;j>=0;j--)/*輸出組合*/
printf("%d ",b[i][j]);
printf("\n");
}
printf("the m is %d\n",m);
}
Ⅳ 演算法正確的程序對於相同的輸入一定有相同的結果,為什麼正確
該說法不正確,如果演算法中包含了隨機步驟,每次運行的結果不一定相同
Ⅳ 演算法與程序的區別與聯系
演算法和程序的區別是:
(1) 兩者定義不同。演算法是對特定問題求解步驟的描述,它是有限序列指令。而程序是實現預期目的而進行操作的一系列語句和指令。
說通俗一些演算法是解決一個問題的思路,程序,是解決這些問題所具體好寫的代碼。演算法沒有語言界限。他只是一個思路。為實現相同的一個演算法,用不同語言編寫的程序會不一樣。
(2)兩者的書寫規定不同。程序必須用規定的程序設計語言來寫,而演算法很隨意。演算法是一系列解決問題的清晰指令,也就是說,能夠對一定規范的輸入,在有限時間內獲得所要求的輸出。演算法常常含有重復的步驟和一些邏輯判斷。
簡單演算法舉例 例:求 1*2*3*4*5
步驟 1 :先求 1*2 ,得到結果 2 。
步驟 2 :將步驟 1 得到的乘積 2 再乘以 3 ,得到結果 6 。
步驟 3 :將步驟 2 得到的乘積 6 再乘以 4 ,得到結果 24 。
步驟 4 :將步驟 3 得到的乘積 24 再乘以 5 ,得到最後結果 120 。
演算法與程序的聯系 :
演算法和程序都是指令的有限序列 ,但是程序是演算法,而演算法不一定是 程序。程序 = 數據結構 + 演算法。演算法的主要目的在於為人們提供閱讀了解所執行的工作流程與步驟。數據結構與演算法要通過程序的實現,才能由計算機系統來執行。可以這樣理解,數據結構和演算法形成了可執行的程序。
(5)演算法正確的程序擴展閱讀
演算法的要素:
一、數據對象的運算和操作:計算機可以執行的基本操作是以指令的形式描述的。一個計算機系統能執行的所有指令的集合,成為該計算機系統的指令系統。一個計算機的基本運算和操作有如下四類:
1、算術運算:加減乘除等運算。
2、邏輯運算:或、且、非等運算。
3、關系運算:大於、小於、等於、不等於等運算。
4、數據傳輸:輸入、輸出、賦值等運算。
二、演算法的控制結構:一個演算法的功能結構不僅取決於所選用的操作,而且還與各操作之間的執行順序有關。
Ⅵ 在演算法實現中,演算法的正確性如何保證
演算法本身的正確性用邏輯推理來證明,和數學定理類似
實現演算法的程序的正確性則是兩碼事
簡單的程序也用邏輯推理來證明,稍復雜的可以用某些專門驗證程序正確性的程序來驗證,再復雜的就沒什麼好辦法了,事實上很多復雜的程序在比較極端的輸入下或多或少都會有點問題
Ⅶ 演算法正確的程序可以沒有輸出嗎
不是所有的程序都必須有輸出的。所以你的問題的答案是「可以」
比如文件管理程序,它只要管理文件就可以了,但是一般為了友好性,都會輸出一些適當的信息,目的是讓人去知道他幹了些什麼。
這就是交互性。
Ⅷ 求二級C語言筆試題庫
2006年4月二級C語言筆試試題
一選擇題((1)-(10)每題2分,(11)-(50)每題1分,共60分)
下列各題A)、B)、C)、D)四個選項中,只有一個選項是正確的,請將正確選項塗寫在答題卡相應位置上,答在試卷上不得分。
1)下列選項中不屬於結構化程序設計方法的是
A) 自頂向下
B)逐步求精
C)模塊化
D)可復用
2)兩個或兩個以上模塊之間關聯的緊密程度稱為
A)耦合度
B)內聚度
C)復雜度
D)數據傳輸特性
3)下列敘述中正確的是
A)軟體測試應該由程序開發者來完成
B)程序經調試後一般不需要再測試
C)軟體維護只包括對程序代碼的維護
D)以上三種說法都不對
4)按照「後進先出」原則組織數據的數據結構是
A)隊列
B)棧
C)雙向鏈表
D)二叉樹
5)下列敘述中正確的是
A)線性鏈表是線性表的鏈式存儲結構
B)棧與隊列是非線性結構
C)雙向鏈表是非線性結構
D)只有根結點的二叉樹是線性結構
6)對如下二叉樹
進行後序遍歷的結果為
A) ABCDEF
B) DBEAFC
C) ABDECF
D) DEBFCA
7)在深度為7的滿二叉樹中,葉子結點的個數為
A)32
B)31
C)64
D)63
8)「商品」與「顧客」兩個實體集之間的聯系一般是
A)一對一
B)一對多
C)多對一
D)多對多
9)在E-R圖中,用來表示實體的圖形是
A)矩形
B)橢圓形
C)菱形
D)三角形
10)資料庫DB,資料庫系統DBS,資料庫管理系統DBMS之間的關系是
A)DB包含DBS和DBMS
B)DBMS包含DB和DBS
C)DBS包含DB和DBMS
D)沒有任何關系
11)以下不合法的用戶標識符是
A)j2_KEY
B)Double
C) 4d
D) _8_
12)以下不合法的數值常量是
A)011
B)lel
C) 8.0 E0.5
D) 0xabcd
13)以下不合法的字元常量是
A)'\018'
B '\」'
C) '\\'
D) 『\xcc'
14)表達式3.6-5/2+1.2+5%2的值是
A)4.3
B) 4.8
C) 3.3
D) 3.8
15)以下能正確定義字元串的語句是
A)char str[]={『\064'};
B) char str=」\x43」;
C) char str=」;
D) char str[]=」\0」;
16)以下數組定義中錯誤的是
A) int x[][3]={0};
B) int x[2][3]={{1,2},{3,4},{5,6}};
C) nt x[][3]={{1,2,3},{4,5,6}};
D)int x[2][3]={1,2,3,4,5,6};
17)若要求從鍵盤讀入含有空格字元的字元串,應使用函數
A)getc()
B) gets()
C) getchar()
D) scanf()
18) 下四個程序中,完全正確的是
A)#include B)#include
main(); main()
{/*programming*/ {/*/programming/*/
printf(「programming!\n」); } printf(「programming!\n」);}
C) #include D) include
main() main()
{/*/*programming*/*/ {/*programming*/
printf(「programming!\n」);} printf(「programming!\n」);}
19)若有定義:float x=1.5; int a=1,b=3,c=2;則正確的switch語句是
A)switch(x) B) switch((int)x);
{case 1.0: printf(「*\n」); {case 1: printf(「*\n」);
Case 2.0: printf(「**\n」); } case 2: printf(「**\n」);}
C) switch(a+b) D) switch(a+b)
{ case 1: printf(「*\n」); {case 1: printf(*\n」);
case 2+1: printf(「**\n」);} case c: printf(「**\n」);}
20)若各選項中所用變數已正確定義,函數fun中通過return語句返回一個函數值,以下選項中錯誤的程序是
A)main() B) float fun(int a,int b){……}
{……x=fun(2,10);……} main()
float fun(int a,int b){……} {……x=fun(i,j);……}
C)float fun(int,int); D) main()
main() { float fun(int i,int j);
{……x=fun(2,10);……} ……x=fun(i,j);……}
float fun(int a,int b){……} float fun(int a,int b){……}
21)在以下給出的表達式中,與while(E)中的(E)不等價的表達式是
A)(!E=0)
B) (E>0||E<0)
C) (E==0)
D) (E!=0)
22)要求通過while循環不斷讀入字元,當讀入字母N時結束循環。若變數已正確定義,以下正確的程序段是
A) while((ch=getchar())!='N') printf(「%c」,ch);
B) while(ch=getchar()!='N') printf(「%c」,ch);
C) while(ch=getchar()==N') printf(「%c」,ch);
D) while((ch=getchar())=='N') printf(「%c」,ch);
23)已定義以下函數
int fun(int *p)
{return *p;}
fun 函數返回值是
A)不確定的值
B)一個整數
C)形參p中存放的值
D)形參p的地址值
24)若有說明語句:double *p,a;則能通過scanf語句正確給輸入項讀入數據的程序段是
A)*p=&a; scanf(「%lf」,p);
B)*p=&a; scanf(「%f」,p);
C) p=&a; scanf(「%lf」,*p);
D)p=&a; scanf(「%lf」,p);
25)現有以下結構體說明和變數定義,如圖所示,指針p,q,r分別指向一個鏈表中連續的三個結點。
struct node
{
char data;
struct node *next;
}*p,*q,*r;
現要將q和r所指結點交換前後位置,同時要保持鏈表的連續,以下不能完成此操作的語句是
A)q->next=r->next; p->next=r; r->next=q;
B) p->next=r; q->next=r->next; r-.next=q;
C) q->next=r->next; r->next=q; p->next=r;
D) r->next=q; p-next=r; q-next=r->next;
26)有以下程序段
struct st
{ int x; int *y;}*pt:
int a[]={1,2},b[]={3,4};
struct st c[2]={10,a,20,b};
pt=c;
以下選項中表達式的值為11的是
A) *pt->y
B) pt->x
C) ++pt->x
D) (pt++)->x
27)設fp為指向某二進制文件的指針,且已讀到此文件末尾,則函數feof(fp)的返回值為
A)EOF
B)非0值
C) 0
D)NULL
28)設有以下語句
int a=1,b=2,c;
c=a^(b<<2);
執行後,c的值為
A)6
B) 7
C) 8
D) 9
29)有以下程序
#include
main()
{
char c1,c2,c3,c4,c5,c6;
scanf(「%c%c%c%c」,&c1,&c2,&c3,&c4);
c5=getchar(); c6=getchar();
putchar(c1); putchar(c2);
printf(「%c%c\n」,c5,c6);
}
程序運行後,若從鍵盤輸入(從第1列開始)
123<回車>
45678<回車>
則輸出結果是
A)1267
B)1256
C) 1278
D)1245
30)若有以下程序
main()
{int y=10;
while(y- -); printf(「y=%d\n」y);
}
程序運行後的輸出結果是
A)y=0
B)y=-1
C) y=1
D)while構成無限循環
31)有以下程序
main()
{
int a=0,b=0,c=0,d=0;
if(a=1) b=1;c=2;
else d=3;
printf(「%d,%d,%d,%d\n」,a,b,c,d);
}
程序輸出
A)0,1,2,0
B) 0,0,0,3
C)1,1,2,0
D)編譯有錯
32)有以下程序
main()
{
int i,j,x=0;
for(i=0;i<2;i++)
{ x++;
for(j=0;j<=3;j++)
{
if(j%2) continue;
x++;
}
x++;
}
printf(「x=%d\n」,x);
}
程序執行後的輸出結果是
A)x=4
B) x=8
C) x=6
D) x=12
33)有以下程序
int fun1(oble a){return a*=a;}
int fun2(dpuble x,double y)
{
double a=0,b=0;
a=fun1(x); b=fun1(y); return (int)(a+b);
}
main()
{double w; w=fun2(1.1,2.0);……}
程序執行後變數w中的值是
A)5.21
B) 5
C) 5.0
D) 0.0
34)有以下程序
main()
{
int i,t[][3]={9,8,7,6,5,4,3,2,1};
for(i=0;i<3;i++) printf(「%d」,t[2-i][i]);
}
程序的執行後的輸出結果是
A)7 5 3
B) 3 5 7
C)3 6 9
D)7 5 1
35)有以下程序
fun(char p[][10])
{int n=0,i;
for(i=0;i<7;i++)
if(p[i][0]=='T') n++;
return n;
}
main()
{
char str[][10]={「Mon」, 「Tue」, 「Wed」, 「Thu」,」Fri」,」Sat」,」Sun」};
printf(「%d\n」,fun(str));
}
程序執行後的輸出結果是
A)1
B) 2
C)3
D) 0
36有以下程序
main()
{
int i,s=0,t[]={1,2,3,4,5,6,7,8,9};
for(i=0;i<9;i+=2) s+=*(t+i);
printf(「%d\n」,s);
}
程序執行後的輸出結果是
A)45
B)20
C)25
D)36
37)有以下程序
void fun1(char *p)
{
char *q;
q=p;
while(*q!='\0')
{ (*q)++; q++; }
}
main()
{ char a[]={「Program」},*p;
p=&a[3]; fun1(p); printf(「%s\n」,a);
}
程序執行後的輸出結果是
A)P rohsbn
B)Prphsbn
C)Progsbn
D)Program
38)有以下程序
void swap(char *x,char *y)
{
char t;
t=*x; *x=*y; *y=t;
}
main()
{
char *s1=」abc」,*s2=」123」;
swap(s1,s2); printf(「%s,%s\n」,s1,s2);
}
程序執行後的輸出結果是
A)123,abc
B) abc,123
C)1bc,a23
D) 321,cba
39)有以下程序
int fun(int n)
{
if(n==1) return 1;
else
return (n+fun(n-1));
}
main()
{
int x;
scanf(「%d」,&x); x=fun(x); printf(「%d\n」,x);
}
程序執行時,給變數x輸入10,程序的輸出結果是
A)55
B) 54
C) 65
D) 45
40)有以下程序
int fun(int x[],int n)
{static int sum=0,i;
for(i=0;i sum+=x[i];
return sum;
}
main()
{int a[]={1,2,3,4,5},b[]={6,7,8,9},s=0;
s=fun(a,5)+fun(b,4); printf(「%d\n」,s);
}
程序執行後的輸出結果是
A)45
B)50
C)60
D)55
41)有以下程序
main()
{
union {
char ch[2];
int d;
}s;
s.d=0x4321;
printf(「%x,%x\n」,s.ch[0],s.ch[1]);
}
在16位編譯系統上,程序執行後的輸出結果是
A)21,43
B)43,21
C)43,00
D)21,00
42)有以下程序
main()
{
char *p[]={「3697」,」2584」};
int i,j; long num=0;
for(i=0;i<2;i++)
{j=0;
while(p[i][j]!='\0')
{ if((p[i][j]-『0')%2)num=10*num+p[i][j]-『0';
j+=2;
} }
printf(「%d\n」num);
}
程序執行後的輸出結果是
A)35
B)37
C)39
D)3975
43)執行以下程序後,test.txt文件的內容是(若文件能正常打開)
#include
main()
{
FILE *fp;
char *s1=」Fortran」,*s2=」Basic」;
if((fp=fopen(「test.txt」,」wb」))==NULL)
{ printf(「Can't open test.txt file\n」); exit(1);}
fwrite(s1,7,1,fp); /*把從地址s1開始的7個字元寫到fp所指文件中*/
fseek(fp,0L,SEEK_SET); /*文件位置指針移到文件開頭*/
fwrite(s2,5,1,fp);
fclose(fp);
}
A)Basican
B)BasicFortran
C)Basic
D)FortranBasic
44)以下敘述中錯誤的是
A)C語言源程序經編譯後生成後綴為.obj的目標程序
B)C語言經過編譯、連接步驟之後才能形成一個真正可執行的二進制機器指令文件
C)用C語言編寫的程序稱為源程序,它以ASCII代碼形式存放在一個文本文件中
D)C語言的每條可執行語句和非執行語句最終都將被轉換成二進制的機器指令
45)以下敘述中錯誤的是
A)演算法正確的程序最終一定會結束
B)演算法正確的程序可以有零個輸出
C)演算法正確的程序可以有零個輸入
D)演算法正確的程序對於相同的輸入一定有相同的結果
46)以下敘述中錯誤的是
A)C程序必須由一個或一個以上的函數組成
B)函數調用可以作為一個獨立的語句存在
C)若函數有返回值,必須通過return語句返回
D)函數形參的值也可以傳回對應的實參
47)設有以下定義和語句
char str[20]=」Program」,*p;
p=str;
則以下敘述中正確的是
A)*p與str[0]中的值相等
B)str與p的類型完全相同
C)str數組長度和p所指向的字元串長度相等
D)數組str中存放的內容和指針變數p中存放的內容相同
48)以下敘述中錯誤的是
A)C程序中的#include和#define行均不是C語句
B)除逗號運算符外,賦值運算符的優先順序最低
C)C程序中,j++;是賦值語句
D)C程序中,+、-、*、/、%號是算術運算符,可用於整型和實型數的運算
49)以下敘述中正確的是
A)預處理命令行必須位於C源程序的起始位置
B)在C語言中,預處理命令行都以「#」開頭
C)每個C程序必須在開頭包括預處理命令行:#include
D)C語言的預處理不能實現宏定義和條件編譯的功能
50)以下敘述中錯誤的是
A)可以通過typedef增加新的類型
B)可以用typedef將已存在的類型用一個新的名字來代表
C)用typedef定義新的類型名後,原有類型名仍有效
D)用typedef可以為各種類型起別名,但不能為變數起別名
二:填空題(每空2分,共40分)
請將每一個空的正確答案寫在答題卡[1]至[20]序號的橫線上,答在試卷上不得分
1)對長度為10的線性表進行冒泡排序,最壞情況下需要比較的次數為_______[1]________。
2)在面向對象方法中,_____[2]______描述的是具有相似屬性與操作的一組對象。
3)在關系模型中,把數據看成是二維表,每一個二維表稱為一個___[3]_____。
4)程序測試分為靜態分析和動態測試,其中__[4]______是指不執行程序,而只是對程序文本進行檢查,通過閱讀和討論,分析和發現程序中的錯誤。
5)數據獨立性分為邏輯獨立性與物理獨立性,當數據的存儲結構改變時,其邏輯結構可以不變,因此,基於邏輯結構的應用程序不必修改,稱為_[5]______。
6)若變數a,b已定義為int類型並賦值21和55,要求用printf函數以a=21,b=55的形式輸出,請寫出完整的輸出語句__[6]____。
7)以下程序用於判斷a,b,c能否構成三角形,若能輸出YES,若不能輸出NO。當a,b,c輸入三角形三條邊長時,確定a,b,c能構成三角形的條件是需要同時滿足三條件:a+b>c,a+c>b,b+c>a。 請填空。
main()
{
float a,b,c;
scanf(「%f%f%f」,&a,&b,&c);
if(__[7]__)printf(「YES\n」);/*a,b,c能構成三角形*/
else printf(「NO\n」);/*a,b,c不能構成三角形*/
}
8)以下程序的輸出結果是__[8]_____
main()
{ int a[3][3]={{1,2,9},{3,4,8},{5,6,7}},i,s=0;
for(i=0;i<3;i++) s+=a[i][i]+a[i][3-i-1];
printf(「%d\n」,s);
}
9)當運行以下程序時,輸入abcd,程序的輸出結果是:_[9]____。
insert(char str[])
{ int i;
i=strlen(str);
while(i>0)
{ str[2*i]=str[i]; str[2*i-1]='*';i--;}
printf(「%s\n」,str);
}
main()
{char str[40];
scanf(「%s」,str ); insert(str);
}
10)以下程序的運行結果是:__[10]____
fun(int t[],int n)
{ int i,m;
if(n==1) return t[0];
else
if(n>=2) {m=fun(t,n-1); return m;}
}
main()
{
int a[]={11,4,6,3,8,2,3,5,9,2};
printf(「%d\n」,fun(a,10));
}
11)現有兩個C程序文件T18.c和myfun.c同時在TC系統目錄(文件夾)下,其中T18.c文件如下:
#include
#include」myfun.c」
main()
{ fun(); printf(「\n」); }
myfun.c文件如下:
void fun()
{ char s[80],c; int n=0;
while((c=getchar())!='\n') s[n++]=c;
n--;
while(n>=0) printf(「%c」,s[n--]);
}
當編譯連接通過後,運行程序T18時,輸入Thank!則輸出的結果是:___[11] 。
12)以下函數fun的功能是返回str所指字元串中以形參c中字元開頭的後續字元串的首地址,例如:str所指字元串為Hello!, c中的字元為e,則函數返回字元串:ello!的首地址。若str所指字元串為空串或不包含c中的字元,則函數返回NULL。請填空。
char *fun(char *str,char c)
{ int n=0;char *p=str;
if(p!=NULL)
while(p[n]!=c&&p[n]!='\0') n++;
if(p[n]=='\0' return NULL;
return (_[12]_);
}
13)以下程序的功能是:輸出100以內(不含100)能被3整除且個位數為6的所有整數,請填空。
main()
{ int i,j;
for(i=0;__[13]__;i++)
{ j=i*10+6;
if(_[14]____) continue;
printf(「%d 」,j);
}
}
14)以下isprime函數的功能是判斷形參a是否為素數,是素數,函數返回1,否則返回0,請填空
int isprime(int a)
{ int i;
for(i=2;i<=a/2;i++)
if(a%i==0) __[15]___;
__[16]___;
}
15)以下程序的功能是輸入任意整數給n後,輸出n行由大寫字母A開始構成的三角形字元陣列圖形,例如,輸入整數5時(注意:n不得大於10),程序運行結果如下:
A B C D E
F G H I
J K L
M N
O
請填空完成該程序。
main()
{ int i,j,n; char ch='A';
scanf(「%d」,&n);
if(n<11)
{
for(i=1;i<=n;i++)
{ for(j=1;j<=n-i+1;j++)
{ printf(「%2c」,ch);
___[17]____;
}
【18】
}
}
else printf(「n is too large!\n」);
printf(「\n」);
}
16)以下程序中函數fun的功能是:構成一個如圖所示的帶頭結點的單向鏈表,在結點數據域中放入了具有兩個字元的字元串。函數disp的功能是顯示輸出該單鏈表中所有結點中的字元串。請填空完成函數disp。
#include
typedef struct node /*鏈表結點結構*/
{ char sub[3];
Struct node *next;
}Node;
Node fun(char s) /*建立鏈表*/
{ …… }
void disp(Node *h)
{
Node *p;
p=h->next;
While(【19】)
{
printf(「%s\n」,p->sub); p=【20】;}
}
main()
{
Node *hd;
hd=fun(); disp(hd); printf(「\n」);
}
答案
一、選擇題
1-10 : DADBA DCDAC
11-20:CCADD BBBCA
21-30:CABDD CBDDD
31-40:DBCBB CACAC
41-50:ACADB DADBA
二、填空題
1、45
2、類
3、關系
4、靜態分析
5、物理獨立性
6、printf("a=%d,b=%d",a,b)
7、(a+b>c)&&(a+c>b)&&(b+c>a)
8、30
9、a*b*c*d*
10、11
11、!knahT
12、p+n 或 str+n
13、i<=9 或 i<10
14、j%3!=0
15、return 0
16、return 1
17、ch=ch+1
18、printf("\n")
19、p!=NULL
20、p->next
Ⅸ 演算法的正確性如何檢驗
我這學期也正在學數據結構,學的那個暈那,寫的只是代碼而已,也就是說是編程的思路。如果你要證明,那就得用具體的程序帶入吧。我師傅說,數據結構是編程的重心,最重要了。所以好好學吧。
Ⅹ 演算法正確的程序
用排除法,演算法正確的程序,一定有輸入,也一定有輸出,而不會是零個輸入輸出,但不一定完全相同,所以,選A!