CTGU—第5章数组进阶

第1关:数存到一个一维数组中

任务:将1-200中所有能被6整除、但不能被4整除的数存到一个一维数组中,并输出。

#include <stdio.h>
int main(void)
{
    /*********Begin*********/
    int numbers[200];
    int i, j = 0;

    for (i = 1; i <= 200; i++)
    {
        if (i % 6 == 0 && i % 4 != 0)
        {
            numbers[j] = i;
            j++; // 这里多加了一个数,所以在后面需要剪掉一个数
        }
    }

    for (i = 0; i < j; i++) // 所以i<j
    {
        printf("%d ", numbers[i]);
    }

    /*********End**********/
    return 0;
}

第2关:求矩阵对角线上的元素之和

任务:从键盘输入一个M×M的矩阵,分别求该矩阵主对角线上的元素之和、以及副对角线上的元素之和。要求M的值从键盘输入,且M的值小于10。

#include<stdio.h>
int main(void)
{  
    /*********Begin*********/

    int m;//m乘m的矩阵
    scanf("%d",&m);
    int matrix[m][m];
    int i,j;
    int sum1=0,sum2=0;

    for(i=0;i<m;i++)//输入m乘m的矩阵
    {
        for(j=0;j<m;j++)
        {
            scanf("%d",&matrix[i][j]);
        }
    }

    //求主对角线上的元素之和
    for(i=0;i<m;i++)
    {
        sum1=sum1+matrix[i][i];
    }

    //求副对角线上的元素之和
    for(i=0;i<m;i++)
    {
        sum2=sum2+matrix[i][m-1-i];
    }
    printf("%d\n",sum1);
    printf("%d",sum2);
    /*********End**********/ 
    return 0;
}

第3关:逆序存放数组

任务:从键盘输入n的值(n<10),再输入n个整数到一维数组中,将这n个整数逆序存放到该数组中,并输出。

#include <stdio.h>
int main(void)
{
    /*********Begin*********/
    int n;
    scanf("%d", &n);
    int arr[n];
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
    }
    // for (int i = 0; i < n; i++)
    // {
    //   printf("%d ", arr[i]);
    //}
    for (int i = n - 1; i >= 0; i--)
    {
        printf("%d ", arr[i]);
    }
    return 0;

    /*********End**********/
    return 0;
}

第4关:找出ASCII码值最小的字符

任务:从键盘输入一个字符串,找出其中ASCII码值最小的字符,并输出该字符。

#include <stdio.h>
int main(void)
{
    /*********Begin*********/
    char str[100];
    scanf("%s", str);
    char min = str[0];
    for (int i = 1; str[i] != '\0'; i++)
    {
        if (str[i] < min)
        {
            min = str[i];
        }
    }
    printf("%c\n", min);
    return 0;

    /*********End**********/
    return 0;
}

第5关:将小写英文字母复制到数组中

任务:从键盘输入一个字符串到字符数组中,将其中的小写英文字母复制到另外一个字符数组中并输出。

#include<stdio.h>
int main(void)

{  
    /*********Begin*********/
    char input[20];
    char output[20];
    int i,j;
    scanf("%s",input);


    j=0;
    for(i=0;input[i]!='\0';i++)
    {
        if(input[i]>='a' && input[i]<='z')
        {
            output[j]=input[i];
            j++;
        }
    }
    output[j]='\0';
    printf("%s\n",output);
    /*********End**********/ 
    return 0;
}

第6关:查找整数

任务:给出一个包含 n个整数的数列,问整数 a在数列中出现的次数,以及第一次出现的位置(位置从1开始编号)。

#include<stdio.h>
int main(void)
{  
    /*********Begin*********/
    int n;//数组的长度
    scanf("%d",&n);
    int numbers[n];
    int a;//待查找的数
    int count=0;//记录出现的次数
    int index=-1;//记录第一册出现的下标
    int i,j;

    for(i=0;i<n;i++)//输入数组
    {
        scanf("%d",&numbers[i]);
    }

    scanf("%d",&a);//

    for(i=0;i<n;i++)
    {
        if(numbers[i]==a)//如果找到了,记录出现的次数
        {
            count++;
            if(index==-1)//如果第一次找到啊a,记录位置
            {
                index=i+1;//因为要求是从一开始编号,所以i+1
            }
        }
    }
    printf("%d\n",count);
    printf("%d\n",index);
    /*********End**********/ 
    return 0;
}

第7关:冒泡法排序

任务:采用冒泡法将十个数按从大到小的顺序进行排列,要求数组的大小采用#define命令设置。

#include <stdio.h>
/*********Begin*********/
#define SIZE 10
/*********End**********/
int main(void)
{
    /*********Begin*********/
    int numbers[SIZE];
    int i, j;
    int temp;

    // 输入数组
    for (i = 0; i < SIZE; i++)
    {
        scanf("%d", &numbers[i]);
    }

    // 冒泡法比较
    for (i = 1; i <= SIZE - 1; i++) // 一共进行(数组长度-1次)
    {
        for (j = 0; j < SIZE - i; j++)
        {
            if (numbers[j] < numbers[j + 1])
            {
                temp = numbers[j + 1];
                numbers[j + 1] = numbers[j];
                numbers[j] = temp;
            }
        }
    }
    for (i = 0; i < SIZE; i++)
    {
        printf("%d ", numbers[i]);
    }
    /*********End**********/
    return 0;
}

第8关:选择法排序

任务:从键盘输入一个字符串,用选择法对该字符串中的字符由小到大进行排序,并输出结果。

#include<stdio.h>
/*********Begin*********/
#include<string.h>

/*********End**********/ 
int main(void)
{  
    /*********Begin*********/
    int i,j;
    int  temp;
    char str[20];
    int len;
    scanf("%s",str);

    len=strlen(str);
    for(i=0;i<len-1;i++)
    {
        for(j=i+1;j<len;j++)
        {
            if(str[i]>str[j])
            {
                temp=str[i];
                str[i]=str[j];
                str[j]=temp;
            }
        }
    
    }
    printf("%s",str);
    /*********End**********/ 
    return 0;
}

第9关:二分查找

任务:输入n(n<100)的值,以及n个从小到大排序的整数序列,再输入一个待查找的整数m,使用二分法进行查找该数的序号。

#include <stdio.h>
int main(void)
{
    /*********Begin*********/
    int n; // 数组的大小
    int m; // 待查找的数
    int i;
    scanf("%d", &n);
    int numbers[n];
    int left = 0, right = n - 1, mid;
    for (i = 0; i < n; i++)
    {
        scanf("%d", &numbers[i]);
    }
    scanf("%d", &m);

    while (left < right)
    {
        mid = (left + right) / 2;
        if (numbers[mid] == m)
        {
            printf("%d\n", mid + 1);
            return 0;
        }
        else if (m > mid)
        {
            left = mid + 1;
        }
        else
        {
            right = mid - 1;
        }
    }
    printf("None\n");
    return 0;

    /*********End**********/
    return 0;
}

第10关:删除最大值

任务:输入10个互不相同的整数并保存到数组中,找到最大元素并删除它,输出删除后的数组。

#include <stdio.h>
int main(void)
{
    /*********Begin*********/
    int arr[10];
    int max = 0;
    int maxIndex = 0; // 输入10个整数
    for (int i = 0; i < 10; i++)
    {
        scanf("%d", &arr[i]); // 找到最大元素
        if (arr[i] > max)
        {
            max = arr[i];
            maxIndex = i;
        }
    } // 删除最大元素
    for (int i = maxIndex; i < 9; i++)
    {
        arr[i] = arr[i + 1];
    } // 输出删除后的数组
    for (int i = 0; i < 9; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;
    /*********End**********/
    return 0;
}

第11关:数组元素交换

任务:输入n和m的值(n<10,m<10),以及一个 n×m的矩阵,找出每行中最大的元素并与该行第 1列的元素进行交换,输出交换后的矩阵。

#include <stdio.h>
int main(void)
{
    /*********Begin*********/
    int n, m, i, j, max, max_index;
    int matrix[10][10];     // 定义矩阵,最大为10*10
    scanf("%d %d", &n, &m); // 输入矩阵的行数n和列数m // 输入矩阵
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            scanf("%d", &matrix[i][j]);
        }
    } // 找出每行中最大的元素并与该行第1列的元素进行交换
    for (i = 0; i < n; i++)
    {
        // 找出该行最大的元素及其索引
        max = matrix[i][0];
        max_index = 0;
        for (j = 1; j < m; j++)
        {
            if (matrix[i][j] > max)
            {
                max = matrix[i][j];
                max_index = j;
            }
        } // 与第1列进行交换
        int temp = matrix[i][0];
        matrix[i][0] = matrix[i][max_index];
        matrix[i][max_index] = temp;
    } // 输出交换后的矩阵
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
    return 0;
    /*********End**********/
    return 0;
}

第12关:用冒泡法对字符串排序

任务:从键盘输入一个字符串,用冒泡法对该字符串中的字符由大到小进行排序,并输出结果。

 #include <stdio.h>
 #include<string.h>
//*****begin********
void bubbleSort(char str[], int len) {
    int i, j;
    char temp;
    for(i = 0; i < len - 1; i++) {
        for(j = 0; j < len - i - 1; j++) {
            if(str[j] < str[j+1]) {
                temp = str[j];
                str[j] = str[j+1];
                str[j+1] = temp;
            }
        }
    }
}

int main() {
    char str[100];
    scanf("%s", str);
    int len = strlen(str);
    bubbleSort(str, len);
    printf("%s\n", str);
    return 0;
}
//*****end********

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是的,我了解您的问题。MySQL是一种开源的关系型数据库管理系统,因其易用性和可靠性而备受欢迎。以下是一些关于MySQL数据库管理的常见问题和答案: 1. 如何创建一个MySQL数据库? 答:您可以使用MySQL命令行或者MySQL Workbench来创建一个新的数据库。在命令行,您可以使用CREATE DATABASE语句来创建一个新的数据库。在MySQL Workbench,您可以使用“Create a new Schema”向导来创建一个新的数据库。 2. 如何备份和恢复MySQL数据库? 答:您可以使用mysqldump命令来备份MySQL数据库,通过将备份文件导入到新的MySQL服务器来恢复MySQL数据库。另外,您也可以使用MySQL Workbench的备份和恢复功能来备份和恢复MySQL数据库。 3. 如何优化MySQL数据库的性能? 答:您可以通过使用索引、优化查询、调整服务器参数和升级硬件等方式来优化MySQL数据库的性能。另外,您也可以使用MySQL Workbench的性能分析器来分析查询语句的性能,并查找潜在的性能问题。 4. 如何保护MySQL数据库的安全性? 答:您可以通过使用强密码、限制对MySQL服务器的访问、定期备份数据、更新MySQL服务器和应用程序等方式来保护MySQL数据库的安全性。另外,您也可以使用防火墙和安全软件来保护服务器免受网络攻击。 希望这些回答能够解决您的问题。如果您还有其他问题,请随时提出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值