习题练习 C语言(暑期第四弹)

02-26 1183阅读

习题练习 C语言(暑期第四弹)

自我小提升!

  • 前言
  • 一、数组
  • 二、指针运算
  • 三、统计每个月兔子的总数
  • 四、双指针的应用
  • 五、判断指针
  • 六、珠玑妙算
  • 七、两数之和
  • 八、数组下标
  • 九、指针
  • 十、寻找峰值
  • 十一、二级指针
  • 十二、大端小端
  • 十三、无符号参数
  • 十四、数对
  • 十五、截取字符串
  • 总结

    前言

    重要的事说三遍!

    学习!学习!学习!


    一、数组

    若有定义 int a[8]; ,则以下表达式中不能代表数组元素 a[1] 的地址的是( )

    A: &a[0]+1

    B: &a[1]

    C:&a[0]++

    D: a+1

    题目解析:

    D选项a计算时是首元素地址,再加1,就是a[1]的地址,AB明显对,C选项a[0]先和++结合,形成一个表达式,不能对表达式取地址,会报错

    题目答案:

    C


    二、指针运算

    以下选项中,对基本类型相同的两个指针变量不能进行运算的运算符是( )

    A: +

    B: -

    C: =

    D: ==

    题目解析:

    A错误,因为两个地址相加无意义也可能越界,所以规定不允许指针相加。B选项,可以求出两个数据元素储存位置之间的相

    隔同数据类型的元素个数,C选项,赋值,没问题,D选项,判断两指针是否相同

    题目答案:

    A


    三、统计每个月兔子的总数

    题目链接:OJ链接

    习题练习 C语言(暑期第四弹)

    题目解析:

    这道题的关键在于寻找数字之间的规律,如果细心的同学会发现这其实是一个斐波那契数列。第 n 个月的兔子数量实际上就是第 n-1 个斐波那契数。

    习题练习 C语言(暑期第四弹)

    题目答案:

    #include 
    int main() {
        int n;
        while (scanf("%d", &n) != EOF) {
            int sum1=1;
            int sum2=1;
            if(n
                for(int i=0;i
                    int temp=sum1+sum2;
                    sum1=sum2;
                    sum2=temp;
                }
            }
            printf("%d",sum2);
        }
        return 0;
    }
    
        char *t = s;
        while(*t++);
        return(t-s);
    }
    
        int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}, *p = a + 5, *q = NULL;
        *q = *(p+5);
        printf("%d %d\n", *p, *q);
        return 0;
    }
    
        *returnSize=2;
        static int arr[2]={0};
        arr[0] = 0; arr[1] = 0;//静态空间不会进行二次初始化因此每次重新初始化,可以使用memset函数
        int solu[26]={0};//26个字符位 solution 四种颜色数量统计
        int gue[26]={0};//26个字符位 guess 四种颜色数量统计
        for(int i=0;i
            if(solution[i]==guess[i])//位置和颜色完全一致则猜中数量+1
                arr[0]++;
            else{
                solu[solution[i]-'A']+=1;///统计同一位置不同颜色的两组颜色数量,伪猜中不需要对应位置相同,只需要有对应数量的颜色就行
                gue[guess[i]-'A']+=1;
            }
        }
        for(int i=0;i//在两个颜色数量统计数组中查看颜色数量,取相同位置较小的一方就是为猜中数量
            arr[1]+=(solu[i]
        * returnSize=2;
        static int arr[2]={0};
        memset(arr, 0x00, sizeof(arr));//静态空间不会二次初始化,因此手动初始化
        for(int i=0;i
            if (numbers[i]  target)//一旦大于目标数,可以直接跳过
                continue;
            for(int j=i+1;j//配对的数直接从i+1开始,防止出现重复配对,造成时间浪费
                if(numbers[i]+numbers[j]==target){
                    arr[0]=i+1;
                    arr[1]=j+1;
                    return arr;
                }
            }
        }
        * returnSize=0;
        return NULL;
    }
    1, 2, 3, 4, 5, 6}, *p[3];
    p[0] = a[1];
    
        //边界情况处理,1个元素前后都是负无穷 以及 0号位置大于1号位置,-1位置负无穷的情况
        if (numsLen == 1 || nums[0]  nums[1]) return 0;
        //末尾位置数据大于上一个位置数据,而nums[numsLen]负无穷的情况
        if (nums[numsLen - 1]  nums[numsLen - 2]) return numsLen - 1;
        int left = 0, right = numsLen - 1, mid;
        while (left 
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]