基础练习题之函数

前言

这些题目来自与一些刷题网站,以及c primer plus,继续练习

第一题

给你一个数,让他进行巴啦啦能量,沙鲁沙鲁,小魔仙大变身,如果进行变身的数不满足条件的话,就继续让他变身。。。直到满足条件为止。

巴啦啦能量,沙鲁沙鲁,小魔仙大变身:对于一个数,把他所有位上的数字进行加和,得到新的数。

如果这个数字是个位数的话,那么他就满足条件。

给一个整数数字n(1<=n<=1e9) 输出由n经过操作满足条件的数

1分析

哎呀其实思路很简单, int 类型的大小大概可以到20亿左右

而这里的n的大小只有10亿 只需使用int类型的整型即可

那它要一个整数的各位之和,当然如果大家从来没有做过这类题目可能要斟酌一下

但是我们一眼就看出来了 使用while循环 判断条件即为该数

限制条件就是对他除10, 循环内部对它求模可以得到它的个位数大小

一次进行就可以得到它的各位之和,然而它还可以大于10之后加一个判断这个题目就出来了

2代码实现

复制代码
#include <stdio.h>
int Ifbecome(int x)
{
    int flag=x;
    while(1)
    {
         int a=0;
         while(flag)
     {
       a+=flag%10;
       flag/=10;
     }
     if(a<10)
     return a;
     else
     flag=a;
    }
}

int main() {
    int a, b;
    while (scanf("%d", &a) != EOF) { 
printf("%d",Ifbecome(a));
    }
    return 0;
}

第二题

请统计某个给定范围[L, R]的所有整数中,数字2出现的次数

比如给定范围[2, 22],数字2在数2中出现了1次,在数12中出现1次,在数20中出现1次,在数21中出现1次,在数22中出现2次,所以数字2在该范围内一共出现了6次

输入共1行,为两个正整数L和R,之间用一个空格隔开。

输出共1行,表示数字2出现的次数。

1分析

这些题目还是很好的,用来打基础真的挺好

很明显和上个题目是有相似之处的 我们只要分别对范围内的数比较他们的各个位 数的大小与

2相判断即可 其实会上个题目 这个题目也会做

2,代码实现

复制代码
#include <stdio.h>
int Count(int x)
{
    int a=0;
    while(x)
    {
        if(2==x%10)
        a++;
        x/=10;
    }
    return a;
}
int main() {
    int a, b;
    while (scanf("%d%d", &a,&b) != EOF) { 
    int i;
    int j=0;
    for(i=a;i<=b;i++)
    {
    j+=Count(i);
    }
    printf("%d",j);
    }
    return 0;
}

第三题

牛牛很喜欢发短信,他所用的通讯公司的收费方法如下:

1.每条短信收费0.1元

2.每条短息的字数不超过60字,如果超过60字,将按照0.2元的价格收费。

牛牛这个月发了 n 条短信,请问牛牛一共要缴多少短信费

第一行输入一个正整数 n ,表示发送短信的条数,

第二行输入 n 个正整数,表示牛牛发送的 n 条短信中每条短信的字数

输出牛牛这个月要缴的短信费

1分析

这个题目太简单了,简单的说一下

首先判断字数,一个if就行 然后注意得用浮点型来输出其他没什么

2代码实现

复制代码
#include <stdio.h>
float Price(int x)
{
    if(x>60)
    {
        return 0.2;
    }
    else
    return 0.1;
}
int main() {
    int a, b;
    float c=0.0f;
    while (scanf("%d", &a) != EOF) {
      while(a)
      {
       scanf("%d",&b);
       c+=Price(b);
       a--;
      }
      printf("%.1f",c);
    }
    return 0;
}

第四题

牛牛刚刚学了素数的定义:素数值指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数

牛牛想知道在 [l,r] 范围内全部素数的和

输入两个正整数 l,r 表示闭区间范围 输出 [l,r] 范围内的素数的和

1分析怎么说素数的定义都告诉我们了 我们不就是让这个区间的数一直除以非1和非本身的数

只要不被整除,那么他就是素数

当然 我们可以有优化方案

就是说,在数学中只要一直除以它的算术平方根就行了

2代码实现

复制代码
#include <stdio.h>
#include<math.h>
int Iszhishu(int x)
{
    if(x==1)
    return 0;
    int i;
    for(i=2;i<=sqrt(x);i++)
    {
        if(x%i==0)
        return 0; 
    }
    return x;
}
int main() {
    int a, b;
    while (scanf("%d %d", &a, &b) != EOF) { 
    int i;
    int count=0;
    for(i=a;i<=b;i++)
    {
    count+=Iszhishu(i);
    }
   printf("%d",count);
    }
    return 0;
}

第五题

前面几个题目来自于牛客网,大家可以去那里刷题,现在来看看比较基础的

接下来看 c primer plus的题目

设计一个函数min(x,y),返回两个double类型值的较小值

基础但是,多练

直接代码实现吧

复制代码
#include<stdio.h>
double Min(double a,double b)
{
return a>b?b:a;

}
int main()
{
double a,b;
scanf("%lf %lf",&a,&b);
printf("%.2lf",Min(a,b));
return 0;
}

第六题

设计一个函数chline(ch,i,j)打印指定的字符i列j行

1分析这个题目很基础,没办法,题目是这样的,如果不会,建议你多多看书

2代码实现

复制代码
#include<stdio.h>
void chline(char ch, int a, int b)
{
	int i, j;
	for (i = 0; i < a; i++)
	{
		for (j = 0; j < b; j++)
		{
			printf("%c", ch);
		}
		printf("\n");
	}
}
int main()
{
	while (1)
	{
		char ch;
		int ch0;
		int a, b;
		printf("输入要打印的字符\n");
		scanf("%c", &ch);
		printf("输入要打印的行列\n");
		scanf("%d%d", &a, &b);
		chline(ch, a, b);
		while ((ch0 = getchar()) && ch0 != '\n');
	}
	return 0;
}

3细节之处在于我们的万能清除缓存区最后一行的while中

通过这个函数可以把所有的"\n"清除防止被scanf接收到

虽然简单但是细节

我们发现这本书上的代码实践性更高

第七题

计算调和平均数先求两数的倒数,再求两个倒数的平均值,最后就算结果的倒数

直接代码实现

复制代码
double Tiaohe(double x, double y)
{
	//return 1/((1/x+1/y)/2);这个结果没有化简
	return 2 / (1 / x + 1 / y);//化简后代码其实更高效
}
int main()
{
	double a, b;
	printf("请输入两个数\n");
	scanf("%lf %lf", &a, &b);
	double c=Tiaohe(a, b);
	printf("%.2lf", c);
	return 0;
}

值得注意的是,该调和平均数的算式可以化简,不要死算哦

第八题

编写一个函数,从标准输入中读取字符,直至遇到文件结尾程序得报告每个字符是否为字母

如果是还要报告字母在字母表的位置

再编写一个函数, 以一个字符为参数如果是字母返回一个数值位否则返回-1

没什么好说的代码

复制代码
int Ifzimu(char ch);
void Readchar();
int main()
{
	Readchar();

	return 0;
}
void Readchar()
{
	char ch;
	while ((scanf("%c", &ch))==1)
	{
		int a=Ifzimu(ch);
		if (a!=-1)
			printf("%d ", a);
	}
}
int Ifzimu(char ch)
{
	if (ch >= 'A' && ch <= 'Z')
	{
		return (int)(ch - 'A' + 1);
	}
	else if (ch >= 'a' && ch <= 'z')
		return (int)(ch - 'a' + 1);
	else
		return -1;
}

总结

今天的题目到此为止祝大家开心

相关推荐
SunnyByte9 小时前
C语言——贪吃蛇的实现
c语言·单链表·贪吃蛇
笨笨饿13 小时前
#79_NOP()嵌入式C语言中内联汇编宏的抽象封装模式研究
linux·c语言·网络·驱动开发·算法·硬件工程·个人开发
weixin_4217252613 小时前
C语言中volatile关键字怎么用C语言volatile在多线程中的作用
c语言·数据结构·运算符优先级·变量命名·volatile关键字
星河耀银海13 小时前
C语言与数据库交互:SQLite实战与数据持久化
c语言·数据库·sqlite·交互
05候补工程师15 小时前
【408 从零到一】线性表逻辑特征、存储结构对比与 C/C++ 动态内存分配避坑指南
c语言·开发语言·数据结构·c++·考研
傻瓜搬砖人15 小时前
第五章习题
c语言·谭浩强·绿皮书第三版
华清远见成都中心16 小时前
C 语言内存管理深度解析:malloc/free 与嵌入式堆栈分配策略
java·c语言·算法
努力努力再努力wz16 小时前
【MySQL 进阶系列】拒绝滥用root:从 mysql.user 到权限校验,带你彻底理解用户管理与授权机制!
android·c语言·开发语言·数据结构·数据库·c++·mysql
炸膛坦客16 小时前
嵌入式 - 数据结构与算法:(1-4)数据结构 - 单链表的两个核心缺点(引入循环/双向链表)
c语言·数据结构·链表
上弦月-编程18 小时前
高效编程利器:转移表技术解析
c语言·开发语言·数据结构·算法·排序算法