數組的定義簡單,可簡化代碼,增長代碼可讀性,也便於使用循環結構,但它的不足之處就是數組大小必須定義時給出,數組空間的大小一旦肯定後就不能更改,空間太大可能會形成空間浪費,過小數組又會越界,使得代碼出錯。相比前面的內容,數組仍是比較優秀的,數組可用來儲存數據,對於不一樣的狀況咱們能夠選擇一維數組,二維數組,字符數組。數字也可存放在字符數組中,但若要計算的話,就要先-‘0’,轉成數字。利用數組能夠將多個數進行排序,而普通代碼則作不到這點。冒泡法、排序法都是數組排序的經典作法。
一維數組:175 二維數組:105 字符數組:130 總分:405
找出不是兩個數組共有的元素 給定兩個整型數組,本題要求找出不是二者共有的元素。 輸入格式: 輸入分別在兩行中給出兩個整型數組,每行先給出正整數N(≤20),隨後是N個整數,其間以空格分隔。 輸出格式: 在一行中按照數字給出的順序輸出不是兩數組共有的元素,數字間以空格分隔,但行末不得有多餘的空格。題目保證至少存在一個這樣的數字。同一數字不重複輸出。
void Found(int a[],int b[],int n,int m); //函數聲明 定義 n,m,i,j; 定義數組a a[20]; 定義數組b b[20]; 輸入a數組元素個數n 輸入數組a 輸入數組b元素個數m 輸入數組b Found(a,b,n,m); //調用函數 return 0; void Found(int a[],int b[],int n,int m) //函數定義 定義 i,j,k=0,cn; 定義數組c c[41]; //把數組a和數組b中的元素放到c數組中 static int flag[40]; //使用數組flag避免同一數字重複輸出 cn=n+m; for i=0 to n-1 do //把a數組中的數放到c數組中 c[i]=a[i]; end for for i=0 to m-1 do //把b數組中的數放到c數組中 c[n+i]=b[i]; end for for i=0 to cn-1 do if flag[i] then continue; end if for j=i+1 to cn-1 do if c[i]==c[j]&&i<n&&j>=n then //兩個數分別在a數組和b數組中 flag[j]=1; flag[i]=1; end if if c[i]==c[j]&&i<n&&j<n then //兩個數同在a數組中 flag[j]=1; end if if c[i]==c[j]&&i>=n&&j>=n then //兩個數同在b數組中 flag[j]=1; end if end for if flag[i]==0 then c[k++]=c[i]; end if end for 輸出數組c }
閱覽室
天梯圖書閱覽室請你編寫一個簡單的圖書借閱統計程序。當讀者借書時,管理員輸入書號並按下S鍵,程序開始計時;當讀者還書時,管理員輸入書號並按下E鍵,程序結束計時。書號爲不超過1000的正整數。當管理員將0做爲書號輸入時,表示一天工做結束,你的程序應輸出當天的讀者借書次數和平均閱讀時間。
注意:因爲線路偶爾會有故障,可能出現不完整的紀錄,即只有S沒有E,或者只有E沒有S的紀錄,系統應能自動忽略這種無效紀錄。另外,題目保證書號是書的惟一標識,同一本書在任什麼時候間區間內只可能被一位讀者借閱。算法
void LibrarySystem(int a[][3],int k); //函數聲明 定義天數n 定義二維數組a a[2000][3]; 定義 i,k,num,hour,minu; char c; //S,E 輸入天數n for i=1 to n-1 do k=0; while(1) scanf("%d %c %d:%d",&num,&c,&hour,&minu); if num!=0 then //把借書信息存入a數組中 a[k][0]=num; //數組每行第一個元素存放書號 a[k][1]=c; //第二個元素存放是借書仍是還書 a[k][2]=hour*60+minu; //第三個元素存放時間 k++; //記錄一天的借書還書次數 end if else break; end while LibrarySystem(a,k); //函數調用 end for return 0; void LibrarySystem(int a[][3],int k) //函數定義 定義 i,j,count=0; //可根據count的值判斷該借書數據是否有效 double sum=0; for(i=0;i<k;i++) //一天的借書還書次數 if a[i][1]=='S' then //借書 for j=i+1 to k-1 do if a[i][0]==a[j][0]&&a[j][1]=='S' then //無效記錄 break; end if else if a[i][0]==a[j][0]&&a[j][1]=='E' then //還書 sum=sum+a[j][2]-a[i][2]; //計算借書時間 count++; //計算一天的借書次數 break; end if end for end if end for if count!=0 then //輸出有效數據 printf("%d %.0f\n",count,sum/count); else //無效數據 printf("0 0\n"); }
大數加法 輸入2個大數,每一個數的最高位數可達1000位,求2數的和。 保證輸入數都是數字,不能有空格,輸出2數相加的結果
定義 i,j,length1,length2; // length1是字符數組s1的長度, length2是字符數組s2的長度, char s1[1000],s2[1000]; int num1[1000]={0}; // 數字數組num1 int num2[1000]={0}; // 數字數組num2 輸入字符串s1,s2 length1=strlen(s1); //求第一個加數的位數 length2=strlen(s2); // 求第二個加數的位數 j=0; for i=length1-1 to 0 do //將字符數組轉化爲數字數組,並倒數存放,做爲第一個加數 num1[j]=s1[i]-'0'; j++; end for j=0; for i=length2-1 to 0 do //將字符數組轉化爲數字數組,並倒數存放,做爲第二個加數 num2[j]=s2[i]-'0'; j++; end for for i=0 to 1000 do //實現大數的加法 num1[i]=num1[i]+num2[i]; if num1[i]>9 then num1[i]=num1[i]-10; num1[i+1]++; end if end for for (i=999;i>=0&&num1[i]==0;i--) //求得最終結果的位數 if(i>0) for(;i>=0;i--) //輸出最終答案 printf("%d", num1[i]); end for end if else printf("0"); end for return 0;
同窗的代碼
數組
個人代碼
函數