指標進階(修改過了,按老師要求)
阿新 • • 發佈:2018-12-15
程式一
計算最長的字串長度:輸入n (n<10)個字串,輸出其中最長字串的有效長度。要求自定義函式 Int max_len ( char *s[],int n),用於計算有n個元素的指標陣列s中最長的字串的長度。
#include<stdio.h> #include<stdlib.h> #include<string.h> void max_len(char *s[],int n) { int maxlen=strlen(s[0]); for(int i=1;i<n;i++) { if(strlen(s[i])>maxlen) maxlen=strlen(s[i]); } printf("最長的字串長度為:%d\n",maxlen); } int main() { int n=0; char *s[20],a[10]; scanf("%s",a); while(a[0]!='#') { s[n]=(char*)malloc(sizeof(char)*(strlen(a)+1)); strcpy(s[n],a); n++; scanf("%s",a); } max_len(s,n); return 0; }
程式二
指定位置輸出字串:輸入一個字串後再輸人兩個字元,輸出此字串中從與第1個字元匹配的位置開始到與第2個字元匹配的位置結束的所有字元。例如,輸入字串“ program”與2個字元“r”和“g”後,輸出“rog”。要求自定義函式char * match(char*S, char ch1, char ch2)返回結果字串的首地址。
#include<stdio.h> #include<string.h> char *match(char*S, char ch1, char ch2) { char *a; int i=0,j=0; while(S[j]!='\0') { if(S[j]==ch1) { while(S[j]!=ch2) { if(S[j]!='\0') a[i++]=S[j++]; else return NULL; } a[i]=S[j]; return a; } j++; } return NULL; } int main() { char s[1000]; char c1,c2; printf("輸入一個字串:\n"); scanf("%s%*c",s); //getchar(); printf("輸入2個字元:\n"); scanf("%c %c",&c1,&c2); if(match(s,c1,c2)!=NULL) printf("輸出:%s\n",match(s,c1,c2)); else printf("Not found\n"); }
程式三
查詢子串:輸入兩個字串s和t,在字串s中查詢子串t,輸出起始位置,若不存在,則輸出-1。要求自定義函式char* search(char *s,char *t)返回子串t的首地址,若未找到,則返回NULL。
#include<stdio.h> #include<string.h> char* search(char *s,char *t) { int k=0,ls,lt; char *p=NULL; ls=strlen(s); lt=strlen(t); for(int i=0;i<ls;i++) { int j=i; while(s[j]==t[k]) { k++; j++; } if(k>=lt) { p=&s[i]; return p; } k=0; } return NULL; } int main() { char s[1000],t[1000],*p=NULL; printf("輸入一個字串s:\n"); scanf("%s%*c",s); // getchar(); printf("輸入查詢字串t:\n"); scanf("%s",t); if((p=search(s,t))!=NULL) printf("%d\n",p-s); else printf("Not found\n"); }
程式四
編寫C程式,它的功能是通過帶引數的命令列,輸入兩個整數,輸出兩個整數之間的完數。
(有兩個引數被送給main(),其中的一個描述了命令列引數的個數,通常稱為argc;另一個是命令列引數的陣列,通常稱為argv。)
(這個我是真真真不會!求教!我只能說一下這麼找命令提示符視窗)
此電腦——C盤——然後一定要先Shift,然後右鍵——開啟命令視窗。(只右鍵是沒有的)
然後工作列右鍵點一下命令提示符。
WIN+R開啟這個,找到路徑,命令檔名
然後(才不給看)
上述太麻煩,就或者直接WIN+R(室友是搜的):
然後輸入cmd,然後回車:
不確定的程式碼:
#include<stdio.h>
int main(int argc,char *argv[])
{
int a,b;
sscanf(argv[1],"%d",&a); //用來將輸入的字元型改為整型
sscanf(argv[2],"%d",&b);
for(int i=a;i<=b;i++)
{
int s=0;
for(int j=1;j<i;j++)
{
if(i%j==0)
s+=j;
}
if(s==i)
printf("%d ",i);
}
return 0;
}
(最後,我真的只能說,我是個垃圾,我都是亂寫的,我真的不懂什麼命令列引數,我真的不會)
(もし私が間違っているなら、教えてください)