day 12 default后面是否还可以跟case


(1).有以下程序:

#include

void main(){

  int case,float printF;

  printf("输入2个数\n");

  scanf("%d,%f",&case,&printF);

  printf("%d,%f",case,printF);

该程序在编译时产生错误,其出错原因是【A】

(A).定义语句出错,case是关键字,不能用作用户自定义标识符

(B).定义语句出错,printF不能用作用户自定义标识符

(C).定义语句无错,scanf不能作为输入函数使用

(D).定义语句无错,printf不能输出case的值

分析:int、case、if、else、printf、scanf、for、switch等等是关键字,不能用于用户标识符。

(2).有以下程序:

定义语句:int x = 10;则表达式x -= x + x的值为【B】

(A).-20

(B).-10

(C).0

(D).10

分析:考察赋值表达式的运算方向,自右向左进行。赋值表达式格式为:变量名=表达式,赋值运算左边必须为变量,赋值运算是把赋值运算符右边表达式的值赋给左边变量。x-=x+x  ==>x=x-(x+x)

(3).有以下程序:

设定义,int a=1,b=2,c=3,以下语句中执行效果与其他三个不同的是【C】

(A).if(a>b)c=a,a=b,b=c;

(B).if(a>b){c=a,a=b,b=c;}

(C).if(a>b)c=a;a=b;b=c;

(D).if(a>b){c=a;a=b;b=c;}

分析:第一次做这题的时候觉的简单,没想到掉坑里了。

选项里面,只有C是执行第一个,而其他选项都是执行到b=c。

(4).有以下程序:

 程序运行后的输出结果是【C】

(A).3

(B).5

(C).7

(D).9

分析:以往遇见的switch语句default都是放后面的,拿到这个题第一眼确实有点懵,不知道后面执不执,使用调试了以下,进行了验证,一共循环2次,把每次的循环结构都打印出来。

程序修改之后:

 发现只要不遇的break就会一直往下执行,default的位置可以是任意的。

(5).有以下定义:

编译时会出现错误的是【C】

(A).char a = 'a';

(B).char a = '\n';

(C).char a = 'aa';

(D).char a ='\x2d';

分析:在C、D之间犹豫了,char空间只有1字节的大小,而‘\x2d’表示16进制的方式赋值,2d是16禁止,表示1个数。

(6).有以下程序:

 程序运行后的输出结构是【C】

(A).32

(B).12

(C).21

(D).22

(7).有以下定义:

int a[4][10],*p,*q[4],且0<=i<4,则错误的赋值是【】

(A).p=a;

(B).q[i]=a[i];

(C).p=a[i];

(D).p=&a[2][1];

分析:a是一个二维数组,*p指向的是一个地址,返回类型是 int *。*q[4]是一个指针数组,这个数组内存放了4给地址。【p=a错误,p指针可以指向一个一维数组,但不能指向一个二维数组】

【q[i]=a[i]把二维数组一维化,存放到指针数组中】【p=a[i]数组一维化,p指针指向第i行】

(8).有以下程序:

程序运行后的输出结构是【C】

(A).3 3 4 4

(B).2 0 5 0

(C).3 0 4 0 

(D).0 3 0 4