矩阵相乘实例:
#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; }
参考方法:
#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; }
值传递与地址传递的区别:
#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; }
可以用 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; }
参考文档:
#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; }
感谢您的支持,我会继续努力的!
支付宝扫一扫,即可进行扫码打赏哦
1620c-examples-add-matrix
矩阵相乘实例:
1619c-examples-copy-array
参考方法:
1618c-examples-copy-array
值传递与地址传递的区别:
1617c-examples-average-arrays
可以用 scanf 的特性来控制循环:
1616c-examples-reverse-sentence-recursion
参考文档: