第一篇:C語言必背的典型程序設(shè)計(jì)題目 - 數(shù)組、函數(shù)-------參考答案
數(shù)組部分必須會編寫的程序(參考答案)
1、使用選擇法、冒泡法對10個(gè)數(shù)進(jìn)行排序,并輸出排序前后的數(shù)列。
//選擇法
#include
printf(“%4d”,a[i]);} printf(“n”);//排序
for(i=0;i<9;i++){
t=i;
for(j=i+1;j<10;j++)
{
if(a[t]>a[j])
{
t=j;
}
}
if(t!=i)
{
temp=a[i];
a[i]=a[t];a[t]=temp;
} } printf(“Aftere sorted:”);for(i=0;i<10;i++){
printf(“%4d”,a[i]);} printf(“n”);} //冒泡法
#include
for(i=0;i<=n-1;i++)
{
for(j=0;j
if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;} } printf(“Aftere sorted:”);for(i=0;i<10;i++){ printf(“%4d”,a[i]);} prtintf(“n”);}
2、已知數(shù)組a中的元素已按由小到大順序排列,以下程序的功能是將輸入的一個(gè)數(shù)插入數(shù)組a中,插入后,數(shù)組a中的元素仍然由小到大順序排列。
#include
int x , i, j=6;
/*j為元素個(gè)數(shù)*/ printf(“Enter a number: ”);
scanf(“%d”,&x);a[0]=x;i=j;
/*從最后一個(gè)單元開始*/ while(a[i]>x){
a[i+1]=a[i];i--;
/*將比x大的數(shù)往后移動(dòng)一個(gè)位置*/ } a[++i]=x;j++;
/*插入x后元素總個(gè)數(shù)增加*/ for(i=1;i<=j;i++)
printf(“%8d”,a[i]);printf(“n”);}
3、(提高題目)編號為1,2,3,……n的n個(gè)人按順時(shí)針方向圍坐一圈。任選一個(gè)正整數(shù)作為報(bào)數(shù)上限m,從第1個(gè)人開始按順時(shí)針方向自1開始順序報(bào)數(shù),報(bào)到m時(shí)停止報(bào)數(shù)。報(bào)m的人出列,從他在順時(shí)針方向上的下一個(gè)人開始重新從1報(bào)數(shù),如此下去,直至所有人全部出列為止。設(shè)計(jì)程序輸出出列順序。
#include
printf(“please input the total of numbers:”);scanf(“%d”,&n);printf(“please input the upper bound of numbers:”);scanf(“%d”,&m);
for(i=0;i //數(shù)組初始化 num[i]=0; i=0; //用于記錄順序1..n k=0; //用于記錄順序1..m t=0; //用于記錄出列順序 while(t } { if(num[i]==0)k++;if(k==m){ t++; num[i]=t; k=0;} i++;if(i==n)i=0;//或者 i=i%n,構(gòu)成循環(huán) } for(i=0;i printf(“%4d”,i+1);printf(“n”);for(i=0;i printf(“%4d”,num[i]);printf(“n”); 4、編程打印直角楊輝三角形前六行。 #include a[i][i]=1; a[i][0]=1;} for(i=2;i<=5;i++){ for(j=1;j<=i-1;j++) { a[i][j]=a[i-1][j]+a[i-1][j-1]; } } for(i=0;i<=5;i++){ for(j=0;j<=i;j++) { printf(“%4d”,a[i][j]); } printf(“n”);} } 5、編寫程序,把下面的數(shù)據(jù)輸入一個(gè)二維數(shù)組中。12 75 56 然后執(zhí)行以下操作: 13 26 88 93 18 22 32 44 36 58 ①輸出矩陣兩個(gè)對角線上的數(shù); ②分別輸出各行和各列的和; ③交換第一行和第三行的位置; ④交換第二列和第四列的位置; ⑤輸出處理后的數(shù)組。 #include //輸出二維數(shù)組 printf(“二維數(shù)組:n”);for(i=0;i for(j=0;j { printf(“%5d”,a[i][j]); } printf(“n”);} printf(“n”); printf(“主對角線上的數(shù):”);for(i=0;i printf(“%4d”,a[i][i]);} printf(“n”); printf(“副對角線上的數(shù):”);for(i=0;i printf(“%4d”,a[i][SIZE-1-i]);} printf(“nn”); //各列的和 for(i=0;i sum=0; for(j=0;j { sum+=a[i][j]; } printf(“第%d行的和=%dn”,i+1,sum);} printf(“n”); //各列的和 for(j=0;j } { sum=0;for(i=0;i sum+=a[i][j];} printf(“第%d列的和=%dn”,j+1,sum);} printf(“n”);//交換第一行和第三行的位置 for(j=0;j printf(“交換第一行和第三行后的二維數(shù)組:n”);for(i=0;i printf(“%5d”,a[i][j]);} printf(“n”);} printf(“n”);//交換第二列和第四列的位置 for(i=0;i printf(“交換第2列和第4列后的二維數(shù)組:n”);for(i=0;i printf(“%5d”,a[i][j]);} printf(“n”);} 6、求一個(gè)5×5矩陣中的馬鞍數(shù),輸出它的位置,所謂馬鞍數(shù)是指在行上最小而在列上最大的數(shù)。如下矩陣: ?5 6 7 8 9???4 5 6 7 8???3 4 5 2 1???2 3 4 9 0???1 2 5 4 8??? 則1行1列上的數(shù)就是馬鞍數(shù)。#include for(i=0;i<5;i++){ Min=a[i][0];col=0; for(j=0;j<5;j++) { if(Min>a[i][j]) { Min=a[i][j]; col=j; } } Max=a[0][col];row=0; for(j=0;j<5;j++) {