实验四

实验1

 

int型一维数组连续存放,占四个字节,一样的

char型一维数组连续存放,占一个字节,一样的

int型二维数组连续存放,占四个字节,一样的

char型二维数组,连续存放,占一个字节,一样的

相差16个字节   相差4个字节

相差的都是第一行元素所占内存

实验二

text1中是一维数组,text2中是二维数组

一维数组时,puts的实参直接写成数组名

二维数组时,puts的实参加【0】表示第一行,【1】表示第二行

实验三

#include <stdio.h>

#define N 80

int count(char x[]);

int main() {
    char words[N+1];
    int n;

    while(gets(words) != NULL) {
        n = count(words);
        printf("单词数: %d\n\n", n);
    }

    return 0;
}

int count(char x[]) {
    int i;
    int word_flag = 0;  // 用作单词标志,一个新单词开始,值为1;单词结束,值为0
    int number = 0;  // 统计单词个数

    for(i = 0; x[i] != '\0'; i++) {
        if(x[i] == ' ')
            word_flag = 0;
        else if(word_flag == 0) {
            word_flag = 1;
            number++;
        }
    }

    return number;
}

实验四

#include <stdio.h>
#define N 100
void dec_to_n(int x, int n); // 函数声明

int main() {
    int x;

    printf("输入一个十进制整数: ");
    while(scanf("%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;
}
void dec_to_n(int x, int n)
{
    int a[100],i=0,k=0;
    if(n==2||n==8)
    {
        
    while(x/n!=0)
    {
        
        a[i]=x%n;
        i++;
        k++;
        x=x/n;
        
    }
    a[k]=x;
    for(i=k;i>=0;i--)
    {
        printf("%d",a[i]);
    }
    printf("\n");
    }
    else if(n==16)
    {
        if(x<=16)
        {
            printf("%x",x);
            printf("\n");
        }
        else
        {
            char s[100];
        while(x/16!=0)
        {
            if(x%16>=10)
        {
            s[i]=x%16+55;
        }
        else
            s[i]=x%16+48;
        i++;
        k++;
        x=x/16;
        }
        s[k]=x+48;
            for(i=k;i>=0;i--)
        {
            printf("%c",s[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);
    
    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");
}

double average(int x[], int n)
{
    int i;
    double sum;
    for(i=0;i<N;i++)
    {
        sum+=x[i];
    }
    return sum/N;
}

// 计算整型数组x中n个元素均值,并返回 
// 补足函数average()实现
// ××× 



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

实验七

 

#include<stdio.h>
#include<string.h>
int main()
{
    char s[100];
    int a=0;
    while(scanf("%s",s)!=EOF)
    {
        int i,j;
        for(i=0;i<strlen(s);i++)
        {
            for(j=i+1;j<strlen(s);j++)
            {
                if(s[i]==s[j])
                {
                    printf("YES\n");
                    a=1;
                    break;
                }
            }
            if(a==1)
            {
                break;
            }
        }
        if(i==strlen(s))
        {
            printf("NO\n");
        }
    }
    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");
     }
 }
void rotate_to_right(int x[][N], int n)
{
    int i;
    int b[100];
    for(i=0;i<n;i++)
    {
        b[i]=x[i][0];
        x[i][0]=x[i][n-1];
        for(int j=n-1;j>0;j--)
        {
            if(j==1)
            {
                x[i][j]=b[i];
            }
            else
            {
                x[i][j]=x[i][j-1];
            }
        }
    }
}

 

实验九

 

 

#include <stdio.h>
void g(int n) {
    int m[n][n];
    int i, j;
    // 初始化魔方矩阵
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            m[i][j] = 0;
        }
    }
    // 设置起始位置
    int row = 0;
    int col = (n-1) / 2;
    // 依次填充魔方矩阵
    for (int num = 1; num <= n * n; num++) {
        m[row][col] = num;
        // 计算下一个位置
        int nextRow = (row - 1 + n) % n;
        int nextCol = (col + 1) % n;
        // 如果下一个位置已经被占用,则向下移动一行
        if (m[nextRow][nextCol] != 0) {
            row = (row + 1) % n;
        } else {
            row = nextRow;
            col = nextCol;
        }
    }
    // 打印魔方矩阵
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            printf("%d\t", m[i][j]);
        }
        printf("\n");
        } 
        int sum=0;
        for(i=0;i<n;i++)
        {
            sum+=m[0][i];
        }
        printf("每行,每列,每条对角线的和都是:%d",sum);
        printf("\n");
}

int main() {
    int n;
    
    // 输入n的值
    while (scanf("%d", &n) != EOF) {
        g(n);
    }
    
    return 0;
}

 

 

 

 

 

实验六

 

 

 


#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);


return 0;
}


// 函数定义
// 功能:按行输出二维数组中的字符串
void output(char str[][M], int n) {
int i;


for(i = 0; i < n; ++i)
printf("%s\n", str[i]);
}


void bubble_sort(char str[][M], int n)
{
int i,j;
char t[100];
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(strcmp(str[j],str[j+1])>0)
{
strcpy(t,str[j]);
strcpy(str[j],str[j+1]);
strcpy(str[j+1],t);
}
}
}
}
// 函数定义
// 功能:使用冒泡排序算法对二维数组str中的n个字符串按字典序排序
// 补足函数bubble_sort()实现

 

posted @ 2023-11-13 22:42  陈星我儿  阅读(35)  评论(0)    收藏  举报