实验四,

实验一:
int数组中元素地址是连续的,int类型每个元素占四字节,数组名和第一个元素的地址相同;

char数组中元素地址是连续的,char类型每个元素占一字节,数组名和第一个元素的地址相同;

二维数组内存按行连续存放,每个元素占(4或1)字节,每个一维数组占(元素个数*元素类型所占字节数),在字面上地址相同;

二维数组中相邻一位数组的首地址,相差(元素类型大小*元素数量);

实验二:

puts()参数是字符串类型,第一个接收的是一位数组本身,第二个是添加索引,来使用二维数组中的第一个一维数组;

实验三:

复制代码

#include<stdio.h>
#include<string.h>
#define N 100

void dec_to_n(int x, int n);// 函数声明

int main() {
int x;
printf("输入一个十进制整数: ");
while(scanf_s("%d", &x) != EOF) {
dec_to_n(x, 2); // 函数调用: 把x转换成二进制输出
dec_to_n(x, 8); // 函数调用: 把x转换成八进制输出
dec_to_n(x, 16); // 函数调用: 把x转换成十六进制输出
printf("\n输入一个十进制整数: ");
}
return 0;
}


// 函数定义
// 功能: 把十进制数x转换成n进制,打印输出
// 补足函数实现
// ×××
void dec_to_n(int x,int n){
char arr[64]={};
int count=0;
int number=0;
while(x!=0){
number=x%n;
arr[count++]=number;
x/=n;
}//把余数倒叙记录到数组中
count--;//因为数组元素个数是count--
for(int i=count;i>=0;i--){
if(arr[i]>9){
switch(arr[i]){
case 10:
printf("%c",'A');
break;
case 11:
printf("%c",'B');
break;
case 12:
printf("%c",'C');
break;
case 13:
printf("%c",'D');
break;
case 14:
printf("%c",'E');
break;
case 15:
printf("%c",'F');
break;
}
}//选择心仪的字母
else{
printf("%d",arr[i]);
}
}
printf("\n");
}

复制代码

实验五

复制代码
#include <stdio.h>
#define N 5
// 函数声明
  void input(int x[], int n);
  void output(int x[], int n);
  double average(int x[], int n);
  void bubble_sort(int x[], int n);

int main() {
  int scores[N];
  double ave;
   printf("录入%d个分数:\n", N);
  input(scores, N);
printf("\n输出课程分数: \n");
output(scores, N);
printf("\n课程分数处理: 计算均分、排序...\n");
ave = average(scores, N);
bubble_sort(scores, N);
printf("\n输出课程均分: %.2f\n", ave);
printf("\n输出课程分数(高->低):\n");
output(scores, N);
getchar();
getchar();//两个getchar()让系统为我停下脚步^-^
return 0;
}
// 函数定义
// 输入n个整数保存到整型数组x中
void input(int x[], int n) {
   int i;
for(i = 0; i < n; ++i)
scanf("%d", &x[i]);
}
// 输出整型数组x中n个元素
void output(int x[], int n) {
int i;
for(i = 0; i < n; ++i)
printf("%d ", x[i]);
printf("\n");
}
// 计算整型数组x中n个元素均值,并返回
// 补足函数average()实现
double average(int x[], int n){
  double sum=0;
  for(int i=0;i<n;i++){
  sum+=x[i];
  }
  return sum/n;
}

// 对整型数组x中的n个元素降序排序
// 补足函数bubble_sort()实现
void bubble_sort(int x[], int n){
    for(int i=n;i>0;i--){
        for(int j=0;j<i;j++){
            if(x[j]<x[j+1]){
            int temp=x[j];
            x[j]=x[j+1];
            x[j+1]=temp;}
        }
    }
}
复制代码

实验六

复制代码
#include <stdio.h>
#include <string.h>
#define N 5
#define M 20
// 函数声明
void output(char str[][M], int n);
void bubble_sort(char str[][M], int n);
int main() {
char name[][M] = {"Bob", "Bill", "Joseph", "Taylor", "George"};
int i;
printf("输出初始名单:\n");
output(name, N);
printf("\n排序中...\n");
bubble_sort(name, N); // 函数调用
printf("\n按字典序输出名单:\n");
output(name, N);
getchar();
getchar();
return 0;
}
// 函数定义
// 功能:按行输出二维数组中的字符串
void output(char str[][M], int n) {
    int i;
for(i = 0; i < n; ++i)
printf("%s\n", str[i]);
}
// 函数定义
// 功能:使用冒泡排序算法对二维数组str中的n个字符串按字典序排序
// 补足函数bubble_sort()实现

void bubble_sort(char str[][M], int n){
    for(int i=n;i>0;i--){
        for(int j=0;j<i;j++){
            if(strcmp(str[j],str[j+1])>0){
                char C[M]={};
                strcpy(C,str[j]);
                strcpy(str[j],str[j+1]);
                strcpy(str[j+1],C);
            }
        }
    }

}
复制代码

实验七

复制代码
#include<stdio.h>
#define M 100

int value(char X[],int n);
int main(){
    int n=0;
    while(scanf_s("%d",&n)!=EOF){
        char numb[M]={};
        int count=0;
        //把该数拆开
        while(n!=0){
           numb[count]=n/10;
            n/=10;
            count++;
        }
        if(value(numb,count)==1){
         printf("YES\n");}
        else{
        printf("NO\n");
        }
        printf("\n");
      }
    return 0;
  }
int value(char X[],int n){
    for(int i=0;i<n-1;i++){
        for(int j=i+1;j<n;j++){
            if(X[i]==X[j]){
            return 1;}
        }
    }
    return 0;
}
复制代码

实验八

#include <stdio.h>
#include<string.h>
#define N 100
#define M 4

// 函数声明
void output(int x[][N], int n);
void rotate_to_right(int x[][N], int n);


int main() {
    int t[][N] = { {21, 12, 13, 24},
                  {25, 16, 47, 38},
                  {29, 11, 32, 54},
                  {42, 21, 33, 10} };

    printf("原始矩阵:\n");
    output(t, M); // 函数调用

    rotate_to_right(t, M); // 函数调用

    printf("变换后矩阵:\n");
    output(t, M); // 函数调用

    return 0;
}

// 函数定义
// 功能: 输出一个n*n的矩阵x
void output(int x[][N], int n) {
    int i, j;

    for (i = 0; i < n; ++i) {
        for (j = 0; j < n; ++j)
            printf("%4d", x[i][j]);

        printf("\n");
    }
}

// 待补足3:函数rotate_to_right()定义
// 功能: 把一个n*n的矩阵x,每一列向右移, 最右边被移出去的一列绕回左边
void rotate_to_right(int x[][N], int n) {//n为移动步数
    int numb = M;
    while (numb >= N - 1) {
        numb -= 4;
    }
    if (numb == 0) {
        return;
    }
    //

    int C[N][N] = {};
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            C[i][j] = x[i][j];
        }
    }
    for (int i = 0; i <n; i++) {//M=4
        for (int j = 0; j < n; j++) {
            if (i + numb < n - 1) {
                x[j][i + numb] = C[j][i];
            }
            else {
                x[j][i + numb - 4] = C[j][i];
            }
        }
    }
}

 

posted @ 2023-11-13 19:07  Mthe  阅读(14)  评论(0编辑  收藏  举报