1.打印X图案
-
if ((i == j) ||( i + j == n - 1))
-
循环打印了一个行和列相同的数组
-
当i==j的时候 打印正斜线
-
i+j==n-1的时候打印反斜线
cpp
int main()
{
int n = 0;
while (scanf("%d", &n) != EOF)
{
for (int i = 0; i < n; i++) //外循环为行
{
for (int j = 0; j < n; j++) //内循环为列
{
if (i == j || i + j == n - 1)
//最关键的地方,正斜线为[i][i]处是*, 反斜杠为[i][n-1-j]处是*,一行打印1个或2个*
printf("*");
else
printf(" ");
}
printf("\n"); //打印完一行,换行
}
}
return 0;
}
2.打印空心正方形
用于判断当前打印的位置是否应该是星号 *
的条件。具体来说,if(i==0||i==n-1||j==0||j==n-1)
这个条件判断的逻辑是:
-
i==0
:判断当前行是不是第一行(因为行计数从0开始)。 -
i==n-1
:判断当前行是不是最后一行。n-1
是最后一行的行索引。 -
j==0
:判断当前列是不是第一列。 -
j==n-1
:判断当前列是不是最后一列。
如果这四个条件中的任何一个为真,说明当前的
(i, j)
位置位于正方形的边缘(要么是顶部,底部,左侧或右侧边界)。因此,在这些位置上应该打印一个星号*
。如果这个条件不成立,那么说明当前位置在正方形的内部,应该打印空格 。这种设计确保了正方形的边缘由星号构成,而内部为空。
cpp
//打印空心正方形
int main()
{
int n = 0;
while (scanf("%d", &n) != EOF)
{
for (int i = 0; i < n; i++) //外循环为行
{
for (int j = 0; j < n; j++) //内循环为列
{
if ((i == 0 || i == n - 1) ||( j == 0 || j == n - 1))//找规律
printf("* ");
else
printf(" ");
}
printf("\n");
}
}
}
3.数组转置
- 将数组的行和列调换
cpp
//数组转置
int main() {
int i = 0;
int j = 0;
int arr[3][3] = { {1,2,3},{4,5,6},{7,8,9} };
for (i = 0; i < 3; i++) {
for ( j = 0; j <3 ; j++)
{
printf("%d", arr[i][j]);
}
printf("\n");
}
printf("\n");
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++)
{
printf("%d", arr[j][i]);
}
printf("\n");
}
}
4.逆序输出
cpp
#include<stdio.h>
void Reverse(int arr[], int sz) {
int l = 0; //左下标,从0开始
int r = sz - 1; //右下标,从数组最后一项开始
while (l < r) { //交换数字,直到左下标大于右下标
int tmp = 0;
tmp = arr[l];
arr[l] = arr[r];
arr[r] = tmp;
l++;
r--;
}
}
int main() {
int arr[10] = {0};
for (int i = 0; i < 10; i++) {
scanf("%d ", &arr[i]);
}
int sz = sizeof(arr) / sizeof(arr[0]);
Reverse(arr, sz); //逆序
for (int i = 0; i < 10; i++) {
printf("%d ", arr[i]);
}
}
5.有序序列合并
- 描述
输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。
数据范围: 1≤𝑛,𝑚≤1000 1≤n ,m ≤1000 , 序列中的值满足 0≤𝑣𝑎𝑙≤30000 0≤val≤30000
- 输入描述:
输入包含三行,
第一行包含两个正整数n, m,用空格分隔。n表示第二行第一个升序序列中数字的个数,m表示第三行第二个升序序列中数字的个数。
第二行包含n个整数,用空格分隔。
第三行包含m个整数,用空格分隔。
- 输出描述:
输出为一行,输出长度为n+m的升序序列,即长度为n的升序序列和长度为m的升序序列中的元素重新进行升序序列排列合并。
cpp
int main()
{
int n = 0;
int m = 0;
int arr1[1000] = {0};
int arr2[1000] = {0};
//输入n和m
scanf("%d %d",&n,&m);
int i = 0;
int j = 0;
//输入两个升序序列
for(i=0; i<n; i++)
{
scanf("%d",&arr1[i]);
}
for(i=0; i<m; i++)
{
scanf("%d",&arr2[i]);
}
//合并有序序列并输出
i=0;j=0;
while(i<n && j<m)
{
if(arr1[i] < arr2[j]) ///拿arr1中的元素逐个与arr2中的第一个元素比较,小的输出在前
{
printf("%d ",arr1[i]);
i++;
}
else
{
printf("%d ",arr2[j]); //如果arr2中小的话输出arr2
j++;
}
}
//判断尚未遍历完的数组是否需要打印输出
if(i==n && j<m)
for(;j<m;j++)
printf("%d ",arr2[j]);
else
for(;i<n;i++)
printf("%d ",arr1[i]);
return 0;
}
6.计算平均值
- 编写一个程序,从用户输入中读取10个整数并存储在一个数组中。然后,计算并输出这些整数的平均值
cpp
int main() {
int arr[10] = { 0 };
int i = 0;
int sum = 0;
printf("请输入10个整数\n");
for (i = 0; i < 10; i++) {
scanf("%d",&arr[i]);
sum += arr[i];
}
float average = (float)sum / 10;
printf("平均数为:%.2f\n", average);
}
7.交换数组
cpp
#include <stdio.h>
// 定义一个常量来表示数组的大小
#define ARRAY_SIZE 5
// 函数定义:交换两个数组的内容
void swapArrays(int arr1[], int arr2[], int size) {
for (int i = 0; i < size; i++) {
// 使用临时变量进行值的交换
int temp = arr1[i];
arr1[i] = arr2[i];
arr2[i] = temp;
}
}
int main() {
// 定义两个数组A和B,并初始化它们的内容
int arrayA[ARRAY_SIZE] = { 1, 2, 3, 4, 5 };
int arrayB[ARRAY_SIZE] = { 6, 7, 8, 9, 10 };
// 输出交换前的数组内容
printf("交换前的数组A:");
for (int i = 0; i < ARRAY_SIZE; i++) {
printf("%d ", arrayA[i]);
}
printf("\n");
printf("交换前的数组B:");
for (int i = 0; i < ARRAY_SIZE; i++) {
printf("%d ", arrayB[i]);
}
printf("\n");
// 调用函数进行数组内容的交换
swapArrays(arrayA, arrayB, ARRAY_SIZE);
// 输出交换后的数组内容
printf("交换后的数组A:");
for (int i = 0; i < ARRAY_SIZE; i++) {
printf("%d ", arrayA[i]);
}
printf("\n");
printf("交换后的数组B:");
for (int i = 0; i < ARRAY_SIZE; i++) {
printf("%d ", arrayB[i]);
}
printf("\n");
return 0;
}