c语言基础编程入门练习题(四)

[编程入门]数组插入处理

题目描述

已有一个已正序排好的9个元素的数组,今输入一个数要求按原来排序的规律将它插入数组中。

输入格式

第一行,原始数列。 第二行,需要插入的数字。

输出格式

排序后的数列

样例输入

1 7 8 17 23 24 59 62 101
50

样例输出

1
7
8
17
23
24
50
59
62
101

参考代码

#define _CRT_SECURE_NO_WARNINGS

#include 

void  insert_sort(int arr[], int cr) {
    //for (int i = 0; i <= 9; i++) {
    //    if (arr[i] 
    //        for (int j = 9; j > i+1; j--) {
    //            arr[j]=arr[j-1];
    //            //printf("%d ", arr[j]);
    //        }
    //        arr[i+1] = cr;
    //    }
    //}
    int i;
    for (i = 9 - 1; (i >= 0 && arr[i] > cr); i--) {
        arr[i + 1] = arr[i]; // 向后移动元素
    }
    arr[i + 1] = cr; 
}

void print_arr(int arr[], int n) {
    for (int i = 0; i <= 9; i++) {
        printf("%d\n", arr[i]);
    }

}

int main() {
    int arr[10000];
    int n = 9;
    int cr;
    for (int i = 0; i < 9; i++) {   // 输入 9 个排好序的整数
        scanf("%d", &arr[i]);
    }
    scanf("\n%d", &cr);
    insert_sort(arr, cr);
    print_arr(arr, n);
    return 0;
}

[编程入门]数字逆序输出

时间限制: 2s 内存限制: 192MB 提交: 62472 解决: 40002

题目描述

输入10个数字,然后逆序输出。

输入格式

十个整数

输出格式

逆序输出,空格分开

样例输入

1 2 3 4 5 6 7 8 9 0

样例输出

0 9 8 7 6 5 4 3 2 1

参考代码

#define _CRT_SECURE_NO_WARNINGS

#include 

int main(){
    int a[10];
    int i;
    for (i = 0; i < 10; i++) {
        scanf("%d", &a[i]);
    }
    for (i = 9; i >= 0; i--) {
        printf("%d ", a[i]);
    }
    return 0;
}

[编程入门]自定义函数求一元二次方程

题目描述

求方程 的根,用三个函数分别求当b^2-4ac大于0、等于0、和小于0时的根,并输出结果。从主函数输入a、b、c的值。

输入格式

a b c

输出格式

x1=? x2=?

样例输入

4 1 1

样例输出

x1=-0.125+0.484i x2=-0.125-0.484i

参考代码

#define _CRT_SECURE_NO_WARNINGS // 禁用安全警告

#include  // 包含标准输入输出库
#include  // 包含数学函数库

void two(double a, double b, double delta, double* x1, double* x2) {// 两个实数根
    *x1 = (-b + sqrt(delta)) / (2 * a); 
    *x2 = (-b - sqrt(delta)) / (2 * a); 
}

void one(double a, double b, double* x1) {// 一个实数根
    *x1 = (-b) / (2 * a);  
}

void none(double a, double b, double delta, double* x1, double* x2) {// 两个虚数根
    *x1 = -b / (2 * a); // 计算实部
    *x2 = (sqrt(-delta)) / (2 * a); // 计算虚部
}

int main() {
    double delta; // 判别式
    double a, b, c; // 方程系数
    double x1, x2; // 根
    scanf("%lf %lf %lf", &a, &b, &c);
    delta = b * b - 4 * a * c;// 计算判别式
   
    if (delta > 0) {
        two(a, b, delta, &x1, &x2); 
        printf("x1=%.3lf x2=%.3lf", x1, x2); 
    }
    if (delta == 0) {
        one(a, b, &x1); 
        printf("x1=%.3lf x2=%.3lf", x1, x1); 
    }
    if (delta < 0) {
        none(a, b, delta, &x1, &x2);
        printf("x1=%.3lf+%.3lfi ", x1, x2); 
        printf("x2=%.3lf-%.3lfi \n", x1, x2);
    }
    
    return 0;
}

给一个不多于5位的正整数,要求:

①分别求出它是几位数;

②分别输出每一位数字;

③按逆序输出各位数字,例如原数为321,应输出123。

参考代码

#define _CRT_SECURE_NO_WARNINGS

#include 

int main() {
    int num, temp;
    printf("请输入一个不多于5位的正整数: ");
    scanf("%d", &num);

    // 判断位数
    int digits = 0;
    temp = num;
    while (temp > 0) {
        temp /= 10;
        digits++;
    }
    printf("它是%d位数\n", digits);

    // 输出每一位数字
    int divisor = 1;
    for (int i = 0; i < digits - 1; i++) {
        divisor *= 10;
    }
    printf("每位数字为: ");
    int temp1 = num;
    for (int i = 0; i < digits; i++) {
        int digit = temp1 / divisor;
        printf("%d ", digit);
        temp1 %= divisor;
        divisor /= 10;
    }
    printf("\n");

    // 按逆序输出各位数字
    printf("逆序输出为: ");
   /*while (digits > 0) {
    printf("%d", num % 10);
    num /= 10;
    digits--;
}*/
for (int i = 0; i < digits; i++){
    printf("%d", num % 10);
    num /= 10;
}
    printf("\n");

    return 0;
}

[编程入门]选择排序

题目描述

用选择法对10个整数从小到大排序。

输入格式

输入10个无序的数字

输出格式

排序好的10个整数

样例输入

4 85 3 234 45 345 345 122 30 12

样例输出

3
4
12
30
45
85
122
234
345
345

参考代码

#define _CRT_SECURE_NO_WARNINGS

#include 

void selection_sort(int arr[], int n) {
    int i, j, minIndex, temp;

    // 遍历整个数组
    for (i = 0; i < n - 1; i++) {
        minIndex = i;  // 假设当前元素是最小的

        // 在未排序部分中找到最小元素
        for (j = i + 1; j < n; j++) {
            if (arr[j] < arr[minIndex]) {
                minIndex = j;  // 更新最小元素的索引
            }
        }

        // 如果 minIndex 发生变化,则交换最小元素与当前元素
        if (minIndex != i) {
            temp = arr[i];
            arr[i] = arr[minIndex];
            arr[minIndex] = temp;
        }
    }
}

void print_array(int arr[], int n) {
    for (int i = 0; i < n; i++) {
        printf("%d\n", arr[i]);
    }
    printf("\n");
}

int main() {
    int arr[10];
    int n = 10;

    for (int i = 0; i < n; i++) {   // 输入 10 个整数
        scanf("%d", &arr[i]);
    }

    selection_sort(arr, n);    // 使用选择排序进行排序

    print_array(arr, n);    // 输出排序后的数组

    return 0;
}

功能:对输入的整数数组使用选择排序法进行从小到大排序

#define _CRT_SECURE_NO_WARNINGS

#include 

// 选择排序函数
void selectionSort(int arr[], int n) {
    for (int i = 0; i < n - 1; i++) {
        int minIndex = i; // 假设当前元素是最小值

        // 在未排序部分查找最小值,也就是 和自己后面的数据进行比较
        for (int j = i + 1; j < n; j++) {
            if (arr[j] < arr[minIndex]) {
                minIndex = j; // 更新最小值的位置
            }
        }

        // 交换最小值到已排序部分的末尾
        if (minIndex != i) {        //检查i是否改变,改变的就交换
            int temp = arr[i];
            arr[i] = arr[minIndex];
            arr[minIndex] = temp;
        }
    }
}

int main() {
    int n;
    printf("请输入要排序的整数个数:");
    scanf("%d", &n);

    int arr[100];
    printf("请输入 %d 个整数:\n", n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }

    // 调用选择排序
    selectionSort(arr, n);

    printf("排序后的结果:\n");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}

[编程入门]二维数组的转置

题目描述

写一个函数,使给定的一个二维数组(3×3)转置,即行列互换。

输入格式

一个3x3的矩阵

输出格式

样例输入

1 2 3
4 5 6
7 8 9

样例输出

1 4 7 
2 5 8 
3 6 9 

参考代码

#define _CRT_SECURE_NO_WARNINGS

#include 

void transpose(int arr[3][3]) {
	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < 3; j++) {
			printf("%d ", arr[j][i]);
		}
		printf("\n");
	}
}

int main() {
	int arr[3][3];
	for(int i=0;i<3;i++){   //输入数据
		for (int j = 0; j < 3; j++) {
			scanf("%d", &arr[i][j]);
		}
	}
	transpose(arr);
	return 0;
}

[编程入门]自定义函数之字符串反转

题目描述

写一函数,使输入的一个字符串按反序存放,在主函数中输入并输出反序后的字符串(不包含空格)。

输入格式

一行字符

输出格式

逆序后的字符串

样例输入

123456abcdef 

样例输出

fedcba654321

参考代码

#define _CRT_SECURE_NO_WARNINGS

#include 
#include 

// 定义一个函数来反转字符串
void reverseString(char str[]) {
    int length = strlen(str);
    int start = 0;
    int end = length - 1;
    char temp;

    //while (start < end) {
    //    // 交换字符
    //    temp = str[start];
    //    str[start] = str[end];
    //    str[end] = temp;
    //    start++;
    //    end--;
    //}
    for (int i = length-1; i >=0; i--) {
        printf("%c", str[i]);
    }
}

int main() {
    char str[100]; // 假设输入字符串的最大长度为99

    printf("请输入一个字符串(不包含空格):");
    scanf("%s", str); // 读取输入字符串

    reverseString(str); // 调用反转函数

    //printf("%s\n", str); // 输出反序后的字符串

    return 0;
}

获取一个整数的长度(即该整数有多少位)

#include 
#include 

int main() {
    int number = 12345;
    char str[20]; // 确保数组足够大以容纳整数和终止符

    // 将整数转换为字符串
    sprintf(str, "%d", number);

    // 计算字符串的长度
    int length = strlen(str);

    printf("The length of the integer %d is: %d\n", number, length);

    return 0;
}

sprintf(str, "%d", number); 这句代码的作用是将整数 number 转换为字符串,并将结果存储在字符数组 str 中。

具体来说:

  • sprintf 是一个标准库函数,定义在 头文件中。它用于将格式化的数据写入字符串。
  • str 是目标字符数组,用于存储转换后的字符串。
  • "%d" 是格式说明符,表示将一个整数以十进制形式输出。
  • number 是要被转换的整数。

举个例子,如果 number 的值是 12345,那么执行完这句代码后,str 的内容将是 "12345"

你可能感兴趣的:(c语言基础编程入门练习题,c语言,算法,数据结构)