C 语言教程 在线

1620c-examples-add-matrix

矩阵相乘实例:

#include <stdio.h>

// 求 m*k 型矩阵 A 左乘 k*n 型矩阵 B 后的 m*n 型矩阵 C

int main()
{
    struct Matrixs
    {
        int elements[100][100];
        int row;
        int col;
    }matrixA, matrixB, matrixC;

    int m, k, n;
    printf("请输入矩阵A行数和列数:");
    scanf("%d %d", &matrixA.row, &matrixA.col);
    matrixB.row = matrixA.col;//矩阵A的列数等于矩阵B的行数
    printf("请输入矩阵B列数:");
    scanf("%d", &matrixB.col);
    printf("\n输入矩阵A:\n");
    for (m = 0; m < matrixA.row; ++m)
    for (k = 0; k < matrixA.col; ++k)
    {
        printf("请输入元素A(%d,%d):", m+1, k+1);
        scanf("%d", &matrixA.elements[m][k]);
    }

    printf("\n输入矩阵B:\n");
    for (k = 0; k < matrixA.col; ++k)
        for (n = 0; n < matrixB.col; ++n)
        {
            printf("请输入元素B(%d,%d):", k+1, n+1);
            scanf("%d", &matrixB.elements[k][n]);
        }
    for (m = 0; m < matrixA.row; ++m)
        for (n = 0; n < matrixB.col; ++n)
            for (k = 0; k < matrixA.col; ++k)
            {
            if (k == 0) matrixC.elements[m][n] = 0;//为新矩阵C每个元素初始化
                matrixC.elements[m][n] += matrixA.elements[m][k] * matrixB.elements[k][n];
            }
            printf("\n\n矩阵A为:\n\n");
    for (m = 0; m < matrixA.row; ++m)
    {
        printf("  |");
        for (k = 0; k < matrixA.col; ++k)
        {
            printf(" %-5d", matrixA.elements[m][k]);
        }
        printf("\b\b\b|\n");
    }
    printf("\n\n矩阵B为:\n\n");
    for (k = 0; k < matrixB.row; ++k)
    {
        printf("  |");
        for (n = 0; n < matrixB.col; ++n)
        {
            printf(" %-6d", matrixB.elements[k][n]);
        }
        printf("\b\b|\n");
    }

    printf("\n矩阵A左乘矩阵B为:\n\n");
    for (m = 0; m < matrixA.row; ++m)
    {
        printf("  |");
        for (n = 0; n < matrixB.col; ++n)
        {
            printf(" %-6d",matrixC.elements[m][n]);
        }
        printf("\b\b|\n");
    }
    printf("\n");
    return 0;
}

1619c-examples-copy-array

参考方法:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int array[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    int *arrayPointer = (int*)calloc(sizeof(array) / sizeof(array[0]), sizeof(int)), i;//令指针指向一块新内存区,该内存区大小刚好可以容纳旧数组所有元素
    for ( i = 0; i < sizeof(array)/sizeof(array[0]); i++)
        *arrayPointer++ = array[i];

    *arrayPointer = '\0';//为新数组手动添上结束标记
    arrayPointer -= sizeof(array) / sizeof(array[0]);//指针归首位
    printf("元素数组 -> 拷贝后的数组 \n");
    for (i = 0; i < sizeof(array) / sizeof(array[0]); i++)
        printf("%5d%13d\n",array[i],arrayPointer[i]);
    return 0;
}

1618c-examples-copy-array

值传递与地址传递的区别:

#include "stdio.h"

int ArrayCopy(char* ori, char* cop, char Length)
{  
  char loop;
  for(loop = 0; loop < Length; loop++) 
  {
    *cop++ = *ori++;
  } 
  return 0;
}
int main() 
{
   char original[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
   char *copiedOne=original;
   char copiedTwo[10];
   char loop;
   char Length;
    
   Length = sizeof(original);
   printf("元素数组 -> 拷贝后的数组 \n");
   for(loop = 0; loop < sizeof(original); loop++) 
   {
     printf("   %2d        %2d\n", original[loop], copiedOne[loop]);
   }
   ArrayCopy(original,copiedTwo, Length);
    
   copiedTwo[9] = 20;
   printf("值传递:\n");
   printf("值传递更改数据后,只有拷贝的数组中的元素被更改: \n");
   printf("元素数组 -> 拷贝后的数组 \n");
   for(loop = 0; loop < sizeof(original); loop++) 
   {
      printf("   %2d        %2d\n", original[loop], copiedTwo[loop]);
   }
    
   copiedOne[9] = 50;
   printf("地址传递:\n");
   printf("地址传递更改数据后,原数组元素与拷贝的数组中的元素同时被更改: \n");
   printf("元素数组 -> 拷贝后的数组 \n");
   for(loop = 0; loop < sizeof(original); loop++) 
   {
     printf("   %2d        %2d\n", original[loop], copiedOne[loop]);
   }
    
   return 0;
}

1617c-examples-average-arrays

可以用 scanf 的特性来控制循环:

#include <stdio.h>

int main(void)
{
    float x;
    printf("请输入数字:(输入q退出)");
    int i=0;
    float status;
    float sum=0;
    float avg=0;
    status=scanf("%f", &x);
    while ( status==1 ) {
        sum+=x;
        printf("请输入数字:(输入q退出)");
        status=scanf("%f", &x);
        i++;
    }
    avg=sum/(i);
    printf("%.2f",avg);
    return 0;
}

1616c-examples-reverse-sentence-recursion

参考文档:

#include <stdio.h>
#include <string.h>
int main()
{
    char c[40];
    int i=1;
    printf("请输入字符串:");
    scanf("%s",c);
    int j=strlen(c);
    do{
        printf("%c",c[j-i]);
        ++i;
    } while(i<=j);
    return 0;
}