這是我參加c語言比賽的機考試題,與大家分享下

來源:互聯網
上載者:User

第一題:

#include <stdio.h>#include <string.h>#include <stdlib.h>#define N 30/************************************************函數名稱: fun*建立時間: 2010.12.5*作    者: huangliangming*描    述: 對一個字串重新排列,字母排在前面,數字排在後面,並不改變原來字母之間以及數字之間的字元順序。*參    數: char * s,int *m*返 回 值: chLetter(數組chLetter[]的首元素地址)*局部變數: char chLetter[N];*char chNumber[N];*int i,j,k;************************************************/char * fun(char * s,int *m)//參數m是通過調試才想到的{char chLetter[N];//用來存放字母char chNumber[N];//用來存放數字int i,j,k;i=0;//初始化j=0;//j用來記錄字母的個數k=0;//k用來記錄數位個數for (i=0; i<N; i++){if (s[i] >= 'A' && s[i] <= 'Z'//將字母存入chLetter[]|| s[i] >= 'a' && s[i] <= 'z'){chLetter[j]=s[i];j++;}if (s[i] >= '0' && s[i] <='9')//將數字存入chNumber[]{chNumber[k]=s[i];k++;}}chLetter[j]='\0';chNumber[k]='\0';*m=j+k;//用來返回最後輸入和輸出時字元的個數strcat(chLetter,chNumber);return chLetter;}//主函數void main(){char s[N];int i;int m;char *p;p=NULL;printf("請輸入字串(30字元以內):\n");scanf("%s",s);p=fun(s,&m);//剛開始沒定義出這個m來現限制指標p所指數組的長度就出現了後面兩個字元亂碼for (i=0; i<m; i++)//將返回的值複製給數組以待輸出{s[i]=p[i];}printf("結果為:");for (i=0; i<m; i++)//輸出結果{printf("%c",s[i]);}printf("\n");}

 

第二題:

#include <stdio.h>#include <string.h>#include <stdlib.h>#define N 30//s所指字串的最大長度#define T 2//t1和t2所指字串的長度/************************************************函數名稱: fun*建立時間: 2010.12.5*作    者: huangliangming*描    述: 將s所指字串中最後一次出現的與t1所指字串相同的子串替換為t2所指字串*參    數: char * s,char * t1, char * t2,int *m*返 回 值: w(數組w[]的首元素地址)*局部變數: char w[N];*char temp[T];*char t1temp[T];*int i,j,k,l;************************************************/char * fun(char * s,char * t1, char * t2,int *m)//m的作用和第一題一樣,沒m最後兩個字元會亂碼(想尋求其他方法){char w[N];//用來存放處理後的字串char temp[T];//用來存放從s所指字串中截取的子串char t1temp[T];//用來存放t1所指字串int i,j,k,l;//向t1temp中存入t1所指字串for (i=0; i<T;i++){t1temp[i]=t1[i];}t1temp[T]='\0';//求m所指的值for (i=0;i<N;i++){if (s[i]=='\0'){*m=i;}}//尋找相同時的最後一個字元的下標for (i=0; i<N; i++){l=0;for (j=i; j<(i+T); j++,l++)//截取長度為T的子串存到temp[]中{temp[l]=s[j];}temp[T]='\0';if (strcmp(t1temp,temp) == 0){k=i;//k記錄相同時的最後一個字元的下標}}for (i=0; i<N; i++)//賦值給w[]{j=0;if (i>=k && i<(k+T))//在找到的k點處開始換值{w[i]=t2[j];//換值j++;}else{w[i]=s[i];}}return w;}//主函數void main(){char s[N];char t1[T];char t2[T];int i;int m;char *p;p=NULL;printf("請輸入字串(20字元以內):");scanf("%s",s);printf("請輸入將要被替換的子字串(僅限兩個字元):");scanf("%s",t1);printf("請輸入將要用來替換的字字串(僅限兩個字元):");scanf("%s",t2);p=fun(s,t1,t2,&m);for (i=0; i<m; i++)//將返回的值複製給數組以待輸出{s[i]=p[i];}printf("結果為:");for (i=0; i<m; i++)//輸出結果{printf("%c",s[i]);}printf("\n");}

 

第三題:

#include <stdio.h>#include <stdlib.h>#include <string.h>#define N 30/************************************************函數名稱: fun*建立時間: 2010.12.6*作    者: huangliangming*描    述: 將s所指的字串中ASCII值為奇數的字元刪除,串中剩餘字元形成一個新串放在t所指的數組中。*參    數: char * s,int * m*返 回 值: return t,(t為指向數組的指標)*局部變數: char * t;*char temp[N];*int i,j=0;************************************************/char * fun(char * s,int * m){char * t;char temp[N];//臨時的數組,用來存放t所指的數組int i,j=0;t=temp;for (i=0; i<N; i++){if (s[i]%2==0 ){temp[j]=s[i];//如果是偶數,賦值給t所指的數組j++;if (s[i]=='\0')//找到m的值先要找出輸入了多少個字元{break;}}}*m=j;//找到m的值即輸出結果的長度t[j]='\0';return t;}//主函數void main(){char s[N];int i;int m;char *p;p=NULL;printf("請輸入字串(30字元以內):\n");scanf("%s",s);p=fun(s,&m);//剛開始沒定義出這個m來現限制指標p所指數組的長度就出現了後面兩個字元亂碼for (i=0; i<m; i++)//將返回的值複製給數組以待輸出{s[i]=p[i];}printf("結果為:");for (i=0; i<m; i++)//輸出結果{printf("%c",s[i]);}printf("\n");}

 

如果有什麼問題的話就討論下吧

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.