1. 程式人生 > 其它 >2020-12-07

2020-12-07

技術標籤:總結c語言

                                                        大創工聯部第四次考核
    從來到學校到現在學習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;
    }
}