c语言编程题(函数)

server/2024/11/14 15:22:16/

1编写函数将一个仅包含整数(可能为负)的字符串转换为对应的整数

方法一使用标准库函数 atoi

atoi 函数是C语言标准库中的一个函数,用于将字符串转换为整数。

代码:


#include <stdio.h>
#include <stdlib.h> // 包含 atoi 函数的头文件int main() {const char* str = "12345"; // 示例字符串int num = atoi(str); // 使用 atoi 将字符串转换为整数printf("转换后的整数: %d\n", num);return 0;
}
方法2:手动实现字符串到整数的转换
#include <stdio.h>
#include <ctype.h> // 包含 isdigit 函数的头文件int strToInt(const char *str) {int result = 0;int sign = 1; // 默认符号为正int i = 0;// 处理负号if (str[i] == '-') {sign = -1;i++;}// 遍历字符串中的每个字符while (str[i] != '\0') {// 确保字符是数字if (isdigit(str[i])) {// 计算当前位的值result = result * 10 + (str[i] - '0');} else {// 如果遇到非数字字符,返回错误值(例如0)return 0;}i++;}// 返回带符号的结果return sign * result;
}int main() {const char *str = "-12345"; // 示例字符串int num = strToInt(str); // 调用手动实现的函数printf("转换后的整数: %d\n", num);return 0;
}

2编写一个能比较字符串大小的函数,将两个字符串中第一个不相同字符的ASCII码值之差作为返回值

代码:

#include <stdio.h>// 比较两个字符串大小,返回第一个不相同字符的ASCII码值之差
int compareStrings(const char *str1, const char *str2) {int i = 0;// 遍历两个字符串,直到其中一个字符串结束或找到不相同的字符while (str1[i] != '\0' && str2[i] != '\0') {if (str1[i] != str2[i]) {// 找到不相同的字符,返回它们的ASCII码值之差return str1[i] - str2[i];}i++;}// 如果两个字符串长度不同,返回长度差return str1[i] - str2[i];
}int main() {const char *str1 = "apple";const char *str2 = "apples";int result = compareStrings(str1, str2);if (result == 0) {printf("两个字符串相等。\n");} else if (result > 0) {printf("第一个字符串大于第二个字符串,差值为: %d\n", result);} else {printf("第一个字符串小于第二个字符串,差值为: %d\n", result);}return 0;
}

3编写程序,从键盘输入10个整数,用函数实现将其中最大数与最小数的位置对 换,输出调整后的数组

代码:

#include <stdio.h>// 函数声明
void swapMaxMin(int arr[], int size);int main() {int arr[10];// 从键盘输入10个整数printf("请输入10个整数:\n");for (int i = 0; i < 10; i++) {scanf("%d", &arr[i]);}// 调用函数交换最大数与最小数的位置swapMaxMin(arr, 10);// 输出调整后的数组printf("调整后的数组:\n");for (int i = 0; i < 10; i++) {printf("%d ", arr[i]);}printf("\n");return 0;
}// 函数定义:交换数组中最大数与最小数的位置
void swapMaxMin(int arr[], int size) {int maxIndex = 0, minIndex = 0;// 找到最大数和最小数的索引for (int i = 1; i < size; i++) {if (arr[i] > arr[maxIndex]) {maxIndex = i;}if (arr[i] < arr[minIndex]) {minIndex = i;}}// 交换最大数与最小数的位置int temp = arr[maxIndex];arr[maxIndex] = arr[minIndex];arr[minIndex] = temp;
}

4编写函数,对给定的二维数组(3×3)进行转置(即行列互换)

代码:

#include <stdio.h>// 函数声明
void transpose(int arr[3][3]);
void printArray(int arr[3][3]);int main() {int arr[3][3] = {{1, 2, 3},{4, 5, 6},{7, 8, 9}};// 打印原始数组printf("原始数组:\n");printArray(arr);// 进行转置transpose(arr);// 打印转置后的数组printf("转置后的数组:\n");printArray(arr);return 0;
}// 函数定义:对二维数组进行转置
void transpose(int arr[3][3]) {int temp;for (int i = 0; i < 3; i++) {for (int j = i + 1; j < 3; j++) {// 交换 arr[i][j] 和 arr[j][i]temp = arr[i][j];arr[i][j] = arr[j][i];arr[j][i] = temp;}}
}// 函数定义:打印二维数组
void printArray(int arr[3][3]) {for (int i = 0; i < 3; i++) {for (int j = 0; j < 3; j++) {printf("%d ", arr[i][j]);}printf("\n");}
}

注意事项:

在二维数组转置的过程中,for (int j = i + 1; j < 3; j++) 中的 j 从 i + 1 开始是为了避免重复交换和对角线元素的交换。让我们详细解释一下:

解释

  1. 避免重复交换

    • 在转置过程中,交换 arr[i][j] 和 arr[j][i] 时,只需要交换一次即可。
    • 如果 j 从 0 开始遍历,会导致重复交换,因为 arr[i][j] 和 arr[j][i] 已经在之前的迭代中被交换过了。
    • 例如,如果 i = 0 且 j = 0,那么交换 arr[0][0] 和 arr[0][0] 是无意义的,因为它们是同一个元素。
  2. 对角线元素无需交换

    • 对角线元素(如 arr[0][0]arr[1][1]arr[2][2])在转置前后保持不变。
    • 如果 j 从 0 开始遍历,会导致对角线元素被交换,这实际上是没有必要的。

5编写函数,用冒泡法对输入的字符(不超过10个)按从小到大顺序排序

代码:

#include <stdio.h>
#include <string.h>// 函数声明
void bubbleSort(char arr[], int n);
void swap(char *a, char *b);int main() {char arr[11]; // 最多10个字符,加上字符串结束符 '\0'// 输入字符printf("请输入不超过10个字符:\n");scanf("%s", arr);// 获取字符串长度int n = strlen(arr);// 进行排序bubbleSort(arr, n);// 打印排序后的字符串printf("排序后的字符串:\n");printf("%s\n", arr);return 0;
}// 函数定义:冒泡排序
void bubbleSort(char arr[], int n) {for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - i - 1; j++) {if (arr[j] > arr[j + 1]) {// 如果前一个字符大于后一个字符,交换它们swap(&arr[j], &arr[j + 1]);}}}
}// 函数定义:交换两个字符
void swap(char *a, char *b) {char temp = *a;*a = *b;*b = temp;
}

6编写程序,输出3~10000为的可逆质数。可逆质数是指:一个质数将其各位数 字的顺序倒过来构成的反序数也是质数。如157和751均为质数,它们是可逆质数。要 求调用两个函数实现

代码:

include <stdio.h>
#include <stdbool.h>
#include <math.h>// 函数声明
bool isPrime(int num);
int reverseNumber(int num);int main() {printf("3到10000之间的可逆质数有:\n");for (int num = 3; num <= 10000; num++) {if (isPrime(num)) {int reversedNum = reverseNumber(num);if (isPrime(reversedNum)) {printf("%d\n", num);}}}return 0;
}// 函数定义:检查一个数是否为质数
bool isPrime(int num) {if (num <= 1) return false;for (int i = 2; i <= num / 2; i++) {if (num % i == 0) return false;}return true;
}// 函数定义:生成一个数的反序数
int reverseNumber(int num) {int reversedNum = 0;while (num > 0) {reversedNum = reversedNum * 10 + num % 10;num /= 10;}return reversedNum;
}

7编写函数,将一个十进制数转换成八进制数

代码:

#include <stdio.h>// 函数声明:将十进制数转换为八进制数
void decimalToOctal(int num);int main() {int num;printf("请输入一个十进制数:\n");scanf("%d", &num);printf("转换后的八进制数为:");decimalToOctal(num);  // 调用转换函数return 0;
}// 函数定义:将十进制数转换为八进制数
void decimalToOctal(int num) {// 如果输入的数为0,直接输出0if (num == 0) {printf("0");return;}int arr[100];  // 用于存储八进制数的数组int i = 0;     // 数组索引// 将十进制数转换为八进制数while (num > 0) {arr[i] = num % 8;  // 取余数,存储到数组中num = num / 8;     // 整除8,去掉最后一位i++;               // 索引加1}// 输出八进制数(从高位到低位)for (int j = i - 1; j >= 0; j--) {printf("%d", arr[j]);}printf("\n");  // 输出换行符
}

8从键盘输入一个正整数,逆序输出。要求使用循环和递归两种方法分别实现

代码:

#include<stdio.h>
int main() {int num;printf("请输入一个正整数:\n");scanf("%d", &num);printf("逆序输出(循环方法):");while (num>0){printf("%d", num % 10);num /= 10;}return 0;
}

代码:


#include <stdio.h>// 函数声明:使用递归逆序输出正整数
void reverse(int num);int main() {int num;printf("请输入一个正整数:\n");scanf("%d", &num);// 使用递归逆序输出printf("逆序输出(递归方法):");reverse(num);printf("\n");return 0;
}// 函数定义:使用递归逆序输出正整数
void reverse(int num) {if (num == 0) {return;  // 递归终止条件}printf("%d", num % 10);  // 输出最后一位数字reverse(num / 10);  // 递归调用,去掉最后一位数字
}


http://www.ppmy.cn/server/141290.html

相关文章

一篇Spring Boot 笔记

一、Spring Boot 简介 Spring Boot 是一个用于创建独立的、基于 Spring 的生产级应用程序的框架。它简化了 Spring 应用的初始搭建和开发过程&#xff0c;通过自动配置等功能&#xff0c;让开发者能够快速地构建应用&#xff0c;减少了大量的样板代码和复杂的配置。 二、核心特…

华为:hcia综合实验

一、拓扑图 二、实验要求 1. pc地址请自行规划&#xff0c;vlan已给出 2. 服务器地址自行规划&#xff0c;vlan&#xff0c;网段已给出 3. 交换机互联链路捆绑保证冗余性 4. 内网pc网关集中于核心交换机&#xff0c;交换机vlan 40互联路由器 ,地址网段已给出 5.配置静态路由实…

红帆OA iorepsavexml.aspx文件上传漏洞

漏洞描述 广州红帆科技深耕医疗行业20余年&#xff0c;专注医院行政管控&#xff0c;与企业微信、阿里钉钉全方位结合&#xff0c;推出web移动一体化办公解决方案——iOffice20&#xff08;医微云&#xff09;。提供行政办公、专业科室应用、决策辅助等信息化工具&#xff0c;…

【Vue3】知识汇总,附详细定义和源码详解,后续出微信小程序项目(2)

快速跳转&#xff1a; 我的个人博客主页&#x1f449;&#xff1a;Reuuse博客 新开专栏&#x1f449;&#xff1a;Vue3专栏 参考文献&#x1f449;&#xff1a;uniapp官网 ❀ 感谢支持&#xff01;☀ 前情提要 &#x1f53a;因为最近学习的vue语言&#xff0c;发现有很多细节…

3588 yolov8 onnx 量化转 rknn 并运行

本教程重点不在如何训练模型&#xff0c;重点是全流程链路&#xff0c;想学训练的可以网上找教程 环境 python 3.10.xrknn-toolkit2-2.2.0ultralytics_yolov8rknn 驱动版本2.2 模型训练 yolov8仓库地址&#xff1a;https://github.com/airockchip/ultralytics_yolov8.git下载…

什么是python爬虫?

今天就来给大家介绍一下什么是python爬虫。 Python爬虫是一种自动化程序&#xff0c;用于在互联网上浏览和提取信息。它通过模拟人类用户访问网页的行为&#xff0c;发送HTTP请求&#xff0c;获取网页内容&#xff0c;然后解析这些内容以提取所需数据 。以下是关于Python爬虫…

【MATLAB源码-第209期】基于matlab的MSK调制解调仿真,对比三种解调方法的误码率分别是相干解调,1比特差分,2比特差分。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 最小频移键控&#xff08;Minimum Shift Keying&#xff0c;简称MSK&#xff09;是一种特殊的连续相位频移键控&#xff08;CPFSK&#xff09;&#xff0c;它以其频谱效率高、抗干扰能力强而著称&#xff0c;广泛应用于无线通…

MySQL 忘记 root 密码,使用跳过密码验证进行登录

MySQL 忘记 root 密码&#xff0c;使用跳过密码验证进行登录 修改 /etc/my.cnf 配置文件&#xff0c;在 [mysqld] 后面任意一行添加 skip-grant-tables vim /etc/my.cnf 重启 MySQL systemctl restart mysqld 登录 MySQL&#xff08;无 -p 选项&#xff0c;无需密码登录&…