首页 > 编程语言 >实验4 C语言数组应用编程

实验4 C语言数组应用编程

时间:2024-11-10 17:59:03浏览次数:3  
标签:return int void 编程 C语言 ++ ans 数组 printf

实验任务1:

task1.c

源代码:

 1 #include <stdio.h>
 2 #define N 4
 3 #define M 2
 4 
 5 void test1() {
 6     int x[N] = {1, 9, 8, 4};          
 7     int i;
 8 
 9     printf("sizeof(x) = %d\n", sizeof(x));
10 
11     for (i = 0; i < N; ++i)
12         printf("%p: %d\n", &x[i], x[i]);
13 
14     printf("x = %p\n", x); 
15 }
16 
17 void test2() {
18     int x[M][N] = {{1, 9, 8, 4}, {2, 0, 4, 9}};
19     int i, j;
20 
21     printf("sizeof(x) = %d\n", sizeof(x));
22 
23     for (i = 0; i < M; ++i)
24         for (j = 0; j < N; ++j)
25             printf("%p: %d\n", &x[i][j], x[i][j]);
26     printf("\n");
27 
28     printf("x = %p\n", x);
29     printf("x[0] = %p\n", x[0]);
30     printf("x[1] = %p\n", x[1]);
31     printf("\n");
32 }
33 
34 int main() {
35     printf("测试1: int型一维数组\n");
36     test1();
37 
38     printf("\n测试2: int型二维数组\n");
39     test2();
40 
41     return 0;
42 }   

运行结果:

 

回答问题:

1.是,通常是一样的(当数组作为函数参数时,数组名将退化为指针,此时可能有差异)

2.是,不一样(X表示整个二维数组,X[0]表示二维数组的第一行,&X[0][0]表示二维数组第一行第一列的地址),16个字节,反应二维数组每一行之间的内存间隔,有利于计算行的地址

 

 

实验任务2:

task2.c

源代码:

 1 #include <stdio.h>
 2 #define N 100
 3 
 4 // 函数声明
 5 void input(int x[], int n);
 6 double compute(int x[], int n);
 7 
 8 int main() {
 9     int x[N];
10     int n, i;
11     double ans;
12 
13     while(printf("Enter n: "), scanf("%d", &n) != EOF) {
14         input(x, n);            
15         ans = compute(x, n);    
16         printf("ans = %.2f\n\n", ans);
17     }
18 
19     return 0;
20 }
21 
22 void input(int x[], int n) {
23     int i;
24 
25     for(i = 0; i < n; ++i)
26         scanf("%d", &x[i]);
27 }
28 
29 double compute(int x[], int n) {
30     int i, high, low;
31     double ans;
32 
33     high = low = x[0];
34     ans = 0;
35 
36     for(i = 0; i < n; ++i) {
37         ans += x[i];
38 
39         if(x[i] > high)
40             high = x[i];
41         else if(x[i] < low)
42             low = x[i];
43     }
44 
45     ans = (ans - high - low)/(n-2);
46 
47     return ans;
48 }

运行结果:

回答问题:

1.input:将用户输入的n个值输入到数组中

2.compute:去掉n个值中最大值和最小值,然后求平均数

 

 

实验任务3:

task2.c

源代码:

 1 #include <stdio.h>
 2 #define N 100
 3 
 4 void output(int x[][N], int n);
 5 void init(int x[][N], int n, int value);
 6 
 7 int main() {
 8     int x[N][N];
 9     int n, value;
10 
11     while(printf("Enter n and value: "), scanf("%d%d", &n, &value) != EOF) {
12         init(x, n, value);  
13         output(x, n);       
14         printf("\n");
15     }
16 
17     return 0;
18 }
19 
20 void output(int x[][N], int n) {
21     int i, j;
22 
23     for(i = 0; i < n; ++i) {
24         for(j = 0; j < n; ++j)
25             printf("%d ", x[i][j]);
26         printf("\n");
27     }
28 }
29 
30 void init(int x[][N], int n, int value) {
31     int i, j;
32 
33     for(i = 0; i < n; ++i)
34         for(j = 0; j < n; ++j)
35             x[i][j] = value;
36 }

运行结果:

回答问题:

1.第二维

2.output:输出n阶矩阵;init:定义二维数组的每一个值均为用户输入的value

 

 

实验任务4:

task4.c

源代码:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #define N 100
 4 
 5 
 6 void input(int x[], int n);
 7 double median(int x[], int n);
 8 
 9 int main() {
10     int x[N];
11     int n;
12     double ans;
13 
14     while (printf("Enter n: "), scanf_s("%d", &n) != EOF) {
15         input(x, n); 
16         ans = median(x, n); 
17         printf("ans = %g\n\n", ans);
18     }
19     return 0;
20 }
21 
22 
23 void input(int x[], int n) {
24     for (int i = 0; i < n; i++) {
25         scanf_s("%d", &x[i]);
26     }
27 }
28 
29 
30 double median(int x[], int n) {
31    
32     for (int i = 0; i < n - 1; i++) {
33         for (int j = 0; j < n - 1 - i; j++) {
34             if (x[j] > x[j + 1]) { 
35                 int temp = x[j];
36                 x[j] = x[j + 1];
37                 x[j + 1] = temp;
38             }
39         }
40     }
41 
42     
43     if (n % 2 == 0) {
44         return (x[n / 2 - 1] + x[n / 2]) / 2.0; 
45     }
46     else {
47         return x[n / 2]; 
48     }
49 }

运行结果:

 

 

 

实验任务5:

源代码:

 1 #include <stdio.h>
 2 #define N 100
 3 
 4 void input(int x[][N], int n);
 5 void output(int x[][N], int n);
 6 void rotate_to_right(int x[][N], int n);
 7 
 8 int main() {
 9     int x[N][N];
10     int n;
11 
12     printf("Enter n: ");
13     scanf_s("%d", &n);
14 
15     input(x, n);
16     printf("原始矩阵:\n");
17     output(x, n);
18 
19     rotate_to_right(x, n);
20 
21     printf("变换后矩阵:\n");
22     output(x, n);
23 
24     return 0;
25 }
26 
27 void input(int x[][N], int n) {
28     for (int i = 0; i < n; ++i) {
29         for (int j = 0; j < n; ++j)
30             scanf_s("%d", &x[i][j]);
31     }
32 }
33 
34 void output(int x[][N], int n) {
35     for (int i = 0; i < n; ++i) {
36         for (int j = 0; j < n; ++j)
37             printf("%4d", x[i][j]);
38         printf("\n");
39     }
40 }
41 
42 void rotate_to_right(int x[][N], int n)
43 {
44     int i, j, a;
45 
46     for (i = 0; i < n; ++i)
47     {
48         a = x[i][n - 1];
49         for (j = n - 1; j > 0; --j)
50         {
51             x[i][j] = x[i][j - 1];
52         }
53         x[i][0] = a;
54     }
55 }

运行结果:

 

 

实验任务6:

源代码:

 1 #include <stdio.h>
 2 #define N 100
 3 
 4 void dec_to_n(int x, int n);
 5 
 6 int main() {
 7     int x;
 8     while (printf("输入十进制整数: "), scanf_s("%d", &x) != EOF) {
 9         dec_to_n(x, 2);
10         dec_to_n(x, 8);
11         dec_to_n(x, 16);
12         printf("\n");
13     }
14     return 0;
15 }
16 
17 void dec_to_n(int x, int n) {
18     int b;
19     char a[N];
20     int index = 0;
21 
22     if (x == 0) {
23         printf("0 ");
24         return;
25     }
26 
27     while (x > 0) {
28         b = x % n;
29         if (b < 10) {
30             a[index++] = b + '0';
31         }
32         else {
33             a[index++] = b - 10 + 'A';
34         }
35         x /= n;
36     }
37     int i;
38     for (i = index - 1; i >= 0; i--) {
39         printf("%c", a[i]);
40     }
41     printf("\n");
42 }

运行结果:

 

 

实验任务7:

源代码:

 1 #include <stdio.h>
 2 #define N 100
 3 
 4 void input(int x[][N], int n);
 5 void output(int x[][N], int n);
 6 int is_magic(int x[][N], int n);
 7 
 8 int main() {
 9     int x[N][N];
10     int n;
11 
12     while (printf("输入 n: "), scanf_s("%d", &n) != EOF) {
13         printf("输入方阵:\n");
14         input(x, n);
15 
16         printf("输出方阵:\n");
17         output(x, n);
18 
19         if (is_magic(x, n))
20             printf("是魔方矩阵\n\n");
21         else
22             printf("不是魔方矩阵\n\n");
23     }
24 
25     return 0;
26 }
27 
28 void input(int x[][N], int n) {
29     int i, j;
30     for (i = 0; i < n; ++i) {
31         for (j = 0; j < n; ++j)
32             scanf_s("%d", &x[i][j]);
33     }
34 }
35 
36 void output(int x[][N], int n) {
37     int i, j;
38     for (i = 0; i < n; ++i) {
39         for (j = 0; j < n; ++j)
40             printf("%4d", x[i][j]);
41         printf("\n");
42     }
43 }
44 
45 int is_magic(int x[][N], int n) {
46     int i, j, d0 = 0;
47     int d3 = 0, d4 = 0;
48 
49     for (i = 0; i < n; i++) {
50         for (j = 0; j < n; j++) {
51             if (x[i][j] < 1 || x[i][j] > n * n)
52                 return 0;
53         }
54     }
55 
56     for (i = 0; i < n; i++) {
57         for (j = 0; j < n - 1; j++) {
58             for (int m = j + 1; m < n; m++) {
59                 if (x[i][j] == x[i][m])
60                     return 0;
61             }
62         }
63     }
64 
65     for (int f = 0; f < n; f++) {
66         d0 += x[0][f];
67     }
68 
69     for (i = 0; i < n; i++) {
70         int d1 = 0;
71         for (j = 0; j < n; j++) {
72             d1 += x[i][j];
73         }
74         if (d1 != d0)
75             return 0;
76     }
77 
78     for (i = 0; i < n; i++) {
79         int d2 = 0;
80         for (j = 0; j < n; j++) {
81             d2 += x[j][i];
82         }
83         if (d2 != d0)
84             return 0;
85     }
86 
87     for (i = 0; i < n; i++)
88         d3 += x[i][i];
89     if (d3 != d0)
90         return 0;
91 
92     for (i = 0; i < n; i++)
93         d4 += x[i][n - 1 - i];
94     if (d4 != d0)
95         return 0;
96 
97     return 1;
98 }

运行结果:

 

标签:return,int,void,编程,C语言,++,ans,数组,printf
From: https://www.cnblogs.com/666666A/p/18524457

相关文章

  • C/C++语言基础--C++模板与元编程系列五(可变惨模板,形参包展开,折叠表达式)
    本专栏目的更新C/C++的基础语法,包括C++的一些新特性前言模板与元编程是C++的重要特点,也是难点,本人预计将会更新10期左右进行讲解,这是第五期,讲解可变惨模板,形参包展开,折叠表达式等,本人感觉这一部分内容还是比较复杂的;C语言后面也会继续更新知识点,如内联汇编;欢迎收藏+关......
  • 一道题把我气笑了:) 力扣.53 最大子数组和 leetcode maximum-subarray
    数组系列力扣数据结构之数组-00-概览力扣.53最大子数组和maximum-subarray力扣.128最长连续系列longest-consecutive-sequence力扣.1两数之和N种解法two-sum力扣.167两数之和IItwo-sum-ii力扣.170两数之和IIItwo-sum-iii力扣.653两数之和IVtwo-sum-IV力......
  • 实验3 类和对象_基础编程2
    实验任务1:代码:1#pragmaonce23#include<iostream>4#include<string>56usingstd::string;7usingstd::cout;89//按钮类10classButton{11public:12Button(conststring&text);13stringget_label()const;14......
  • 【C语言】解决error C4996: 'fopen': This function or variable may be unsafe. Cons
    几天编译文件的时候报错,编译出错信息:错误1errorC4996:'fopen':Thisfunctionorvariablemaybeunsafe.Considerusingfopen_sinstead.Todisabledeprecation,use_CRT_SECURE_NO_WARNINGS.Seeonlinehelpfordetails.意思就是fopen不安全,推荐你用fopen_s,这个时......
  • 实验4 c语言数组应用编程
    task1:1#include<stdio.h>2#include<stdlib.h>3#defineN44#defineM2567voidtest1(){8intx[N]={1,9,8,4};9inti;1011printf("sizeof(x)=%d\n",sizeof(x));1213for(i=0;i<N;++i)14......
  • 实验3 类和对象_基础编程2
    任务一:源代码:button.hpp1#pragmaonce23#include<iostream>4#include<string>56usingstd::string;7usingstd::cout;89//按钮类10classButton{11public:12Button(conststring&text);13stringget_label()const......
  • Java的Future机制详解(并发编程)
    Future模式的核心思想是能够让主线程将原来需要同步等待的这段时间用来做其他的事情。(因为可以异步获得执行结果,所以不用一直同步等待去获得执行结果)在Java中,Future 是一个接口,用于表示异步计算的结果。它主要用于处理那些需要一段时间才能完成的任务,并且可以在任务完成......
  • 【网络】套接字编程——UDP通信
    >作者:დ旧言~>座右铭:松树千年终是朽,槿花一日自为荣。>目标:UDP网络服务器简单模拟实现。>毒鸡汤:有些事情,总是不明白,所以我不会坚持。早安!>专栏选自:网络>望小伙伴们点赞......
  • 洛谷题单入门1顺序结构(C语言版)
    【入门1】顺序结构Hello,World!#include<stdio.h>intmain(){printf("Hello,World!");return0;}输出字符菱形#include<stdio.h>intmain(){printf("*\n");printf("***\n");printf("*****\n&q......
  • 实验3 类和对象_基础编程2
    任务1:window.cpp1#pragmaonce2#include"button.hpp"3#include<vector>4//vector5#include<iostream>67usingstd::vector;8usingstd::cout;9usingstd::endl;1011classWindow{12public:13Window(c......