zoukankan      html  css  js  c++  java
  • C:习题2

    C 语言中的数据类型主要有哪些?

    C 语言为什么要规定对所有用到的变量“先定义后使用”?这样做有什么好处?

    1. 编译系统会根据定义为变量分配内存空间,分配空间的大小与数据类型有关

    2. 系统可以根据变量的类型检查对该变量的运算是否合法,这样就给程序员调试程序带来方便。

    字符常量和字符串常量有什么区别?

    下述字符串常量的长度各是多少?

    在内存中存储时各自占用的内存单元数又是多少?

     

    1、字符常量和字符串常量的表示方法不同:字符型常量是用单引号括起来的一个字符;
    字符串常量是用一对双引号括起来的零个或多个字符组成的序列。

    2、最主要的区别是存储的不同:

    字符型数据在存储时,并不是把该字符本身放到内存单元中,而是把该字符的相应 ASCII码值存放到该存储单元中;

    而字符串常量是将字符存储,并自动在其末尾加上''作为字符串结束标志,所以字符串常量在内存中所占用的字节数为字符串长度+1。

    3、"Hello!"长度是 6 个字节,占用内存单元数是 7。

    "ABC \TH64?"长度 9,占用内存单元数 10。需要注意的是,在该字符串中有转义字符, 为换行,\为反斜杠字符,64 为八进制转义字符,对应 ASCII 码为 52 的字符'4'。

    写出以下程序运行的结果

    #include <stdio.h>
    
    void main() {
            int x;
            x = -30 + 4 *7 - 24;
            printf("x=%d
    ", x);
            x = -30 * 5 % -8;
            printf("x=%d
    ", x);
    }

    输出:

    x=-26
    x=-6

    解析:* 和 % 优先级相同,结合性从左向右

    下列对变量进行定义的语句哪些正确?哪些不正确?为什么?请将不正确的改正过来。

    (1)char cl,int a2; (2)INT a,b;FLOATx,y; (3)a,b:char; (4)char if;
    (5)int a,b (6)Int a:b:c; (7)int a,x;float x,y;
    答:

    (1) char cl,int a2;错误,因为 c1 和 a2 是不同类型的变量,两次定义应该用分号分开。

    (2)INT a,b; FLOATx,y;错误,因为:①C 语言需要区分大小写,所以关键字 FLOAT和 INT 必须小写为 int 和 float;②关键字和参数间应该空格,float 和 x 应该加空格。

    (3)a,b:char;错误,应该写为“char a,b;”。
    (4)char if;错误,if 是 C 语言的关键字,重新命名变量。
    (5)int a,b 错误,变量定义语句应该以分号表示结束,在语句后加“;”。
    (6)int a:b:c;错误,应该使用逗号分隔变量名表中的多个变量。
    (7)int a,x; float x,y;错误,变量 x 重复定义。

    写出下面程序的输出结果。

    #include "stdio.h"
    void main()
    {
    printf("%d
    ",NULL);
    printf("%d,%c
    ",50,50);
    printf("%d,%c,%o
    ",68+10,68+10,68+10);
    }

    答:

    结果是:

    0

    50,2
    78,N,116
    结果分析:第 1 次输出的是 NULL 对应的 ASCII 码;第 2 次输出的是十进制整数 50 和ASCII 码 50 对应的控制字符 2;第 3 次输出的是十进制整数 78、ASCII 码 78 对应的控制字符 N 和十进制整数 78 转换为八进制的整数 116。

    分析下面程序的运行结果,并上机予以验证。

    #include ″stdio.h″
    void main()
    {
    char i=′a′;
    char j=′b′;
    char k=′c′;
    char m='101';
    char n=′116′;
    printf("a%cb%c	c%c	abc
    ",i,j,k);
    printf(″	b%c%c″m,n);
    }

    程序中 char i=′a′;char j=′b′;char k=′c′;char m=′101′;char n=′116′;
    这几个语句能否改成如下语句:
    int i=′a′;int j=′b′; int k=99;int m=′101′;int n=′116′;
    为什么?
    :该程序的结果如下:

    结果分析:第 1 次按字符输出,读者应该不难理解。第 2 次输出需要注意的是'101'和'116'
    是八进制转义字符,输出的是 ASCII 码为 65 和 78 对应的控制字符'A'和'N'。
    当把变量类型全部替换为 int 后,结果依然正确。因为在这样的情况下,赋给变量的值
    为这些字符对应的 ASCII 码。

    求下列表达式的值。

    (1)假设 x=5.6,a=8,y=12.3
    x+a%5*(int)(x+y)%3/5
    (2)设 a=21,b=30,x=4.2,y=8.4
    (float)(a+b)/6+(int)x%(int)y

    答:(1)5.600000。(2)12.500000

    结果分析:变量类型的强制转换

    x+【a%5*【(int)(x+y)%3/5】:从左到右计算】、【(float)【(a+b)/6】】+(int)x%(int)y

    若 x=13,y=20,z=4,下列各表达式的结果是什么?

    (1)(z>=y>=x)?1:0  :结合性:从左到右
    (2)z>=y&&y>=x
    (3)!(x<y)&&!x||z  优先级:! > && > || 即:【【!(x<y)】&&【!x】】||z
    (4)【x<y】?x++:++y   
    (5)z+=x>y?x++:++y

    答:(1)0; (2)0; (3)1; (4)13; (5)25。
    本题需要注意的是:(4)中,注意自加操作的前缀和后缀;(5)中"?"优先级大于赋值,
    所以先进行条件运算再赋值    z+=【【x>y】?x++:++y】

  • 相关阅读:
    2020.10.08 模拟赛 题解
    可爱路径 题解
    飞行路线 题解2
    架设电话线 题解
    浅谈 LCA
    浅谈 Tarjan 算法之强连通分量(危
    初赛题目整理1
    【求助,待续!】holes
    【题解】HDU4467
    【题解】zhx154嬲
  • 原文地址:https://www.cnblogs.com/pam-sh/p/12907919.html
Copyright © 2011-2022 走看看