1.局部变量和全局变量
局部变量(Local Variable):定义在函数体内部的变量,作用域仅限于函数体内部。离开函数体就会无效。再调用就是出错。
全局变量(Global Variable):定义:所有的函数外部定义的变量,它的作用域是整个程序,也就是所有的源文件,包括.c和.h文件
2.作业题
(1)交换二维矩阵的两行(函数实现):
#include<stdio.h>
#include<stdlib.h>
int Hang, Lie;
int **init_Array(int, int);
void swapArrayHang(int **Array, int FirstHang, int Second);
void printArray(int **Array);
int main() {
printf("请输入矩阵的行数和列数!\n");
scanf("%d %d", &Hang, &Lie);
int **Array = init_Array(Hang, Lie);
printf("请输入您要交换的行数!\n");
int a, b;
scanf("%d%d", &a, &b);
swapArrayHang(Array,a,b);
printArray(Array);
system("pause");
return 0;
}
int **init_Array(int Hang, int Lie) {
int ** Array = (int **)malloc(Hang * sizeof(int *));
for (int i = 0; i<Lie; i++) {
Array[i] = (int *)malloc(Lie * sizeof(int));
}
printf("请输入一个%d行%d列的二位矩阵:\n", Hang, Lie);
for (int i = 0; i<Hang; i++) {
for (int j = 0; j<Lie; j++) {
scanf("%d", &Array[i][j]);
}
}
return Array;
}
void swapArrayHang(int **Array, int FirstHang, int SecondHang) {
int *tempArray = (int *)malloc(Lie * sizeof(int));
for (int i = 0; i<Lie; i++) {
tempArray[i] = Array[FirstHang-1][i];
Array[FirstHang-1][i] = Array[SecondHang-1][i];
Array[SecondHang-1][i] = tempArray[i];
}
}
void printArray(int **Array) {
printf("二维数组:\n");
for (int i = 0; i<Hang; i++) {
for (int j = 0; j<Lie; j++) {
printf("%d ", Array[i][j]);
}
printf("\n");
}
printf("\n");
}
(2)每位数的积小于和的两位数
#include<stdio.h>
#include<stdlib.h>
int chengJi(int n);
int he(int n);
int main() {
for (int n = 10; n <= 99; n++) {
if (chengJi(n) < he(n)) {
printf("%d ", n);
}
}
printf("100\n");
system("pause");
return 0;
}
int chengJi(int n) {
int a = n % 10;
int b = n / 10;
return a*b;
}
int he(int n) {
int a = n % 10;
int b = n / 10;
return a + b;
}
(3)必有球的个数和其他球的个数
#include<stdio.h>
#include<stdlib.h>
const char Red = 'r';
const char White = 'w';
const char Black = 'b';
void biYouBlack();
void biYouRed();
void biYouWhite();
int main() {
printf("请输入必有的球的颜色(r/w/b):\n");
char temp;
scanf("%c", &temp);
switch (temp)
{
case 'r': {
biYouRed();
break;
}
case 'w': {
biYouWhite();
}
default:
biYouBlack();
break;
}
system("pause");
return 0;
}
void biYouBlack() {
for (int b = 1; b <= 6; b++) {
for (int r = 0; r <= 3; r++) {
int NumOfOthers = 8 - b;
int NumOfWhite = NumOfOthers - r;
if (NumOfWhite > 5||NumOfWhite<0) {
continue;
}
else {
printf("%d red,%d white,%d black\n",r,NumOfWhite,b);
}
}
}
}
void biYouRed() {
for (int r = 1; r <= 3; r++) {
for (int w = 0; w <= 5; w++) {
int NumOfOthers = 8 - r;
int NumOfBlack = NumOfOthers - w;
if (NumOfBlack > 6 || NumOfBlack < 0) {
continue;
}
else {
printf("%d red,%d white,%d black\n", r, w, NumOfBlack);
}
}
}
}
void biYouWhite() {
for (int w = 1; w <= 5; w++) {
for (int b = 0; b <= 6; b++) {
int NumOfOthers = 8 - w;
int NumOfRed = NumOfOthers - b;
if (NumOfRed > 3 || NumOfRed < 0) {
continue;
}
else {
printf("%d red,%d white,%d black\n", NumOfRed, w, b);
}
}
}
}
(4)数列求和
#include<stdio.h>
#include<stdlib.h>
double **init_Array(int Hang, int Lie);
int main() {
double **Array = init_Array(2, 20);
double sum = 0;
for (int j = 0; j < 20; j++) {
double temp = Array[0][j]/Array[1][j];
sum+=temp;
}
printf("%f\n",sum);
system("pause");
return 0;
}
double **init_Array(int Hang, int Lie) {
double ** Array = (double **)malloc(Hang * sizeof(double *));
for (int i = 0; i<Lie; i++) {
Array[i] = (double *)malloc(Lie * sizeof(double));
}
for(int i=0;i<Hang;i++){
for(int j=0;j<Lie;j++){
Array[i][j]=0.0;
}
}
for (int j = 0; j<Lie; j++) {
for (int i = 0; i<Hang; i++) {
if (i == 0 && j == 0) {
Array[i][j] = 2.0;
continue;
}
if (i == 1 && j == 0) {
Array[i][j] = 1.0;
continue;
}
if(i==0){
Array[i][j] = Array[i][j-1] + Array[i + 1][j-1];
}
else{
Array[i][j] = Array[i-1][j-1];
}
}
}
return Array;
}
(5)矩阵转置
#include<stdio.h>
#include<stdlib.h>
int Hang,Lie;
int **init_Array(int Hang, int Lie);
void printArray(int **Array);
int **tranSpose(int **Array);
int main() {
printf("请输入矩阵的行数和列数!\n");
scanf("%d %d", &Hang, &Lie);
int **Array = init_Array(Hang, Lie);
int **TheArray = tranSpose(Array);
printArray(TheArray);
system("pause");
return 0;
}
int **init_Array(int Hang, int Lie) {
int ** Array = (int **)malloc(Hang * sizeof(int *));
for (int i = 0; i<Lie; i++) {
Array[i] = (int *)malloc(Lie * sizeof(int));
}
printf("请输入一个%d行%d列的二位矩阵:\n", Hang, Lie);
for (int i = 0; i<Hang; i++) {
for (int j = 0; j<Lie; j++) {
scanf("%d", &Array[i][j]);
}
}
return Array;
}
int **tranSpose(int **Array) {
int ** tempArray = (int **)malloc(Lie * sizeof(int *));
for (int i = 0; i<Hang; i++) {
tempArray[i] = (int *)malloc(Hang * sizeof(int));
}
for (int tempHang = 0; tempHang < Lie; tempHang++) {
for (int tempLie = 0; tempLie < Hang; tempLie++) {
tempArray[tempHang][tempLie] = Array[tempLie][tempHang];
}
}
return tempArray;
}
void printArray(int **Array) {
printf("二维数组:\n");
for (int i = 0; i<Hang; i++) {
for (int j = 0; j<Lie; j++) {
printf("%d ", Array[i][j]);
}
printf("\n");
}
printf("\n");
}