❤️学姐教你 10 道题搞定 c 语言❤️(推荐收藏)

Posted 英雄哪里出来

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了❤️学姐教你 10 道题搞定 c 语言❤️(推荐收藏)相关的知识,希望对你有一定的参考价值。

一、前言

  本文适合对 c c c 语言感兴趣的初学者,文字浅显易懂,没有太多晦涩的言语,也是作者的亲(瞎)身(编)经(乱)历(造),希望对刚入大学,想在程序方面有所建树的有志青年有所帮助。
  当然, c c c 语言大佬也可以当成是茶余饭后的调味剂前来消遣,作者在此不做阻止。

二、追忆前尘

  • 我刚进入大学的时候,那时候学 c c c 语言,全靠有一位学姐带我。
  • 可惜由于年代太过久远,她的样子我早已记不得了。
  • 咦?
  • 前面那位女子好像就是我的学姐!!!
  • 额!那个那个… 学姐你不要东张西望了,我在这里……
  • em……,可能这么多年过去不认识我了,不过,这不重要!
  • 那一年,她告诉我只要做完她的这 10 道题, c c c 语言就算入门了。
  • 于是我开始了我的切题生涯,不知不觉切到了 100 题。
  • 然后,我发现我爱上了切题,陆陆续续的切,当我切到 1000 题的时候,学姐毕业了,由于我沉迷切题,早就把她 抛之脑后 了。
  • 但是,依稀回想起当年她带我的情景,还是意犹未尽……
  • 当年的往事如泉涌般涌上心头,恍如隔世……
  • 此时,突然耳边传来她的声音……

三、初出茅庐

第一题

  • 当时的我是 零基础,也没有上过课,所以学姐说的第一个词我就已经懵逼了。
  • INOUT ??? OUTPUT ???

  • 于是,这就成了我有生以来做的第一个题:

【例题1】给定 A 和 B , 输出 A 和 B 的和。

  • 经过 两个小时 的研究,终于做出来了,代码长这样:
#include <stdio.h>                            // (1)
int main() {
    int a, b;
    while ( scanf("%d %d", &a, &b) != EOF) {  // (2)
        printf("%d\\n", a + b);                // (3)
    };
    return 0;
}
  • 1)stdio.h是最基本的头文件,需要用到的一些输入输出的函数都是在这里声明的,所以需要把它包含进来;
  • 2)scanf就是输入函数,因为计算机不知道你要输入的是数字还是字符串还是别的什么东西,所以需要规定输入的格式化类型,%d代表整数, %f代表小数,%s代表字符串等等;因为计算机不知道什么时候结束输入,所以还有个返回值来告诉你不需要再输入了,即如果返回 EOF,代表不会再有输入了。这里的EOF其实就是个数字,值为 -1;
  • 3)printf就是输出函数,这里就是把 a + b的值通过给定的格式输出出来;

  • 然后,她开始教我一些简单的语句,例如:分支,循环 等等。

第二题

  • 学姐突然说了一堆很奇怪的话,我感觉她在侮辱我!
  • 后来一问,才知道,原来这是第二道题。

【例题2】输入一个百分制的成绩 t t t,将其转换成对应的等级,具体转换规则如下:90 ~ 100为 A; 80 ~ 89为 B; 70 ~ 79为 C; 60 ~ 69为 D; 0 ~ 59为 E;在这里插入图片描述

  • 查了一下 c 语言课本,发现可以用 i f   e l s e if \\ else if else 来做,于是我就开始敲代码,两个小时过去后,代码长这样:
#include <stdio.h>
int main() {
    int v;
    while (scanf("%d", &v) != EOF) {
        if (v < 0 || v > 100) {
            printf("Score is error!\\n");   // (1)
        }
        else {
            if (v >= 0 && v <= 59) {
                printf("E\\n");             // (2)
            }
            else if (v == 100) {
                printf("A\\n");             // (3)
            }
            else{                          // (4)
                char c = 'D' - (v - 60) / 10;
                printf("%c\\n", c);
            }
        }
    }
    return 0;
}
  • 1)分数不在给定范围内;
  • 2)分数在 [ 0 , 59 ] [0,59] [0,59],直接输出 ‘E’;
  • 3)分数等于 100 100 100,直接输出 ‘A’;
  • 4)这时候,我发现 B C D 的范围和字符的关系呈线性,于是稍微玩了一点技巧,因为字符也是有运算的,'B' + 1 = 'C'以及 'C' + 1 = 'D',所以分数和等级的关系可以表示成:
  • l e v e l = D − v − 60 10 level = D - \\frac {v - 60} {10} level=D10v60
  • 通过这道题,我了解了 ASCII 码,你不了解就去百度吧,我那时还没有百度,全靠自己领悟(瞎编)的。

四、小试牛刀


  • 你想的没错,学姐应该要给我布置下一道题了 ……

第三题

  • 然而… …

  • 学姐尴尬的笑了笑,于是又给我布置了一个题:

  • 啊? 刚上大学,对这些都没什么概念,于是我就去一家一家酒店跑,并且计算走过的路程。
  • 我把方圆 5 公里的酒店都跑遍了。
  • 然后学姐告诉我,不是让我真的去找酒店,就是做这个题。
  • 我 TM 直呼神奇!
    在

【例题3】给定 n ( n ≤ 1000 ) n(n \\le 1000) n(n1000),然后给出 n n n 个整数坐标 ( x i , y i ) (x_i, y_i) (xi,yi),坐标范围 ( − 100 < x i , y i < 100 ) (-100 < x_i, y_i < 100) (100<xi,yi<100) 求距离学校最近的坐标的距离,精确到小数点后 3 位(假设 学校的位置在原点)。

  • 然后,又过了两个小时,我简直就是天才,两个小时就能做一题,一天 24 小时,也就是一天 12 题,365天就是快 4380 题,是的,当时的菊花还是菊花,当时的我也还比较天真。
  • 忘了说代码了,代码长这样:
#include <stdio.h>
#include <math.h>                            // (1)
const int maxd = 1e9;
int distSqr(int x, int y) {
	return x * x + y * y;
}
int main() {
	int n, x, y;
	while (scanf("%d", &n) != EOF) {
		int minD = maxd;
		for (int i = 0; i < n; ++i) {        // (2)
			scanf("%d %d", &x, &y);
			int d = distSqr(x, y);
			if (d < minD) 
				minD = d;                    
		}
		printf("%.3lf\\n", sqrt(minD + 0.0)); // (3)
	}
	return 0;
}
  • 1)计算距离需要用到开方,所以需要引用数学库math.h
  • 2)for(init; condition; action) c c c 中基础的循环遍历语句,init部分一般写一些变量初始化;condition是循环得以继续维持的条件判断;action一般是对循环变量进行改变,从而改变condition的真假。循环遍历输入,对输入的坐标选择距离平方最小的。
  • 3)由于开方函数比较耗时,不应该放在循环内,所以只需要最后利用sqrt函数进行一次取值。例如:sqrt(9.0)=3

第四题

【例题4】给定 n ( 2 ≤ n ≤ 1000 ) n(2 \\le n \\le 1000) n(2n1000),然后给出 n n n 个整数坐标 ( x i , y i ) (x_i, y_i) (xi,yi),坐标范围 ( − 100 < x i , y i < 100 ) (-100 < x_i, y_i < 100) (100<xi,yi<100),求任意两个坐标中距离最小的,精确到小数点后 3 位。

  • 这次我变聪明了,只用了一个小时就做出来了,我真是天才啊!小说都不敢这么写!
  • 代码长这样:
#include <stdio.h>
#include <math.h>

const int maxn = 1024;
const int maxd = 1e9;
int distSqr(int x, int y) {
	return x * x + y * y;
}
int x[maxn], y[maxn];
int main() {
	int n;
	while (scanf("%d", &n) != EOF) {
		int minD = maxd;
		for (int i = 0; i < n; ++i) {
			scanf("%d %d", &x[i], &y[i]);      // (1)
		}
		for(int i = 0; i < n; ++i) {           // (2)
			for(int j = i + 1; j < n; ++j) {
				int d = distSqr(x[i], y[i]);
				if (d < minD) 
					minD = d;
			}
		}
		printf("%.3lf\\n", sqrt(minD + 0.0));
	}
	return 0;
}
  • 1)由于要计算任意两点间的距离,所以需要把每个点事先存下来,于是引入了一种新的结构, c c c 语言中,我们称之为 ‘数组’ ,也就是数学意义上的 数列。下标从 0 开始,a[i]代表第 i+1个元素。
  • 2)两层循环,计算任意两点间的距离,然后取最小值。
  • 我觉得我这个代码很完美,但是学姐却不以为然。

第五题

  • 后来我翻了一下书,发现有一种更加好的结构,在 c c c 语言里面,它叫 结构体 struct

【例题5】给定 n ( 2 ≤ n ≤ 1000 ) n(2 \\le n \\le 1000) n(2n1000),然后给出 n n n 个整数坐标 ( x i , y i ) (x_i, y_i) (xi,yi),坐标范围 ( − 100 < x i , y i < 100 ) (-100 < x_i, y_i < 100) (100<xi,yi<100),求任意两个坐标间距离最小的,精确到小数点后 3 位(利用结构体存储坐标)。

于是代码可以进行如下修改:
  1)可以定义一个结构体叫 Point,然后把 x,y这两个变量放在这个结构体里;
  2)两个Point的距离可以定义结构体函数来实现;

  • 修改后的代码如下:
#include <stdio.h>
#include <math.h>

const int maxn = 1024;
const int maxd = 1e9;
int Sqr(int x) {
	return x * x;
}

struct Point {
	int x, y;
	void read() {
		scanf("%d %d", &x, &y);              // (1)
	}
	int distSqr(const Point& o) {            // (2)
		return Sqr(x - o.x) + Sqr(y - o.y);
	}
}P[maxn];

int main() {
	int n;
	while (scanf("%d", &n) != EOF) {
		int minD = maxd;
		for (int i = 0; i < n; ++i) {
			P[i].read();
		}
		for(int i = 0; i < n; ++i) {
			for(int j = i + 1; j < n; ++j) {
				int d = P[i].distSqr(P[j]);   // (3)
				if (d < minD) 
					minD = d;
			}
		}
		printf("%.3lf\\n", sqrt(minD + 0.0));
	}
	return 0;
}
  • 1)将输入的过程抽成 read函数,放在结构体中进行定义;
  • 2)将计算距离的过程抽成distSqr函数,放在结构体中进行定义;
  • 3)典型的结构体成员函数的调用;

当时的我,感觉自己已经是能闭上眼睛手撕十行代码的大神了。

五、初窥门径

  • 我傻了!排序是个啥啊??
  • 网上搜了下(哦,那时候还没网,聊爆了。。。)
  • 我猜 排序,可能是和 排球 差不多的东西吧。
  • 然后学姐说:

在这里插入图片描述

第六题

【例题6】给定 n (

以上是关于❤️学姐教你 10 道题搞定 c 语言❤️(推荐收藏)的主要内容,如果未能解决你的问题,请参考以下文章

今天清华学姐教你用 爬虫抓动态长文并用直接生成html报告

清华学姐教你如何在 Python 中编写注释和多行注释

清华学姐教你:Linux下查看日志用到的常用命令赶快学起来!

❤️学姐说她用 8 行代码写了 8 个算法(上)❤️(推荐收藏)

C语言超详讲解☀️指针是个什么针?(一次性搞定指针问题)

❤️三万字《C语言面试错题100例》❤️(建议收藏)