## 数组

### 1 数组的批量增

题目:设计程序,实现把一个数组的所有元素插入到另一个数组的指定索引位置
输入:第一行是第一个数组的元素个数len1,第二行是空格分开的len1 个元素,第三行是第二个
数组的元素个数len2,第四行是空格分开的len2 个元素,第五行是插入索引位置
输出:输出第二个数组插入到第一个数组后,第一个数组的所有元素

```ini
输入样例:
3
1 2 3
2
4 5
0
输出样例:4 5 1 2 3
```

```c
#include <stdio.h>

int main(){
	int a[100] = {0}, b[100] = {0};
	int len1, len2, index;
	int i;
	
	scanf("%d", &len1);
	for(i=0;i<len1;i++){
		scanf("%d", a+i);
	}
	scanf("%d", &len2);
	for(i=0;i<len2;i++){
		scanf("%d", b+i);
	}
	scanf("%d", &index);
	
	for(i=len1-1;i>=index;i--){
		a[i+len2] = a[i];
	}
	for(i=0;i<len2;i++){
		a[index+i]=b[i];
	}
	len1+=len2;
	for(i=0;i<len1;i++){
		printf("%d ", a[i]);
	}
	return 0;
}

```



### 2 数组的批量删

题目:设计程序,删除数组中所有值为x 的元素
输入:第一行是元素个数n,第二行是空格分开的n 个元素,第三行是需要删掉的标记值x
输出:删除后的数组

```ini
输入样例:
6
2 1 2 3 2 2
2
输出样例:1 3
```

```c
#include <stdio.h>

int main(){
	int a[100];
	int len, i, j = 0, num;
	
	scanf("%d", &len);
	for(i=0;i<len;i++){
		scanf("%d", a+i);
	}
	scanf("%d", &num);
	for(i=0;i<len;i++){
		if(a[i] != num){
			a[j++] = a[i];
		}
	}
	for(i=j;i<len;i++){
		a[i]=0;
	}
	for(i=0;i<j;i++){
		printf("%d ", a[i]);
	}
	printf("\n");
	return 0;
}

```



### 3 左小右大

题目:输入一串整型正整数,设计程序,以第一个元素为基准,把比第一个元素小的都放在其左边,
比第一个元素大的放其右边,也就是“左小右大”的情况,且在此划分的前提下,要求左右两边的元
素位置相对次序依旧保持不变,也就是具有稳定性,且不开辟额外的数组空间
输入:第一行是元素个数n,第二行是空格分开的n 个元素,总长度不超过100
输出:按照规则“左小右大”划分后且相对次序保持不变后的数组

```ini
输入样例:
8
3 1 0 5 6 2 8 0
输出样例:1 0 2 0 3 5 6 8
```

  ```c
  #include <stdio.h>
  void change(int a[], int n){
  	int i, j, t, index=0;
  	
  	for(i=1;i<n;i++){
  		if(a[0] > a[i]){//i当前遍历的元素下标 如果当前下标值小于中间值则进入 
  			index++;//存储位置后移 
  			t = a[i];//备份当前位置的值 
  			j = i;//将当前位置的下标存储 
  			while(j > index){//如果当前遍历位置下标大于存储位置下标则元素整体后移 
  				a[j] = a[j-1];
  				j--;
  			}
  			a[index] = t;//元素整体后移后再赋值操作 
  		}
  	}
  	for(i=0;i<n-1;i++){
  		if(a[i] > a[i+1]){
  			t = a[i];
  			a[i] = a[i+1];
  			a[i+1] = t;
  		}
  	}
  }
  
  int main(){
  	int len, i;
  	int a[100];
  	
  	scanf("%d", &len);
  	for(i=0;i<len;i++){
  		scanf("%d", a+i);
  	}
  	
  	change(a, len);
  	
  	for(i=0;i<len;i++){
  		printf("%d ", a[i]);
  	}
  	printf("\n");
  	
  	return 0;
  }
  
  ```



### 4 数组逆序

题目:编写程序,将给定的几个整数存入数组中,将数组中的这几个数逆序存放,再按顺序输出数
组中的元素
输入:输入在第一行中给出一个正整数n(1 ≤n≤ 10)。第二行输入几个整数,用空格分开
输出:在一行中输出这几个整数的处理结果,相邻数字中间用个空格分开

```ini
输入样例
4
10 8 1 2
输出样例:2 1 8 10
```



### 5 数组循环右移

题目:设计程序,实现数组元素的整体循环右移
输入:第一行是元素个数n,第二行是空格分开的n 个元素,第三行是数组整体右移的步数step
输出:整体右移后的数组

```ini
输入样例:
4
1 2 3 4
2
输出样例:
3 4 1 2
```



### 6 最值交换

题目:编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数
交换,最后输出交换后的序列。题目保证最大和最小值都是唯一的
输入:输入在第一行中给出一个正整数N,第二行给出N 个整数,数字间以空格分隔
输出:在一行中顺序输出交换后的序列

```ini
输入样例:
5
8 2 5 1 4
输出样例:
1 2 5 4 8
```



### 7 数组排序

题目:输入一串整型正整数,设计程序,给输入的数组排序
输入:输入在第一行中给出一个正整数N(<10),第二行给出N 个整数,数字间以空格分隔
输出:递增排序后的数据

```ini
输入样例:
4
3 2 10 5
输出样例:2 3 5 10
```



### 8 谁频次最高

题目:统计一个整型序列中出现次数最多的整数及其出现次数
输入:输入在一行中给出序列中整数个数N(0<N<1000),以及N 个整数。数字间以空格分隔
输出:在一行中输出出现次数最多的整数及其出现次数,数字间以空格分隔。题目保证这样的数字
是唯一的

```ini
输入样例:
11
10 3 2 -1 5 3 4 3 0 3 2
输出样例:3 4
```



### 9 矩阵运算

题目:给定一个𝑛 × 𝑛的方阵,请定义一个函数func,计算该矩阵除副对角线、最后一列和最后一
行以外的所有元素之和,副对角线为从矩阵的右上角至左下角的连线
输入:输入第一行给出正整数n(1 <n ≤ 10),随后n 行,每行给出n 个整数,以空格分隔
输出:在一行中给出该矩阵除副对角线、最后一列和最后一行以外的所有元素之和

```ini
输入样例:
4
2 3 4 1
5 6 1 1
7 1 8 1
1 1 1 1
输出样例:35

方阵中主对角线、副对角线的索引和方阵的行、列有什么关系?
```



### 10 矩阵乘积

题目:给定一个m×n的矩阵A,再给定一个给定一个n×p 的矩阵B(m,n,p<10)求矩阵的乘积
输入:第一行给出两个整数代表矩阵A 的维度m 和n,随后m 行每行输入以空格分隔的n 个整数,
第同时下一行给出两个整数代表矩阵B 的维度n 和p,随后n 行每行输入以空格分隔的p 个整数
输出:A 和B 相乘后的结果

```ini
输入样例:
2 3
1 2 3
4 5 6
3 2
1 0
0 1
1 2
输出样例:
4 8
10 17
```



<img src="https://yp.smallkun.cn/markdown/image-20250322222018779.png!compress" alt="image-20250322222018779" style="zoom:50%;" />

### 11 找字符索引

题目:编写程序,从给定字符串中查找某指定的字符所在的索引位置
输入:输入的第一行是单个待查找的字符。第二行是以回车结束的非空字符串(不超过80 个字符)
输出:如果找到,在一行内按照格式“index=下标”,输出该字符在字符串中所对应的下标(下标从0
开始),如果该字符出现多次,则返回最后一次出现的索引位置,否则输出"Not Found"

```ini
输入样例:
m
programming
输出样例:index=7
```



### 12 大小写转换

题目:编写程序,对一个以“#”结束的字符串,把小写字母全部转换成大写字母,把大写字母全部
转换成小写字母,并逆序输出结果
输入:一个以“#”结束的字符串,不超过100 个字符
输出:在一行中输出大小写转换后的结果字符串

```ini
输入样例:
Ab!23
cD &*%$
.,#
输出样例:
,.
$%*& dC
32!Ba
```



### 13 字符串比较

题目:编写程序,将两个不包含换行符的字符串s1 和s2 比较,若s1>s2,输出1;若s1=s2,输出
0,否则输出-1,要求不要用strcmp 函数
输入:输入总共两行,第一行是第一个字符串,第二行是第二个字符串,字符串的长度均小于100
输出:第一个字符串和第二个字符串比较后的结果

```ini
输入样例:
love
love
输出样例:0
```



### 14 字符串排序

题目:编写程序,实现字符串之间的升序排序并输出结果
输入:第一行是一个整数n 代表n 个字符串(n<10 且每个字符串长度都小于80),接下来n 行都
是字符串
输出:递增排序后的结果

```ini
输入样例:
3
abc
b
aaaaa
输出样例:
aaaaa
abc
b
```



### 15 字符串插入

题目:编写程序,实现字符串的插入
输入:输入总共三行,第一行是第一个字符串,第二行是第二个字符串,字符串的长度均小于100
且不包含换行符,第三行是代表第二个字符串插入至第一个字符串的位置
输出:把第二个字符串插入到第一个字符串的指定位置后面的结果

```ini
输入样例:
abc
ee
2
输出样例:aeebc
```



### 16 字符串删除

题目:编写程序,删除字符串中指定的子字符串
输入:输入总共两行,第一行是原字符串,第二行是需要删除的字符串,字符串的长度均小于100
且不包含换行符
输出:删除指定字符串后的新的字符串结果

```ini
输入样例:
abcddeef
dee
输出样例:abcdf
```



---

## 文件

### 1.文件字符统计

题目:给定一个文件“test1.txt“,请统计文件中的英文字母字符和数字字符的个数

输入:给定的一个文件“test1.txt“

输出:英文字母和数字的个数,用空格隔开

```ini
输入样例:一个文件,假设内容为:ab\n123\n***\n
输出样例:2 3
```



### 2.文件合并

题目:给定两个文件“test1.txt“和”test2.txt“,请把两个文件中的内容合并到一起并写入到新的文

件”test3.txt”之中

输入:两个文件“test1.txt“和”test2.txt“

输出:合并后的文件“test3.txt“

```ini
输入样例:
假设 test1.txt 的内容为:ab\ncd
假设 test2.txt 的内容为:efg\nhi
输出样例:test3.txt 的内容:ab\ncdefg\nhi
```



### 3.写入数据到文件

题目:编写程序,实现把从键盘敲入的字符数据都追加存入文件“test.txt”中,直到敲入 ctrl+z 结束,

注意是追加写入,也就是说文件中原本的内容依旧保留

输入:从键盘敲入字符,假设敲入了“abc\ndef”,原本的“test.txt“文件中的内容为“我爱中国”

输出:写入后的文件,按照输入的方式写入后,结果应该为:“我爱中国 abc\ndef“