c语言入门问题 第一张第五题D选项为啥错,第二张不明白,求详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言入门问题 第一张第五题D选项为啥错,第二张不明白,求详解相关的知识,希望对你有一定的参考价值。

//第一个问题

1、先弄明白复合语句是什么? 把多个语句用括号括起来组成的一个语句称复合语句
2、举例:
int main()

int a = 2;

if (a==2) int a = 3; cout<<a<<endl; //这里是复合语句 此处输出的a值为3

cout<<a<<endl; //此处输出的a值为2
return 0;

所以,函数作用内复合语句中的中定义的变量 只在复合语句块中有效,换句话说只在之内有效。

//第二个问题
你原来选的答案是A,显然是把序号弄错了,c/c++中的数组序号是从0开始的,当k=2时,它实际上是指向"SSSWLIA"批第3个元素
S S S W L I A
| | | | | | |
0 1 2 3 4 5 6

观楼主英俊潇洒、风流倜傥,必当世之豪杰,诚邀楼主加入0x30百度贴吧,共商义举,成千秋霸业。
参考技术A 第五题的D
变量的有效域是以来分的,比如if()inti;那么在外用i就是非法的,所以不是在本函数范围内有效。
第二张的程序意思是
从第三个s开始循环直到数组结尾
k=2时c=s,执行putchar()输出s,continue进入下次for循环
k=3时c=w,执行putchar()输出w,continue进入下次for循环
k=4时c=l,执行continue进入下次for循环
k=5时c=i,执行++k,break停止switch,执行putchar('*')输入*,k++进入下次循环
由于此次先后有++k,k++分别对k加1所以k=7;c=‘\0’for终止程序结束
所以结果是B本回答被提问者采纳
参考技术B 第一张,比如在一个函数中有个循环语句for(int i=0;i<10;i++),这个变量只在循环中有效, 不是函数内都有效。
第二章:定义了七个元素的字符数组str,从下标0开始,也就是str[0]=S,str[1]=S....类推str[6]=A,
因为k=2,所以从str[2]是第三个数S,进入switch选择结构,当这个字符为I时,结束本层循环,等于L的时候结束一次循环,即执行k+1后继续判断,其他情况在输出那个字符后跳出本次循环,所以结果就是SW*
参考技术C 只在它那个复合语句里有效
char str[]="SSSWLIA",c;//定义字符数组和字符
int k;//整形
for(k=2;(c=str[k])!='\0';k++)//循环从k=2 判断 str[k] 是不是\0 \0代表字符串结束
switch(c)//选择
循环第一次 c=str[2];//C就是第三的个字符 S 字符串下标从0开始
循环第一次 c=str[3];//C就是第三的个字符 W 字符串下标从0开始
循环第三次 c是L就执行CONTINUE;后面不执行继续循环
四次 c=I break;退出循环
最后加了个*
所以SW*
参考技术D 楼上说了第一题,我说第二题,第二题中char数组是从0开始的,k=2表示第3个字符,所以最多只有1个S,A选项排除,最后肯定运行putchar('*')所以结尾肯定是* 所以C D选项排除 选择B

算法学习-1 插入排序

算法学习-1  插入排序

一、描述:

  比如说我们玩扑克牌,规定每抓一张牌都要保证左边数字最小;抓第一张牌直接放手里就可以,抓第二张时如果比第一张小,则把它放到第一张牌的左边,假如每张抓来的牌放到手中都有固定位置,第一张为A[0],第二张为A[1],第三张为A[2],如果抓的第三张牌比第一张抓来的牌小,则将其放在A[0]处,对应的第二张牌就应该放在A[1],以此类推。

技术分享

二、java代码实现

public class InsertSort {
    //排序后的数组
    int sorted[];
    public static void main(String[] args) {
        //定义一个待排序的数组
        final int value[]={1,2,3,5,4,1,5,9,6,2,1,4,5,2,35,8,5};
        InsertSort is = new InsertSort();
        is.initArray(value.length);
        for(int i = 0 ; i < value.length;i++){
        is.sort(i,value[i]);
        }
        is.display();
        
    }
    //初始化数组
    public void initArray(int size){
        this.sorted = new int[size];
    }
    public void sort(int pos,int value){
        //当前“指针”位置
        int i = pos;
        //i=0时,直接插入sorted数组
        if(i==0){
            sorted[i]=value;
        }else{
            //进入这里的i的最小值为1,数组从0开始,sorted[0]的值与新来的value值对比
            while(i>0 && sorted[i-1]>value){
                //向后移位 并
                sorted[i]=sorted[i-1];
                sorted[i-1]=value;
                i--;
            }
            sorted[i]=value;
        }
    }
    //显示
    public void display(){
        for(int i : sorted){
            System.out.print(i+" ");
        }
    }
}

三、总结

插入排序依靠插入完成排序功能。

优点:

  • 当待排序数组是顺序有序的情况下,插入排序是最优性能。
  • 插入排序插入相等数据时,效率很高。

缺点:

  • 待排序数组的数据是随机数据时,插入排序的效率很低。

 

转载注明出处:http://www.cnblogs.com/xiemubg/p/6748698.html

以上是关于c语言入门问题 第一张第五题D选项为啥错,第二张不明白,求详解的主要内容,如果未能解决你的问题,请参考以下文章

verilog语言问题三个。 一,M=A^B,N=A&B 那么为啥assign M,N=A+

移动web——轮播图

我有两张桌子,第一张是朋友,第二张是发帖

2张地图一页一张地图是从第一张地图的标记产生的(第二张地图没有出现)[关闭]

如果ID存在于第二张或第三张表中,如何从第一张表中高效选择?

单例模式的双重加锁机制为啥要两次检查,第一次检查完不是已经知道了吗?