C语言作业-Day2

写作能力有限,请多多包含( $ _ $ )
如有错误理解,请指出文中有误的地方。(可以私信)
 一、选择题

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

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

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

strlen():计算字符串s的长度的   ,遇到\0的时候会停止工作。

这里考查转义字符,注意:\\ 表示字符'\',\123表示字符'{',\t表示制表符,这些都是一个字符

答案:A

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

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

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

宏定义只是替换

1、将NUM替换后得到:(M+1)*M/2

2、将M替换后得到:(2+1+1)*2+1/2,

3、计算:/   取整数部分即可     %d打印,(8.5)只用打印整数部分

答案:B 

3、如下函数的 f(1) 的值为( ) 

A: 5   B: 6   C: 7   D: 8

int f(int n)
{
static int i = 1;
if(n >= 5)
return n;
n = n + i;
i++;
return f(n);
}

1、关键字 static :

①static修饰局部变量:不存在销毁。

        结论:static修饰局部变量改变了变量的生命周期 让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。

②static修饰全局变量:作用域变小。

        结论:一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件内使用。

③static修饰函数:具有外部链接属性。

        结论:一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。

首先函数定义了一个静态变量i,并初始化为1静态变量的意义就是不会随着函数调用的结束而销毁,它只会在程序结束之后销毁,同样它也只会创建一次,也就是说static int i=1只会走一次 

执行过程

①:n=1,i=1(被static修饰的局部变量,程序结束才销毁),不满足n>=5;,跳过if语句,执行n=n+i,得到n=2,i=2;

②:n=2,i=2;不满足n>=5,跳过if语句,执行n=n+i,得到n=4,i=3;

③:n=4,i=3;不满足n>=5,跳过if语句,执行n=n+i,得到n=7,i=4;

④:n=7,i=4;满足n>=5,执行if语句,return n;n=7

答案:C

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

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

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

1、const修饰变量(常变量)

const修饰变量n后,保护了变量n,使其不能被赋值修改。(但可以使用指针修改)

2、const修饰指针
①const放在*的左边,修饰的是指针指向的内容,保证指针指向的内容不能通过指针来改变。(但是指针变量本身的内容可变)

        const int *p = &n;        n里面的值不能被改变

        //*p = 20;        //会报错

② const放在*的右边,修饰的是指针变量本身,保证了指针变量的内容不能修改。(但是可以通过指针改变指针指向的内容)

        int *const p = &n;        指向n的行为不能被改变

        //p = &m;        //会报错

答案:B

5、对于下面的说法,正确的是( )

A: 对于 struct X{short s;int i;char c;},sizeof(X)等于sizeof(s) + sizeof(i) + sizeof(c)

B: 对于某个double变量 a,可以使用 a == 0.0 来判断其是否为零

C: 初始化方式 char a[14] = "Hello, world!"; 和char a[14]; a = "Hello, world!";的效果相同

D: 以上说法都不对

A:结构体存在内存对齐  (拿空间换时间,结构体设计时:让空间小的成员尽量集中在一起)

sizeof(X)计算过程:short s,[0-1],     int i-->[4-7],   char-->[8]  现在内存大小为9,再根据内存对齐的规则,要对齐到最大对齐数的倍数,也就是4的倍数,10,11被浪费,最后的结构体计算结果为12和

sizeof(s) + sizeof(i) + sizeof(c):计算为2+4+1=8

B:考察double类型的比较,由于浮点数存在误差,不能直接判断两个数是否相等,通常采用比较两数之差的绝对值是否小于一个很小的数字(具体的可自己设定这样一个数,作为误差)来确定是否相等。

C选项,a为数组首地址是常量不能改变

答案:D

 二、编程题
1、尼科彻斯定理_牛客题霸_牛客网 (nowcoder.com)

分析一下:连续的奇数,且底数等于奇数的个数。主需要找到第一个奇数怎么求出即可

奇数有个规则: m^3 的起始奇数值等于 m * (m - 1) + 1

#include <stdio.h>

int main()
{
    int n;
    while (scanf("%d", &n) != EOF) {
        int start = n * (n-1)+ 1;//找到对应起始奇数
        printf("%d", start);
        int i;
        for (i = 1; i < n; i++) {
            printf("+%d", start + 2 * i);
        }
         
        printf("\n");
    }
     
    return 0;
}

2、等差数列_牛客题霸_牛客网 (nowcoder.com)

不用想很多,就是简单的等差数列

等差数列求和公式:Sn=n(a1+an)/2 

等差数列第n项公式:an=a1+(n-1)d 

int main() {
    int n,a1=2;
    while ((scanf("%d",&n))==1)
    {
        int an=a1+(n-1)*3;
        printf("%d\n",n*(a1+an)/2);
    
    }
    return 0;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值