//返回


第一题
/*1、编写函数 void is_upper(char str[]) 和  void is_lower(char str[])分别实现将字符串str的字母转换成大写或者小写。主函数输入一字符串,分别调用这2个函数显示结果。
Int main()
{ char str1[80];
 Printf(“please input a string:\n”);
 Gets(str1);
 Is_upper(str1);
Printf(“upper string=%s\n”,str1);
Printf(“please input a string:\n”);
 Gets(str1);
 Is_lower(str1);
Printf(“lower string=%s\n”,str1);
}
*/
/*****************************************************************/
#include <stdio.h>
#include <ctype.h>
    
// 将字符串str中的字母转换成大写
void is_upper(char str[])
{
    int i;
    for (i = 0; str[i] != '\0'; i++)
    {
        str[i] = toupper(str[i]); // 调用toupper函数
    }
}
    
// 将字符串str中的字母转换成小写
void is_lower(char str[])
{
    int i;
    for (i = 0; str[i] != '\0'; i++)
    {
        str[i] = tolower(str[i]); // 调用tolower函数
    }
}
    
int main()
{
    char s[100];
    printf("请输入一个字符串:\n");
    gets(s); // 输入一个字符串
    printf("转换成大写后的字符串为:\n");
    is_upper(s); // 调用is_upper函数
    puts(s); // 输出转换后的字符串
    printf("转换成小写后的字符串为:\n");
    is_lower(s); // 调用is_lower函数
    puts(s); // 输出转换后的字符串
    return 0;
}

第二题
 /* 2、编写函数 int search(int a[],int n,int x)实现在数组中查找给定的x,形式参数n为数组的数据个数。要求函数查找成功返回x在数组中的下标,否则返回-1.主函数如下:
    Int main()
  { int a[20]={10,21,28,33,37,40},x;
   Printf(“please input search number:\n”);
   Scanf(“%d”,&x);
  If(search(a,6,x)>=0) printf(“search sucess!!”);
  Else printf(“search fail!”);
  }
*/  
/*****************************************************************/
#include <stdio.h>

// 顺序查找法
int search(int a[], int n, int x)
{
    int i;
    for (i = 0; i < n; i++)
    {
        if (a[i] == x) // 找到x
        {
            return i; // 返回下标
        }
    }
    return -1; // 没有找到x
}

// 折半查找法
int search(int a[], int n, int x)
{
    int low, high, mid;
    low = 0; // 查找范围的左端点
    high = n - 1; // 查找范围的右端点
    while (low <= high) // 查找范围不为空
    {
        mid = (low + high) / 2; // 计算中间元素的下标
        if (a[mid] == x) // 找到x
        {
            return mid; // 返回下标
        }
        else if (a[mid] > x) // x小于中间元素
        {
            high = mid - 1; // 在左半部分继续查找
        }
        else // x大于中间元素
        {
            low = mid + 1; // 在右半部分继续查找
        }
    }
    return -1; // 没有找到x
}

第三题
//3、编写函数 int fun(int n),计算正整数n的所有因子(1和n除外)之和。例如n=8,函数值为6,因为除1和8之外,因子有2和4
/*****************************************************************/
#include <stdio.h>

// 计算正整数n的所有因子(1和n除外)之和
int fun(int n)
{
    int sum = 0; // 存储因子之和
    int i; // 遍历变量
    for (i = 2; i < n; i++) // 从2开始,遍历所有小于n的正整数
    {
        if (n % i == 0) // 如果能被n整除
        {
            sum += i; // 则说明是n的因子,加到sum中
        }
    }
    return sum; // 返回sum作为函数值
}
    
int main()
{
    int n;
    printf("请输入一个正整数:\n");
    scanf("%d", &n); // 输入一个正整数
    printf("该数的所有因子(1和%d除外)之和为:%d\n", n, fun(n)); // 调用fun函数并输出结果
    return 0;
}

第四题
 /*   4、编写函数void sort(int a[],int n),用选择排序方法实现数组a的降序排列。主函数如下:
    Int main()
    {  int a[20]={32,12,35,23,22,15},i;
  Printf(“initialized data:\n”);
  For(i=0;i<n;i++)printf(“%3d”,a[i]);
  Printf(“\n”);
  Sort(a,6);
  Printf(“sorted data:\n”);
  For(i=0;i<n;i++)printf(“%3d”,a[i]);
  }
  */
/*****************************************************************/
#include <stdio.h>

// 用选择排序方法实现数组a的降序排列
void sort(int a[], int n)
{
    int i, j, min, temp; // 定义变量
    for (i = 0; i < n - 1; i++) // 外层循环控制排序趟数
    {
        min = i; // 假设当前位置的元素是最小的
        for (j = i + 1; j < n; j++) // 内层循环在剩余的元素中寻找最小的元素
        {
            if (a[j] < a[min]) // 如果找到比当前最小元素还小的元素
            {
                min = j; // 更新最小元素的下标
            }
        }
        if (min != i) // 如果最小元素不是当前位置的元素
        {
            temp = a[i]; // 交换两个元素的值
            a[i] = a[min];
            a[min] = temp;
        }
    }
}

第五题 -然而并没有呢
//预留位置