c语言二维数组平时练习和训练


以下能对二维数组a进行正确初始化的语句是?
A、int a[2][]={{1,0,1},{5,2,3}};
B、int a[][3]={{1,2,3},{4,5,6}};
C、int a[2][4]={{1,2,3},{4,5},{6}};
D、int a[][3]={{1,0,1};{};{1,1}}


为什么选b?

首先二维数组只有第二维可以省略,前提是后面马上初始化,并能确定第一维的大小。
所以A是错的,C第一维是2,但后面初始化明显有三组数据,不对
D后面初始化要用逗号,用分号是错的

该回答引用chatgpt:
B、int a[][3]={{1,2,3},{4,5,6}}; 可以对二维数组 a 进行正确的初始化。

在 C 语言中,对于二维数组的初始化,只有第一维可以省略大小,而第二维必须指定大小。因此选项 A 和 D 都不符合语法规则。选项 C 中虽然指定了第一维和第二维的大小,但是初始化的元素数量不符合规定,因此也不正确。

选项 B 中,a[][3] 表示第一维大小未指定,第二维大小为 3,而初始化的元素数量为 2 组,每组 3 个元素,符合规定。因此选项 B 是正确的。

需要注意的是,在 C++ 中,选项 A 和 C 中的初始化语句都是合法的,因为 C++ 中允许对多维数组进行不完整的初始化。但在 C 语言中,这样的初始化是不允许的。

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7610120
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:c语言二维数组如何定义字符串?
  • 除此之外, 这篇博客: 大学计算机基础期末考试C语言中的 程序完善题B 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 打开testb.c文件答题。计算t=1-1/2+1/3-1/4+…+1/m的值。

    // 程序功能:计算t=1-1/2+1/3-1/4+……+1/m的值。
    // 其中,m从键盘输入。如输入5,则应输出0.783333。
    // 要求:请在指定范围内修改、补充语句(不能修改、增加、删除输入、输出语句),使程序运行能够完成指定的功能。
    #include <stdio.h>
    double Fun(int m);
    
    int main()
    {
    	int m;
    	scanf("%d", &m);
    	printf("%lf\n", Fun(m));
    	return 0;
    }
    
    double Fun(int m)
    {
    	double t = 1.0;
    	int i;
    	//修改范围--开始
    	int k;
    	for (i = 2; i <= m; i++)
        {
            if(i%2==0)
            {
                k=-i;
            }
            else
            {
                k=i;
            }
    		t += 1.0 / k;
        }
        return t;
    	//修改范围--结束
    }
    
    

    测试数据
    1 1.000000
    2 0.500000
    3 0.833333
    5 0.783333

  • 您还可以看一下 炮哥带你学老师的快速带你入门深度学习与实战课程中的 3.4、参数b更新计算小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    很抱歉,以上参考资料和问题似乎没有明确与二维数组相关的内容,因此无法给出具体答案。请提供更详细的问题或资料,谢谢!