2020-12-07
阿新 • • 發佈:2020-12-08
大創工聯部第四次考核 從來到學校到現在學習c語言有兩個多月了,我一開始跟著老師的進度走,後來發現一些工作室的題目基本上都超綱了,我才意識到要超前學習,但是我超前學習很慢,也就比老師講的快一點點,學了後面的就忘了前面的怎麼做,知識點記得不牢固,練的題目也比較少。c語言學習了三種結構,陣列,函式,和現在正在學的指標。最近也學習了幾種方法: **選擇排序法**:首先要明確選擇排序是如何來排的,設定以從小到大的順序輸出我輸入的數,先選定第一個數,記下它的標號,然後將其與後面的數進行比較, 若後面有某個數比它小那麼記下它的標號,將此數繼續與剩下的數進行比較,最後將那個最小的數與一開始記下的那個數對換,依次類推即可。 程式碼如下:
#include<stdio.h>
int main()
{
int a[10],i,j,k,t;
printf("請輸入十個數:");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++)
{
k=i;
for(j=i+1;j<10;j++)
if(a[j]<a[k])
k=j;
t=a[k] ;a[k]=a[i];a[i]=t;
}
printf("按從小到大的順序排列:");
for(i=0;i<10;i++)
printf("%d ",a[i]);
return 0;
}
函式的巢狀呼叫:
例如輸入4個整數,找出其中最大的數。要用函式來解決這個問題,首先想到的是用兩個函式,一個是比較其中的兩個數,另一個是通過前一個函式來跟第三數比,再把前三個數中的最大值記下來,再與第四個數比較。若要求我們求n個數的最大數也可以這樣子求解。
程式碼如下:
#include<stdio.h>
int main()
{
int i(int a,int b,int c,int d);
int s,d,f,g,k;
scanf("%d %d %d %d",&s,&d,&f,&g);
k=i(s,d,f,g);
printf("%d",k);
return 0;
}
int i(int a,int b,int c,int d)
{
int j(int a,int b);
int m;
m=j(a,b);
m=j(m,c);
m=j(m,d);
return(m);
}
int j(int a,int b)
{
return(a>b?a:b);
}
用指標將陣列中n個數按相反順序輸出:
首先可以想到的是不用指標如何來求,如果不用指標的話就是選定一個對稱軸,把我要輸入的數對半分,然後將前一半的下標與後一半下標依次對應,然後將各個對應的數互換,即實現了將輸入的n個數按相反順序輸出,如果遇見輸入的n為單數也是一樣的,只不過最中間那個數可以不用換。如果用指標來求解的話就得先記下第一個數與最後一個數的地址,然後取他們的內容,逐個互換,當換到最中間那個數的時候停止互換。
程式碼如下:
#include<stdio.h>
int main()
{
int s(int*x,int n);
int i,a[10],*p;
for(i=0;i<10;i++)
scanf("%d",a+i);
p=a;
s(p,10);
for(p=a;p<a+10;p++)
printf("%d ",*p);
return 0;
}
int s(int*x,int n)
{
int t,*p,*i,*j,m=(n-1)/2;
j=x+n-1;p=x+m;
for(i=x;i<=p;i++,j--)
{
t=*i;*i=*j;*j=t;
}
}