c语言四种常见题型:比较大小,数的倒置,求最大公约数,顺序输出

本文介绍了四种常见的C语言编程题型,包括比较大小、数的倒置、计算最大公约数(更相减损法、辗转相除法、单项取余法)以及顺序输出(冒泡排序和选择排序)。每种题型提供了详细的解题思路、代码实现和相关知识点运用,帮助读者掌握基础编程技巧。
摘要由CSDN通过智能技术生成

一.四种常见题型

1.比较大小

输入三个数a,b,c,比较输出其中的最大值

顺序输入数值,每个数值进行最少的比较,输出最大值。

#include<stdio.h>
int main()
{
    int a,b,c,max;
    scanf("%d %d %d",&a,&b,&c);
    max=a;//将最大值赋值为a,此后的数与a进行比较
    if(a<=b)//将b,c分别与max相比,大于max时,将其赋值给max
    {
        max=b;
        if(b<=c)
        {
            max=c;
        }
    }
    else if(a<=c)
    {
        max=c;
    }
    printf("%d",max);
}

相关知识的运用:

        1.if语句的使用:当题目提及数字之间大小的判比,通常首先考虑到if的语句

        2.首先用输入的一个数值赋值给max,使用if的比较,用 max作为被比较值,当有值比max更大时,将其赋值给max。

优点:相比于将三个数之间两两比较,使用if语句能够缩短代码,思路能够更加清晰的显示在代码中。

2.数的倒置

输入一个数(12345678),输出这个数的倒置(87654321)

输出数的倒置,即将个位数不断输出。

#include<stdio.h>
int main()
{
    int x,a,b;
    scanf("%d",&x);
    a=x;//将x的赋值于a,使a的数值能够满足要求的发生改变
    while(a>0)//
    {
        b=a%10;//输出个位数
        printf("%d",b);
        a=a/10;//去除个位数后的数值
    }
}

 相关知识的运用:

while语句的使用,只需要接收执行的条件,当满足括号内的条件,while语句将会一直执行。

解题思路:

  将输入倒置输出,本质在于将输入的最末尾数循环输出,只需要通过循环得到个位数则可实现题目要求。

3.最大公约数

写一个函数,完成输入两个整数,输出最大公约数的功能

方法一:更相减损法

#include<stdio.h>
int main()
{
    int a,b;
    scanf("%d %d",&a,&b);
    while(a!=b)//当a,b不相同时,循环相减
    {
        if(a>b)
        {
            a=a-b;
        }
        else if(a<b)
        {
            b=b-a;
        }
    }
    printf("%d",a);
}

 使用循环嵌套方法,对a,b中大的数进行相减,取小的数,一直减到a,b相等时,则为最大公约数。

方法二:辗转相除法

#include<stdio.h>
int main()
{
    int a,b;
    scanf("%d %d",&a,&b);
    while(a && b)//当a,b中没有出现为0时循环
    {
        if(a>b)
        {
            a=a%b;
        }
        else if(a<b)
        {
            b=b%a;
        }
    }
    printf("%d",a>b ? a:b);//输出a,b中大的数
}

 给定循环条件,当a,b中出现0时,循环停止,用小数对大数取余,最后输出大的数,则为最大公约数。

a && b:满足a或b为零

a > b ? a:b :判断a是否大于b,当a小于等于b时,a等于b,输出此时的a

方法三:单项取余法

#include<stdio.h>
int main()
{
    int a,b;
    scanf("%d %d",&a,&b);
    int n = a > b ? b : a;
    while(a%n!=0 || b%n!=0)
        --n;
    printf("%d",n);
}

 使用循环将a,b中小的一个数作为被除数,将n逐渐减小,使a,b能同时被整除,此时输出n,n为最大公约数。

4.顺序输出

方法一:冒泡排序

将数组中的数值之间相互比较,从小到大顺序输出(数值与其之后的数值进行逐个比较,若此数值大则与其交换位置)

在这里插入图片描述

#include<stdio.h>
int main()
{
	int m,i,j;
	scanf("%d",&m);//输入数组个数
    int data[m];
    for(i=0;i<m;i++)
    {
    	scanf("%d",&data[i]);//输入数组中的数值
	}
	for(i=0;i<m;i++)
	{
		for(j=0;j<4-i;j++)//每一位与后几位比较大小
		{
			if(data[j]>data[j+1])//后者比前者大,两者相互交换位置
			{
				int a;
				a=data[j];
				data[j]=data[j+1];
				data[j+1]=a;
			}
		}
	}
	for(i=0;i<m;i++)
	{
		printf("%d ",data[i]);//顺序输出数组
	}
	return 0;
}

相关知识运用:

1.for循环,使每位之间都能够进行相互之间的比较

2.if判断,使顺序错乱的数交换位置

优势:运算思路更加清晰,步骤详细

劣势:步骤较多,过程繁琐,代码运行时间较长

方法二:选择排序

在剩下数值中选择最小值,再循环将剩余数值中找出最小值

#include<stdio.h>
int main()
{
	int m,t;
	scanf("%d",&m);//输入数组个数
    int data[m];
    for(int i=0;i<m;i++)
    {
    	scanf("%d",&data[i]);//输入数组中的数值
	}
    int begin=0,end=m-1;
    while (begin<end) //每一个数值与它之后的数值进行逐个比较
	{
        int min=data[begin];//将数值赋值于最小值,此后数值与此比较
        int t=begin;//数值所在位置数
        for(int i=begin ; i<=end;i++)//每个数值与它之后的数值进行比较
		{
            if (min>data[i])//如果最小值大于它之后的数,将其赋值给最小值,两者位置交换
			{
                min=data[i];
                t = i;
            }
        }
        data[t]=data[begin];//将改变之后的数值放置在被换数的位置上
        data[begin] = min;//将其变为剩余数值中的最小值
        begin++;
    }
    
    int i = 0;
    while(i<m)
	{
        printf("%d   ",data[i]);
        i++;
    }
    
    printf("\n");
}

相关知识运用:在数组中每个数值都有位置顺序,位置交换时,数值交换,位置数交换

优势:只需要找出其中的最小值,比较次数更少,代码运行更快

劣势:逻辑性强,交换次数较多,较复杂

二.学习总结

1.基本框架

#include<stdio.h>
int main()
{
  /******begin******/

  /*******end*******/
}

2.基本数据类型

   四种常量:

(1)整型:所有的整数  

(2)浮点数型:小数点的位置是可以浮动的

(3)字符型:用一对单引号括起来的任意字符

(4)字符串型:用一对双引号括起来的零个或多个字符

   常量占位符:

   (1)整型:int (%d)

   (2)浮点数 :单精度float(%f),双精度double(%lf)

   (3)字符:char(%c)

3.基本算数运算

 (1)常见简单运算符:+, - , * , %(只用于整数), / (两整数相处后的商不会四舍五入)

 (2)符合的赋值运算符:*= , -= , += ,%= , /=

 (3)增一与减一不同的表示及其含义:

     m=n++:  m=n;n=n+1

     m=++n:  n=n+1;m=n;

     m=n--:  m=n;n=n-1;

     m=--n:  n=n-1;m=n;

 (4)类型转换

1.自动类型转换(由低到高):

char/short , int , unsigned int , long , unsigned long , (float) , double ,long double

2.强制转换:如:printf("%d",int(r+2.6))赋值时,会实现类型转换,右边转为左边类型

(5)常用的标准数学函数

 当使用开平方sqrt(),次幂pow()等标准数学函数时,在程序开头加入:

#include<math.h>

四.输入与输出

(1)字符的输入

scanf("% ",& );

    前后占位符类型需相同

int x;
scanf("%d",&x);//输入整数

float a;
scanf("%f",&a);//输入浮点数

char c;
scanf("%c",&c);//输入字符

(2)占位符

(3)printf()的格式修饰符:

        %md:补左空格,右对齐 

        %-md:补右空格,左对齐

        %.n:保留小数位数

        %f:默认输出小数点后六位

五.选择控制结构

1.单分支控制的条件语句:

    if(条件)

2.双分支控制的条件语句:

    if(条件)

    else if(条件)

    .......

3.条件运算符和条件表达式:

表达式1 ? 表达式2 :表达式3

含义:若表达式1的值非0,则该条件表达式的值是表达式2的值,否则是表达式34.

如:max = a > b ? a : b    max为两种的最大值,输出a,判断a是否比b大,当a不满足大于b时,a等于b,且输出a

4.用于多路选择的switch语句

switch(表达式)
{
    case常量1:
        可执行语句序列1
    case常量2:
        可执行语句序列2
    .
    .
    .
    case常量n:
        可执行语句序列n
    default://之前都未被匹配到
        可执行语句序列n+1
}

 5.逻辑运算符和逻辑表达式

  &&:逻辑与,同时满足

  ||:逻辑或,其一满足

  !:逻辑非,逻辑取反  如:!5为0;!0为1

判断一个值成立的标准:0为假,非0为真

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值