GG第一次作业

填空题

1. 已知: int a=2, b=7;

计算下列表达式的值:a=4,b=1,a>b?++a:++b;

 

2. 已知:char x=A, y=B; 执行“(x=B)||(y=C)”的运算后,变量x,y的值分别为(答案用逗号隔开)

 

3. 已知:int a=5,b=6,w=1,x=2,y=3,z=4;执行语句“(a=w>x)&&(b=y>z);”后b 的值为

   

4. 已知:int  k= 4,a=3,b=2,c=1;则表达式“k<a ? k : c<b ?c :a”的值为

 

选择题

# 题目

1. 已知:char a=a’;float b=2.3double c=41int d;则执行语句d=a+b+c;后变量d的数据类型为       

(A) int  (B) char  (C) float  (D) double

 

2. 字符串“\ta\017bc”的长度(不包括结束符)是           

(A)  9

(B)  5

(C)  6

(D)  7    

 

3. 题目内容:

有输入语句:int a,b,c; scanf("a=%d,b=%d,c=%d", &a, &b, &c); 为使变量a的值为1,b的值为3,c的值为2,

从键盘输入数据的正确形式应当是(:#表示空格)

(A)  132<回车>

(B)  1,3,2<回车>

(C)  a=1#b=3#c=2<回车>

(D)  a=1,b=3,c=2<回车>    

 

4. 设整型变量xy的值均为7,则表达式“x/(y-4)”的值是

A. 3

B. 3

C. 2

D. 1

 

5. 若有变量定义int a; double b; 要输入数据存放在ab中,则下面正确的输入数据的语句为:

A. scanf("%d%f",a,b);

B. scanf("%d%f",&a,&b);

C. scanf("%d%lf",&a,&b);

D. scanf("%d%lf",a,b);

 

6. 若变量a的数据类型为double,执行下面两条语句后:

a=3.5;

printf("%d",a);

输出的数据或判断正确的是:

A. 3

B. 4

C. 3.500000

D. 输出格式错误

 

7. 在执行以下程序过程中

#include<stdio.h>

void main() {

 char c1,c2,c3,c4,c5,c6;

 scanf("%c%c%c%c",&c1,&c2,&c3,&c4);

 c5=getchar();

 c6=getchar();

 putchar(c1);

 putchar(c2);

 printf("%c%c\n",c5,c6);

}

如果输入数据:

987<CR>

65432<CR>

(注意:从第一列开始,<CR>表示回车)

输出结果为        

(A)9843

(B)9854

(C)9832

(D)9865

 

8. 执行以下程序段后,变量a,b,c的值分别是       

int x = 10, y = 9;

int a, b, c;

a = (--x == y++)? --x: ++y;

b = x++;

c = y;

(A)  a = 9, b = 9, c = 9

(B)  a = 8, b= 8, c = 10

(C)  a = 9, b = 10, c = 9

(D)  a = 11, b = 11, c = 10

 

答案:

填空题

1.5

三目运算符这个表达式应该没有返回值,所以返回值应该是++a的返回值。

++a的返回值是a+1a++的返回值是a

2.B,B

(表达式1)||(表达式2)是一种奇妙的写法。如果前面的表达式为真,那么后面的式子就不再运行。同理,&&运算时如果前面式子为假,后面式子就不再运行。

在这个题中,赋值语句的返回值就是等号左边那个变量的值。

3.6

运算符的优先级:四则运算符>关系运算符>逻辑运算符>赋值号

4.1

三目运算符连用。

选择题

1.D

进行算术运算时,运算符两段运算对象的类型必须一致。如果运算符两端运算对象的类型不一致,程序会自动进行类型转换,将范围较窄的数据类型转换为较宽的数据类型。

double ←── float

long

unsigned

int ←── char,short

图中横向箭头表示必须的转换,如两个float型数参加运算,虽然它们类型相同,但仍要先转成double型再进行运算,结果亦为double型。纵向箭头表示当运算符两边的运算数为不同类型时的转换,如一个long 型数据与一个int型数据一起运算,需要先将int型数据转换为long型, 然后两者再进行运算,结果为long型。所有这些转换都是由系统自动进行的, 使用时你只需从中了解结果的类型即可。这些转换可以说是自动的,但然,C语言也提供了以显式的形式强制转换类型的机制。

当较低类型的数据转换为较高类型时,一般只是形式上有所改变, 而不影响数据的实质内容, 而较高类型的数据转换为较低类型时则可能有些数据丢失。

赋值中的类型转换

当赋值运算符两边的运算对象类型不同时,将要发生类型转换, 转换的规则是:把赋值运算符右侧表达式的类型转换为左侧变量的类型。具体的转换如下:

(1) 浮点型与整型

将浮点数(单双精度)转换为整数时,将舍弃浮点数的小数部分, 只保留整数部分。

将整型值赋给浮点型变量,数值不变,只将形式改为浮点形式, 即小数点后带若干个0

(2) 单、双精度浮点型

由于C语言中的浮点值总是用双精度表示的,所以float型数据只是在尾部加0延长为doub1e型数据参加运算,然后直接赋值。doub1e型数据转换为float型时,通过截尾数来实现,截断前要进行四舍五入操作。

(3) char型与int

int型数值赋给char型变量时,只保留其最低8位,高位部分舍弃。

char型数值赋给int型变量时, 一些编译程序不管其值大小都作正数处理,而另一些编译程序在转换时,若char型数据值大于127,就作为负数处理。对于使用者来讲,如果原来char型数据取正值,转换后仍为正值;如果原来char型值可正可负,则转换后也仍然保持原值, 只是数据的内部表示形式有所不同。

(4) int型与1ong

long型数据赋给int型变量时,将低16位值送给int型变量,而将高16 位截断舍弃。(这里假定int型占两个字节)

int型数据送给long型变量时,其外部值保持不变,而内部形式有所改变。

(5) 无符号整数

将一个unsigned型数据赋给一个占据同样长度存储单元的整型变量时(如:unsignedintunsigned longlongunsigned shortshort) ,原值照赋,内部的存储方式不变,但外部值却可能改变。

将一个非unsigned整型数据赋给长度相同的unsigned型变量时, 内部存储形式不变,但外部表示时总是无符号的。

2.B

\t是一个制表符,a算一个单位长度,\0是字符串结束符不计入长度,17算一个长度,bc各算一个单位长度。故长度为5

3.D 4.C 5.C 6.D

7.D

使用scanf()读入字符类型的时候不会忽略空格和回车。

8.B

编程题

1.略 2.略

【问题描述】

从键盘输入一个字符,求出它的前驱和后继字符(按照ASCII码值排序),并按照从小到大的顺序输出这三个字符和对应的ASCII值。

【输入形式】

从键盘输入一个字符

【输出形式】

按两行输出:

第一行按照从小到大的顺序输出这三个字符,并以一个空格隔开;

第二行按照从小到大的顺序输出三个字符对应的ASCII值,并以一个空格隔开。

【输入样例】

b

【输出样例】

a b c

97 98 99

#include<stdio.h>

#include<stdlib.h>

 

int main(){

    char ch;

    scanf("%c",&ch);

   printf("%c %c %c\n",ch-1,ch,ch+1);

   printf("%d %d %d",ch-1,ch,ch+1);

    system("pause");

    return 0;

}

4.略 5..略 6.略

posted @ 2018-02-27 21:54  竹夭公子  阅读(2919)  评论(0编辑  收藏  举报