2.8 数据类型与作用域练习

1、选择题

1.1以下选项中,不能作为合法常量的是 ___B___ 

A)1.234e04    B)1.234e0.4

C)1.234e+4    D)1.234e0

解析:在C语言中,合法的浮点常量形式通常遵循以下规则:1.可以有整数部分、小数部分和指数部分。2.指数部分以字母 'e' 或 'E' 开头,后面跟着一个整数。1.234e0.4:这不是一个合法的浮点常量,因为指数部分(0.4)不是一个整数。

1.2、以下定义变量并初始化错误的是____D____

     A)     char   c1 =  ‘H’ ;

     B)     char   c1 =  99 ;   

     C)     char   c1 = 2’;

     D)     char   c1 =  09 

解析:以0开头的数字在C语言中通常被解释为八进制数。然而,八进制数中不应该包含数字8或9。因此,09不是一个有效的八进制数,这将导致编译错误

1.3、以下定义变量及初始化错误的是_____C_____

A)     int   a=3b

     B)     int   a b=3

     C)     int   a b, c=d=3

     D)     int   a=3 b=3

解析:int a, b, c=d=3;:这是错误的。这里试图将 d 初始化为3,并用这个值来初始化 c,但是 d 并没有在之前声明或定义,因此这是一个编译错误

1.4、设有如下程序:( D )

        #include "stdio.h"

int  main()

        {

int  a, b;

          a = 077;

          b= a/5;

          printf( "%d %d \n" ,  a , b);

        }

A)     77 15.2

     B)     77, 15

     C)     63 12.2    

     D)     63 12

解析:在C语言中,以0开头的数字被视为八进制数。所以,077实际上是一个八进制数,我们需要将其转换为十进制数来理解它的真实值。八进制的077转换为十进制是:7*8^1+7*8^0=56+7=63。因此,a的值为63。b为int整型,所以是b=a/5=63/5=12

1.5有以下程序

main()

{   int  m,n,p;

   scanf("m=%dn=%dp=%d",&m,&n,&p);

   printf("%d%d%d\n",m,n,p);

}

若想从键盘上输入数据,使变量m中的值为123,n中的值为456,p中的值为789,则正确的输入是 ___B___

A)m=123n=456p=789

B)m=123  n=456  p=789

C)m=123,n=456,p=789

D)123   456   789

解析:scanf的格式字符串指定了如何读取输入数据。在这个程序中,scanf的格式字符串是"m=%dn=%dp=%d",这意味着scanf期望输入数据的格式是类似于m=值n=值p=值的,其中是要读取的整数。因此,为了将值123赋给m456赋给n,和789赋给p,正确的输入应该是:m=123 n=456 p=789

   1.6、以下程序的正确结果是___C____

#include<stdio.h>

void  num()

{

         extern int x,y; int a=15,b=10;

 x=a-b;

y=a+b;

}

int  x, y;

int  main()

{

    int a=7,b=5;

x=a+b;

y=a-b;

num();

printf("%d,%d\n",x,y);

}

A)  12,2    B)  不确定   C)  5,25  D)  1,12

解析:main函数中,x被赋值为a+b(即7+5),所以x变为12。同样,y被赋值为a-b(即7-5),所以y变为2。接下来,调用num函数。在这个函数中,xy是外部变量,可以通过extern关键字在函数内部访问。同时,函数内部还定义了两个局部变量ab,它们与main函数中的ab是不同的变量。在num函数中,x被赋值为a-b(即15-10),所以x变为5。同样,y被赋值为a+b(即15+10),所以y变为25。所以输出的结果是5,25

1.7  有以下程序   

#includ <stdio.h>

int fun( )

{

static int x=1

x*=2;

return x;

}

int  main( )

{

int i, s=1;

s*= fun()

s*=fun()

s*=fun()

printf("%d\n",s);

}

程序运行后的输出结果是    D   

A)8 B)16 C)32 D)64

解析:在main函数中,变量s被初始化为1,然后连续三次调用fun函数,并将返回的结果与s相乘。

下面是程序的执行流程:1.s初始化为1。2.第一次调用fun()x为1,x乘以2后变为2,返回2。因此,s变为1 * 2 = 2。3.第二次调用fun()x为2,x乘以2后变为4,返回4。因此,s变为2 * 4 = 8。4.第三次调用fun()x为4,x乘以2后变为8,返回8。因此,s变为8 * 8 = 64。最终,printf函数打印出s的值,即64。

2、填空题

2.1以下程序运行时若从键盘输入:10  20  30<回车>。输出结果是   10030   

#include  <stdio.h>

main()

{     int  i=0,j=0,k=0;

      scanf("%d%*d%d",&i,&j,&k);   // %*d 表示跳过某个输入的内容,使下一个输入的内容复制给紧接着的变量,表示此数据不读入

      printf("%d%d%d\n",i,j,k);

}

解析:第一个整数10被读取并存储在变量i中,所以i为10。第二个整数20被读取但由于%*d的存在,它不会被存储在任何变量中,而是被跳过。由于j变量在scanf中没有对应的格式说明符,因此j的值不会被改变,它将保持其初始值0,所以j=0。第三个整数30被读取并存储在变量k中,所以k=30。所以输出结果为:10030

2.2、以下程序运行的结果是___________

      main( )

      {

        int a=1, b=2, c=3;

        ++a; //a=a+1

        c+=++b;

           {

             int  b=4,  c;

              c=b*3;

              a+=c;    

              printf(“first: %d,%d,%d\n”, a,b,c);

              a+=c;

              printf(“second: %d,%d,%d\n”, a,b,c);

}

printf(“third: %d,%d,%d\n”, a,b,c);

}

解析:外层:++a:a=1+1=2,b=2,c+=++b:c=c+b+1=6,b=2+1=3

里层:b=4,c=b*3=4*3=12,a+=c:a=a+c=2+12=14,所以first:14,4,12。a=a+c=14+12=26,所以second:26,4,12。

外层:third:26,3,6

3、编程题

3.1 编写程序,用getchar函数读入两个字符给变量c1c2,然后分别用putchar函数和printf函数输出这两个字符,并思考一下以下问题

1)变量c1c2应定义为字符型或整型?还是二者皆可

答:getchar函数返回的是一个int类型的值,这是为了可以容纳EOF(文件结束标志,通常是-1)以及所有可能的字符值。因此,虽然字符型(char)变量在大多数情况下可以存储从getchar返回的值,但定义为整型(int)更为安全,因为它可以处理所有情况,包括EOF

2)要求输出c1c2值的ASCII码,应如何处理?用putchar函数还是printf函数?

答:putchar函数只能输出字符,不能输出ASCII码。要输出ASCII码,应该使用printf函数。

3)整型变量与字符型变量是否在任何情况下都可以互相替换?

答:不是。虽然char类型在C语言中实际上是一个小整数类型,并且在许多情况下可以存储和整型变量相同的信息,但它们的范围和用途是不同的。char类型通常用于存储字符数据,其范围取决于编译器实现(可以是signedunsigned),但通常足以存储ASCII字符集。整型变量(如int)用于存储更大范围的整数值。

#include <stdio.h>
int main()
{int c1, c2; //定义为整型,因为getchar返回的是int类型printf("Please enter first character: ");c1=getchar();//读取第一个字符getchar();//读取中间的换行符printf("Please enter second character: ");c2=getchar();//读取第二个字符//使用putchar输出字符printf("The first character is: ");putchar(c1);printf("\n");printf("The second character is: ");putchar(c2);printf("\n");//使用printf输出字符的ASCII码printf("ASCII of c1: %d\n", c1);printf("ASCII of c2: %d\n", c2);return 0;
}

结果:

4、分析题

4.1、使列举static关键字的几个作用

  1. 局部变量:
    在函数内部,当你声明一个局部变量为static时,这个变量的生命周期会被延长,从原来的只在函数执行期间存在变为在整个程序执行期间都存在。这意味着,每次函数调用结束后,这个变量的值不会被销毁,而是会保留下来,供下次函数调用时使用。
  2. 全局变量和函数:
    在文件作用域(即,不在任何函数内部)中,static关键字可以用来声明全局变量或函数的作用范围限制在定义它的文件内。这样,其他文件就不能访问到这个变量或函数了,这有助于实现封装和模块化。
  3. 类的成员变量和成员函数:
    在C++的类定义中,static关键字也可以用于成员变量和成员函数。静态成员变量和静态成员函数都是类的所有对象共享的。静态成员变量在所有对象中只有一个实例,而静态成员函数则可以在没有创建类的对象的情况下被调用。
  4. 静态类:
    在C++中,你还可以创建静态类。静态类只能包含静态成员,不能包含非静态成员。静态类不能被实例化,只能被继承。

一、隐藏

在我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性,也就是说其他文件可以看到写同名的函数,如果加了static,那么其他文件就不能同名函数或者变量;(对于函数来讲,static的作用仅限隐藏)

二、保持变量内容的长久

Static修饰的变量会存储到静态数据区,静态块会在程序刚开始是完成初始化,也是唯一的一次初始化;

静态存储区,共有两种变量,全局变量和static变量

三、默认初始化为0

全局变量也具有这个属性,因为静态数据区中所有的字节默认值都是0x00

#include <stdio.h>

Int main()

{

char c1,c2;

int x, y;

scanf(“%d”, &x);

getchar();

c1=getchar();

scanf(“%d”,& y);

getchar();

c2=getchar();

if( c1 == ‘+’ )

c1 = ‘-’

else

c1 = ‘+’ ;

printf(“%d% c%d% c\n”, x,c1,y,c2);

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/674643.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

string容器

1. string基本概念 1.1 本质&#xff1a; string是C风格的字符串&#xff0c;而string本质上是一个类 string和char * 区别&#xff1a; char * 是一个指针 string是一个类&#xff0c;类内部封装了char*&#xff0c;管理这个字符串&#xff0c;是一个char*型的容器。 1.2 特点…

Unity类银河恶魔城学习记录5-1.5-2 P62-63 Creating Player Manager and Skill Manager源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili PlayerManager.cs using System.Collections; using System.Collections.G…

ClickHouse的优缺点和应用场景

当业务场景需要一个大批量、快速的、可支持聚合运算的数据库&#xff0c;那么可选择ClickHouse。 选择ClickHouse 的原因&#xff1a; 记录类型类似于LOG&#xff0c;读取、运算远远大于写入操作选取有限列&#xff0c;对近千万条数据&#xff0c;快算的运算出结果。数据批量…

内网穿透工具

1. nps-npc 1.1 简介 nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发&#xff0c;可支持任何tcp、udp上层协议&#xff08;访问内网网站、本地支付接口调试、ssh访问、远程桌面&#xff0c;内网dns解析等等……&#xff09;&#xff0c…

Golang数据库编程详解 | 深入浅出Go语言原生数据库编程

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站https://www.captainbed.cn/kitie。 Golang学习专栏&#xff1a;https://blog.csdn.net/qq_35716689/category_12575301.html 前言 对数据库…

OLED调试简介

文章目录 一、介绍调试方法介绍OLED简介硬件电路OLED驱动函数 二、操作连接线路使用驱动函数显示内容 OLED.c的内容 一、介绍 调试方法介绍 OLED简介 硬件电路 OLED驱动函数 二、操作 连接线路 因为这两个引脚不做配置是浮空状态&#xff0c;在这里直接用电源给OLED供电 使…

【leetcode热题100】搜索二维矩阵

给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。…

python实现中国剩余定理

中国剩余定理又称孙子定理&#xff0c;是数论中一个重要定理。最早可见于我国的数学著作《孙子算经》卷下“物不知数”问题&#xff0c;原文如下&#xff1a; 有物不知其数&#xff0c;三三数之剩二&#xff0c;五五数之剩三&#xff0c;七七数之剩二。问物几何&#xff1f;即…

《向量数据库指南》——Milvus Cloud「删除」:眼见未必为实

“执行 Collection 中的 delete 操作后,再次调用 num_entities 检查集合中的数据的条数,和删除前一致, delete 不能从物理层面上删除数据吗?”“删除的数据还能被查到是为什么?”“请问下删除 collection 后,磁盘大小没有恢复,该怎么处理?”社区中关于“删除”讨论最多…

Allergo_17_4安装记录

习惯用Allergo软件中的Orcad组件来画原理图&#xff0c;画PCB用PADS PADS的安装记录参考&#xff1a;PADS VX 2.7安装记录-CSDN博客 一、资源&#xff1a; 资源&#xff1a;百度云安装包&#xff1a;Cadence SPB 17.4-2019 安装包 提取码&#xff1a;ajow 二、安装 2.1 右键…

百面嵌入式专栏(面试题)C语言面试题22道

沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们将介绍C语言相关面试题 。 宏定义是在编译的哪个阶段被处理的?答案:宏定义是在编译预处理阶段被处理的。 解读:编译预处理:头文件包含、宏替换、条件编译、去除注释、添加行号。 写一个“标准”宏MIN,这个…

备战蓝桥杯---搜索(进阶3)

看一道比较难又有趣的题&#xff1a; 下面是分析&#xff1a; 我们不妨把属性值看成点&#xff0c;一个装备可以看成一条边&#xff08;只能选一个端点&#xff09;不存在有装备属性值的当成一个点&#xff0c;于是我们便形成了树或图&#xff0c;如果是树的话&#xff0c;有一…

XSS攻击 - 不要再硬背了

XSS攻击是所有程序员都知道的一件事&#xff0c;它也是前后端面试的一个常考点。也正如标题所说&#xff0c;很多人在背它&#xff0c;为什么要背它&#xff1f;这点我深有感悟&#xff0c;最近我突破了那个key&#xff0c;所以我想将它分享出来。 XSS攻击&#xff0c;其实都是…

字节3面真题,LeetCode上hard难度,极具启发性题解

文章目录 &#x1f680;前言&#x1f680;LeetCode&#xff1a;41. 缺失的第一个正整数&#x1f680;思路&#x1f680;整个代码思路串一下&#x1f680;Code &#x1f680;前言 铁子们好啊&#xff01;阿辉来讲道题&#xff0c;这道题据说是23年字节3面真题&#xff0c;LeetC…

RabbitMQ-3.发送者的可靠性

发送者的可靠性 3.发送者的可靠性3.1.生产者重试机制3.2.生产者确认机制3.3.实现生产者确认3.3.1.开启生产者确认3.3.2.定义ReturnCallback3.3.3.定义ConfirmCallback 3.发送者的可靠性 首先&#xff0c;我们一起分析一下消息丢失的可能性有哪些。 消息从发送者发送消息&#…

【状态管理一】概览:状态使用、状态分类、状态具体使用

文章目录 一. 状态使用概览二. 状态的数据类型1. 算子层面2. 接口层面2.1. UML与所有状态类型介绍2.2. 内部状态&#xff1a;InternalKvState 将知识与实际的应用场景、设计背景关联起来&#xff0c;这是学以致用、刨根问底知识的一种直接方式。 本文介绍 状态数据管理&#x…

pytorch入门第一天

今天作为入门pytorch的第一天。打算记录每天学习pytorch的一些理解和笔记&#xff0c;以用来后面回顾。当然如果能帮到和我一样的初学者&#xff0c;那也是不胜荣幸。作为一名初学者&#xff0c;难免有些地方会现错误&#xff0c;欢迎各位大佬指出 预备知识 这里主要介绍pyto…

【数据结构】堆(创建,调整,插入,删除,运用)

目录 堆的概念&#xff1a; 堆的性质&#xff1a; 堆的存储方式&#xff1a; 堆的创建 &#xff1a; 堆的调整&#xff1a; 向下调整&#xff1a; 向上调整&#xff1a; 堆的创建&#xff1a; 建堆的时间复杂度&#xff1a; 向下调整&#xff1a; 向上调整&#xff…

2023年06月CCF-GESP编程能力等级认证C++编程二级真题解析

一、单选题(每题2分,共30分) 第1题 高级语言编写的程序需要经过以下()操作,可以生成在计算机上运行的可执行代码。 A. 编辑 B. 保存 C. 调试 D. 编译 答案:D 第2题 能够实现下面流程图功能的伪代码是( )。 A. if 条件判断 then 语句块 B. if 条件判断 then 什么…

vue项目打包部署到flask等后端服务里面,实现前后端不分离部署,解决空白页面和刷新页面not fount问题

1. 编译模式一定要设置为esnext&#xff0c;否则会报错&#xff1a; Strict MIME type checking is enforced for module scripts per HTML spec.Expected a JavaScript module script but the server responded with a MIME type of "text/plain". 具体解释可以看vi…