C语言练习题(持续更新)

Posted 康小庄

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言练习题(持续更新)相关的知识,希望对你有一定的参考价值。

冒泡排序

/**
 * 冒泡排序
 */
void bubbleSort(int * arr,int len) 
    int temp = 0;
    for (int i = 0; i < len; i++) 
        for (int j = 0; j < len - i - 1; j++) 
            if (arr[j] > arr[j + 1]) 
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            
        
    
    for (int i = 0; i < len; i++) 
        printf("%d ", arr[i]);
    
    printf("\\n");

选择排序

/**
 * 选择排序
 */
void SelectSort(int * arr,int len) 
    for (int i = 0; i < len; ++i) 
        int minIndex = i;
        // 假定最小的第一个数
        int min = arr[i];
        for (int j = i + 1; j < len; ++j) 
            // 假定的不是最小
            if (min > arr[j]) 
                // 更新最小值
                min = arr[j];
                minIndex = j;
            
        
        if (minIndex != i) 
            arr[minIndex] = arr[i];
            arr[i] = min;
        
    
    for (int i = 0; i < len; i++) 
        printf("%d ", arr[i]);
    


### 插入排序
```c
/**
 * 插入排序
 */
void insertSort(int * arr,int len) 
    for (int i = 0; i < len; ++i) 
        int insertValue = arr[i];
        int insertIndex = i - 1;
        while (insertIndex >= 0 && insertValue < arr[insertIndex]) 
            arr[insertIndex + 1] = arr[insertIndex];
            insertIndex--;
        
        if (insertIndex + 1 != i) 
            arr[insertIndex + 1] = insertValue;
        
    
    for (int i = 0; i < len; i++) 
        printf("%d ", arr[i]);
    
    printf("\\n");

int main(void) 
    int arr[5] = 3, 9, -1, 10, 2;
    int len = sizeof(arr) / sizeof(arr[0]);
    insertSort(arr,len);
    bubbleSort(arr,len);
    SelectSort(arr,len);
    return 0;


二维数组计算成绩

void main() 
    int l;
    int i, j;
    int v[3];
    int s;
    float sum;
    int score[5][3] = 80, 75, 92, 61, 65, 71, 59, 63, 70, 85, 87, 90, 76, 77, 85;
    for (i = 0; i < 3; i++) 
        for (j = 0; j < 5; j++) 
            s = s + score[j][i];
        
        v[i] = s / 5;
        s = 0;
    
    l = (v[0] + v[1] + v[2]) / 3;
    printf("Math:%d\\nC:%d\\nENG:%d\\n", v[0], v[1], v[2]);
    printf("total:%d\\n", l);
    int a = score[0][0] + score[0][1] + score[0][2];
    printf("%d\\n", a);
    for (i = 0; i < 5; i++) 
        for (j = 0; j < 3; j++) 
            sum += score[i][j];
        
        printf("第%d学生平均成绩是%f\\n", i + 1, sum / 3);
        sum = 0;
    

求二维数组(三行三列的对角线元素的和)

/**
 * 求二维数组(三行三列的对角线元素的和)  00 11 22 02 11 20
 */
void test01() 
    int arr[3][3] = 80, 75, 92,
                     71, 59, 63,
                     87, 90, 76;
    int row = sizeof(arr) / sizeof(arr[0]);
    int col = sizeof(arr[0]) / sizeof(arr[0][0]);
    int sum = 0;
    for (int i = 0; i < row; i++) 
        for (int j = 0; j < col; j++) 
            if ((i == j) || (i + j == row - 1)) 
                if (i == 1 && j == 1) 
                    sum += arr[i][j] * 2;
                 else 
                    sum += arr[i][j];
                
            
        
    
    printf("对角线的和为:%d\\n", sum);

求二位数组(五行五列)中最大的元素及其行列号

/**
 * 求二位数组(五行五列)中最大的元素及其行列号
 */
void test02() 
    int arr[5][5] = 80,  75,  92,  61,  65,
                     71,  59,  63,  70,  85,
                     87,  90,  76,  77,  85,
                     66,  44,  58,  35,  69,
                     182, 414, 158, 135, 69;
    // 定义max
    int max = 0;
    int hang, lie;
    int row = sizeof(arr) / sizeof(arr[0]);
    int col = sizeof(arr[0]) / sizeof(arr[0][0]);
    for (int i = 0; i < row; i++) 
        for (int j = 0; j < col; ++j) 
            if (max < arr[i][j]) 
                max = arr[i][j];
                hang = i;
                lie = j;
            
        
    
    printf("最大的元素是%d\\n", max);
    printf("位置是arr[%d][%d]\\n", hang, lie);


打印杨辉三角

/**
 * 打印杨辉三角
 */
void test03() 
    int arr[10][10];
    for (int i = 0; i < 10; i++) 
        for (int j = 0; j < i + 1; j++) 
            if (j == 0 || j == i) 
                arr[i][j] = 1;
             else 
                arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
            
        
    
    for (int i = 0; i < 10; i++) 
        for (int j = 0; j < i + 1; j++) 
            printf("%d ", arr[i][j]);
        
        printf("\\n");
    

找出一个矩阵中的鞍点,即该位置元素的该行上最大,该列上最小,一个矩阵可能没有鞍点,如果没有输出对应的信息,如果有,则输出鞍点位置和值

/**
 * 找出一个矩阵中的鞍点,即该位置元素的该行上最大,该列上最小,一个矩阵可能没有鞍点,如果没有输出对应的信息,如果有,则输出鞍点位置和值
 */
void test04() 
    int arr[3][3] = 15, 30, 92,
                     71, 59, 100,
                     87, 90, 120;
    int row = sizeof(arr) / sizeof(arr[0]);
    int col = sizeof(arr[0]) / sizeof(arr[0][0]);
    // 记录坐标
    int a = 0;
    int b = 0;
    int num;
    // 行最大
    int max = 0;
    // 列最小
    int min = 0;
    for (int i = 0; i < row; i++) 
        max = arr[i][0];
        for (int j = 0; j < col; j++) 
            if (arr[i][j] > max)   // 行内最大
                max = arr[i][j];
                b = j;  //i 行最大的数在j列,那么现在去第j列找最小的数,如果找到的数的行数为i,便是;
            
        
        min = arr[i][b];  // 设目前最小为i行b列
        a = i;  // 假设
        for (int k = 0; k < row; k++) 
            if (arr[k][b] < min)   // 列内最小
                min = arr[k][b];
                a = k;  // 如果有更小的,那么a就变化
            
        
        if (a == i) 
            num = 0;
            printf("本数组的鞍点为:arr[%d][%d] = %d\\n", a, b, min);
        
    
    if (num) 
        printf("本数组不存在鞍点");
    

字符练习

void test() 
    char str[30];
    scanf("%s", str);
    printf("%s", str);


void test02() 
    char c = 'a';
    char t[] = "you and me";
    int n, k, j;
    n = strlen(t);
    for (k = 0; k < n; k++)
        if (t[k] == c) 
            j = k;
            break;
         else j = -1;
    printf("%d", j);


void test03() 
    char a[4][10] = "11", "22", "33", "44";
    puts(strcat(a[1], a[3]));
    puts(strcpy(a[0], a[2]));

    char str[2][10] = "abc", "ABC";
    printf("%c\\n", str[1]);
    printf("%c\\n", str[0]);
    printf("%d\\n", strcmp(str[1], str[0]));
    printf("%d\\n", strcmp(strlwr(str[1]), str[0]));


void test04() 
    char s[3][20] = "2345", "123456", "2347";
    int i, k;
    for (k = 0, i = 1; i < 3; i++) 
        printf("%s\\n", s[k]);
        printf("%s\\n", s[i]);
        if ((strcmp(s[k], s[i])) < 0) 
            k = i;
        
    
    puts(s[k]);

编写一个程序,将字符数组a中的全部字符复制到字符数

以上是关于C语言练习题(持续更新)的主要内容,如果未能解决你的问题,请参考以下文章

一个博客萌新的C语言之旅(持续更新中....)

大学生必学练习题 - C 语言经典50例

大学生必学练习题 - C 语言经典50例

C语言试题七十九之请编写函数实现自然底数 e=2.718281828

C语言试题七十九之请编写函数实现自然底数 e=2.718281828

软件测试小白!测试笔试100练习题内含答案建议收藏...持续更新中~