精华内容
下载资源
问答
  • C语言函数返回数组

    千次阅读 2018-02-04 21:48:41
    C语言函数能否输入或返回一个数组? 可以的,但大多数方式都是说将数组的首地址作参数输入,或是指针函数返回一个数组的首地址。而这种方式并非真正意义上的“输入”或“输出”。 参数是一个新的量被附了参考量...

    C语言,函数能否输入或返回一个数组?

    可以的,但大多数方式都是说将数组的首地址作参数输入,或是指针函数返回一个数组的首地址。而这种方式并非真正意义上的“输入”或“输出”。

    参数是一个新的量被附了参考量的值,无论函数内部如何改变这个参数,都不会对原参考量造成影响。返回值亦是如此。因为如果用传入指针的方式,显然函数内部改动数组任意一个元素都会直接改写原数组。故不能说这种方式是数组输入。

    函数可以具有参数和返回值,而参数和返回值本质上只是“一串具有特定储存位置和长度的数据”而已。

    是的,仅仅具有“储存位置”和“长度”就足够了,跟它的数据类型没有任何关系。
    我们在写代码时会十分注意数据类型,而在编译后机器运行时,一切数据都是一串bin在内存特定区域的特定排列。
    例如:“char fun1()”“short fun2()”“long fun3()”这几个函数有什么区别呢?
    也许看上去我们会直观的说:fun1返回值为char型,fun2返回值为short型,fun3()返回值为long型……
    这没错,但这是编译以前的说法。
    在机器看来,它们的区别是:fun1返回1Byte,fun2返回返回2Byte,fun3()返回返回4Byte。
    那么“signed …”和“unsigned …”(大小相同)岂不是等效了吗?
    有区别,那是因为编译的时候编译器会对这些情况进行自动处理,毕竟编译器对数据类型还是比较敏感的,而运行时,它们的确是等效的(1Byte)。
    简单来说,“数据类型=数据长度+处理方式”,编译器关心的是处理方式,而机器运行仅仅关心数据长度。

    言归正传,怎么让一个函数返回一个“完整的数组”呢?(并不是返回首地址)

    “数据类型=数据长度+处理方式”。

    参数、返回值,仅仅有地址和数据长度就足够了,我们并不关心它的处理方式,因为返回值传递过程不需要进行数据处理。

    但怎么去描述一个数据(返回值)的长度呢?数据类型并不重要,可它却是描述数据长度的唯一方式。我们要确定一个长度,就要用一个类型来描述它……把整个数组当返回值,必然面临的问题是:返回值的长度与数组相同,数组可以很长,而可供我们选择、用来描述长度的数据类型(char,short,long,long long…)又很有限……很无解不是吗?

    别忘了还有“构造类型”。结构体这东西一般用的不多,但关键时刻它的用法花样不少。下面附一串代码:

     

    #include<stdio.h>

     

    typedef

    struct

    {

    char x[16];

    }

    newtype;

     

    newtype fun(void)

    {

    char str[16]="Hello world!\n";

    return *(newtype*)str;

    }

     

    void main(void)

    {

    char buf[16];

    *(newtype*)buf=fun();

    printf("输出结果:%s",buf);

    }

     

    可以试验一下,程序输出了Hello world!”。

    数组原本是空的,后来却能输出Hello world!”,我们知道buf[16]是一个静态数组,它的首地址buf是一个地址常量不能改变,那么唯一的解释就是buf[16]得到了fun函数内部完整的数组返回值,而不是得到首地址。

    原理如下:我们构造了一个参考类型newtype,这个类型的长度是自定的16再用这个类型来定义fun函数,那么函数的返回值长度自然就是16Byte,也就是数组长度了接下来把要返回的数组首地址强制转换成newtype指针(地址)型,再取这个指针的目标值作返回值,自然也就带回了数组中的所有(16个)元素同理,数组buf[16]接收这个返回值时也要进行同样的转换;完成。

    newtype这个构造类型我们从始至终也没有拿它定义任何变量,仅仅是给后续的数据传递提供了一个长度参考,故称作“参考类型”,它和那几个转换看似麻烦,其实就是欺骗一下编译器而已,这样操作的运行效率实际上是最高的。

    展开全文
  • 全新公文范文-全程指导写作 –独家原创 PAGE1 / NUMPAGES1 c语言一维数组练习题 4.1内容概述本章主要介绍了数值数组和字符数组的定义、初始化、元素引用和数组数据的输入与输出,字符数组实现字符串、字符串函数的...

    c语言一维数组练习题

    精品文档2016全新精品资料-全新公文范文-全程指导写作 –独家原创 PAGE1 / NUMPAGES1 c语言一维数组练习题 4.1内容概述

    本章主要介绍了数值数组和字符数组的定义、初始化、元素引用和数组数据的输入与输出,字符数组实现字符串、字符串函数的实现与调用。指针数组与数组指针定义、元素引用。利用一维数组实现如挑数、排序、求和等实际应用问题。利用二维数组实现矩阵的应用问题。利用字符数组实现字符串的各种操作。本章知识结构如图4.1所示。

    定义初始化 数值数组 元素引用

    数组元素输入和输出

    定义

    初始化 数组

    字符数组元素引用

    数组元素输入和输出

    定义

    指针数组初始化 应用

    图4.1 第4章知识结构图

    考核要求:掌握一维数组、二维数组、字符数组和指针数组的定义和初始化;掌握数组元素存储地址计算;掌握数组元素的下标法、指针法引用;掌握字符数组与字符串的区别与联系;掌握有关字符串处理函数的使用方法;能利用一维数组、二维数组解决向量、矩阵等实际应用问题。

    重点难点:本章的重点是一维数组、二维数组和字符数组的定义、初始化、元素引用,字符串处理函数的使用。本章的难点是字符串与字符数组的区别,指针数组和数组元素的指针法引用。

    核心考点:数组的定义、初始化和数组元素的引用方法,一维数组、二维数组和字符数组的实际应用,字符串的处理方法。

    4.典型题解析

    以下对一维数组a的定义中正确的是。

    A. char a; B. inta[0..100];

    C. int a[5];D. int k=10;int a[k];

    解析:一维数组定义的一般形式为:

    类型标识符数组名[常量表达式]

    其中,常量表达式可以是任意类型,一般为算术表达式,其值表示数组元素的个数,即数组长度。

    答案:C

    以下对一维数组的定义中不正确的是。

    A. double x[5]={2.0,4.0,6.0,8.0,10.0};

    B. int y[5]={0,1,3,5,7,9};

    C. char ch1[ ]={‘1’, ‘2’, ‘3’, ‘4’, ‘5’};

    D. char ch2[ ]={‘\x10’, ‘\xa’, ‘\x8’};

    解析:可以对一维数组的全部元素或部分元素赋初值。在对全部数组元素初始化时,数组长度可以省略。若数组长度没有省略,则初始化列表中值的个数不能超过数组的长度。

    答案:B

    以下对二维数组的定义中正确的是。

    A.int a[4][]={1,2,3,4,5,6}; B. int a[][3];

    C.int a[][3]= {1,2,3,4,5,6};D. int a[][]={{1,2,3},{4,5,6}};

    解析:定义二维数组时,若按一维格式初始化,则第一维的长度可以省略,此时,系统可根据初始化列表中值的个数及第二维的长度计算出省略的第一维长度,但无论如何,第二维的长度不能省略。没有初始化时,每一维的长度都不能省略。

    答案:C

    假定一个int型变量占用两个字节,若有定义:int x[10]={0,2,4}; 则数组x在内存中所占字节数是。

    A. B. C. 10 D.0

    解析:一维数组在内存中所占的字节数为:数组长度×sizeof。

    答案:D

    以下程序的输出结果是。

    main

    { int a[4][4]={{1,3,5},{2,4,6},{3,5,7}};

    printf;

    }

    A. 0650B. 1470C.430 D. 输出值不定

    解析:定义的数组a为4行4列,且前三行三列元素已初始化,根据C语法规定,未初始化的元素值为0。

    答案:A

    以下程序的输出结果是。

    main

    { int m[][3]={1,4,7,2,5,8,3,6,9};int i,j,k=2;

    for{ printf;}

    }

    A. B. C.D.

    解析:根据初始化列表中值的个数和第二维的长度,可求得第一维长度为3。第一行的元素值依次为1,4,7;第二行元素值依次为2,5,8;第三行元素值依次为3,6,9。循环执行三次,依次输出行标为2的三个元素,即第三行的

    展开全文
  • 程序定义函数sort()来实现数组a的排序。函数原型如下: void sort(int a[], int n); 数组元素的输出调用PrintArr()。 输入要求:第一行输入一个整数n(1<=n<=10),表示数组有n个整数;第二行输入n个整数。输出...

    编写程序,实现一维数组排序。对一维数组按照从小到大的顺序排序。程序定义函数sort()来实现数组a的排序。函数原型如下:
    void sort(int a[], int n);
    数组元素的输出调用PrintArr()。
    输入要求:第一行输入一个整数n(1<=n<=10),表示数组有n个整数;第二行输入n个整数。输出要求:输出占一行。对这n个整数数按照从小到大的顺序输出,数据之间用一个空格隔开。

     

    输入样例:
    6
    6 5 1 2 3 4 

     

    输出样例:
    1 2 3 4 5 6 

    • 考察函数,数组和循环结构语句的使用。
    #include<stdio.h>
    void sort(int a[],int n)
    {
        int temp,i,j;
        for(i=0;i<n-1;i++)		//i<n-1是因为数组的最后一位已经在之前的运算中接受了排序。
        {
            for(j=i+1;j<n;j++)
            {
                if(a[i]>a[j])
                {temp=a[i];a[i]=a[j];a[j]=temp;}	//注意if的规范书写(加{}),不规范可能出错。
            }
        }
    }
    
    void PrintArr(int a[], int n)
    {
        int i;
        for(i=0;i<n;i++)
            printf("%d ",a[i]);
    }
    
    int main(void)
    {
       int len,a[100],i;
       scanf("%d",&len);
       for(i=0;i<len;i++)
       {
           scanf("%d",&a[i]);
       }
       sort(a,len);
       PrintArr(a,len);
       return 0;
    }
    

     

    展开全文
  • c语言 指针对数组元素排序

    千次阅读 2020-04-26 20:30:27
    指针对数组元素排序 请程序实现 使用指针对数组元素进行由小到大排序。 函数定义 void sort (int n, int *p); 参数说明 n, 整型,表示数组长度 p, 整型指针,表示需要排序的数组 示例 1 输入 23 5 7 9 1 67 98 ...

    用指针对数组元素排序

    请用程序实现
    使用指针对数组元素进行由小到大排序。

    函数定义
    void sort (int n, int *p);
    参数说明
    n, 整型,表示数组长度
    p, 整型指针,表示需要排序的数组
    示例 1
    输入
    23 5 7 9 1 67 98 10 15 29
    输出
    1 5 7 9 10 15 23 29 67 98
    示例 2
    参数
    72 49 18 62 98
    输出
    18 49 62 72 98

    #include <stdio.h>
    void sort (int n, int *p) 
    {
        int *s = p;
        int *e = p + n - 1;
        int *c = p;
        int t = *c;
        for (s = s; s < e; e--)
        {
            for (c = p; c < e; c++)
            {
                if (*c > *(c + 1))
                {
                    *c = *(c + 1);
                    *(c + 1) = t;
                }
            }
        }
    }
    void print_arr(int arr[], int n)//数组输入函数
    {
        int i = 0;
        for (i = 0; i < n; i++)
        {
            printf("%d ", arr[i]);
        }
        printf("\n");
    }
    int main () {
        int arr[10],i;
        for(i=0;i<10;i++)
            scanf("%d",&arr[i]);
        sort(10, arr);
        printf("排序后:"); 
        for(i=0;i<10;i++)
            printf("%d ",arr[i]);
        return 0;
    }
    

    如果代码有误,欢迎大家指正。

    展开全文
  • C语言用函数指针实现数组排序

    千次阅读 2020-04-08 14:29:44
    最近看C语言有点烦,无论是自学的数据结构还是学校的指针课程,看着头都大了。 学校在PTA安排了此题,提交了多次...输入10个整数进行排序并输出,其中用函数指针编写一个通用的排序函数,如果输入1,程序实现数据按...
  • #include &amp;lt;stdio.h&amp;gt; #include &...初始化数组,请输入十个数\n&quot;); for (int i = 0; i &amp;lt;len; i++){ int a = 0; scanf_s(&quot;%d&quot;,
  • 输入一个数组a[10],三个函数分别实现下列功能: ①计算数组a的所有元素之和,并输出; ②实现数组b,其逆序保存原数组a的元素; ③将数组a按由大到小排序。
  • #include<stdio.h> void init(int arr[]) ...printf(“请输入数组的长度:”); scanf_s("%d", &len); printf(“请依次输入数组的各个元素:\n”); for (i = 0;i < len;i++) { printf(“请输入第%d个元...
  • 第34行调用函数,回到第3行到第11行,第8行直接用数组名还代替取地址 第9行是为了让数据每输入一次,指针向后偏移一次,填入数组指定位置 第35行调用函数,回到第12行到第23行,第15行是假设最大值是数组首元素...
  • C语言3-字符数组.docx

    2020-03-17 08:37:04
    C语言程序设计教案 章节名称 字符数组 授课类型 理论 实验 ?理实一体 实训 实习 班级 地点 周次 ...掌握字符串处理函数 能力目标 能字符数组解决实际问题 教学重点 1.字符数组的定义初始化和引用的方法 2.字符数组
  • 1 为什么要用数组 2 怎么定义和引用一维数组 2.1 怎么定义一维数组 2.2 怎么引用一维数组的元素 2.3 一维数组的初始化 2.4 一维数组程序举例 3 怎么定义和引用二维数组 3.1 怎么定义二维数组 3.2 怎么引用二维数组的...
  • 设计一子函数用冒泡排序法对8个元素的一维整型数组降序排序。一维数组元素从键盘输入。 要求: 1、使用子函数: void Sort(int a[],int n)//n是数组元素个数。 2、在子函数中实现排序,不允许在子函数中输出。 ...
  • 满意答案singoboss2013.06.16采纳率:57%等级:11已帮助:3587人先输入,然后逆序存放,再输出、#include"stdio.h"#define N 10void input(int b[],int length);void Flag(int a[],int length);void main(){int a[N]...
  • 1.数组是程序设计中最常用的数据结构。数组可分为数值数组(整数组,实数组),字符数组以及后面将要介绍的指针数组,结构数组等。...对数组的赋值可以用数组初始化赋值, 输入函数动态赋值和赋值语句赋值三种方法
  • 字符数组的输入输出可以有两种方法: 逐个字符输入输出...则遇第一个’\0’时输出就结束可以scanf函数输入一个字符串scanf函数中的输入项c是已定义的字符数组名,输入的字符串应短于已定义的字符数组的长度char c[...
  • /*排序数量,以确定最大循环*/ int i; printf("大概排几个数\n"); scanf_s("%d", &i); /*定义变量*/ int a[10000];//用户数组 int j, temp; /*用户交互*/ /*循环赋值过程*/ for (j = 0; j ; j++) ...
  • 设计一子函数用冒泡排序法对10个元素的一维整型数组升序排序并输出交换总次数。一维数组元素从键盘输入。 要求: 1、使用子函数: int SortSum(int a[],int n)//n是数组元素个数,返回值为交换总次数。 2、在子...
  • 编写程序求长方形的面积,其中长方形的长和宽scanf函数输入,结果去小数点后两位。 代码: #include<stdio.h> int main(){ float s,l,w; //输入长方形的长和宽 scanf("%f%f",&l,&w); s=l*w; ...
  • 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。你可以按任意顺序返回答案。 int* twoSum(int* nums, int numsSize, int target, int* returnSize) { for(int i=0;i<numsSize;i++) ...
  • 用数组元素作函数实参可以向形参传递一个数组元素的值,有时希望在函数中处理整个数组的元素,此时可以用数组名作为函数实参,但是并不是将该数组中全部元素传递给所对应的形参。由于数组名代表数组的首地址,因此...
  • //建立动态数组输入五个学生的成绩,另外一个函数检查有无60分以下的,输出不合格成绩 #include void check(int *p) { int i; printf("不合格的有: "); for(i=0;i;i++) { if(p[i]) printf("%d ",p[i]...
  • C语言)利用结构体数组制作学生成绩管理系统

    万次阅读 多人点赞 2017-07-05 13:11:51
    结构体数组作为函数参数,编程实现如下菜单驱动的学生成绩管理系统。 (1) 录入每个学生的学号、姓名和各科考试成绩。 (2) 计算每门课程的总分和平均分。 (3) 计算每个学生的总分和平均分。
  • #include//stdio.h是c的标准的i/o库,是以函数的方式向buffer写入或读取字符,iostream.h是c++的标准i/o库,引入了输入/输出流的概念,是一个类库,是以类方法从streambuf中读取,写入字符。 int max=0; int min=...
  • 好久没有写C语言了,了malloc动态分配数组但是却忘了到如malloc.h的头文件,报了错都不到为什么,还是太大意了,时间长了,C语言都忘得差不多了! 而且多个输入函数scanf()连着使用的时候一定要注意回车换行符!...
  • 用c语言编一个程序,要求输入5(用户自定义)个数字,用数组接收,然后进行冒泡法排序,接着如果有重复的数字,则删除重复的数字,只留一个再与其它不重复的数字排序后再输出!比如输入2 5 6 3 4,则输出2 3 4 5 6;...
  • 数据压缩存储(函数实现)。已知一段二进制01代码,长度小于100,以数字0开头,请试着压缩后的方法将其显示出来。输入数据有多组。比如输入以数字0开头二进制0-1代码:000000111100011110000011,则输出为:6 4 3 4 5 2...
  • 1、交换两个变量的值:#include void swap(int *a,int *b){int tmp;tmp=*a;*a=*b;*b=tmp;...printf("请输入两个数:\n");scanf("%d",&x);scanf("%d",&y);p_x=&x;p_y=&y;swap(p_x,p_y...
  • 利用C语言可以实现对数组的各种操作,如输入数组元素,输出数组元素、求数组元素平均值、输出数组元素最大值、输出数组元素最小值、查找某数值元素是否存在、给数组元素排序等功能。本压缩文件中是上述功能对应的...
  • 在接受输入时不要那种可以一次性存入一串字符的函数(如scanf("%s", s)),因为你不知道会有多少个字符被输入,用户输入的字符串可能会超过数组的大小,这会导致“溢出”,这是很典型的错误和安全隐患。应该一个...
  • 函数数组

    2020-02-27 20:53:32
    函数数组 数组是一种构造数据类型,它将相同类型的变量组合起来,一个名称来表示。 相同性质的一组数据的集合——数组元素数据类型相同。 为了声明数组,需要说明数组元素的类型和数量(长度)。 int data...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 995
精华内容 398
关键字:

c语言用函数输入数组

c语言 订阅