C语言刷题--day02

一、选择题

1、以下程序段的输出结果是()

#include<stdio.h>
int main()
{
    char s[] = "\\123456\123456\t";
    printf("%d\n", strlen(s));
    return 0;
}

A: 12              B:13             C: 16               D: 以上都不对

答案解析:
正确答案:A
这里考查转义字符,注意:\\ 表示字符'\',\123表示字符'{',\t表示制表符,这些都是一个字符

知识点:

1、转义字符常考察两个

        ①\ddd ddd表示1~3个八进制

        ②\xhh hh表示1~2个十六进制数

2、转义字符以反斜杠开头

2、若有以下程序,则运行后的输出结果是( )

#include <stdio.h>
#define N 2
#define M N + 1
#define NUM (M + 1) * M / 2
int main()
{
        printf("%d\n", NUM);
        return 0;
}

A: 4         B: 8         C: 9         D: 6

答案解析:
正确答案:B
宏只是替换,替换后NUM的样子是(2+1+1)*2+1/2,计算得8

知识点:#define是宏定义,只进行替换

3、下面3段程序代码的效果一样吗( )

int b;
(1)const int *a = &b;
(2)int const *a = &b;
(3)int *const a = &b;

A: (2)=(3)         B: (1)=(2)         C: 都不一样         D: 都一样

答案解析:
正确答案:B
const在*的左边,则指针指向的变量的值不可直接通过指针改变(可以通过其他途径改变);在*的右边,则指针的指向不可变。简记为"左定值,右定向"

(1)和(2)const都在*的左边,(3)中const在*的右边,所以应该选择B

二、编程题

等差数列 2,5,8,11,14, ... 。(从 2 开始的 3 为公差的等差数列),求等差数列前 n 项和。
注意:本题有多组输入
输入描述:输入一个正整数 n 。
输出描述:输出一个相加后的整数。
等差数列_牛客题霸_牛客网

示例:
输入:2                 输入:275
输出:7                 输出:113575
说明:2+5=7         说明:2+5+...+821+824=113575

代码1:

分析:这就是一个等差求和问题,我们知道两个公式就可以简单的写出来了①求和公式:Sn=n(a1+an)/2;②通项公式:an=a1+(n-1)d

步骤:

        1. 定义三个变量n an a1

        2.多组输入:while(scanf("%d",&n)!=EOF)

        3.循环体(输出):an=a1+(n-1)*3(公差d=3)

#include <stdio.h>
//代码1
int main()
{
    unsigned int n=0;
    int an=0;
    int a1=2;
    while(scanf("%d",&n)!=EOF)
    {
        an=a1+(n-1)*3;
        printf("%d",n*(a1+an)/2);
    }
    return 0;
}
//代码2
int main() 
{
    unsigned int n=0;//无符号整数
    while( scanf("%d",&n)!=EOF)//可以多组输入
    {
         printf("%d",2*n+(n-1)*n*3/2);
    }
    return 0;
}

代码2:

分析:不知道等差公式也没问题,可以用累加的方式求出最后的答案

步骤:

        1.定义三个变量n i j sum

        2.多组输入:while(scanf("%d",&n)!=EOF)

        3.循环体(累加:for(嵌套循环)):

        for(i=1;i<=n;i++)

        {

                sum+=j;

                 j+=3;

        }

        4.输出:printf("%d",sum);

#include<stdio.h>

int main()
{
    int n=0;//输入的正整数
    int i=1;//累加次数
    int j=2;//下一项
    int sum=0;//相加后的整数
    while(scanf("%d",&n)!=EOF)//多组输入
    {
        //累加
        for(i=1;i<=n;i++)
        {
            sum+=j;
            j+=3;
        }
        printf("%d",sum);//输出
    }
    return 0;
}

以上代码仅供参考,还有很多写法,正确即可。

最后希望尽量大家在牛客网上答题,有些编程在自己的编译器可以实现但在牛客不能实现。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值