c语言每日一练(2)

这篇具有很好参考价值的文章主要介绍了c语言每日一练(2)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:
每日一练系列,每一期都包含5道选择题,2道编程题,博主会尽可能详细地进行讲解,令初学者也能听的清晰。每日一练系列会持续更新,暑假时三天之内必有一更,到了开学之后,将看学业情况更新。

5道选择题: 

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

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

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

解析:根据题目分析可知,这串代码的作用是用来计算字符串s的长度的   strlen函数的特性则是在遇到\0的时候会停止访问,而字符串末尾都会有\0,虽然你看不到。关于strlen博主之前也写过一篇博客介绍,对strlen函数不是很理解的朋友们可以去看看。手把手教你玩转常用字符串函数(包含模拟实现)_大海里的番茄的博客-CSDN博客

既然是计算字符串的长度,那么我们要做的就是数一数s这个字符串有多长    \是一种转义字符,\修饰\的意思是,转义第二个\使第二个\就是一个普通的字符,因此,这两个\\加在一起才是1个字符  123456,有6个字符,6+1就是7个字符。

接着走,又遇到\了,\后面带数字,代表着后面的数是八进制的数,且最多为三位    因此把\123看作一个整体,视为一个字符,7+1现在有8个字符,456三个字符,8+3有11个字符,最后的\t看作一个字符,故最后有12个字符,答案选A

很多小伙伴会忘记转义字符的具体内容,这里博主把之前整理的内容给大家。

c语言每日一练(2),每日一练,c语言,算法,开发语言 c语言每日一练(2),每日一练,c语言,算法,开发语言

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

 解析:宏定义就是在进行操作之前先将对应的代码替换成对应的宏。这串代码想要打印NUM,而NUM有宏定义,所以在操作之前先将NUM替换成对应的宏,替换结果为(M+1)*M/2,M有宏定义,继续替换,替换结果为(N+1+1)*N+1/2,注意,只是替换,不要画蛇添足加什么括号,根据宏定义来,它怎么定义的你就怎么替换。N有宏定义,替换结果为(2+1+1)*2+1/2,计算结果为8.5,但printf准备打印整型数据,那么就会导致数据丢失,打印出8

 c语言每日一练(2),每日一练,c语言,算法,开发语言

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

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

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

 解析:根据题意可知,我们的目标是f(1),调用int f(int n)函数时传1时f的返回值就是我们的答案。走进函数将n看作1,首先函数定义了一个静态变量i,并初始化为1,静态变量的意义就是不会随着函数调用的结束而销毁,它只会在程序结束之后销毁,同样它也只会创建一次,也就是说static int i=1只会走一次    if(n>=5)就是说当n>=5时才会触发,先跳过,n=n+i,那么此时n=2,继续走,i++,i为2,返回f(2),继续进入f()函数,但这次传的是2,i也是2,那么n最后会是4,i会是3,继续递归,n还是没>=5,n=n+i使n为7,i++使i为4,继续递归,这次n为7,n>=5了,中止函数,返回7。故答案选C

c语言每日一练(2),每日一练,c语言,算法,开发语言

 4、下面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.都一样

解析:const修饰指针变量的效果,是根据const和*之间的相对位置来决定的    const放在*的左边意味着对应的指针不能被修改,放在*的右边意味着指针所指向的内容不能被修改。那么观察题目我们只需要找相对位置一样的即可,不难发现,(1)和(2)const和*的相对位置都是const在*的右边,故效果一样,而(3)的const放在*的右侧,效果不一样。故选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选项的X的大小是这样计算的,short型,占两个字节,偏移量为0和1的位置被占据,int型占4个字节,因此得对齐到偏移量为4的倍数的位置,因此,偏移量为4,5,6,7被占据,而偏移量为1,2,3的空间被浪费,char型占1个字节,它不用对齐,所以偏移量为8的位置被占据,大小为9,再根据内存对齐的规则,要对齐到最大对齐数的倍数,也就是4的倍数,10,11被浪费,最后的结构体计算结果为12和2+4+1=8是有所不同的。

对于结构体对齐内容不理解的朋友可以去看下博主之前写的自定义类型详解,里面有关于这一问题的详细叙述

自定义类型详解_大海里的番茄的博客-CSDN博客

c语言每日一练(2),每日一练,c语言,算法,开发语言

 B选项,考察double类型的比较,由于浮点数存在误差,不能直接判断两个数是否相等,通常采用比较两数之差的绝对值是否小于一个很小的数字(具体的可自己设定这样一个数,作为误差)来确定是否相等。C选项,a为数组首地址是常量不能改变,所以A,B,C都是错的,故答案为D

编程题1: 

P5717 【深基3.习8】三角形分类 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

c语言每日一练(2),每日一练,c语言,算法,开发语言

 唯一需要注意的就是锐角和钝角的判断,因为很多人都把它们的判断方法忘记了

两条较短边的平方和大于最长边的平方,此三角形就是锐角三角形

两条较短边的平方和小于最长边的平方,此三角形就是钝角三角形

#include<stdio.h>
int main()
{
    int a=0;int b=0;int c=0;
    //代表着三角形的三边
    scanf("%d %d %d",&a,&b,&c);
    int max=a>b?a:b;
    max=max>c?max:c;
    //计算出三边的最大边
    int min=a>b?b:a;
    min=c>min?min:c;
    //计算出三边的最小边 
    int sum=a+b+c;
    //三边总和
    a=max;
    //令a为最大边
    b=sum-min-max;
    //令b为中间边
    c=min;
    //令c为最小边
    if(b+c<=a)
    //三角形成立条件,两边之和大于第三边,不满足肯定不是三角形
    //拿较小的两条边来比较,如果较小的两边之和都能大于第三边就一定是三角形
    {
        printf("Not triangle");
    }
    else//是三角形才能进行后面的判断
    {
        if(b*b+c*c==a*a)
        //勾股定理判直角
        {
            printf("Right triangle\n");
        }
        else if(b*b+c*c>a*a)
        {
            printf("Acute triangle\n");
        }
        else if(b*b+c*c<a*a)
        {
            printf("Obtuse triangle\n");
        }
        if(a==b||b==c||c==a)
        //等腰三角形判断
        {
            printf("Isosceles triangle\n");
            if(a==b&&b==c)
            //先是等腰才是等边
           {
            printf("Equilateral triangle\n");
           }
        }
    }
}

编程题2:

等差数列_牛客题霸_牛客网

c语言每日一练(2),每日一练,c语言,算法,开发语言

根据等差数列的公式     首末相加*项数/2即是答案,那么计算首末端即可 

#include <stdio.h>
int main() {
int head=0;
int end=0;
int n=0;
scanf("%d",&n);
head=2;
end=2+(n-1)*3;
printf("%d",(head+end)*n/2);
}

好了,今天的练习到这里就结束了,感谢各位友友的来访,祝各位友友前程似锦O(∩_∩)O文章来源地址https://www.toymoban.com/news/detail-628948.html

到了这里,关于c语言每日一练(2)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • c语言每日一练(7)

    前言: 每日一练系列,每一期都包含5道选择题,2道编程题,博主会尽可能详细地进行讲解,令初学者也能听的清晰。每日一练系列会持续更新,暑假时三天之内必有一更,到了开学之后,将看学业情况更新。 1、下列定义数组的语句中正确的是【多选】( ) A、 B、char str

    2024年02月13日
    浏览(42)
  • c语言每日一练(4)

    1、有以下代码,程序的输出结果是( ) A.10       B.9       C.8       D.7 解析: 先看代码构成,代码的主要部分是一个循环,最终目标是打印出a的大小。 直接看循环,for循环先将a和b都初始化成了1,循环进行的条件是a=100,循环每次结束后,a+1 接着看循环的内部,1代码代

    2024年02月13日
    浏览(37)
  • c语言每日一练(12)

    前言: 每日一练系列,每一期都包含5道选择题,2道编程题,博主会尽可能详细地进行讲解,令初学者也能听的清晰。每日一练系列会持续更新,暑假时三天之内必有一更,到了开学之后,将看学业情况更新。 1、程序运行的结果是()  A、 sum=9 B、 sum=10 C、 sum=12 D、 su

    2024年02月11日
    浏览(32)
  • c语言每日一练(8)

    前言: 每日一练系列,每一期都包含5道选择题,2道编程题,博主会尽可能详细地进行讲解,令初学者也能听的清晰。每日一练系列会持续更新,暑假时三天之内必有一更,到了开学之后,将看学业情况更新。 1、请阅读以下程序,其运行结果是( )   A、YES       B、NO 

    2024年02月12日
    浏览(32)
  • C语言每日一练(1)

    题目: 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析: 可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 程序源代码: 以上实例输出结果为: 题目: 企业发放的奖金根据利润提成。利

    2024年02月12日
    浏览(48)
  • c语言每日一练(5)

    前言: 每日一练系列,每一期都包含5道选择题,2道编程题,博主会尽可能详细地进行讲解,令初学者也能听的清晰。每日一练系列会持续更新,暑假时三天之内必有一更,到了开学之后,将看学业情况更新。 1、下面代码的结果是:( ) A. a = 8 b = 23 c = 8      B. a = 9 b= 23 c =

    2024年02月13日
    浏览(75)
  • c语言每日一练(6)

    前言: 每日一练系列,每一期都包含5道选择题,2道编程题,博主会尽可能详细地进行讲解,令初学者也能听的清晰。每日一练系列会持续更新,暑假时三天之内必有一更,到了开学之后,将看学业情况更新。 1、如下程序的功能是( ) A、 测字符数组ch的长度 B、 将数字字

    2024年02月13日
    浏览(36)
  • c语言每日一练(15)

    前言: 每日一练系列,每一期都包含5道选择题,2道编程题,博主会尽可能详细地进行讲解,令初学者也能听的清晰。每日一练系列会持续更新,上学期间将看学业情况更新。 1、程序运行的结果为() A、1,5      B、2,5      C、1,6     D、2,6 解析:首先定义sum和pad为5,接

    2024年02月07日
    浏览(34)
  • C语言每日一练(二)

    解法一:在原链表中删除Node.next=next的节点 注意:当头节点的val==val时,要改变头节点的位置 解法二:创建新的指向头尾的链表 注意:这里如果写head的话,当一个节点是要删除的节点,头节点还是那个删除的节点。 解法一:创建新链表,对新链表进行头插 解法二:定义三个

    2024年02月08日
    浏览(37)
  • c语言每日一练(11)

    前言: 每日一练系列,每一期都包含5道选择题,2道编程题,博主会尽可能详细地进行讲解,令初学者也能听的清晰。每日一练系列会持续更新,暑假时三天之内必有一更,到了开学之后,将看学业情况更新。 1.执行完下面一段程序后输出的值是() A、1     B、2     C、

    2024年02月11日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包