备考2021辽宁专升本时做的C语言程序设计Ⅱ

C语言实现选择排序算法

实现过程

第一个 for 循环是确定位置的,该位置是存放每次从待排序数列中经选择和交换后所选出的最小数。第二个 for 循环是实现将确定位置上的数与后面待排序区间中的数进行比较的。

代码

#include <stdio.h>
int main(){
    int i,j,t,a[11];    //定义变量及数组为基本整型
    printf("请输入10个数:\n");
    for(i=1;i<11;i++)
        scanf("%d",&a[i]);    //从键盘中输入要排序的10个数字
    for(i=1;i<=9;i++)
        for (j=i+1;j<=10;j++)
            if(a[i]>a[j])    //如果前一个数比后一个数大,则利用中间变量t实现两值互换
            {
                t=a[i];
                a[i]=a[j];
                a[j]=t;
            }
    printf("排序后的顺序是:\n");
    for(i=1;i<=10;i++)
        printf("%5d", a[i]);    //输出排序后的数组
    printf("\n");
    return 0;
}

C语言实现冒泡排序算法

实现过程

通过两个for循环实现冒泡排序的全过程,外层for循环决定冒泡排序的趟数,内层for循环决定每趟所进行两两比较的次数。

代码

#include <stdio.h>
int main()
{
    int i,j,t,a[11];  //定义变量及数组为基本整型
    printf("Input 10 nums:\n");
    for(i=1;i<11;i++)  //从键盘中输入10个整数
        scanf("%d",&a[i]);
    for(i=1;i<10;i++)  //变量i代表比较的趟数
        for(j=1;j<11-i;j++)  //变量j代表每趟两两比较的次数
            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;
}

求某一范围内的完数

如果一个数等于它的因子之和,则称该数为“完数”(或“完全数”)。例如,6的因子为1、2、3,而 6=1+2+3,因此6是“完数”。

问题分析

根据完数的定义,解决本题的关键是计算出所选取的整数i(i的取值范围不固定)的因子(因子就是所有可以整除这个数的数),将各因子累加到变量sum (记录所有因子之和),若sum等于i,则可确认i为完数,反之则不是完数。

代码

#include <stdio.h>
int main()
{
    int i,j,sum,num;  /*变量i控制选定数范围,j控制除数范围,s记录累加因子之和*/
    printf("请输入所选范围上限:\n");
    scanf("%d",&num);  /* num的值由键盘输入*/
    for(i=2;i<=num;i++){
        sum=0;  /*保证每次循环时sum的初值为0*/
        for(j=1;j<i;j++){
            if(i%j==0)   /*判断j是否为i的因子*/
                sum+=j;
        }
        if(sum==i)  /*判断因子这和是否和原数相等*/
            printf("%d is a perfect number!\n",i);
    }
    return 0;
}

求最大公约数

问题分析

如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数。几个自然数公有的约数,叫做这几个自然数的公约数。公约数中最大的一个公约数,称为这几个自然数的最大公约数。

根据约数的定义可知,某个数的所有约数必不大于这个数本身,几个自然数的最大公约数必不大于其中任何一个数。要求任意两个正整数的最大公约数即求出一个不大于其中两者中的任何一个,但又能同时整除两个整数的最大自然数。

代码

#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;
}

求最小公倍数

问题分析

最小公倍数,如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数,对于两个整数来说,指该两数共有倍数中最小的一个。计算最小公倍数时,通常会借助最大公约数来辅助计算。

最小公倍数=两数的乘积/最大公约(因)数,解题时要避免和最大公约(因)数问题混淆。

对于最小公倍数的求解,除了利用最大公约数外,还可根据定义进行算法设计。要求任意两个正整数的最小公倍数即,求出一个最小的能同时被两整数整除的自然数。

//方式一:a*b/最大公因数
#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;
}

百钱买百鸡

我国古代数学家张丘建在《算经》一书中曾提出过著名的“百钱买百鸡”问题,该问题叙述如下:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?

翻译过来,意思是公鸡一个五块钱,母鸡一个三块钱,小鸡三个一块钱,现在要用一百块钱买一百只鸡,问公鸡、母鸡、小鸡各多少只?

题目分析

如果用数学的方法解决百钱买百鸡问题,可将该问题抽象成方程式组。设公鸡 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;
}

求π的近似值

编写一个主函数,功能是用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()函数求双精度浮点数的绝对值,并和10的-6次幂比较*/
        pi=pi+t;
        n=n+2;   /*分母数值变换*/
        s=-s;    /*控制每一项的符号,正负交替*/
        t=s/n;   
    }
    pi=pi*4;
    printf("pi=%10.6f",pi); 
}

输出数阵

编程输出如下数阵,行数n从键盘输入
n行\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;
}

指针练习

编写程序,输入一个字符串,利用指针逆序输出该字符串。

#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;
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,588评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,456评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,146评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,387评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,481评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,510评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,522评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,296评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,745评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,039评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,202评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,901评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,538评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,165评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,415评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,081评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,085评论 2 352

推荐阅读更多精彩内容