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

news2024/11/14 3:33:21

各位CSDN的uu们你们好呀,今天小雅兰的内容还是做几道题噢,好好复习一下之前的知识点,现在,就让我们开始复习吧

牛客网在线编程_编程学习|练习题_数据结构|系统设计题库

倒置字符串_牛客题霸_牛客网


BC40 竞选社长

BC41 你是天才吗?

BC42 完美成绩

BC43 及格分数

BC44 判断整数奇偶性

BC45 最高分数

BC46 判断是元音还是辅音

BC47 判断是不是字母

BC48 字母大小写转换

BC49 判断两个数的大小关系

BC50 计算单位阶跃函数

BC51 三角形判断

BC52 衡量人体胖瘦程度

BC53 计算一元二次方程

BC54 获得月份天数

OR62 倒置字符串


 

 

此代码用到了gets这个库函数 

#include<stdio.h>
int main()
{
	char buf[100] = { 0 };
	//输入
	gets(buf);
	int count_a = 0;
	int count_b = 0;
	int i = 0;
	while (buf[i] != '0')
	{
		if (buf[i] == 'A')
		{
			count_a++;
		}
		else if (buf[i] = 'B')
		{
			count_b++;
		}
		i++;
	}
	if (count_a > count_b)
	{
		printf("A\n");
	}
	else if (count_a < count_b)
	{
		printf("B\n");
	}
	else if(count_a==count_b)
	{
		printf("E\n");
	}
	return 0;
}

这段代码还可以再改进一下,可不可以不定义两个变量呢?这当然也是可以的。

#include<stdio.h>
int main()
{
	char arr[100]= { 0 };
	gets(arr);
	int i = 0 ;
	int flag = 0 ;
	while( arr[i] != '0')
	{
		if(arr[i] =='A')
		{
			flag++;
		}
		else if(arr[i] =='B')
		{
			flag--;
		}
        i++;
	}
	if (flag > 0)
	{
		printf("A");
	}
	else if (flag < 0)
	{
		printf("B");
	}
	else
	{
		printf("E");
	}
    return 0;
}

那么只定义一个变量的方法我们也掌握了,那么,还有没有其他的写法呢?比如不用gets,这当然也是可以的。

下面这段代码使用了getchar

 

getchar拓展_认真学习的小雅兰.的博客-CSDN博客

#include <stdio.h>

int main()
{
	char arr[100] = { 0 };
	int ch = 0 ;
	int flag = 0 ;
	//如果getchar获取了
    while (((ch= getchar()) != '0') && ch!= EOF)
	{
		if(ch=='A')
		{
			flag++;
		}
		else if(ch=='B')
		{
			flag--;
		}
	}
	if (flag > 0)
	{
		printf("A");
	}
	else if (flag < 0)
	{
		printf("B");
	}
	else
	{
		printf("E");
	}
	return 0;
}

1. 本题有很多解法。

2. 主要就是读取输入数据的问题要解决好,输入有2个结束条件(遇到读取结束EOF,或者'0')。

3. 剩余的工作就是统计个数后,然后根据情况按照格式输出。

 

#include <stdio.h>
int main() 
{
    int a=0;
    while(scanf("%d",&a)!=EOF)
    {
       if(a>=140)
       {
          printf("Genius\n");
       }
       else
       {
          printf("不是天才\n");
       }
    }
    return 0;
}

这个代码还有另外一种写法:

#include<stdio.h>
int main()
{
	int n = 0;
	//这种写法是因为scanf读取失败返回EOF,EOF是-1,所以按位取反后的结果是0,0为假,可以让循环停止。
	while (~scanf("%d", &n))
	{
		if (n >= 140)
		{
			printf("Genius");
		}
		else
		{
			printf("不是天才\n");
		}
	}
	return 0;
}

关于对组输入的题目,一定要处理好多组数据的输入问题,然后考虑循环如何结束。

这里写到了一个操作符—— ~ 

 操作符的详细知识可以看小雅兰的博客噢

操作符——“C”_认真学习的小雅兰.的博客-CSDN博客_十进制数10可以表示为

整型提升+算术转换——“C”_认真学习的小雅兰.的博客-CSDN博客

#include <stdio.h>

int main()
{
	int score = 0;
	while (scanf("%d", &score) != EOF)
	{
		if (score >= 90 && score <= 100)
			printf("Perfect");
	}
	return 0;
}

1. 多组输入。

2. 数学中的 90的写法,在C语言中直接写是有bug的。

 

#include <stdio.h>

int main()
{
	int score = 0;
	while (scanf("%d", &score) != EOF)
	{
		if (score >= 60)
			printf("Pass\n");
		else

			printf("Fail\n");
	}
	return 0;
}

#include <stdio.h>

int main() 
{
    int i=0;
    while(scanf("%d",&i)!=EOF)
    {
        if(i%2==0)
        printf("Even\n");
        else if(i%2!=0)
        printf("Odd\n");
    }
    return 0;
}

 这几道题目都是类似的。

 

#include<stdio.h>
int main()
{
	int n1 = 0;
	int n2 = 0;
	int n3 = 0;
	while (scanf("%d %d %d", &n1, &n2, &n3) != EOF)
	{
		int max = n1 > n2 ? n1 : n2;
		max = max > n3 ? max : n3;
		printf("%d\n", max);
	}
	return 0;
}

另一种写法:

#include <stdio.h>

int main()
{
	int i = 0;
	int score[3] = { 0 };
	while (scanf("%d %d %d", &score[0], &score[1], &score[2]) != EOF)
	{
		int max = 0;//每一组测试,max都恢复到0

		int i = 0;
		for (i = 0; i < 3; i++)
		{
			if (score[i] > max)
				max = score[i];
		}
		printf("%d\n", max);
	}

	return 0;
}

1. 多组输入

2. 每组输入接受3个数字,求出最大值,因为成绩不能是负数,所以假设max期初是0.

 

#include <stdio.h>

int main()
{
	char ch = 0;
	//存放元音字母的数组
	char arr[] = "AEIOUaeiou";
	//输入
	while ((ch = getchar()) != EOF)
	{
		//判断
		int i = 0;
		for (i = 0; i < 10; i++)
		{
			if (ch == arr[i])
			{
				printf("Vowel\n");
				break;
			}
		}
		if (i == 10)
			printf("Consonant\n");
		getchar();//去除每个字符后的\n

	}
	return 0;
}

当然,这个代码还可以用库函数——strchr

 

#include<stdio.h>
#include<string.h>
int main()
{
	int ch = 0;
	//存放元音字母的数组
	char vowel[] = "AEIOUaeiou";
	//输入
	while (ch = getchar() != EOF)
	{
		//判断
		//strchr是用来判断ch是否在字符串vowel中出现
		//如果出现了,则返回在vowel字符串中的地址
		//如果没出现,则返回NULL
		if (strchr(vowel, ch))
		{
			printf("Vowel\n");
		}
		else
		{
			printf("Constantly\n");
		}
		getchar();//处理\n
	}
	return 0;
}

另一种写法:

#include <stdio.h>

int main()
{
	char ch = 0;
	char arr[] = "AEIOUaeiou";
	//在%c的前面写一个空格会消化掉前面所有的空白字符,然后读取一个字符
	while (scanf(" %c", &ch) != EOF)
	{
		int i = 0;
		for (i = 0; i < 10; i++)
		{
			if (ch == arr[i])
			{
				printf("Vowel\n");
				break;
			}
		}
		if (i == 10)
			printf("Consonant\n");
	}
	return 0;
}

另一种写法:

#include<stdio.h>
int main()
{
	char ch = 0;
	char arr[] = "AEIOUaeiou";
	//在%c的后边发给一个'\n',其实在输入时候就会消化掉这个\n字符

	//不会为下次留下空白字符的隐患

	while (scanf("%c\n", &ch) != EOF)
	{
		int i = 0;
		for (i = 0; i < 10; i++)
		{
			if (ch == arr[i])
			{
				printf("Vowel\n");
				break;
			}
		}
		if (i == 10)
			printf("Consonant\n");
	}
	return 0;
}

#include <stdio.h>

int main()
{
	int ch = 0;
	while ((ch = getchar()) != EOF)
	{
		if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z'))
		{
			printf("%c is an alphabet.\n", ch);
		}
		else
		{
			printf("%c is not an alphabet.\n", ch);
		}
		//清理掉\n
		getchar();
	}
	return 0;
}

当然,也可以用库函数,专门用来判断是不是字母——isalpha

#include <stdio.h>

int main()
{
	int ch = 0;
	while ((ch = getchar()) != EOF)
	{
		if (isalpha(ch))
		{
			printf("%c is an alphabet.\n", ch);
		}
		else
		{
			printf("%c is not an alphabet.\n", ch);
		}
		//清理掉\n
		getchar();
	}
	return 0;
}

 

#include <stdio.h>
#include<ctype.h>
int main()
{
	int ch = 0;
	while ((ch = getchar()) != EOF)
	{
		if (isalpha(ch))
		{
			printf("%c is an alphabet.\n", ch);
		}
		else
		{
			printf("%c is not an alphabet.\n", ch);
		}
		//清理掉\n
		getchar();
	}
	return 0;
}

 

 

 

#include<stdio.h>
int main()
{
	char ch = 0;
	while (scanf("%c", &ch) != EOF)
	{
		if (ch >= 'A' && ch <= 'Z')
		{
			printf("%c\n", ch + 32);
		}
		else if (ch >= 'a' && ch <= 'z')
		{
			printf("%c\n",ch - 32);
		}
	}
	return 0;
}

当然,还有其他的写法,这里可以用到我们的库函数——islower,是专门用来判断小写字母的。

toupper——将小写字母转换为大写字母

tolower——将大写字母转换为小写字母

isupper——专门用来判断大写字母

 

 

 

 

 

#include<stdio.h>
#include<ctype.h>
int main()
{
	int ch = 0;
	//多组输入

	while ((ch = getchar()) != EOF)
	{
		if (islower(ch))
		{
			printf("%c\n", toupper(ch));
		}
		else
		{
			printf("%c\n", tolower(ch));
		}
		//处理'\n'

		getchar();
	}
	return 0;
}

 

#include <stdio.h>

int main()
{
    int i=0;
    int j=0;
    while(scanf("%d %d",&i,&j)!=EOF)
    {
        if(i>j)
        {
            printf("%d>%d",i,j);
        }
        else if(i==j)
        {
            printf("%d=%d",i,j);
        }
        else if(i<j)
        {
            printf("%d<%d",i,j);
        }
        printf("\n");

    }
    return 0;


}

 

#include<stdio.h>

int main()
{
	int t = 0;
	while (scanf("%d", &t) != EOF)
	{
		if (t > 0)
		{
			printf("%d\n", 1);
		}
		else if (t == 0)
		{
			printf("%.1f\n", 0.5f);
		}
		else
		{
			printf("%d\n", 0);
		}
	}
	return 0;
}

#include <stdio.h>

int main() 
{
    int a=0;
    int b=0;
    int c=0;
    while(scanf("%d %d %d",&a,&b,&c)!=EOF)
    {
        if(a+b>c&&a+c>b&&b+c>a&&a-b<c&&a-c<b&&b-c<a)
        {
            if(a==b&&b==c&&a==c)
            {
                printf("Equilateral triangle!\n");
            }
            else if((a==b&&b!=c&&a!=c)||(a==c&&a!=b&&c!=b)||(b==c&&b!=a&&c!=a))
            {
                printf("Isosceles triangle!\n");
            }
            else 
            {
                printf("Ordinary triangle!\n");
            }
            
        }
        else 
        {
            printf("Not a triangle!\n");
        }
    }
    return 0;
}
       

 这里就是搞清楚三角形的判断规则,并去一一穷举就行了,因为只有三条边。

#include<stdio.h>
int main()
{
	float weight = 0.0;
	float hight = 0.0;
	while (scanf("%f %f", &weight, &hight) != EOF)
	{
		float bmi = weight / (hight * hight / 100 / 100);
		if (bmi < 18.5)
		{
			printf("Underweight\n");
		}
		else if (bmi >= 18.5 && bmi <= 23.9)
		{
			printf("Normal\n");
		}
		else if (bmi > 23.9 && bmi <= 27.9)
		{
			printf("Overweight\n");
		}
		else
		{
			printf("Obese\n");
		}
	}
	return 0;
}

1. 多组输入

2. 浮点数除法要保证除号的两端至少有一个浮点数

 

 

#include <stdio.h>
#include <math.h>

int main()
{
	float a = 0.0;
	float b = 0.0;
	float c = 0.0;
	while (scanf("%f %f %f", &a, &b, &c) != EOF)
	{
		if (a != 0)
		{
			float disc = b * b - 4 * a * c;
			if (disc > 0.0)
			{
				//有两个不相等的实根
				printf("x1=%.2f;x2=%.2f\n",
					(-b - sqrt(disc)) / (2 * a),
					(-b + sqrt(disc)) / (2 * a)
				);
			}
			else if (disc < 0.0)
			{
				//有两个虚根
				printf("x1=%.2f-%.2fi;x2=%.2f+%.2fi\n",
					(-b) / (2 * a), sqrt(-disc) / (2 * a),
					(-b) / (2 * a), sqrt(-disc) / (2 * a));
			}
			else
			{
				//有两个相等的实根
				printf("x1=x2=%.2f\n", (-b) / (2 * a));
			}
		}
		else
		{
			printf("Not quadratic equation\n");
		}
	}
	return 0;
}

1. 多组输入

2. 根据不同的限制条件给出相应的计算结果

3. 小数点数后位数有限制

 

#include <stdio.h>

int main()
{
	int y = 0;
	int m = 0;
	int days[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
	while (scanf("%d%d", &y, &m) != EOF)
	{
		int day = days[m - 1];
		if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0))
		{
			if (m == 2)
				day += 1;
		}
		printf("%d\n", day);
	}
	return 0;
}

1. 多组输入

2. 判断闰年,如果是闰年,2月多一天,其他都正常。

 

#include<stdio.h>
#include<string.h>
#include<assert.h>
void reverse(char* left, char* right)
{
	assert(left != NULL);
	assert(right != NULL);
	while (left < right)
	{
		char* tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}
int main()
{
	char arr[100] = { 0 };
	gets(arr);//输入
	int len = strlen(arr);//求字符串的长度
	//1.逆序整个字符串
	reverse(arr, arr + len - 1);
	//2.逆序每个单词
	char* cur = arr;
	while (*cur)
	{
		//找一个单词
		char* start = cur;
		while (*cur != ' ' && *cur != '\0')
		{
			cur++;
			//遇到空格,说明走到一个单词的最后面
			//遇到\0,说明已经走到字符串的最后面
			//这两种情况下都需要cur++
		}
		reverse(start, cur - 1);
		if (*cur == ' ')
		{
			cur++;
			//跳过空格
		}
	}
	printf("%s\n", arr);
	return 0;
}

好啦,小雅兰今天的复习内容就到这里啦,以后的内容必定更加精彩!!!

 

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

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

相关文章

vitepress 就这几步操作,博客就搭好啦?

Ⅰ、什么是vitepress &#x1f48e; vitepress 使用场景 简单的说 &#xff0c;只要 会用 markdown 语法&#xff0c;就能构建自己的 「博客、笔记、使用文档」等系统 &#xff1b; ✨ vitepress 优势 优势介绍傻瓜式操作只需要配置 菜单 和 对应的 markdown 就能实现博客、笔…

OKR 与 KPI有何异同?各部门OKR实例【小bu】

OKR 与 KPI&#xff0c;如何本土化是关键 近期公司计划对去年实施的绩效考核方案进行优化&#xff0c;公司以往采用 KPI 绩效考核方式&#xff0c;产生了一些争议。一方面&#xff0c;执行期间部分部门一度忽略指标设置的真实目的&#xff0c;导致出现短视思维和行为&#xff1…

Vision Transformer学习了什么-WHAT DO VISION TRANSFORMERS LEARN? A VISUAL EXPLORATION

WHAT DO VISION TRANSFORMERS LEARN? A VISUAL EXPLORATION 文章地址 代码地址 摘要 视觉转换器( Vision Transformers&#xff0c;ViTs )正在迅速成为计算机视觉的事实上的架构&#xff0c;但我们对它们为什么工作和学习什么知之甚少。虽然现有研究对卷积神经网络的机制进…

LabVIEW控制DO通道输出一个精确定时的数字波形

LabVIEW控制DO通道输出一个精确定时的数字波形如何使用数据采集板卡的DO通道输出一个精确定时的数字波形&#xff1f;解答:产生一个数字波形首先需要创建一个布尔数组&#xff0c;把波形序列信息放到该布尔数组中&#xff0c;然后通过一个布尔数组至数字转换vi来产生数字波形。…

【C++】仿函数、lambda表达式、包装器

1.仿函数 仿函数是什么&#xff1f;仿函数就是类中的成员函数&#xff0c;这个成员函数可以让对象模仿函数调用的行为。 函数调用的行为&#xff1a;函数名(函数参数)C中可以让类实现&#xff1a;函数名(函数参数)调用函数 自己写一个仿函数&#xff1a; 重载()运算符 cla…

chatgpt的原理 第四部分

五、ChatGPT 终于说到了主角&#xff0c;能看到这里的&#xff0c;可以关注一下 JioNLP 公众号吗&#xff1f;我写的也够累的。 ChatGPT 模型上基本上和之前 GPT-3 都没有太大变化&#xff0c;主要变化的是训练策略变了&#xff0c;用上了强化学习。 强化学习 几年前&#xf…

【Linux驱动开发100问】如何编译Linux内核?

&#x1f947;今日学习目标&#xff1a;如何编译Linux内核&#xff1f; &#x1f935;‍♂️ 创作者&#xff1a;JamesBin ⏰预计时间&#xff1a;10分钟 &#x1f389;个人主页&#xff1a;嵌入式悦翔园个人主页 &#x1f341;专栏介绍&#xff1a;Linux驱动开发100问 如何编译…

【论文笔记】Deep 3D-to-2D Watermarking == Google ==CVPR‘2022

Deep 3D-to-2D Watermarking: Embedding Messages in 3D Meshes and Extracting Them from 2D Renderings 本文工作&#xff1a;提出了一个端到端的框架来从2D渲染图像中提取水印信息&#xff0c;且对 不同光照和相机位姿 的渲染结果具有鲁棒性。 1.1 本文工作概述 核心贡献&…

metaRTC新增纯C版JSON支持

概述 JSON 是轻量级的文本数据交换格式&#xff0c;它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集&#xff0c;采用完全独立于编程语言的文本格式来存储和表示数据。 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 metaRTC新版本新增了纯C版的JSON支…

操作系统权限提升(十五)之绕过UAC提权-基于白名单DLL劫持绕过UAC提权

系列文章 操作系统权限提升(十二)之绕过UAC提权-Windows UAC概述 操作系统权限提升(十三)之绕过UAC提权-MSF和CS绕过UAC提权 操作系统权限提升(十四)之绕过UAC提权-基于白名单AutoElevate绕过UAC提权 注&#xff1a;阅读本编文章前&#xff0c;请先阅读系列文章&#xff0c;以…

pytorch学习日记之图片的简单卷积、池化

导入图片并转化为张量 import torch import torch.nn as nn import matplotlib.pyplot as plt import numpy as np from PIL import Image mymi Image.open("pic/123.png") # 读取图像转化为灰度图片转化为numpy数组 myimgray np.array(mymi.convert("L"…

GNURadio RTL-SDR之FM接收

环境配置与准备&#xff1a; PC操作系统: Windows10 64位系统。RTL-SDR: 包括射频主板和天线。Radioconda&#xff1a;GNURadio windows方案之一&#xff0c;安装radioconda-2023.02.24-Windows-x86_64&#xff0c;官方下载和操作指导&#xff1a; InstallingGR - GNU Radioht…

spring框架--全面详解(学习笔记)

目录 1.Spring是什么 2.Spring 框架特点 3.Spring体系结构 4.Spring开发环境搭建 5.spring中IOC和DI 6.Spring中bean的生命周期 7.Spring Bean作用域 8.spring注解开发 9.Spring框架中AOP&#xff08;Aspect Oriented Programming&#xff09; 10.AOP 实现分类 11.A…

并发编程之死锁问题介绍

一、本文概览 死锁问题在并发编程中是一个非常致命的问题&#xff0c;问题一旦产生&#xff0c;只能通过重启机器、修改代码来修复问题&#xff0c;下面我们通过一小段文章内容介绍下死锁以及如何死锁的预防 二、什么是死锁&#xff1f; 在介绍死锁之前&#xff0c;先来明确下什…

对象分配策略

对象创建后,究竟何去何从,对象在堆中又会经历哪些过程,本篇就会详细解释对象创建后直到对象被回收的整个过程。之前博主已经写过Minor GC、Major GC、Full GC的区别&#xff0c;而本篇也主要根据这几个GC开展。 对象回收过程流程如下图所示&#xff1a; 正常的对象生存过程&a…

NetSuite Saved Search中When Ordered By Field 与 Keep Dense_Rank辨析

今朝的题目是一个隐藏的宝藏话题&#xff0c;Saved Search中我们极少用的一个功能--When Ordered By Field和Keep Dense_Rank。 假如你碰到一个需求&#xff0c;要求是&#xff1a;“在销售历史中按照客户别&#xff0c;取最早交易日期的销售金额&#xff0c;以识别VIP客户”。…

QML Animation动画详解

1.Animation简介 Animation类型提供了四个属性&#xff1a; alwaysRunToEnd&#xff1a;该属性接收布尔类型的参数。该属性保存动画是否运行到完成才停止。当loops属性被设置时&#xff0c;这个属性是最有用的&#xff0c;因为动画将正常播放结束&#xff0c;但不会重新启动。…

PMP值得考吗?

第一&#xff0c;PMP的价值体现 1、PMP是管理岗位必考证书。 多数企业会选择优先录用持PMP证书的管理人才&#xff0c;PMP成为管理岗位的必考证书。PMP在很多外企和国内中大型企业非常受重视&#xff0c;中石油、中海油、华为等等都会给内部员工做培训。 这些机构对项目管理…

超简单 华为OD机试用Python实现 -【无向图染色问题 or 红黑图】(2023-Q1 新题)

华为OD机试题 华为OD机试300题大纲无向图染色问题 or 红黑图题目描述输入描述输出描述说明示例一输入输出示例二输入输出Python 代码实现华为OD机试300题大纲 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:blog…

Js高级API

Decorator装饰器 针对属性 / 方法的装饰器 // decorator 外部可以包装一个函数&#xff0c;函数可以带参数function Decorator (type) {/*** 这里是真正的decorator* description: 装饰的对象的描述对象* target:装饰的属性所述类的原型&#xff0c;不是实例后的类。如果装饰…