1.定義函數實現:輸入若干名學生的成績(輸入人數或用負數結束都可),求其平均分,最高分和最低分,並指出最高分和最低分的學生(給出下標便可),輸入一個成績,說明是第幾個學生的成績,最後按照成績從高到低排序後輸出。(至少七個函數。輸入函數、平均值函數、最大值下標函數、最小值下標函數,查找函數,排序函數,輸出函數)數組
# include <stdio.h> # define N 100 void readscore (int score[],int n);//輸入函數 double average(int score[],int n);//平均值 int findmaxindex (int score[],int n,int index[]);//最大值下標 int findminindex (int score[],int n,int index[]);//最小值下標 int search (int score[],int n,int x[]);//查找 void bubbleSort(int score[],int n);//排序 void printscore (int score[],int n);//輸出函數 int main () { int score[N]={0},n,maxindex,i,minindex,c,x[N]; int index[N]={0}; double ave; printf ("請輸入人數:\n"); scanf ("%d",&n); readscore(score,n); ave=average(score,n); printf("平均值爲%.0lf。\n",ave); maxindex=findmaxindex(score,n,index); printf("最大值下標爲%d\n",maxindex); minindex=findminindex(score,n,index); printf("最小值下標爲%d\n",minindex); c=search (score,n,x); for(i=0;i<c;i++) { printf("%d號。\n",x[i]); } bubbleSort(score,n); printf("the sorted numbers:\n"); for(i=0;i<n;i++) { printf("%4d",score[i]); } } //輸入函數 void readscore (int score[],int n) { int i; printf("請輸入成績:\n"); for (i=0;i<n;i++) { scanf("%d",&score[i]); } } //平均值 double average(int score[],int n) { int i,sum; sum=0; for(i=0;i<n;i++) { sum+=score[i]; } return (double)sum/n; } //最大值下標 int findmaxindex (int score[],int n,int index[]) { int i,max,index1; max=score[0]; index1=0; for (i=0;i<n;i++) { if(score[i]>max) { max=score[i]; index1=i+1; } } return index1; } //最小值下標 int findminindex (int score[],int n,int index[]) { int i,min,index2; min=score[0]; index2=0; for (i=0;i<n;i++) { if (score[i]<min) { min=score[i]; index2=i+2; } } return index2; } // 查找 int search (int score[],int n,int x[]) { int i,a,b; printf("請輸入你須要查找的成績:\n"); scanf("%d",&a); b=0; for(i=0;i<n;i++) { if(score[i]==a) { x[b++]=i+1; } } return b; } //排序函數 void bubbleSort(int score[],int n) { int i,j,temp,flag; for(i=0;i<n-1;i++) { flag=0; for(j=0;j<n-i-1;j++) { if(score[j]>score[j+1]) { temp=score[j]; score[j]=score[j+1]; score[j+1]=temp; flag=1; } } if(flag==0) break; } } //輸出函數 void printscore (int score[],int n) { int i; for (i=0;i<n;i++) { printf("%5d",score[i]); } }
2.定義長度爲100的整型數組,將數組元素賦初值爲1,2……100,將其中全部值爲3或7倍數的值刪除,最後打印輸出數組中剩餘數的個數及每一個數。函數
# include <stdio.h> # define N 100 int main () { int i,score[N]={0},a,n; for(i=0;i<N;i++) { score[i]=i+1; } a=0; for(i=0;i<N;i++) { if(score[i]%3==0||score[i]%7==0) { score[i]=0; } else { a++; printf("%5d",score[i]); } } printf("剩餘%d個",a); return 0; }
附加題加密
1.將數組a中的10個元素後移m位,移出的m位順序存放在數組的 前m位。要求:(1)數組值在程序中初始化(2)m從鍵盤輸入。spa
int a[N]={1,2,3,4,5,6,7,8,9,10},i,j,m,temp; for(i=0;i<10;i++) { printf("%d ",a[i]); } printf("\n請輸入向後移的位數;\n"); scanf("%d",&m); if(m>10) { printf("輸入錯誤!\n"); } else { for(i=0;i<m;i++) { temp=a[9]; for(j=9;j>0;j--) { a[j]=a[j-1]; } a[0]=temp; } } for(i=0;i<10;i++) { printf("%d ",a[i]); } return 0; }
2. 數字加密:輸入一個四位數,將其加密後輸出。方法是將該數每一位上的數字加9,而後除以10取餘,作爲該位上的新數字,最後將千位和十位上的數字互換,百位和個位上的數字互換,組成加密後的新四位數。例如輸入1257,通過加9取餘後獲得新數字0146,再通過兩次換位後獲得4601。(使用數組)3d
# include <stdio.h> int main () { int i,a[4],b[4],m,n; printf("請輸入一個密碼(四位數):\n "); scanf("%d",&n); if(n>9999||n<1000) { printf("error"); } else { a[0]=n/1000;/*千位*/ a[1]=n%1000/100;/*百位*/ a[2]=n%100/10;/*十位*/ a[3]=n%10;/*個位*/ for(i=0;i<4;i++) { b[i]=(a[i]+9)%10; } m=b[2]*1000+b[3]*100+b[0]*10+b[1]; printf("加密後的密碼是:%04d",m); } return 0; }
二 實驗總結:code
1.注意void和int的區別blog
2.注意數組名錶示內存首地址, 是地址常量排序
3.在聲明函數時看是否加 int index[]內存
4.變量要附初值io
補充知識點:
在使用函數的過程當中,須要注意如下問題:
(1)函數中定義的變量(包括形參),它只在本函數範圍內起做用,咱們稱之爲局部變量。在其餘函數中是不能使用本函數定義的變量的。
(2)簡單變量作函數參數和數組作函數參數存在着本質的不一樣。
簡單變量作參數,實現的是值的單向傳遞,即只能把實參的值傳給形參,因爲實參和形參佔用不一樣的內存單元,形參的改變不會影響實參。
數組作函數參數,是將實參數組的地址傳給形參數組,實參和形參佔用的是相同的內存空間。
3、程序分析
程序1
#include <stdio.h> void swap(int x[]); int main() { int a[2]={1,2}; swap(a); printf("a[0]=%d\na[1]=%d\n",a[0],a[1]); return 0; } void swap(int x[]) { int z; z=x[0]; x[0]=x[1]; x[1]=z; }
程序2
#include <stdio.h> void swap(int x,int y); int main() { int a[2]={1,2}; swap(a[0],a[1]); printf("a[0]=%d\na[1]=%d\n",a[0],a[1]); return 0; } void swap(int x,int y) { int z; z=x; x=y; y=z;
程序一函數爲void swap(int x[]) ,因此數組的值隨着int[]變化而變化,而程序二把數組中兩個數賦值給了兩個變量,因此結果相反。