C语言刷题(2)——“C”

news2024/12/23 1:08:28

各位CSDN的uu们你们好呀,今天小雅兰来复习一下之前所学过的内容噢,复习的方式,那当然是刷题啦,现在,就让我们进入C语言的世界吧

当然,题目还是来源于牛客网

完完全全零基础

编程语言初学训练营_在线编程+题解_牛客题霸_牛客网


BC10 成绩输入输出

BC20 kiki算数

BC21 浮点数的个位数字

BC22 你能活多少秒

BC23 时间转换

BC24 总成绩和平均分计算

BC25 计算体重指数

BC26 计算三角形的周长和面积

BC27 计算球体的体积

BC30 KiKi和酸奶

BC31 发布信息

BC32 输出学生信息

BC33 计算平均成绩

BC34 进制A+B

BC37 网购

BC38 变种水仙花

BC39 争夺前五名


其实上次复习的时候,我们也做过这个题目,当时我们是这么来写的:

#include <stdio.h>
 
int main()
{
    int score1=60;
    int score2=80;
    int score3=90;
    scanf("%d %d %d",&score1,&score2,&score3);
    printf("score1=%d,score2=%d,score3=%d",score1,score2,score3);
    return 0;
}

 仔细想一想,这样写的效率是非常低的,如果有五十科成绩呢,难道输入五十次打印五十次吗?这显然是不现实的,那么,就应该用循环的方法。

#include<stdio.h>
int main()
{
	int score[3] = { 0 };
	//0 1 2
	int i = 0;
	for (i = 0; i < 3; i++)
	{
		scanf("%d", &score[i]);
	}
	printf("score1=%d,score2=%d,score3=%d\n", score[0], score[1], score[2]);
	return 0;
}

 

#include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int sum = (a % 100 + b % 100) % 100;
	printf("%d\n", sum);
	return 0;
}

也可以这样写:

#include <stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int c = (a + b) % 100;
	printf("%d\n", c);
	return 0;
}

 

#include<stdio.h>
int main()
{
	double d = 0.0;
	scanf("%lf", &d);
	int n = (int)d;
	printf("%d\n", n % 10);
	return 0;
}

 

#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	long long second = age * 3.156e7;
	printf("%lld\n", second);
	return 0;
}

#include<stdio.h>
int main()
{
	int seconds = 0;
	scanf("%d", &seconds);
	int h = 0;//小时
	int m = 0;//分钟
	int s = 0;//秒
	//计算
	h = seconds / 60 / 60;
	m = seconds / 60 % 60;
	s = seconds % 60;
	printf("%d %d %d", h, m, s);
	return 0;
}

 计算好对应的数字,按照格式打印就行。

#include<stdio.h>
int main()
{
	double score[3] = { 0 };
	scanf("%lf %lf %lf", &score[0], &score[1], &score[2]);
	double sum = score[0] + score[1] + score[2];
	double avg = sum / 3.0;
	printf(".2lf .2lf\n", sum, avg);
	return 0;
}

 另一种写法:

#include<stdio.h>
int main()
{
	double score = 0.0;
	double sum = 0.0;
	double avg = 0.0;
	int i = 0;
	for (i = 0; i < 3; i++)
	{
		scanf("%lf", &score);
		sum += score;
	}
	avg = sum / 3.0;
	printf("%.2lf %.2lf\n", sum, avg);
	return 0;
}

1. 本题在接收数据的同时就可以计算分数的总和,不一定非要等数据全部接收完毕。

2. 按照格式打印就行。

#include<stdio.h>
int main()
{
	int weight = 0;
	int high = 0;
	double BMI = 0;
	scanf("%d %d", &weight, &high);
	//计算BMI
	BMI = weight / ((high / 100) * (high / 100));
	printf("%.2lf\n", BMI);
	return 0;
}

 要得到浮点数,要进行浮点数除法,这里就得保证 / 两端的操作数至少有一个数是浮点数。

 在做这道题目的过程中,我们需要求三角形的面积,但是这道题目根本没有说它是一个什么三角形,那么这个面积该如何求呢?这就要用到海伦公式

海伦公式又译作希伦公式、海龙公式、希罗公式、海伦-秦九韶公式。它是利用三角形的三条边的边长直接求三角形面积的公式。表达式为:S=√p(p-a)(p-b)(p-c),它的特点是形式漂亮,便于记忆。
相传这个公式最早是由古希腊数学家阿基米德得出的,而因为这个公式最早出现在海伦的著作《测地术》中,所以被称为海伦公式。中国秦九韶也得出了类似的公式,称三斜求积术。

C语言提供了一个库函数,专门用来开平发,为sqrt

 

 

#include<stdio.h>
#include<math.h>
int main()
{
	double a = 0.0;
	double b = 0.0;
	double c = 0.0;
	double circumference = 0.0;
	double area = 0.0;
	scanf("%lf %lf %lf", &a, &b, &c);
	circumference = a + b + c;
	double p = circumference / 2;
	area = sqrt(p * (p - a) * (p - b) * (p - c));
	printf("circumference=%.2lf area=%.2lf\n", circumference, area);
	return 0;
}

 

#include<stdio.h>
int main()
{
	double r = 0.0;//半径
	double v = 0.0;//体积
	double pi = 3.1415926;
	scanf("%lf", &r);
	v = 4.0 / 3 * pi * r * r * r;
	printf("%.3lf\n", v);
	return 0;
}

注意,输入输出,照着公式写代码就行。

这个题目,如果使用 float 来求解,答案的精度是不够的,所以试错后,使用double类型合适。

#include<stdio.h>
int main()
{
	int n = 0;//给的酸奶瓶数
	int h = 0;//喝一瓶酸奶的时间
	int m = 0;//总共时间
	while (scanf("%d %d %d", &n, &h, &m) != EOF)
	{
		if (m % h > 0)
		{
			printf("%d\n", n - m / h - 1);
		}
		else
		{
			printf("%d\n", n - m / h);
		}
	}
	return 0;
}

1. 注意多组输入

2. 如果h分钟喝一瓶酸奶,那么m分钟喝汽水的瓶数就是h/m瓶,但是如果m%h有余数,就说明又打开了一瓶,只是没来得及喝完,那么未打开的就少一瓶。

#include <stdio.h>

int main()
{
    printf("I lost my cellphone!\n");
    return 0;
}

#include <stdio.h>

int main()
{
    printf("Name   Age   Gender\n");
    printf("---------------------\n");
    printf("Jack   18     man\n");
    return 0;
}

 

#include <stdio.h>

int main()
{
    int arr[5]={0};
    int i=0;
    int sum=0;
    float average=0.0;
    for(i=0;i<5;i++)
    {
       scanf("%d ",&arr[i]);
       sum+=arr[i];
    }
    average=sum/5.0;
    printf("%.1f ",average);
    return 0;


}

在获取输入数据的同时,计算成绩总和,然后求出平均值,按照格式输出就行。

#include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%x %o", &a, &b);
	int sum = a + b;
	printf("%d\n", sum);
	return 0;
}

%x是十六进制的数据格式

%o是八进制的数据格式

 1. 首先要理解十进制、十六进制、八进制只是一种数据的表示形式,不是数据的存储形式。

 2. 不同格式的数据的输出在C语言中有不同的格式指定,比如:%x是十六进制格式,%o就是八进制格式。

 3. 不同进制的数据存放都整形变量中都是整形值,直接计算就行,计算交给计算机。

#include<stdio.h>
int main()
{
	double price = 0.0;//价格
	int month = 0;
	int day = 0;
	int flag = 0;//是否有优惠券
	double cut = 1.0;//折扣
	double last = 0.0;
	scanf("%lf %d %d %d", &price, &month, &day, &flag);
	if (month == 11 && day == 11)
	{
		cut = 0.7;
		if (flag == 1)
		{
			last = price * cut - 50;
		}
		else
		{
			last = price * cut;
		}
	}
	else if (month == 12 && day == 12)
	{
		cut = 0.8;
		if (flag == 1)
		{
			last = price * cut - 50;
		}
		else
		{
			last = price * cut;
		}
	}
	if (last < 0.0)
	{
		printf("0.00");
	}
	else
	{
		printf("%.2lf\n", last);
	}
	return 0;
}

但是这个代码不是很好,有点代码冗余

#include <stdio.h>
int main()
{
    float price = 0.0;
    int m = 0;
    int d = 0;
    int flag = 0;
    scanf("%f %d %d %d", &price, &m, &d, &flag);
    if (m == 11 && d == 11)
    {
        price *= 0.7;
        if (flag == 1)
            price -= 50;
    }
    else if (m == 12 && d == 12)
    {
        price *= 0.8;
        if (flag == 1)
            price -= 50;
    }
    if (price < 0.0)
        price = 0.0;
    printf("%.2f\n", price);
    return 0;
}

还有一种写法,也是可以的

#include <stdio.h>

int main()
{
	float price = 0.0;
	int m = 0 ;
	int d = 0 ;
	int flag = 0 ;
	float cut = 0 ;
	scanf("%f %d %d %d",&price,&m,&d,&flag);
	if(m==11&&d==11)
	{
	    cut=0.7;
	}
	else if(m == 12&&d==12)
	{
		cut=0.8;
	}
	price=price* cut- flag* 50.0;
	if(price<0.0)
	    price=0.0;
	printf("%.2f\n", price);
	return 0;
}

1. 本地理解好题目意思,然后计算机就可以

2. 注意抵扣完后价格小于0,只能按照0计算

3. 按照格式输出

 

 

#include <stdio.h>
int main()
{
    int i = 0;
    for(i=9999;i<=99999;i++)
    {
        int a=i/10000;
        int a1 = i%10000;
        int b=i/1000;
        int b1 = i%1000;
        int c=i/100;
        int c1 =i %100;
        int d = i/10;
        int d1=i%10;
        if((a*a1)+(b*b1)+(c*c1)+(d*d1)==i)
        {
            printf("%d ",i);
        }
    }
    return 0;
}

另外一种方法:

#include<stdio.h>
int main()
{
	int i = 0;
	for (i = 10000; i <= 99999; i++)
	{
		//判断i是否为Lily Number
		int j = 0;
		int sum = 0;
		for (j = 10; j <= 10000 ; j++)
		{
			sum += (i / j) * (i % j);
		}
		if (sum == i)
		{
			printf("%d ", i);
		}
	}
	return 0;
}

分析题目后发现,lily数求和的每一项都是对同一个数(10/100/1000...)的取模或者整除取商。

这样的话,产生10,100,1000,10000 这些数字,分别对被判断的数字取模或者取商,然后乘起来,再计算和,再判断就行。

冒泡排序的思想是:两两相邻的元素进行比较,并且有可能的话,需要交换。小雅兰写过这个专题噢 。

冒泡排序——“C”_认真学习的小雅兰.的博客-CSDN博客

#include <stdio.h>
int main()
{
	int n = 0;
	int arr[40] = { 0 };
	scanf("%d", &n);
	int i = 0;
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	//排序
	//自己实现冒泡排序
	for (i = 0; i < n - 1; i++)
	{
		//一趟冒泡排序要进行多少对元素的比较
		int j = 0;
		for (j = 0; j < n - 1 - i; j++)
		{
			if (arr[i] > arr[i + 1])
			{
				int tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
			}
		}
	}
	for (i = n-1 ; i >= n - 5; i--)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

当然,此题目还可以用到一个库函数——qsort

 

#include <stdio.h>

int cmp_int(const void* e1, const void*e2)
{
    return *(int*)e1 - *(int*)e2;
}

int main()
{
    int n = 0;
    int score[40] = {0};
    scanf("%d", &n);
    int i = 0;
    for(i=0; i<n; i++)
   {
        scanf("%d", &score[i]);
   }
    //对所有数字排序

    int j = 0;
    //使用库函数排序
    qsort(score, n, 4, cmp_int);
    for(i=0; i<5; i++)
    {
        printf("%d ", score[--n]);
    }
    return 0;
}

好啦,小雅兰今天的复习内容就到这里啦,以后还会继续复习C语言噢

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/372243.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OP-TEE使用过程记录

1 项目概述 1.1项目需求 为确保用户的数据的安全&#xff0c;ARM公司提出了trustzone技术&#xff0c;个人将trustzone理解为cortex的虚拟化技术。在不增加硬件的情况下&#xff0c;使用trustzone技术达到硬件加密的效果。 1.2重点概念简要介绍 1.2.1 TrustZone机制&#x…

电子科技大学数据库与软件工程三

适用于网工和物联网专业 目录 一、实验目的 二、实验内容 三、实验软件 四、实验步骤及数据记录 1.子查询 2. 伪列 3.数据库对象 4. 块、存储过程和触发器 五、实验结论及思考题 实验结论&#xff1a; 思考题&#xff1a; 六、总结及心得体会 七、对本实验过程及方…

【华为OD机试模拟题】用 C++ 实现 - 关联子串(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 获得完美走位(2023.Q1) 文章目录 最近更新的博客使用说明关联子串题目输入输出示例一输入输出说明示例一输入输出Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华…

Spring的Bean的生命周期,Bean的装配和注入

Spring容器启动获得BeanDefinition对象中有一个scope 属性。该属性控制着bean对象的作用域。本章节介绍Bean的作用域及生命周期&#xff0c;了解bean是怎么来的又怎么没的。 一、Bean的作用域 在Bean容器启动会读取bean的xml配置文件&#xff0c;然后将xml中每个bean元素分别转…

Bean作用域和生命周期

目录 Bean作用域的例子 作用域定义 Bean的六种作用域 设置作用域 Spring的执行过程和Bean的生命周期 Spring的主要执行流程 Bean的生命周期 在上篇博客中我们使用Spring存储和获取Bean,因此Bean是Spring中最重要的资源,今天这篇博客就深入了解Bean对象 Bean作用域的例子 …

redis(8)有序集合Zset

有序集合Zset Redis 有序集合 zset 与普通集合 set 非常相似&#xff0c;是一个没有重复元素的字符串集合。 不同之处是有序集合的每个成员都关联了一个评分(score)&#xff0c;这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的&#xf…

如何在Linux中实现进程间通信

致前行路上的人&#xff1a; 要努力&#xff0c;但不要着急&#xff0c;繁花锦簇&#xff0c;硕果累累都需要过程&#xff01; 目录 1.进程间通信介绍 1.1进程间通信的目的 1.2进程间通信发展 1.3进程间通信分类 1.4进程间通信的本质 2.管道 2.1什么是管道 2.2管道与进程的关系…

华为OD机试题,用 Java 解【玩牌高手】问题

最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…

智能算法实现PID智能车控制系统

智能算法实现PID智能车控制系统摘要关键词第一章绪论1.1智能车概述1.2智能PID研究现状1.3本文工作第二章 PID控制简介第三章 内模PID简介3.1 内模PID控制第四章内模智能PID智能车控制系统设计4.1 系统设计4.2内模控制原理第五章 系统仿真及结果分析5.1 系统仿真分析5.2 控制效果…

前端资源浏览器渲染原理

浏览器的渲染页面过程 HTML解析过程 一般情况下服务器会给浏览器返回 xx.html 文件 解析html 其实就是 Dom 树的构建过程 我们可以根据以下html 结构 来简单的分析出 html 的解析过程 解析CSS 规则树 在解析的过程中&#xff0c;如果遇到CSS的link元素&#xff0c;那么会由浏览…

分享 7 个有用的 JavaScript 库,也许你会用的上

使用这7个库&#xff0c;加速你的项目开发当我们可以通过使用库轻松实现相同的结果时&#xff0c;为什么还要编写自定义功能&#xff1f;开发人员最好的朋友和救星就是这些第三方库。我相信一个好的项目会利用一些可用的最佳库。本系列就是帮助前端开发者整理一些相关的优秀的J…

一文了解互联网中的UI设计师

&#xff08;点击即可收听&#xff09;一文了解UI设计师UI设计师是什么岗位,以及它的职责所在是什么,初入职场,今天带你一起来了解一下宏观上:设计师微观上: 上游对接产品经理,根据产品经理产出的PRD(也就是产品文档手册),以及产品原型,设计产品的UI界面,产出设计稿(如:蓝湖,Sk…

vite:常见的配置

最近在捣鼓一下vite&#xff0c;因为自己一直在使用react&#xff0c;就选择vite、react来体验一下vite。 使用最简单的方法创建一个应用&#xff1a;yarn create vite&#xff0c;然后选择react框架。 vite默认配置是使用了defineConfig工具函数&#xff1a; import { defi…

TCP协议原理二

文章目录四、滑动窗口二、流量窗口三、拥塞控制四、滑动窗口 前面我们学习了 确认应答&#xff0c;超时重传&#xff0c;连接管理&#xff0c;这些机制都为我们TCP的可靠性提供了保证&#xff0c;当然在保证TCP的可靠性的同时&#xff0c;传输效率也受到了一定的影响&#xff…

[创业之路-56] :职场真相:越便宜的员工其实越贵

引言&#xff1a;创业公司由于资金的限制&#xff0c;喜欢招聘经验不多、价格便宜的员工&#xff0c;殊不知&#xff0c;放在宏观的视角看&#xff0c;越发发现&#xff0c;越便宜的员工其实越贵&#xff0c;虽然他们能加班、好学习、听话&#xff0c;但创业公司不是大学&#…

【华为OD机试模拟题】用 C++ 实现 - 剩余可用字符集 or @分割可用字符集(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 获得完美走位(2023.Q1) 文章目录 最近更新的博客使用说明剩余可用字符集 or @分割可用字符集题目输入输出示例一输入输出说明Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才…

LLVM高级架构介绍

LLVM 为什么要开一个LLVM的新坑呢&#xff1f; 我从智能穿戴转行到芯片软件行业&#xff0c;从事编译器开发&#xff0c;不过是AI编译器。不过基本的传统编译器还是绕不过去啊&#xff0c;所以开始学习LLVM&#xff0c;后面开始学习TVM&#xff0c;MLIR。 LLVM GitHub地址 L…

vue-知识点总结

历史 2015年 10月27 1.0.0 Evangelion 新福音战士2016年 10月1日 2.0.0 Ghost in the Shell 攻壳机动队2019年 2月 2.62020年 9月18日 3.0.0 One Piece(海贼王)2021年 8月10日 3.2.0 .sync where 父向子传递props, 需要双向绑定的时候(子组件想更新这个值) how <one-comp…

vscode配置drawio绘制流程图

目录 vscode配置drwaio drawio使用 添加元素 调整元素 连接元素 添加公式 图像与表格 组合元素 保存以及导出 最近课程设计需要画流程框图&#xff0c;所以在网上找找绘制流程图的软件。然后我选择了这个drawio&#xff0c;无他&#xff0c;只是因为用vscode插件就…

同步和异步promise

进程和线程进程&#xff08;厂房&#xff09;&#xff1a;程序的运行环境线程&#xff08;工人&#xff09;&#xff1a;进行运算的东西同步和异步同步&#xff1a;一件事干完才去干下一件事&#xff0c;前面的代码不执行&#xff0c;后面的代码也不执行。同步的代码可能会出现…