【c语言数组精选代码题】

server/2025/3/16 13:51:05/

c语言数组精选代码题

  • 四、数组
    • 4.1逆序数组
    • 4.2最值交换
    • 4.3数组排序
    • 4.4统计数字频次
    • 4.5输出矩阵
    • 4.6矩阵运算
    • 4.7找字符串索引
    • 4.8找字符串索引
    • 4.9统计字母频次
    • 4.10最长字符串🚀
    • 4.10字符串比较
    • 4.12字符串的插入🚀
    • 4.13字符串的删除🚀🚀

👍链接: 书接上会,精选基础c语言代码

在这里插入图片描述

四、数组

4.1逆序数组

在这里插入图片描述

#include <stdio.h>int main()
{int n,temp,i,j;int a[10];scanf("%d",&n);for(i=0;i<n;i++){scanf("%d",&a[i]);}for(i=0,j=n-1;i<=j;i++,j--){temp=a[i],a[i]=a[j],a[j]=temp; //两值交换,三个变量实现}for(i=0;i<n;i++){printf("%d ",a[i]);}return 0;
}

tips:双指针交换法,一个从前遍历,一个从后遍历,这样不回溯。

4.2最值交换

在这里插入图片描述

#include <stdio.h>int main()
{int N,temp,max=0,min=0;int i;int a[10];scanf("%d",&N);for(i=0;i<N;i++){scanf("%d",&a[i]); //给数组赋值if(a[min]>a[i]){ //找最小值索引min=i;}}temp=a[0];a[0]=a[min];a[min]=temp; //最小值与第一个元素交换for(i=0;i<N;i++){ //找最大值索引if(a[max]<a[i]){max=i;}}temp=a[N-1];a[N-1]=a[max];a[max]=temp; //最大值与最后一个元素交换for(i=0;i<N;i++){printf("%d ",a[i]); }return 0;
}

注意长度位N的数组,最后一个元素下标是N-1

4.3数组排序

在这里插入图片描述

#include <stdio.h>
#define N 100//冒泡排序
void bubbleSort(int arr[], int n){int i,j,temp;for(i=0;i<n-1;i++){for(j=0;j<n-i-1;j++){if(arr[j]>arr[j+1]){temp=arr[j],arr[j]=arr[j+1],arr[j+1]=temp;}}}
}	int main() {int arr[N];int i = 0;char ch;// 读取输入数据,以回车结束while(scanf("%d%c",&arr[i],&ch)==2){i++;if(ch=='\n'){break;}}// 调用冒泡排序函数bubbleSort(arr, i);// 输出排序后的结果for (int j = 0; j < i; j++) {printf("%d ", arr[j]);}return 0;
}

注意:学习如何实现输入回车时结束循环!定义数组时,数组大小不能用变量!函数定义不能嵌套,要在main函数外面定义。

//简单选择排序
void selectionSort(int arr[], int n) {int i, j, min_idx, temp;for (i = 0; i < n - 1; i++) {min_idx = i;for (j = i + 1; j < n; j++) {if (arr[j] < arr[min_idx]) {min_idx = j;}}temp = arr[min_idx];arr[min_idx] = arr[i];arr[i] = temp;}
}// 直接插入排序函数
void insertionSort(int arr[], int n) {int i, j, key;for (i = 1; i < n; i++) {key = arr[i];j = i - 1;// 将大于key的元素向后移动while (j >= 0 && arr[j] > key) {arr[j + 1] = arr[j];j = j - 1;}arr[j + 1] = key;}
}

4.4统计数字频次

在这里插入图片描述

#include <stdio.h>#define MAX_N 1000int main() {int n;int arr[MAX_N];int count[MAX_N] = {0}; //计数的东西一定要初始化,此时数组的1000个元素都为0int i, j;scanf("%d", &n);// 读取整数序列for (i = 0; i < n; i++) {scanf("%d", &arr[i]);}// 统计每个整数出现的次数for (i = 0; i < n; i++) {count[arr[i]]++;}// 找出出现次数最多的整数及其出现次数int max = 0;int max_index = 0;for (i = 0; i < n; i++) {if (count[i] > max) {max= count[i];max_index = i;}}// 输出结果printf("%d %d\n", max_index,max);return 0;
}

统计频率的思路:
对于 arr 数组中的每一个元素 arr[i],将其作为 count 数组的下标。
每次遇到一个整数,就将 count 数组中对应下标的元素值加 1。例如,如果 arr[i] 的值是 5,那么 count[5] 的值就会加 1。这样,count 数组中每个下标位置的值就代表了该下标对应的整数在整数序列中出现的次数。
注意:存在一个潜在问题,它假设输入的整数范围在 0 到 MAX_N - 1 之间。若输入的整数超出这个范围,会引发数组越界错误。

🎈第二个方法:

#include <stdio.h>
int main() {int N, i, j;scanf("%d", &N);int arr[N], counter[N];for (i = 0; i < N; i++)scanf("%d", &arr[i]); //输入for (i = 0; i < N; i++)counter[i] = 0; //初始化for (i = 0; i < N; i++)for (j = 0; j < N; j++) //统计频次if (arr[i] == arr[j])counter[i]++;int maxIndex = 0;for (i = 1; i < N; i++)if (counter[i] > counter[maxIndex])maxIndex = i; //找出现次数最多的元素printf("%d %d", arr[maxIndex], counter[maxIndex]);return 0;
}

思想就是暴力。虽然有重复统计,但是先统计那个数的个数肯定比后面再出现这个数统计数大

4.5输出矩阵

在这里插入图片描述

#include <stdio.h>int main() {int m, n;scanf("%d %d", &m, &n);int matrix[m][n];// 赋值for (int i = 0; i < m; i++)for (int j = 0; j < n; j++)matrix[i][j] = i + j;// 输出for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {printf("%4d", matrix[i][j]);  // 这里%4d保证每个数占4位右对齐}printf("\n");}return 0;
}

如果编程语言环境不支持使用变量定义数组(比如在 C 语言的一些较老的编译器中不支持 C99 标准下的变长数组特性),可以使用动态内存分配的方式来实现类似功能。

#include <stdio.h>
#include <stdlib.h>int main() {int m, n;scanf("%d %d", &m, &n);// 动态分配二维数组的内存int **matrix = (int **)malloc(m * sizeof(int *));for (int i = 0; i < m; i++) {matrix[i] = (int *)malloc(n * sizeof(int));}// 赋值for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {matrix[i][j] = i + j;}}// 输出for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {printf("%4d", matrix[i][j]);}printf("\n");}// 释放动态分配的内存for (int i = 0; i < m; i++) {free(matrix[i]);}free(matrix);return 0;
}

也可以直接定义一个大点的二维数组a[20][20]

4.6矩阵运算

在这里插入图片描述

#include <stdio.h>int main() {int n,i,j;scanf("%d", &n);int matrix[10][10];for (i = 0; i < n; i++) //比较老的编译器也不支持在for循环里定义变量int i=0;for (j = 0; j < n; j++)scanf("%d", &matrix[i][j]);int sum = 0;for ( i = 0; i < n; i++) {for ( j = 0; j < n; j++) {//舍去副对角线、最后一列和最后一行的元素if (i != n-1 && j != n-1 && i+j != n-1) {sum += matrix[i][j];}}}printf("%d", sum);return 0;
}

4.7找字符串索引

在这里插入图片描述

#include <stdio.h>int main() {int i=0, index=-1;//初始化假设没找到,设为-1char c; //存放用户指定字符char s[81]; //多一位放字符串结尾标志符scanf("%c", &c);getchar();  //接收用户上一次输入敲击的回车gets(s);//逐一遍历查找while(s[i] != '\0') {if(s[i] == c)index = i;i++;}if(index == -1)printf("Not Found");elseprintf("index = %d",index);return 0;
}

4.8找字符串索引

在这里插入图片描述
在这里插入图片描述

#include <stdio.h>int main() {int i = 0;char ch[101];while ((ch[i] = getchar()) != '#') {if (ch[i] >= 'a' && ch[i] <= 'z') {ch[i] -= 32;}if (ch[i] >= 'A' && ch[i] <= 'Z') {ch[i] += 32;}i++;}while (i >= 0) {putchar(ch[i]);i--;}return 0;
}

4.9统计字母频次

在这里插入图片描述

#include <stdio.h>
#define MAX_N 128int main() {int i=0;char str[81],ch;int count[MAX_N] = {0}; //计数的东西一定要初始化,此时数组的128个元素都为0gets(str);  //有空格不能用scanfch=getchar();// 统计每个整数出现的次数while(str[i]!='\0'){count[str[i]]++;i++; //忘了它会是死循环}printf("%d\n",count[ch]);return 0;
}

gets()函数会读入空格 ,但不会读入回车。在输入时,它以回车键作为输入结束的标志,具体说明如下:
读入空格:gets()函数用于从标准输入设备(通常是键盘)读取字符串。与scanf()函数不同,gets()把空格视为字符串的一部分,可以读取包含空格的字符串, 直到遇到回车键才停止读取。
输入结束条件:当用户按下回车键时,gets()认为输入结束。不过,回车键产生的换行符不会被存储在字符数组中,而是被替换为字符串结束标志’\0’ 。gets()函数会消化掉回车键。当你输入字符串并按下回车键后,gets()会读取除回车键之外的字符序列存入指定的字符数组,然后自动在读取内容末尾添加字符串结束符'\0',回车键产生的换行符不会被留在字符数组里 ,相当于被gets()处理掉了。

scanf函数读入字符串时遇到空格、制表符(\t)或换行符(\n)就会结束读入。

4.10最长字符串🚀

在这里插入图片描述

#include <stdio.h>
#include <string.h>int main(){int n, i, j, counter = 0, maxlength = 0;char str[81], result[81]; //k用于存放最长的字符串scanf("%d", &n);for(i = 0; i < n; i++){scanf("%s", str);getchar();//统计字符长度for(j = 0; str[j] != '\0'; j++)counter++;if(maxlength < counter){maxlength = counter;strcpy(result, str); //复制str字符串到result中}counter = 0; //重置为空以便接收下一个字符}printf("The longest is: %s",result); 
}

不必把n个字符串都保存下来再统一比较,仅需通过循环,每次两两比较就可以。

4.10字符串比较

在这里插入图片描述

#include<stdio.h>
int main(){int result, i = 0;char s1[101], s2[101];gets(s1); gets(s2);while(s1[i] == s2[i] && s1[i] != '\0' && s2[i] != '\0'){i++; //逐个比较}//两个字符串完全相等if(s1[i] == '\0' && s2[i] == '\0'){result = 0;}//s1和s2的第i个字符出现了不同elseresult = ( s1[i] - s2[i] ) > 0 ? 1 : -1;printf("%d",result);return 0;
}

这就是实现了strcmp函数的功能!

4.12字符串的插入🚀

在这里插入图片描述

#include <stdio.h>
#include <string.h>int main() {char str1[201], str2[101];int pos;gets(str1); gets(str2); scanf("%d", &pos);//改为物理索引pos--;// 拼接字符串int len1 = strlen(str1);int len2 = strlen(str2);//先把pos后的元素后移for (int i = len1; i >= pos; i--) {str1[i + len2] = str1[i];}//插入for (int i = 0; i < len2; i++)str1[pos + i] = str2[i];printf("%s", str1);return 0;
}

注意:注意位置和下标的区别

4.13字符串的删除🚀🚀

在这里插入图片描述

#include <stdio.h>
#include <string.h>int main() {char str[101], subStr[101];gets(str); gets(subStr);int start = 0; //从原字符串start的位置开始匹配int len = strlen(str);int subLen = strlen(subStr);// 删除指定字符串while(start <= len - subLen) {//比较是否有匹配的字串int found = 1;for (int i = 0; i < subLen; i++) {if (str[start + i] != subStr[i]) {found = 0;break;}}if (found) { //如果found为1则代表匹配到了子串//用后面部分覆盖子串for (int i = start + subLen; i < len; i++) {str[i - subLen] = str[i];}//注意要减少原串的长度len = len - subLen;}elsestart++;}str[len] = '\0'; // 添加字符串结束符printf("%s", str);return 0;
}

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

相关文章

单片机ADC+NTC温度采集电路学习

文章目录 前言一、NTC是什么&#xff1f;二、NTC重要参数三、实际应用举例四、NTC和PTC的区别总结 前言 NTC常用来检测外部环境或者电池温度&#xff0c;及汽车水温传感器。 有时候电池并不内置NTC&#xff0c;所以需要外置NTC来采集电池温度&#xff0c;注意要紧贴电池&#…

深度学习 Deep Learning 第2章 线性代数

深度学习 第2章 线性代数 线性代数是深度学习的语言。 张量操作是神经网络计算的基石&#xff0c;矩阵乘法是前向传播的核心&#xff0c;范数约束模型复杂度&#xff0c;而生成空间理论揭示模型表达能力的本质。 本章介绍线性代数的基本内容&#xff0c;为进一步学习深度学习做…

Flink术语

Flink Application: 一个完整的Flink程序代码叫做一个Flink Application&#xff0c;其始于一个或多个Source&#xff0c;终于一个或多个Sink&#xff0c;中间由一个或者多个Operator(算子)组合对数据进行转换形成Transformation。 编写Flink代码要符合一定的流程&#xff0c;首…

Spring Boot实战:MySQL与Redis数据一致性深度解析与代码实战

Spring Boot实战&#xff1a;MySQL与Redis数据一致性深度解析与代码实战 一、数据一致性问题概述二、常见解决方案三、选择合适的解决方案四、总结 在Spring Boot开发中&#xff0c;MySQL作为关系型数据库&#xff0c;提供了强大的数据存储和查询能力&#xff1b;而Redis作为内…

基于 Verilog 的多路复用显示驱动设计与测试:实践与探索

在数字电路设计的学习与实践中,Verilog 语言作为硬件描述的有力工具,被广泛应用于各类电路设计场景。今天,我们将深入探讨如何运用 Verilog 实现多路复用显示驱动的设计与测试,这不仅能加深对 Verilog 语言的理解,还能提升数字电路设计的实践能力。 一、实验目的 本次实验…

解决PC串流至IPad Pro时由于分辨率不一致导致的黑边问题和鼠标滚轮反转问题

问题背景 今天在做 电脑串流ipad pro 的时候发现了2个问题&#xff1a; 1.ipadpro 接上鼠标后&#xff0c;滚轮上下反转&#xff0c;这个是苹果自己的模拟造成的问题&#xff0c;在设置里选择“触控板与鼠标”。 关闭“自然滚动”,就可以让鼠标滚轮正向滚动。 2. ipadpro 分…

小说文本分析工具:基于streamlit实现的文本分析

小说文本分析工具&#xff1a;基于streamlit实现的文本分析 主要在于使用python对小说文本中章节之间的识别与分割&#xff0c;通过分词以及停用词库&#xff0c;抽取关键词章节的词云展示&#xff0c;以及关键词在整个文本当中的权重网络。 import re import streamlit as s…

【SpringMVC】常用注解:@CookieValue

1.作用 用于把指定cookie名称传入控制器方法参数 2.属性 value&#xff1a;指定cookie的名称 required&#xff1a;是否必须有次cookie 3.示例 先写jsp代码 <a href"demo1/useCookieValue">绑定 cookie 的值</a> 控制器代码 RequestMapping(&qu…