【C语言基础】那些必会的编程练习题-第二部分

简介: 笔记

第一题 求实数的绝对值


题目

求实数的绝对值。


 输入 输入数据有多组,每组占一行,每行包含一个实数。


 输出 对于每组输入数据,输出它的绝对值,要求每组数据输出一行,结果保留两位小数。


思路

这道题目就是考察了我们绝对值求法,也就是判断,将数分为两部分,需要变号和不需要变号的两部分,对于需要变号的也就是小于0的数字,我们变号后输出即可,对于不需要变号的,我们就进行直接输出。


在这里题目要求我们输入数据有多组,所以这里我们就要运用EOF的知识,而这部分我们在上期已经讲过了,所以在这就不细说,直接沾上链接,如果有需要的就去看一下吧:


【C语言基础】那些必会的编程练习题-第一部分_红颜如霜凝结了过往的博客-CSDN博客


AC

#include <stdio.h>
int main(){
  double number;
  while((scanf("%lf",&number)!=EOF)){
  if(number<0)
    number=-number;
  printf("%.2lf\n",number);
  }
  return 0;
}

运行结果:


40.png


第二题 计算球体积


题目

求实数的绝对值。


 输入 输入数据有多组,每组占一行,每行包含一个实数。


 输出 对于每组输入数据,输出它的绝对值,要求每组数据输出一行,结果保留两位小数。


思路

第二题考察了一个球的体积公式,也就是 V=(4/3)πR³ ;我们在C语言中使用这个公式去计算即可,当然这次在代码中我们提到了一个 #define, 那就为大家简单介绍一下这个吧。


#define 叫做宏定义命令,它也是C语言预处理命令的一种。所谓宏定义,就是用一个标识符来表示一个字符串,如果在后面的代码中出现了该标识符,那么就全部替换成指定的字符串。


使用规则:


#define  宏名  字符串

#表示这是一条预处理命令,所有的预处理命令都以 # 开头。宏名是标识符的一种,命名规则和变量相同。字符串可以是数字、表达式、if 语句、函数等。


同理我们也可以用此讲PI和3.1415926去联立在一起,当我们调用PI的时候就是调用3.1415926了。


AC

#include <stdio.h>
#define PI 3.1415927
int main(){
  double r;
  double result;
  while((scanf("%lf",&r))!=EOF){
  result=4.0*PI*r*r*r/3.0;
  printf("%.3lf\n",result);
  }
  return 0;
}

运行结果

42.png



第三题 两点距离


题目

输入两点坐标(X1,Y1),(X2,Y2)(0<=x1,x2,y1,y2<=1000),计算 并输出两点间的距离。


 输入 第一行输入一个整数 n(0<n<=1000),表示有 n 组测试数据;随后每组占一行,由 4 个实数组成,分别表示 x1,y1,x2,y2,数据之间用空格隔开。


 输出 对于每组输入数据,输出一行,结果保留两位小数。


思路

这道题目就是考察了我们勾股定理了,我们可以通过两个点的坐标,去求得直角三角形两个直角边的长度,然后我们就可以使用勾股定理( c^2 = a^2 + b^2) 去求得斜边的平方,这时我们可以去调用sqrt()函数去求得其平方根。


sqrt()函数我们也在之前提到过,这里也就不细说


AC

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


运行结果:

42.png

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

第四题 ASCII 码排序


题目

输入三个字符(可以重复)后,按各字符的 ASCII 码从小到大的顺 序输出这三个字符。


 输入 第一行输入一个数 N,表示有 N 组测试数据。后面的 N 行输入多组数据,每组输入数 据都是占一行,有三个字符组成,之间无空格。


 输出 对于每组输入数据,输出一行,字符中间用一个空格分开。


思路

这道题目是让我们按ASCII 码排序,那么我们先了解一下ASCII 码。


ASCII(发音:,American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语,而其扩展版本延伸美国标准信息交换码则可以部分支持其他西欧语言,并等同于国际标准ISO/IEC 646。


ASCII 码表:

43.png



这里我们字符的比较也就是比较其ASCII 码,所以我们就将其当成一个平时的数字去进行比较就行,不要想那么多,小的就先输出,大的后输出。这样就可以了。

AC

#include <stdio.h>
int main()
{
  char a;
  char b;
  char c;
  char temp;
  int T;
  scanf("%d",&T);
  getchar();
  while(T--){
  scanf("%c%c%c",&a,&b,&c); //输入
  getchar();
  if(a>b){  //判断ab大小
    temp=a; //交换
    a=b;
    b=temp;
  }
  if(a>c){
    temp=a;
    a=c;
    c=temp;
  }
  if(b>c){
    temp=b;
    b=c;
    c=temp;
  }
  printf("%c %c %c\n",a,b,c);
  }
  return 0;
}

运行结果:45.png




第五题 数值统计


题目

统计给定的 n 个数中,负数、零和正数的个数。


 输入 输入数据有多组,每组占一行,每行的第一个数是整数 n(n<100),表示需要统计 的数值的个数,然后是 n 个实数;如果 n=0,则表示输入结束,该行不做处理。


 输出 对于每组输入数据,输出一行 a,b 和 c,分别表示给定的数据中负数、零和正数的个 数。


思路

这道题目就是将输入的数去进行一个分类就可以了,先设出三个变量,用来表示其负数 零 正数的个数,之后我们每个数都进行判断,如果是哪个变量,就对应++即可,这样我们最后输出三个变量就可以得到我们最后的结果了。


AC

#include <stdio.h>
int main()
{
  int n;
  int i;
  int a;
  int b;
  int c;
  double number;
  while(1)
  {
  a=0;
  b=0;
  c=0;
  scanf("%d",&n);
  if(n==0)
    break;
  for(i=0;i<n;i++){
    scanf("%lf",&number);
    if(number<0)  //负数
    a++;
    else if(number==0)  //0
    b++;
    else  //正数
    c++;
  }
  printf("%d %d %d\n",a,b,c);
  }
  return 0;
}

按0直接退出

46.png


正常输入相关个数:  

47.png



好的,到了这里我们这期的习题就到这里了,希望这些题目可以帮助到你,加油。


相关文章
|
1月前
|
NoSQL C语言 索引
十二个C语言新手编程时常犯的错误及解决方式
C语言初学者常遇错误包括语法错误、未初始化变量、数组越界、指针错误、函数声明与定义不匹配、忘记包含头文件、格式化字符串错误、忘记返回值、内存泄漏、逻辑错误、字符串未正确终止及递归无退出条件。解决方法涉及仔细检查代码、初始化变量、确保索引有效、正确使用指针与格式化字符串、包含必要头文件、使用调试工具跟踪逻辑、避免内存泄漏及确保递归有基准情况。利用调试器、编写注释及查阅资料也有助于提高编程效率。避免这些错误可使代码更稳定、高效。
140 12
|
2月前
|
存储 算法 Linux
C语言 多进程编程(一)进程创建
本文详细介绍了Linux系统中的进程管理。首先,文章解释了进程的概念及其特点,强调了进程作为操作系统中独立可调度实体的重要性。文章还深入讲解了Linux下的进程管理,包括如何获取进程ID、进程地址空间、虚拟地址与物理地址的区别,以及进程状态管理和优先级设置等内容。此外,还介绍了常用进程管理命令如`ps`、`top`、`pstree`和`kill`的使用方法。最后,文章讨论了进程的创建、退出和等待机制,并展示了如何通过`fork()`、`exec`家族函数以及`wait()`和`waitpid()`函数来管理和控制进程。此外,还介绍了守护进程的创建方法。
C语言 多进程编程(一)进程创建
|
2月前
|
Linux C语言
C语言 多进程编程(三)信号处理方式和自定义处理函数
本文详细介绍了Linux系统中进程间通信的关键机制——信号。首先解释了信号作为一种异步通知机制的特点及其主要来源,接着列举了常见的信号类型及其定义。文章进一步探讨了信号的处理流程和Linux中处理信号的方式,包括忽略信号、捕捉信号以及执行默认操作。此外,通过具体示例演示了如何创建子进程并通过信号进行控制。最后,讲解了如何通过`signal`函数自定义信号处理函数,并提供了完整的示例代码,展示了父子进程之间通过信号进行通信的过程。
|
2月前
|
Linux C语言
C语言 多进程编程(四)定时器信号和子进程退出信号
本文详细介绍了Linux系统中的定时器信号及其相关函数。首先,文章解释了`SIGALRM`信号的作用及应用场景,包括计时器、超时重试和定时任务等。接着介绍了`alarm()`函数,展示了如何设置定时器以及其局限性。随后探讨了`setitimer()`函数,比较了它与`alarm()`的不同之处,包括定时器类型、精度和支持的定时器数量等方面。最后,文章讲解了子进程退出时如何利用`SIGCHLD`信号,提供了示例代码展示如何处理子进程退出信号,避免僵尸进程问题。
|
2月前
|
消息中间件 Unix Linux
C语言 多进程编程(五)消息队列
本文介绍了Linux系统中多进程通信之消息队列的使用方法。首先通过`ftok()`函数生成消息队列的唯一ID,然后使用`msgget()`创建消息队列,并通过`msgctl()`进行操作,如删除队列。接着,通过`msgsnd()`函数发送消息到消息队列,使用`msgrcv()`函数从队列中接收消息。文章提供了详细的函数原型、参数说明及示例代码,帮助读者理解和应用消息队列进行进程间通信。
|
2月前
|
缓存 Linux C语言
C语言 多进程编程(六)共享内存
本文介绍了Linux系统下的多进程通信机制——共享内存的使用方法。首先详细讲解了如何通过`shmget()`函数创建共享内存,并提供了示例代码。接着介绍了如何利用`shmctl()`函数删除共享内存。随后,文章解释了共享内存映射的概念及其实现方法,包括使用`shmat()`函数进行映射以及使用`shmdt()`函数解除映射,并给出了相应的示例代码。最后,展示了如何在共享内存中读写数据的具体操作流程。
|
2月前
|
消息中间件 Unix Linux
C语言 多进程编程(二)管道
本文详细介绍了Linux下的进程间通信(IPC),重点讨论了管道通信机制。首先,文章概述了进程间通信的基本概念及重要性,并列举了几种常见的IPC方式。接着深入探讨了管道通信,包括无名管道(匿名管道)和有名管道(命名管道)。无名管道主要用于父子进程间的单向通信,有名管道则可用于任意进程间的通信。文中提供了丰富的示例代码,展示了如何使用`pipe()`和`mkfifo()`函数创建管道,并通过实例演示了如何利用管道进行进程间的消息传递。此外,还分析了管道的特点、优缺点以及如何通过`errno`判断管道是否存在,帮助读者更好地理解和应用管道通信技术。
|
2月前
|
存储 Ubuntu Linux
C语言 多线程编程(1) 初识线程和条件变量
本文档详细介绍了多线程的概念、相关命令及线程的操作方法。首先解释了线程的定义及其与进程的关系,接着对比了线程与进程的区别。随后介绍了如何在 Linux 系统中使用 `pidstat`、`top` 和 `ps` 命令查看线程信息。文档还探讨了多进程和多线程模式各自的优缺点及适用场景,并详细讲解了如何使用 POSIX 线程库创建、退出、等待和取消线程。此外,还介绍了线程分离的概念和方法,并提供了多个示例代码帮助理解。最后,深入探讨了线程间的通讯机制、互斥锁和条件变量的使用,通过具体示例展示了如何实现生产者与消费者的同步模型。
|
2月前
|
Linux C语言
C语言 多进程编程(七)信号量
本文档详细介绍了进程间通信中的信号量机制。首先解释了资源竞争、临界资源和临界区的概念,并重点阐述了信号量如何解决这些问题。信号量作为一种协调共享资源访问的机制,包括互斥和同步两方面。文档还详细描述了无名信号量的初始化、等待、释放及销毁等操作,并提供了相应的 C 语言示例代码。此外,还介绍了如何创建信号量集合、初始化信号量以及信号量的操作方法。最后,通过实际示例展示了信号量在进程互斥和同步中的应用,包括如何使用信号量避免资源竞争,并实现了父子进程间的同步输出。附带的 `sem.h` 和 `sem.c` 文件提供了信号量操作的具体实现。
|
3月前
|
传感器 数据采集 API
C语言与硬件编程:GPIO操作
C语言与硬件编程:GPIO操作
110 0