備考2021遼寧專升本時做的C語言程序設(shè)計Ⅱ

C語言實現(xiàn)選擇排序算法

實現(xiàn)過程

第一個 for 循環(huán)是確定位置的,該位置是存放每次從待排序數(shù)列中經(jīng)選擇和交換后所選出的最小數(shù)。第二個 for 循環(huán)是實現(xiàn)將確定位置上的數(shù)與后面待排序區(qū)間中的數(shù)進行比較的。

代碼

#include <stdio.h>
int main(){
    int i,j,t,a[11];    //定義變量及數(shù)組為基本整型
    printf("請輸入10個數(shù):\n");
    for(i=1;i<11;i++)
        scanf("%d",&a[i]);    //從鍵盤中輸入要排序的10個數(shù)字
    for(i=1;i<=9;i++)
        for (j=i+1;j<=10;j++)
            if(a[i]>a[j])    //如果前一個數(shù)比后一個數(shù)大,則利用中間變量t實現(xiàn)兩值互換
            {
                t=a[i];
                a[i]=a[j];
                a[j]=t;
            }
    printf("排序后的順序是:\n");
    for(i=1;i<=10;i++)
        printf("%5d", a[i]);    //輸出排序后的數(shù)組
    printf("\n");
    return 0;
}

C語言實現(xiàn)冒泡排序算法

實現(xiàn)過程

通過兩個for循環(huán)實現(xiàn)冒泡排序的全過程,外層for循環(huán)決定冒泡排序的趟數(shù),內(nèi)層for循環(huán)決定每趟所進行兩兩比較的次數(shù)。

代碼

#include <stdio.h>
int main()
{
    int i,j,t,a[11];  //定義變量及數(shù)組為基本整型
    printf("Input 10 nums:\n");
    for(i=1;i<11;i++)  //從鍵盤中輸入10個整數(shù)
        scanf("%d",&a[i]);
    for(i=1;i<10;i++)  //變量i代表比較的趟數(shù)
        for(j=1;j<11-i;j++)  //變量j代表每趟兩兩比較的次數(shù)
            if(a[j]>a[j+1]){  //兩兩比較,如果前者大于后者利用中間變量t進行交換
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
               }
           printf("pai xu hou is:\n");
        for(i=1;i<=10;i++)
            printf("%5d",a[i]);  //將冒泡排序后的順序輸出
        printf("\n");
    return 0;
}

求某一范圍內(nèi)的完數(shù)

如果一個數(shù)等于它的因子之和,則稱該數(shù)為“完數(shù)”(或“完全數(shù)”)。例如,6的因子為1、2、3,而 6=1+2+3,因此6是“完數(shù)”。

問題分析

根據(jù)完數(shù)的定義,解決本題的關(guān)鍵是計算出所選取的整數(shù)i(i的取值范圍不固定)的因子(因子就是所有可以整除這個數(shù)的數(shù)),將各因子累加到變量sum (記錄所有因子之和),若sum等于i,則可確認i為完數(shù),反之則不是完數(shù)。

代碼

#include <stdio.h>
int main()
{
    int i,j,sum,num;  /*變量i控制選定數(shù)范圍,j控制除數(shù)范圍,s記錄累加因子之和*/
    printf("請輸入所選范圍上限:\n");
    scanf("%d",&num);  /* num的值由鍵盤輸入*/
    for(i=2;i<=num;i++){
        sum=0;  /*保證每次循環(huán)時sum的初值為0*/
        for(j=1;j<i;j++){
            if(i%j==0)   /*判斷j是否為i的因子*/
                sum+=j;
        }
        if(sum==i)  /*判斷因子這和是否和原數(shù)相等*/
            printf("%d is a perfect number!\n",i);
    }
    return 0;
}

求最大公約數(shù)

問題分析

如果有一個自然數(shù)a能被自然數(shù)b整除,則稱a為b的倍數(shù),b為a的約數(shù)。幾個自然數(shù)公有的約數(shù),叫做這幾個自然數(shù)的公約數(shù)。公約數(shù)中最大的一個公約數(shù),稱為這幾個自然數(shù)的最大公約數(shù)。

根據(jù)約數(shù)的定義可知,某個數(shù)的所有約數(shù)必不大于這個數(shù)本身,幾個自然數(shù)的最大公約數(shù)必不大于其中任何一個數(shù)。要求任意兩個正整數(shù)的最大公約數(shù)即求出一個不大于其中兩者中的任何一個,但又能同時整除兩個整數(shù)的最大自然數(shù)。

代碼

#include <stdio.h>
int main()
{
    int m,n,temp,i;
    scanf("%d%d",&m,&n);
    if(m<n){
        temp=m;
        m=n;
        n=temp;
    }
    for(i=n;i>0;i--){
        if(m%i==0&&n%i==0){
            printf("%d,%d,%d",m,n,i);
            break;
        }
    }
    return 0;
}

求最小公倍數(shù)

問題分析

最小公倍數(shù),如果有一個自然數(shù)a能被自然數(shù)b整除,則稱a為b的倍數(shù),b為a的約數(shù),對于兩個整數(shù)來說,指該兩數(shù)共有倍數(shù)中最小的一個。計算最小公倍數(shù)時,通常會借助最大公約數(shù)來輔助計算。

最小公倍數(shù)=兩數(shù)的乘積/最大公約(因)數(shù),解題時要避免和最大公約(因)數(shù)問題混淆。

對于最小公倍數(shù)的求解,除了利用最大公約數(shù)外,還可根據(jù)定義進行算法設(shè)計。要求任意兩個正整數(shù)的最小公倍數(shù)即,求出一個最小的能同時被兩整數(shù)整除的自然數(shù)。

//方式一:a*b/最大公因數(shù)
#include <stdio.h>
int main()
{
    int m,n,temp,i,LCM;
    scanf("%d%d",&m,&n);
    if(m<n){
        temp=m;
        m=n;
        n=temp;
    }
    for(i=n;i>0;i--){
        if(m%i==0&&n%i==0){
            printf("%d,%d,%d",m,n,i);
            break;
        }
    }
    LCM=m*n/i;
    printf("\n%d",LCM);
    return 0;
}
//方法二:窮舉法
#include <stdio.h>
int main()
{
    int m,n,temp,i,LCM;
    scanf("%d%d",&m,&n);
    if(m<n){
        temp=m;
        m=n;
        n=temp;
    }
    for(i=m;i>0;i++){
        if(i%m==0&&i%n==0){
            printf("%d,%d,%d",m,n,i);
            break;
        }
    }
    return 0;
}

百錢買百雞

我國古代數(shù)學(xué)家張丘建在《算經(jīng)》一書中曾提出過著名的“百錢買百雞”問題,該問題敘述如下:雞翁一,值錢五;雞母一,值錢三;雞雛三,值錢一;百錢買百雞,則翁、母、雛各幾何?

翻譯過來,意思是公雞一個五塊錢,母雞一個三塊錢,小雞三個一塊錢,現(xiàn)在要用一百塊錢買一百只雞,問公雞、母雞、小雞各多少只?

題目分析

如果用數(shù)學(xué)的方法解決百錢買百雞問題,可將該問題抽象成方程式組。設(shè)公雞 x 只,母雞 y 只,小雞 z 只,得到以下方程式組:
\begin{cases} 5x+3y+\frac13z = 100\\ x+y+z = 100\\ 0 ≤ x ≤ 100\\ 0 ≤ y ≤ 100\\ 0 ≤ z ≤ 100\\ \end{cases}

代碼

#include <stdio.h>
int main(){
    int i, j, k;
    printf("百元買百雞的問題所有可能的解如下:\n");
    for( i=0; i <= 100; i++ )
        for( j=0; j <= 100; j++ )
            for( k=0; k <= 100; k++ ){
                if( 5*i+3*j+k/3==100 && k%3==0 && i+j+k==100 ){
                    printf("公雞 %d 只,母雞 %d 只,小雞 %d 只\n", i, j, k);
                }
            }
    return 0;
}

求π的近似值

編寫一個主函數(shù),功能是用PI/4≈1-1/3+1/5-1/7+…公式求π(PI)的近似值,直到某一項的絕對值小于10的-6次冪為止,并輸出PI的值。

代碼

#include <stdio.h>
#include <math.h>
main(){
    int s;
    float n,t,pi;
    t=1;pi=0;n=1.0;s=1;
    while(fabs(t)>1e-6){   /*通過fabs()函數(shù)求雙精度浮點數(shù)的絕對值,并和10的-6次冪比較*/
        pi=pi+t;
        n=n+2;   /*分母數(shù)值變換*/
        s=-s;    /*控制每一項的符號,正負交替*/
        t=s/n;   
    }
    pi=pi*4;
    printf("pi=%10.6f",pi); 
}

輸出數(shù)陣

編程輸出如下數(shù)陣,行數(shù)n從鍵盤輸入
n行\(zhòng)begin{cases} 1\\ 1 2\\ 1 2 3\\ 1 2 3 4\\ …………………\\ 1 2 3 4 ………………n\\ \end{cases}

代碼

#include <stdio.h>
int main(){
    int i,j,n;
    scanf("%d",&n);
    for(i=1;i<=n;i++){
        for(j=1;j<=i;j++)
            printf("%4d",j);
        printf("\n");
    }
    return 0;
}

指針練習(xí)

編寫程序,輸入一個字符串,利用指針逆序輸出該字符串。

#include <stdio.h>

int main(){ 
    char a[100],*p=a;
    gets(a);
    while(*p!='\0')
        p++;
    while(--p>=a)
        putchar(*p);
    putchar('\n');
    return 0;
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容