精华内容
下载资源
问答
  • 以下代码将打印出
    万次阅读
    2018-07-29 21:10:47

    C++程序设计(第三版) 谭浩强 习题5.6 个人设计

    习题 5.6 打印出以下的杨辉三角形(要求打印出10行)。

    1

    1 1

    1 2 1

    1 3 3 1

    1 4 6 4 1

    1 5 10 10 5 1

    ···

    代码块:

    #include <iostream>
    #include <iomanip>
    using namespace std;
    int main()
    {
        int n[10][10], i, j;
        for (i=0; i<10; i++)
            for (j=0; j<10; j++){
                if (j==0||i==j) n[i][j]=1;
                else if (i<j) n[i][j]=0;
                else n[i][j]=n[i-1][j-1]+n[i-1][j];
            }
        for (i=0; i<10; cout<<endl, i++)
            for (j=0; j<10; n[i][j]!=0 ? cout<<setw(4)<<n[i][j], j++ : j++);
        system("pause");
        return 0;
    }
    更多相关内容
  • 第十四题: 以下代码的输出结果是?

    千次阅读 2019-11-14 15:54:27
    以下代码的输出结果是? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public class B { public static B t1 = new B(); .....

    第十四题:

    以下代码的输出结果是?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    public class B

    {

        public static B t1 = new B();

        public static B t2 = new B();

        {

            System.out.println("构造块");

        }

        static

        {

            System.out.println("静态块");

        }

        public static void main(String[] args)

        {

            B t = new B();

        }

    }

     

    A 静态块 构造块 构造块 构造块
    B 构造块 静态块 构造块 构造块
    C 构造块 构造块 静态块 构造块
    D:构造块 构造块 构造块 静态块

    懵逼树上懵逼果,懵逼树下你和我

    首先看到这道题,我就想着那不是先静态代码块先执行吗

    话不多说,直接跑代码

    public class B
    
    {
    
        public static B t1 = new B();
    
        public static B t2 = new B();
    
        {
    
            System.out.println("构造块");
    
        }
    
        static
    
        {
    
            System.out.println("静态块");
    
        }
    
        public static void main(String[] args)
    
        {
    
            B t = new B();
    
        }
    
    }

    运行结果

    接着我们看看大家的评论


    开始时JVM加载B.class,对所有的静态成员进行声明,t1 t2被初始化为默认值,为null,又因为t1 t2需要被显式初始化,所以对t1进行显式初始化,初始化代码块→构造函数(没有就是调用默认的构造函数),咦!静态代码块咋不初始化?因为在开始时已经对static部分进行了初始化,虽然只对static变量进行了初始化,但在初始化t1时也不会再执行static块了,因为JVM认为这是第二次加载类B了,所以static会在t1初始化时被忽略掉,所以直接初始化非static部分,也就是构造块部分(输出''构造块'')接着构造函数(无输出)。接着对t2进行初始化过程同t1相同(输出'构造块'),此时就对所有的static变量都完成了初始化,接着就执行static块部分(输出'静态块'),接着执行,main方法,同样也,new了对象,调用构造函数输出('构造块')

    最后答案选择C

    文章仅个人理解,来在各大网站。如有不合理之处,欢迎吐槽。

    阅读目录(置顶)(长期更新计算机领域知识)

    阅读目录(置顶)(长期更新计算机领域知识)

    阅读目录(置顶)(长期科技领域知识)

    歌谣带你看java面试题

    展开全文
  • 例题:打印出杨辉三角形(要求打印出10行) 代码如下: /*程序分析:1  1 1  1 2 1  1 3 3 1  1 4 6 4 1  1 5 10 10 5 1  ... */ #include<stdio.h> void main() { int i,j; int a[10][10]; ...

    例题:打印出杨辉三角形(要求打印出10行)

    代码如下:

    /*程序分析:1
          1  1
          1  2  1
          1  3  3  1
          1  4  6  4  1
          1  5  10 10 5  1
          ...
    */
    #include<stdio.h>
    void main()
    {
    	int i,j;
    	int a[10][10];
    	printf("\n");
    	for(i=0;i<10;i++)
    	{
    		a[i][0]=1;
    		a[i][i]=1;
    	}
    	for(i=2;i<10;i++)
    		for(j=1;j<i;j++)
    			a[i][j]=a[i-1][j-1]+a[i-1][j];
    	for(i=0;i<10;i++)
    	{
    		for(j=0;j<=i;j++)
    		printf("%5d",a[i][j]);
    		printf("\n");
    	}
    }
    
    

    输出运行窗口如下:
    在这里插入图片描述
    本周其他练习

    C语言程序设计专栏

    C语言编程>第三周 ① 求1+2!+3!+…+20!的和。

    C语言编程>第三周 ② 给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

    C语言编程>第三周 ③ 一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

    C语言编程>第三周 ④ 求100之内的素数。

    C语言编程>第三周 ⑤ 对10个数进行排序。

    C语言编程>第三周 ⑥ 有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

    C语言编程>第三周 ⑦ 将一个数组逆序输出。

    C语言编程>第三周 ⑧ 打印出杨辉三角形(要求打印出10行)。

    越努力越幸运!
    加油,奥力给!!!

    展开全文
  • 关于什么是函数调用堆栈在上篇文章《windows环境下C++代码打印函数堆栈调用情况》中已经介绍过了,简单的来说就是可以展现出函数之间的调用关系,上篇文章展示了如何在windows上打印出函数调用堆栈,其中用到了...

    前言

    关于什么是函数调用堆栈在上篇文章《windows环境下C++代码打印函数堆栈调用情况》中已经介绍过了,简单的来说就是可以展现出函数之间的调用关系,上篇文章展示了如何在windows上打印出函数调用堆栈,其中用到了windows系统上的API,这些接口在linux上是无法使用的,因为工作的关系,也常常需要在linux的调试程序,所以本文介绍一下如何在linux上打印出C++程序的调用堆栈。

    实现打印堆栈信息的函数

    在linux系统上想打印函数调用堆栈信息,需要引用头文件<execinfo.h>,然后利用函数backtracebacktrace_symbols来获取当时的函数调用堆栈信息,以下的代码实现了一个简单的打印堆栈新的函数,堆栈深度最大同样设置为12层。

    #include <execinfo.h>
    #include <unistd.h>
    #include <string.h>
    #include <stdio.h>
    
    #define STACK_INFO_LEN  1024
    
    void ShowTraceStack(const char* szBriefInfo)
    {
        static const int MAX_STACK_FRAMES = 12;
        void *pStack[MAX_STACK_FRAMES];
        static char szStackInfo[STACK_INFO_LEN * MAX_STACK_FRAMES];
    
        char ** pStackList = NULL;
        int frames = backtrace(pStack, MAX_STACK_FRAMES);
        pStackList = backtrace_symbols(pStack, frames);
        if (NULL == pStackList)
            return;
    
        strcpy(szStackInfo, szBriefInfo == NULL ? "stack traceback:\n" : szBriefInfo);
        for (int i = 0; i < frames; ++i)
        {
            if (NULL == pStackList[i])
                break;
    
            strncat(szStackInfo, pStackList[i], STACK_INFO_LEN);
            strcat(szStackInfo, "\n");
        }
    
        printf("%s", szStackInfo); // 输出到控制台,也可以打印到日志文件中
    }
    
    void func2()
    {
        bool isError = true;
        if (isError)
        {
            ShowTraceStack("error in func2\n");
        }
        else
        {
            printf("this is func2\n");
        }
    }
    
    void func1()
    {
        int sum = 0;
        for (int i = 0; i < 100; ++i)
            sum += i;
    
        func2();
    }
    
    
    int main(int argc, char* argv[])
    {
        printf("hello world\n");
        func1();
    
        return 0;
    }
    

    显示堆栈调用信息

    上面的测试代码中函数的调用逻辑为:main()函数调用func1()函数,然后func1()函数调用func2()函数,当func2()中发生问题的时候打印当时的堆栈信息,然后我们编译一下查看运行结果

    [albert@localhost#10:59:03#/home/albert/test/backtrace]$g++ -rdynamic linuxtraceback.cpp -o linuxtraceback
    [albert@localhost#10:59:05#/home/albert/test/backtrace]$./linuxtraceback
    hello world
    error in func2
    ./linuxtraceback(_Z14ShowTraceStackPKc+0x25) [0x400a19]
    ./linuxtraceback(_Z5func2v+0x1c) [0x400b06]
    ./linuxtraceback(_Z5func1v+0x32) [0x400b46]
    ./linuxtraceback(main+0x1e) [0x400b66]
    /lib64/libc.so.6(__libc_start_main+0xfd) [0x7fbbcae43d1d]
    ./linuxtraceback() [0x400939]
    

    上面的运行结果已经展示了程序函数的调用关系,其中编译选项中的-rdynamic是很重要的,它实际上是一个链接选项,作用是把所有符号(而不仅仅只是程序已使用到的外部符号)都添加到动态符号表里,以便那些通过 dlopen()backtrace()这样的函数使用,换句话说就是如果不加这个选项在调用堆栈中就可能看不到函数名。

    上面的调用堆栈中函数名大致能看出来,但是有些奇怪的字母,可以通过工具c++fileter来处理,处理之后就可以看到正常的函数名了,具体使用方式如下:

    [albert@localhost#10:59:12#/home/albert/test/backtrace]$./linuxtraceback | c++filt
    hello world
    error in func2
    ./linuxtraceback(ShowTraceStack(char const*)+0x25) [0x400a19]
    ./linuxtraceback(func2()+0x1c) [0x400b06]
    ./linuxtraceback(func1()+0x32) [0x400b46]
    ./linuxtraceback(main+0x1e) [0x400b66]
    /lib64/libc.so.6(__libc_start_main+0xfd) [0x7f73aea34d1d]
    ./linuxtraceback() [0x400939]
    

    编译时无法添加-rdynamic选项

    如果是自己写的小项目或者小程序,编译选项是可以随便改的,没有什么关系,需要查看堆栈信息加上-rdynamic就可以了,但是如果是公司的大型项目,编译选项是不会随便改的,可能是直接使用automake生成的,先来看一下不添加-rdynamic选项编译之后的运行结果

    [albert@localhost#11:22:15#/home/albert/test/backtrace]$g++ linuxtraceback.cpp -o linuxtraceback
    [albert@localhost#11:22:18#/home/albert/test/backtrace]$./linuxtraceback
    hello world
    error in func2
    ./linuxtraceback() [0x4007d9]
    ./linuxtraceback() [0x4008c6]
    ./linuxtraceback() [0x400906]
    ./linuxtraceback() [0x400926]
    /lib64/libc.so.6(__libc_start_main+0xfd) [0x7f4e12ba2d1d]
    ./linuxtraceback() [0x4006f9]
    

    可以看到不添加-rdynamic选项编译之后运行虽然能显示出调用堆栈,但都是一些函数地址,无法看到函数名,这时可以通过工具addr2line帮助我们定位问题,这个工具的作用就是将函数地址转换成函数所在的行,使用方法就是在命令行运行addr2line 0x4008c6 -e ./linuxtraceback,具体使用时替换函数地址和可运行程序的名字即可

    说实话这个小程序中使用运行addr2line 0x4008c6 -e ./linuxtraceback没有看到我想要的,只显示了??:0,仿佛被优化掉了,但是我在正式的项目中使用这个方法是可以得到函数所在行的,这也帮助我查到了一个隐藏很深的BUG。

    总结

    1. linux平台下可以利用函数backtracebacktrace_symbolsbacktrace_symbols_fd来获取当时的函数调用堆栈信息
    2. 使用上述函数时,需要引用头文件<execinfo.h>,编译时最好加上-rdynamic选项
    3. 如果实在无法添加-rdynamic,可以通过addr2line辅助查找问题

    程序源码

    打印堆栈信息–源码传送门

    展开全文
  • C语言利用二维数组打印出以下的杨辉三角形(要求打印十行) 代码如下: #include<stdio.h> void main() { int a[10][10],i,j; for(i=0;i<10;i++) //初始化数组 { for(j=0;j<10;j++) a[i][j...
  • c#代码实现打印机打印文件

    千次阅读 2020-02-27 22:12:16
    在windows应用程序中文档的打印是一项非常重要的功能,在以前...打印操作通常包括以下四个功能 1 打印设置 设置打印机的一些参数比如更改打印机驱动程序等 2 页面设置 设置页面大小纸张类型等 3 打印预览 类似...
  • 如何使打印出手写字体

    万次阅读 2019-01-07 14:27:36
    最近,小编在知乎里面看到一位大神分享了用word打印的字体像手写体,亲测好用,但由于其叙述复杂,在此对其分享内容进行整理。 (1)首先,去网站下载一款适合的手写字体,小编发现大部分网站都是收费的,在此小编...
  • windows环境下C++代码打印函数堆栈调用情况

    千次阅读 多人点赞 2019-09-04 15:38:39
    文章目录前言查看函数堆栈的作用实现打印堆栈信息的函数显示堆栈调用信息总结程序源码 前言 程序运行的过程中,函数之间的是会相互调用的,在某一时刻函数之间的调用关系,可以通过函数调用堆栈表现出来,这个调用...
  • C语言打印出三角形

    千次阅读 2019-03-27 19:36:17
    //代码2: //倒三角形 #include main() { int i,j,k,z; scanf("%d",&k); for(i=k;i>0;i--) { for(j=1;j;j++) printf(" "); for(z=1;z*i-1;z++) printf("*"); printf("\n"); } }  
  • C语言打印倒三角形代码

    万次阅读 多人点赞 2018-05-24 16:14:11
    C语言打印倒三角形代码: #include<stdio.h> void main() { int i,j,k,l;//i为第几层星号;k为星号前的空格数;j为星号数;l为打印的行数; printf("请输入需要打印的行数:\n"); scanf("%d",&l); ...
  • 要求实现打印出如下图形: 思路:一个正向,一个反向从数组的第二个开始,还有a夹在中间 Java的实现方式如下: package org.wxp.sort; import junit.framework.TestCase; public class Sort_02 ...
  • //打印以下的杨辉三角形(10行) #include<stdio.h> int main() { int a[10][10],i,j; for(i=0;i<10;i++) { a[i][i]=1; a[i][0]=1; } //负责对角线和每行第一列 for(i=2;i<10;i++) for(j=1;...
  • python打印梯形最简单代码

    千次阅读 2020-09-03 23:16:35
    作为一个刚学会撸码小白,遇到面试题用python打印梯形,临场情况下只能想到以下最简单的代码: for i in range(6):#打印梯形高度/行数 for j in range(5-i):#每行打印空格数 print(" ",end="") print("*"*i*2) ...
  • 题目:打印出杨辉三角形(要求打印出10行如下图) 杨辉三角形性质: 每行数字左右对称,由1开始逐渐变大,然后变小,回到1。 第n行的数字个数为n个。 第n行数字和为2^(n-1)。 每个数字等于上一行的左右两个数字之...
  • 以下代码的输出结果是什么?

    千次阅读 2017-07-27 17:17:06
    #include using namespace std; class A{ protected: int a; public: A(int data=0) { a=data; } int GetData() { return doGetData(); } virtual int doGetData() { ...
  • 实用代码,解决FlinkCEP样例代码打印数据的问题
  • 昨天有个读者问我要 C语言的学习路线,他今年刚上大一,书上的代码完全看不懂。 讲真,大一新生,一般都是零基础的纯小白,看不懂书上的代码很正常,除非是小学、初中、高中就开始卷计算机的硬核少年;或者是因为...
  • 消息驱动Bean必须实现两个接口MessageDrivenBean和MessageListener 在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,其强制转型为合适的消息类型,同时打印出消息的内容。同时一个mail note被...
  • C语言—打印菱形,过程分析非常详细

    千次阅读 多人点赞 2022-01-29 15:15:38
    C语言—打印菱形,过程分析非常详细
  • 分析以下需求,并用代码实现: (1)打印1到100之内的整数,但数字中包含9的要跳过 (2)每行输出5个满足条件的数,之间用空格分隔 package java作业小练习; public class lianxi { public static void main(String[]...
  • 可以杨辉三角形的值放在一个方形矩阵的下半三角中,如需打印7行杨辉三角形,应该定义等于或大于7x7的方形矩阵,只是矩阵的上半部分和其余部分并不使用。 杨辉三角形具有以下特点: (1)第一列和对角线上的元素...
  • 详解java整数打印的二进制代码

    千次阅读 2017-07-22 10:41:48
    首先要明白以下概念: 原码:第一位为符号位(符号位表示0为正数,1为负数) 反码:符号位不管,原码取反 负数补码:符号位不管,反码加1 正数补码:和原码相同 按位与的运算1&1 = 1 ,0&1 = 0,0&0 = 0 举些小...
  • 打印机只打印一页却重复不停打印的原因之一和解决方法腾讯视频/爱奇艺/优酷/外卖 充值4折起打印机和电脑配套使用时,会出现各种各样问题,就比如有时候设定只打印一页纸,打印机却重复在打印,今天小编以windows7为...
  • win10系统查找打印机提示错误代码0x0000000d怎么办?此问题解决非常简单,只要“添加打印机”即可,下面有详细的安装步骤,一起看看吧!错误代码0x0000000d的解决方法步骤1、点击win10系统的开始/控制面板/打印机;...
  • 【C语言】输出由各种符号打印出的三角形

    万次阅读 多人点赞 2020-10-03 21:18:26
    想要几颗星的三角形都可以,只要把如下代码中的第4行代码中的 n=6 改成你想要的数字即可,比如你想要四颗星的三角形,就把6改成4. #include <stdio.h> int main() { int n=6; int i,j; for(i
  • 请按照以下思路,使用标准C代码; 首先输入这个正方形的边长a; 然后连续打印a个“#”符号; 每打印a个符号之后换行; 重复打印a行;
  • smali代码插桩打印日志

    千次阅读 2016-10-26 14:02:08
    1.将以下代码复制并保存为"log.smali"到你本地,文件名可任意,后缀名必须为“smali”。 .class public Lcrack; .super Ljava/lang/Object; .source "crack.java" .method public static log1(Ljava/lang/String;)V...
  • python动态心形代码-python心形代码

    万次阅读 2020-11-01 13:16:33
    之前看到python一行代码就可以在控制台打印心形,感觉非常神奇,昨天突然想起来其实java应该也是可以的,在stream加持执行下,分享代码如下:intstream.range(-15, 15).map(y -> -y).foreach(y -> intstream.r...
  • java 使用return终止代码继续运行

    千次阅读 2021-03-15 12:29:28
    package stop;import org.junit.Test;public class ReturnNullTest {/*** @param args*/public static void main(String[] args) {new ReturnNullTest().stop...}// 前面没有return 语句,则会继续执行下面打印语句S...
  • javascript弹窗口代码

    万次阅读 2019-01-12 16:41:24
    【1、最基本的弹窗口代码】 &lt;SCRIPT LANGUAGE="javascript"&gt; &lt;!-- window.open ('page.html') --&gt; &lt;/SCRIPT&gt; 因为着是一段javascripts代码,所以它们应该...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 551,185
精华内容 220,474
关键字:

以下代码将打印出