語言上機練習(xí)題_第1頁
語言上機練習(xí)題_第2頁
語言上機練習(xí)題_第3頁
語言上機練習(xí)題_第4頁
語言上機練習(xí)題_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、C語言上機考試練習(xí)題(1)說明:我們已經(jīng)學(xué)習(xí)完成了基本數(shù)據(jù)類型、基本控制語句,以及數(shù)組、函數(shù)這些知識了,請同學(xué)們看看附件中的這些題目是否能夠快速編寫出來?可能有個別題目與過去的練習(xí)有些重復(fù),請盡量不要去參考過去的答案。如果現(xiàn)在編寫起來困難還很多,那你就要加倍努力了。1、編寫一個程序,判定一個字符串是否是另一個字符串的子串,若是,返回子串在主串中的位置。要求:(1)在主函數(shù)中輸入兩個字符串,調(diào)用子函數(shù)cmpsubstr()判斷,并在主函數(shù)輸出結(jié)果。(2)子函數(shù)的返回值為-1表示未找到,否則返回子串的位置(起始下標(biāo))。#include<stdio.h>#include<strin

2、g.h>void main()int cmpsubstr(char *s1,char *s2);char str120,str250;char *s1=str1,*s2=str2;gets(str1);gets(str2);printf("%d",cmpsubstr(s1,s2);int cmpsubstr(char *s1,char *s2)int i,d,a=0,situation=0;d=strlen(s1);for(i=0;*(s2+i)!='0'i+)if(*(s1+a)=*(s2+i)a+;if(a=d)situation=1;break;

3、else a=0;if(situation=0)return(-1);else return(i-d+2);2、輸入一個字符串,內(nèi)有數(shù)字和非數(shù)字字符,如:a123x456 17960?302tab5876,將其中連續(xù)的數(shù)字作為一個整數(shù),依次存放到數(shù)組a中。例如,123放在a0中,456放在a1中等等,統(tǒng)計共有多少個整數(shù),并輸出這些整數(shù)。要求:(1)在主函數(shù)中輸入字符串,并輸出結(jié)果。調(diào)用子程序處理字符串。(2)子函數(shù)的返回值為整數(shù)的個數(shù)。#include<stdio.h>#include<string.h>void main()int search(char *str,i

4、nt *sum);char str100;int d,sum20,i;gets(str);d=search(str,sum);for(i=0;i<d;i+)printf("%dn",*(sum+i);search(char *str,int *sum)int i,t=0,a=0;for(i=0;*(str+i)!='0'i+)if(*(str+i)>='0'&&*(str+i)<='9')if(a=0)*(sum+t)=(int)(*(str+i)-'0');a+;else*(

5、sum+t)=*(sum+t)*10+(int)(*(str+i)-'0');else if(*(str+i-1)>='0'&&*(str+i-1)<='9')t+;a=0;if(*(str+i-1)>='0'&&*(str+i-1)<='9')return(t+1);else return(t);3、編寫一個主函數(shù)和子函數(shù)tran(x, r),要求是:函數(shù)tran(x, r)將十進制整數(shù)x轉(zhuǎn)換成r進制數(shù)y(r在之間),x和r的值由主調(diào)函數(shù)(即主函數(shù))傳入,y

6、的值需要返回主調(diào)函數(shù)進行輸出。要求:y的值利用字符數(shù)組進行存儲,數(shù)組的每一個元素存放y的一位數(shù)字字符。#include<stdio.h>#include<string.h>#include<malloc.h>#include<math.h>void main()char* tran(int x,int r);int x,r;char *y;printf("Please input x & r =n");scanf("%d,%d",&x,&r);y=tran(x,r);puts(y);

7、char* tran(int x,int r)int len1,len2,i,t;char *y1,*y2;len1=2+(int)log(double)x)/log(double)r);y1=(char*)malloc(len1*sizeof(char);for(i=0;x!=0;i+)t=x%r;if(t<10)*(y1+i)=(char)(t+48);else *(y1+i)=(char)(t+87);x=(int)x/r;*(y1+i)='0'len2=strlen(y1);y2=(char*)malloc(len2*sizeof(char);for(i=0;i&

8、lt;len2;i+)*(y2+i)=*(y1+len2-i-1);*(y2+i)='0'return(y2);4、編寫一個主函數(shù)和函數(shù)tran(x),要求是:(1)函數(shù)tran(x)產(chǎn)生支付指定金額x(如234.78元)的各種面額人民幣的數(shù)量(注意:盡量支付大面額的人民幣),要求按元、5元、元、元、角、角、分、分八種面額進行統(tǒng)計,產(chǎn)生的結(jié)果存放在數(shù)組中返回主函數(shù)。(2)在主函數(shù)中輸入一金額,并以該金額調(diào)用tran函數(shù),并輸出該函數(shù)返回的統(tǒng)計結(jié)果。5、編寫程序?qū)崿F(xiàn)將鍵盤輸入的一行字符按單詞倒排輸出。如鍵盤輸入“I love you”,屏幕顯示“you love I”。要求:(1

9、) 編寫一個函數(shù)intinvertion(char ch1, char ch2)實現(xiàn)按單詞倒排字符串,第一個形參ch1接受實參傳過來的原字符串,倒排后的新字符串通過第二個形參返回主函數(shù),函數(shù)中還需要統(tǒng)計該字符串中共有多少個單詞,函數(shù)最后返回字符串中包含的單詞個數(shù)。(2) 主函數(shù)中輸入字符串,調(diào)用子函數(shù)invertion,輸出倒排后的字符串及字符串中包含的單詞個數(shù)。#include<stdio.h>#include<string.h>#include<math.h>#include<malloc.h>void main()int invertion

10、(char ch1, char ch2);int len;char *ch1,*ch2;ch1=(char*)malloc(100);ch2=(char*)malloc(100);gets(ch1);len=invertion(ch1,ch2);puts(ch2);printf("%dn",len);int invertion(char ch1, char ch2)int i,j,t=0,len1,len,sum=0;char *str;str=(char*)malloc(10);for(i=0,len=0;*(ch1+i)!='0'i+,len+);len

11、1=len;for(i=0;*(ch1+i)!='0'i+)if(*(ch1+i)!=' ')*(str+t)=*(ch1+i);/將ch1的單詞轉(zhuǎn)移到str上/t+;elsesum+;/單詞個數(shù)加一/*(ch2+len1)=' 'len1=len1-t;for(j=0;j<t;j+)*(ch2+j+len1)=*(str+j);/將str轉(zhuǎn)移到ch2上/t=0;len1-;sum+;/最后一個單詞轉(zhuǎn)移到ch2上/*(ch2+len1)=' 'len1=len1-t;for(j=0;j<t;j+)*(ch2+j+len

12、1)=*(str+j);*(ch2+len)='0'return(sum);6、編寫一個主函數(shù)以及一個函數(shù)maxlong(str)。要求是:(1)函數(shù)maxlong(str)找出字符串str中包含的第一個最長單詞(用字符數(shù)組進行存儲),并返回主調(diào)函數(shù)。(2)在主函數(shù)中輸入一個字符串,假定輸入字符串中只含字母和空格,空格用來分割不同單詞;以該字符串作為參數(shù)調(diào)用maxlong函數(shù),并輸出返回的結(jié)果。#include<stdio.h>#include<string.h>#include<math.h>#include<malloc.h>

13、void main()char *maxlong(char *str);char str100,*str0;gets(str);str0=maxlong(str);puts(str0);char *maxlong(char *str)char *word,*str0;int t=0,i,max=0;for(i=0;*(str+i)!='0'i+) if(*(str+i)!=' ')t+;/t為單詞字母個數(shù)/elseif(t>max)/比較t與之前最大的單詞個數(shù)的大小/word=(str+i-t);max=t;t=0;/t初始化/if(t>max)/最

14、后一個單詞在循環(huán)中沒有比較/word=(str+i-t);max=t;str0=(char*)malloc(max+1);for(i=0;i<max;i+)*(str0+i)=*(word+i);/將最大的單詞賦給str0/*(str0+i)='0'return(str0);7、編寫一個函數(shù)ad(a, m, n)找出一個m行n列的二維數(shù)組a中的“鞍點”;在主函數(shù)中輸入二維數(shù)組的值(假設(shè)數(shù)組中任意兩個數(shù)都不相等),并將它作為實參調(diào)用ad函數(shù)。所謂“鞍點”是指該位置上的元素在該行上最大,在該列上最?。灰粋€二維數(shù)組中可能沒有鞍點。#include<stdio.h>#

15、include<malloc.h>#include<string.h>#include<time.h>void main()int *input(int m,int n);void print(int*p,int m,int n);int ad(int *p,int m,int n);int *p,m,n;while(!ad(p,m,n)printf("請輸入行數(shù):m,列數(shù):n.n");m=n=7;p=input(m,n);print(p,m,n);int ad(int *p,int m,int n)int i,j,k,s,max,l,t

16、ime=0;for(i=0;i<m;i+)for(j=0;j<n;j+)/max為一行最大值/if(j=0)max=*(*(p+i)+j);l=j;elseif(max<*(*(p+i)+j)max=*(*(p+i)+j);l=j;s=0;for(k=0;k<m;k+)if(max>*(*(p+k)+l)s=1;break;if(s=0)printf("NO.%d row NO.%d line:%dn",i+1,l+1,*(*(p+i)+l);time+;return(time);int *input(int m,int n) /建造一個m行,

17、n列二維數(shù)組/int *p;int i,j;p=(int*)malloc(m*sizeof(int*);for(i=0;i<m;i+)*(p+i)=(int*)malloc(n*sizeof(int);srand(time(NULL);/for(i=0; i<m; i+) for(j=0;j<n;j+) *(*(p+i)+j)=rand() %100;/給數(shù)組賦值/return(p);void print(int*p,int m,int n)int i,j;for(i=0;i<m;i+)printf(" 第%d行為:n",i+1);for(j=0;j

18、<n;j+)printf("%4d",*(*(p+i)+j);printf("n");8、編寫主函數(shù)和兩個遞歸函數(shù)sum(a, n)、max(a, n)。要求是:(1)函數(shù)sum(a, n)求數(shù)組a中前n個元素之和,并返回求得的和值。(2)函數(shù)max(a, n)求數(shù)組a中前n個元素中的最大值,并返回求得的最大值。(3)主函數(shù):輸入任意10個正整數(shù)給數(shù)組,調(diào)用sum函數(shù)求數(shù)組中的10個元素之和,并輸出求得的和值;調(diào)用max函數(shù)求數(shù)組中10個元素的最大值,并輸出求得的最大值。#include<stdio.h>#include<mall

19、oc.h>#include<time.h>void main()int sum(int *a,int n);int *input(int n);int max(int *a,int n);int *s,n=10;s=input(n);printf("%5d,%5dn",sum(s,n),max(s,n);int *input(int n)int *a,i;a=(int *)malloc(sizeof(int)*n);srand(time(NULL);for(i=0;i<n;i+)*(a+i)=rand() %100;printf("%4d&

20、quot;,*(a+i);printf("n");return(a);int max(int *a,int n)int m;if(n=1)return(*a);elsem=max(a,n-1);if(m>*(a+n-1)return(m);else return(*(a+n-1);int sum(int *a,int n)if(n=1)return(*a);else return(*(a+n-1)+sum(a,n-1);9、編寫一個遞歸程序,利用折半查找法在一個升序數(shù)組中查找一個數(shù),如果查找成功,則輸出它是第幾個數(shù),否則輸出“No Find.”。#include<

21、;stdio.h>#include<malloc.h>#include<time.h>void main()int *input(int n);void print(int *s,int n);void sort(int*s,int n);int search(int *s,int n,int key);int *s,n=10,key,d;s=input(n);print(s,n);sort(s,n);print(s,n);scanf("%d",&key);d=search(s,n,key);if(d!=0)printf("T

22、he key is at NO.%d.n",d);else printf("NO FINDn");int search(int *s,int n,int key)int m,d;if(n=1)if(*s=key)return(1);else return(0);else m=n/2;if(d=search(s,m,key)return(d);else if(d=search(s+m,n-m,key)return(d+m);else return(0);int *input(int n)int *a,i;a=(int *)malloc(sizeof(int)*n);

23、srand(time(NULL);for(i=0;i<n;i+)*(a+i)=rand() %100;return(a);void print(int *s,int n)int i;for(i=0;i<n;i+)printf("%4d",*(s+i);printf("n");void sort(int*s,int n)int i,j,temp;for(i=0;i<n-1;i+)for(j=0;j<n-1-i;j+)if(*(s+j)>*(s+j+1)temp=*(s+j);*(s+j)=*(s+j+1);*(s+j+1)=t

24、emp;10、用遞歸法實現(xiàn):對于一個正整數(shù)n(n是一個不超過8位的任意正整數(shù),由鍵盤輸入),(1)順序輸出它的各位數(shù);(2)判斷它是一個幾位數(shù)。如輸入:56439;則輸出: 5,6,4,3,95要求:不允許使用數(shù)組;在遞歸函數(shù)中順序輸出該數(shù)的各位數(shù),該數(shù)的位數(shù)則必須在主函數(shù)中輸出。#include<stdio.h>#include<malloc.h>#include<string.h>void main()int f(int n);int n,d;scanf("%d",&n);d=f(n);printf("n個數(shù)為%dn

25、",d);int f(int n)int d;if(n<10)d=1;else d=f(int)n/10)+1;printf("%d ",n%10);return(d);11、輸入一個日期(年、月、日),并輸入該年的元旦(即1月1日)是星期幾(星期一、星期二、星期六、星期日分別用數(shù)字1、2、6、7表示),計算該日期在本年中是第幾天、星期幾(注意潤年問題)?要求寫兩個函數(shù)days和week,分別實現(xiàn)計算該日期在本年中是第幾天和星期幾。由主函數(shù)將日期傳遞給days函數(shù),并將計算得到的結(jié)果返回給主函數(shù)輸出;由主函數(shù)將日期及元旦的星期幾傳遞給week函數(shù),并將計算得到的結(jié)果返回給主函數(shù)輸出。12

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論