当前位置: 首页 > news >正文

C语言基础:函数练习题

 问题:计算两点之间的距离

#include <stdio.h>
#include <math.h>double ptp(double x1, double y1, double x2, double y2) 
{return sqrt(pow (x2 - x1, 2) + pow (y2 - y1, 2));
}int main() 
{double x1, y1, x2, y2;printf("输入第一个点的坐标 (x1 y1): ");scanf("%lf %lf", &x1, &y1);printf("输入第二个点的坐标 (x2 y2): ");scanf("%lf %lf", &x2, &y2);printf("距离: %.2lf\n", ptp(x1, y1, x2, y2));return 0;
}

在使用这两个函数前,请先保证添加引用头文件:

#include<math.h>

计算平方根函数:sqrt

  • 写法

double sqrt(double x);
  • 注意:sqrt 的返回值和参数 x 都为 "double" 类型。

  • 用处:计算并返回参数 x 的非负平方根。

  • 对于负数:在大多数C实现中,sqrt 函数将返回NaN 。对于不同的编译器可能会有不同的结果。

幂运算函数:pow

  • 写法

double pow(double a, double b);
  • 功能:计算并返回 a 的 b 次幂。

  • 注意:a 不能为 0 ;当 b 是0时,无论 a 的值是多少(除了0),pow 函数都返回1.0。

问题:计算输入数字中各个位数的数字平方和

#include <stdio.h>
#include <math.h>int ss(int num);int main() 
{int num;printf("输入整数: ");scanf("%d", &num);printf("各位平方和: %d\n", ss(num));return 0;
}int ss(int num) 
{int sum = 0;num = abs(num);  // 处理负数,其中 abs( x )意思是求 x 的绝对值 while (num > 0) {sum += pow ((num % 10), 2);num /= 10;}return sum;
}

 

 绝对值函数:abs

  • 写法

int a = abs(num);
  • 注意:使用abs函数前,必须包含标准库头文件 <stdlib.h>
#include <stdlib.h> // 包含abs函数所需的头文件
  • 用法:在C语言中,abs函数用于计算整数的绝对值,即返回输入值的非负形式。绝对值在数学上表示为∣x∣,例如∣−5∣ = 5 。返回复数的模。

    printf(abs(1 + 2j));// 相当于根号下 1 的平方 + 2 的平方

  • 注意:输入必须是 int 类型。

问题:设计一个函数,用来查找一个字符串中某个字符的位置

#include <stdio.h>int find(char str[], char c);int main() 
{char str[50], c;printf("输入: ");scanf("%s", str);// 清除缓冲区 // while(getchar() != '\n');printf("输入要查找的: ");scanf(" %c", &c);int p = find(str, c);printf("位置是: %d\n", p + 1);return 0;
}int find(char str[], char c)
{for (int i = 0; str[i] != '\0'; i++) {if (str[i] == c){return i;}}return -1;// 无 
}

 

 清除缓冲区的方法:
1. while ((c = getchar()) != '\n' && c != EOF);(通常使用)

  1. 借助  getchar() 函数读取一个字符,然后把该字符赋值给变量c

  2. 对读取到的字符   进行检查,看它是否既不是换行符 \n,也不是文件结束符EOF

  3. 一旦条件成立,就会继续执行循环体。不过,此循环体为空(只有一个分号),这意味着程序会不断读取字符,却不做任何处理。

  4. 当读取到换行符  \n 或者文件结束符   EOF 时,循环就会终止。

void clearBuffer();int main() {int num;char str[50];printf("Enter a number: ");scanf("%d", &num);clearBuffer(); // 清除缓冲区中剩余的字符(如换行符)printf("Enter a string: ");fgets(str, sizeof(str), stdin); // 安全读取字符串// ...
}void clearBuffer() {int c;while ((c = getchar()) != '\n' && c != EOF);
}

2. scanf("%*[^\n]"); && scanf("%*c");(不推荐)

scanf("%d", &num);
scanf("%*[^\n]"); // 丢弃所有非换行符
scanf("%*c");     // 丢弃换行符

3. 使用 fgets() 替代 scanf()(推荐做法)

char input[100];
fgets(input, sizeof(input), stdin); // 读取整行内容,包括换行符
// 移除换行符(如果存在)
size_t len = strlen(input);
if (len > 0 && input[len-1] == '\n') {input[len-1] = '\0';
}

4.在 % 前添加一个空格:scanf(" %c", &c);

  • 当 scanf 读取字符( %c )时,不会自动跳过空白字符。例如:

scanf(" %c", &c);  // 直接读取输入缓冲区的下一个字符,包括空格、换行符
  • 如果用户在输入时按了回车键(产生换行符 \n),这个换行符会留在输入缓冲区中。当下次调用 scanf("%c", &c) 时,它会直接读取这个换行符,而不是等待用户输入新字符。

  • 在格式字符串中添加空格(" %c")后,scanf 会先跳过所有空白字符,直到遇到一个非空白字符。

  • 例如,用户输入 123\n 后,程序执行多次 scanf(" %c", &c) 会依次读取 '1''2''3',而不会读取换行符 '\n'

问题:设计一个函数,把一个整型数字转成对应的字符串格式

#include <stdio.h>void intToString(int num, char str[]);int main()
{int num;char str[20];printf("输入整数: ");scanf("%d", &num);intToString(num, str);printf("转换后的字符串: %s\n", str);return 0;
}void intToString(int num, char str[])
{// sprintf 的功能是将各种类型的数据格式化为字符串,并存储到一个字符数组中。sprintf(str, "%d", num);	// int sprintf(char *str, const char *format, ...);char str[80];
}

 

格式化输出函数:sprintf

  • 说明sprintf 是 C 语言标准库中的一个格式化输出函数,用于将格式化的数据写入字符串(而不是打印到屏幕)。它的原型定义在 <stdio.h> 中,用法类似于 printf,但输出结果存储在字符数组中。

  • 写法

int sprintf(char *str, const char *format, ...);
  • 参数

    • str:目标字符串缓冲区,用于存储格式化后的结果。

    • format:格式化字符串,与 printf 的格式相同(如 "%d %s")。

    • ...:可变参数,根据 format 中的占位符提供对应的值。

//	sprintf(str, "%c", 'A');// 输出字符 A
//	sprintf(str, "%d", 123);// 输出十进制整数 123
//	sprintf(str, "%x", 255);// 输出十六进制整数 ff
//	sprintf(str, "%f", 3.14);// 输出浮点数 3.140000
//	sprintf(str, "%s", "Hello");// 输出字符串 Hello
//	sprintf(str, "%10d", 123);// 输出宽度为 10 的十进制整数,右对齐,空位用空格填充:       123
//	sprintf(str, "%-10d", 123);// 输出宽度为 10 的十进制整数,左对齐,空位用空格填充:123       
//	sprintf(str, "%010d", 123);// 输出宽度为 10 的十进制整数,右对齐,空位用 0 填充:0000000123
//	sprintf(str, "%+d", 123);// 输出带正负号的十进制整数:+123
//	sprintf(str, "%.3d", 123);// 输出至少 3 位的十进制整数,不足则用 0 填充:123
//	sprintf(str, "%.3d", 12);// 输出至少 3 位的十进制整数,不足则用 0 填充:012
//	sprintf(str, "%.3f", 3.14);// 输出保留 3 位小数的浮点数:3.140
//	sprintf(str, "%.3s", "Hello");// 输出最多 3 个字符的字符串:Hel
//	sprintf(str, "%ld", 123456789L);// 输出长整型数:123456789
//	sprintf(str, "%Lf", 3.1415926535897932383832795L);// 输出长双精度型数:3.141593

http://www.dtcms.com/a/291632.html

相关文章:

  • 【洛谷】用两个数组实现静态单链表、静态双向链表,排队顺序
  • C#初学知识点总结
  • 假发行业数字化突围,外贸ERP重构外协管理引擎,助力效率飞跃
  • 智联智造:国内新能源汽车品牌AGV小车无线控制系统创新实践
  • 面试题:sql题一
  • 前端项目启动后,只有localhost地址,没有ip地址
  • vs2017 c++ 使用sqlite3数据库
  • Java 邂逅 WebSocket:解锁实时通信的无限可能​
  • Flutter基础(前端教程①⑦-Column竖直-Row水平-Warp包裹-Stack堆叠)
  • 【计算机网络 篇】TCP基本认识和TCP三次握手相关问题
  • ArKTS: DAL,Model,BLL,Interface,Factory using SQLite
  • docker-desktop启动失败
  • 【电影剖析】千钧一发
  • 从 “能用“ 到 “好用“:中小制造企业数字化转型中的 IT 系统优化管理策略
  • 【openbmc6】entity-manager
  • C# 转换(is和as运算符)
  • 【人工智能99问】transformer的编码器和解码器是如何协同工作的?(15/99)
  • 【面经】实习经历
  • Thread 类
  • Java注解家族--`@ResponseBody`
  • 2025杭电多校赛(2)1006 半
  • 微信二维码扫描登录流程详解
  • Pytorch版本、安装和检验
  • 简单讲解HTTPS如何保证安全性和可靠性
  • 网安学习NO.15
  • 树链剖分-苹果树
  • TPS61194PWPRQ1适用于汽车照明低 EMI、高性能 4 通道 LED 驱动器TPS61194
  • Day07_网络编程20250721_大项目
  • sqli-labs靶场通关笔记:第46-53关 order by注入
  • 一文详解REST风格