C语言之——入门必刷题(2)

本文章为C语言入门必刷题,每道题都包含了C语言的基础知识点,值得我们去经常复习,并牢记在心的一些题目!!


                                                                                                                           超佳出品

此次为入门必刷题2


前言

大佬就可以撤退了!!(当然也可以温故而知新呀!!)

本次为C语言入门刷题!重在扎实基础,温习学过的基础知识!!!

夯实基础,走得更远!!


一、冒泡排序的重要性!

在一些入门题目中,题目经常会让我们输入n个数,之后以升序或者降序的方式输出,或者比较。

这就需要我们来掌握一种排序方式——冒泡排序!

冒泡排序重点详细介绍https://blog.csdn.net/ChaoFreeandeasy_/article/details/123562437?spm=1001.2014.3001.5502                                                        (大家可以通过这个来直观深刻的了解并学习冒泡排序)

下面举例说明:

思路:

     首先,要输出最高成绩的前五项,我们必须将所有输入成绩通过冒泡排序的方式,以降序的方式排好序后,通过输出数组前五个,即(i=0;i<5;i++) ,来输出前五项!

     那么接下来就要看你是否认真学习了呢?

     来和我的代码对比一下吧!

#include<stdio.h>
void max(int arr[], int sz)
{
	for (int i = 0; i < sz - 1; i++)
	{
		int flag = 0;
		for (int j = 0; j < sz - 1 - i; j++)
		{
			if (arr[j] < arr[j + 1])
			{
				int temp = arr[j];
				arr[j] = arr[j + 1];      //冒泡排序!!
				arr[j + 1] = temp;
				flag = 1;
			}

		}
		if (flag == 0)
		{
			break;
		}
	}
}
int main()
{
	int n = 0;
	int arr[50] = { 0 };
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	max(arr, n);
	for (int i = 0; i < 5; i++)   //输出前五项
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

这里使用flag的作用是针对已经排好序的数组元素,无需排序而设立,从而减小时间复杂度。

假设起初flag=0,若需要排序,则flag=1。最后只需判断flag是否等于0,等于0则无需排序,直接退出即可!


二、简易计算机的实现(switch语句的重温)!

 思路:

首先,简易计算机简而言之,即输入   两个数  和    运算操作符,而后输出结果。

那我们可能会想,使用if else 语句可以吗?即如果输出的为  ’ / ’,就做除法运算等等......

if else  代码如下:

#include<stdio.h>
int main()
{
    double a=0,b=0;
    char ch=0;
    while(scanf("%lf %c %lf",&a,&ch,&b)!=EOF)
    {
        if(ch=='+'||ch=='-'||ch=='*'||ch=='/')  //如果输入的是四则运算符号
        {
            if(ch=='+')

                printf("%.4lf%c%.4lf=%.4lf\n",a,ch,b,a+b);

            else if(ch=='-')

                    printf("%.4lf%c%.4lf=%.4lf\n",a,ch,b,a-b);

            else if(ch=='*')

                printf("%.4lf%c%.4lf=%.4lf\n",a,ch,b,a*b);
            else if(ch=='/')    //做除法时,分母不能为0
              {
                if(b==0.0)
                    printf("Wrong!Division by zero!\n");
                else
                    printf("%.4lf%c%.4lf=%.4lf\n",a,ch,b,a/b);
              }

        }

        else         //如果输入的不为四则运算符号

            printf("Invalid operation!\n");
    }
    return 0;
}

 那既然都是判断,有没有想过switch呢?

可以通过输入的不同运算符,来进入不同的入口,进行计算输出!! 

switch()代码如下:                                                                                                                                             

#include<stdio.h>

int main()
{
    double m=0;
    double n=0;
    char a=0;
    scanf("%lf %c %lf",&m,&a,&n);
    switch(a)
 {
        case '+':
    {     
        double b=m+n;
        printf("%.4lf%c%.4lf=%.4lf",m,a,n,b);
        break;
    }
        case '-':
    {
        double b=m-n;
        printf("%.4lf%c%.4lf=%.4lf",m,a,n,b);
                break;
    }
    
        case '*':
    {
        double b=m*n;
        printf("%.4lf%c%.4lf=%.4lf",m,a,n,b);
                break;
    }
        case '/':
    {

        double b=m/n;

          if(n==0.0)
          {
              printf("Wrong!Division by zero!");
          }
          else
          {
              printf("%.4lf%c%.4lf=%.4lf",m,a,n,b);
          }
                break;
    }
    default :
       printf("Invalid operation!");
       break;
    return 0;
  }
}

switch 语句必须遵循下面的规则:

  • switch 语句中的 expression 是一个常量表达式,必须是一个整型或枚举类型。       switch(sepression)
  • 在一个 switch 中可以有任意数量的 case 语句。每个 case 后跟一个要比较的值和一个冒号。
  • case 的 constant-expression 必须与 switch 中的变量具有相同的数据类型,且必须是一个常量或字面量。
  • 当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 break 语句为止。
  • 当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句后的下一行。
  • 不是每一个 case 都需要包含 break。如果 case 语句不包含 break,控制流将会 继续 后续的 case,直到遇到 break 为止。
  • 一个 switch 语句可以有一个可选的 default: ,出现在 switch 的结尾。default:可用于在上面所有 case 都不为真时执行一个任务。                                  你学会了吗??

 三、图案输出问题!!

对于图案输出问题,一定要把握它的规律!!即如何通过循环语句实现,或者控制循环次数。

话不多说,先看一个简单的!

 思路:

         输出一个直角三角形,输入一个整数n,就会输出一个由n行  *  组成的直角三角形,且第一行有一个* ,第二行有两个*  ........

 !! !   那么由此可见,假设输出n=4,那么就会输出一个四行,四列的直角三角形,且每行的个数 与处于第几行 的值 相等。

代码如下:

#include<stdio.h>
int main()
{
    int n=0;
    
    while(scanf("%d",&n)!=EOF)//针对多组输入的题目
    {
        for(int i=1;i<=n;i++)  //第一个for循环是,循环几行。
        {

            for(int j=1;j<=i;j++)//第二个for循环是一行循环几个
            {
                printf("* ");
            }
            printf("\n");
        }
    }
    return 0;
}

 所以,找到规律很重要,并且通过规律来控制它的循环次数!

接下来,看一个难一点的!

 题目链接:题目链接(自己也可以去试一试)

思路: 

首先图形是由空格和✳号构成,我们可以直观的看出,空格数为2的倍数,✳是由一开始,每次增加一。

      当输出n=2时,共输出5行,那我们就可以拆开来看

第一部分,第一个循环控制行,第二个循环控制输出!

for(int i=0;i<=n;i++) //输出n,来第一部分控制行数。输出三行!
        {

            for(int j=1;j<=2*n-2*i;j++)   //控制空格数,第一行输出四个,第二行两个,第三行0.
            {
                printf(" ");
            }
            for(int j=1;j<=i+1;j++)       //控制✳号数,第一行输出一个,第二行两个,第三行三个。
            {
                printf("*");
            }
            printf("\n");                //每输出完一行,需要换行。
        }

 重点在循环中的终止条件!(j<=2*n-2*i)。

第二部分,第一个循环控制行,第二个循环控制输出!

for(int i=1;i<=n;i++)   //只需输出两行(n行)

        {
            for(int j=1;j<=2*i;j++)   //第一行空格数为2,第二个空格数为4.
            {
                printf(" ");
            }

             for(int j=1;j<=n-i+1;j++) // 第一行星号数位2,第二行数为1.
             {
                 printf("*");
             }
             printf("\n");              //每输出一行,需要换行。
        }

同理可得:第一部分:输出行数:n+1.

                                     第二部分:输出行数 :n.

注意:在第一部分和第二部分中间衔接的时候,星号数是依次减小。

 总代码:

#include<stdio.h>
int main()
{
    int n=0;
    while(scanf("%d",&n)!=EOF)
    {


        for(int i=0;i<=n;i++)
        {
            for(int j=1;j<=2*n-2*i;j++)
            {
                printf(" ");
            }
            for(int j=1;j<=i+1;j++)
            {
                printf("*");
            }
            printf("\n");
        }



         for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=2*i;j++)
            {
                printf(" ");
            }
             for(int j=1;j<=n-i+1;j++)
             {
                 printf("*");
             }
             printf("\n");
        }


    }
    return 0;
}

 好好思考以后,肯定也有所收获了吧!  那就趁热打铁吧!

   菱形图案_牛客题霸_牛客网 (nowcoder.com)icon-default.png?t=M276https://www.nowcoder.com/practice/8b935f8ffe99445dbd42494febd13e45?tpId=107&tqId=33344&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3Fpage%3D2%26tpId%3D107%26type%3D107&difficulty=undefined&judgeStatus=undefined&tags=&title= (双击进入哦!)

总结

相信大家看完以后,也看懂了!

           那么这期的C语言入门刷题基础知识点就到这里啦!!

           是不是觉得不够,内容太少?

那么就期待下期我们再见吧!!记得三连哦,别到时候找不到俺!

猜你喜欢

转载自blog.csdn.net/ChaoFreeandeasy_/article/details/124135791