C语言练习题二

判断题(每题2分):

1、若有#define S(a,b) a*b,则语句area=S(2 + 1, 2); area的值为6
2、"A"是一个字符常量
3、函数strlen(“ASDFG\n”)的值是7
4、break是结束本次循环,而continue是结束所有的循环
5、C语言的数组是元素数目固定,内存是连续的

选择题(每题2分):

1、下面选项中关于编译预处理的叙述正确的是()
A、预处理命令行必须使用分号结尾
B、凡是以#号开头的行,都被称为编译预处理命令行
C、预处理命令行不能出现在程序的最后一行
D、预处理命令行的作用域是到最近的函数结束处

2、要调用数学处理函数时,在#include命令行中应包含()

A、<stdio.h>
B、<string.h>
C、<math.h>
D、<ctype.h>

3、以下符号中不能用作标识符的是()

A、_256
B、For
C、a_798
D、struct

4、以下程序段的输出结果是:

int main(void) {
    int num = 0, s = 0;
    while(num <= 2){
        num++; 
        s += num;
    }
    printf("%d\n",s);
    return 0;
}

A、10
B、6
C、3
D、1

5、在C语言中,顺序存储长度为3的字符串,需要占用()个字节:
A、3
B、4
C、6
D、12

6、下列程序的输出结果是()

int main() {
    int x = 1, y = 0, a = 0, b = 0;
    switch(x) {
        case 1:
            switch(y) {
                case 0:
                    a++;
                    break;
                case 1:
                    b++;
                    break;
            }
        case 2:
            a++;
            b++;
            break;
        case 3:
            a++;
            b++;
            break;
     }
    printf("a=%d,b=%d\n", a, b);
}

A、a=1,b=0
B、a=2,b=1
C、a=1,b=1
D、a=2,b=2

7、有以下程序,程序运行后的输出结果是( )

int main()
{
    int i;
    for(i = 0; i < 3; i++)
    {
        switch(i)
        {
        case 0:
            printf("%d",i);
        case 2:
            printf("%d",i);
        default:
            printf("%d",i);
        }
    }
    return 0;
}

A、022111
B、021021
C、000122
D、012

8、以下叙述中正确的是()
A、C语言的源程序不必通过编译就可以直接运行
B、C语言中的每条可执行语句最终都将被转换成二进制的机器指令
C、C源程序经编译形成的二进制代码可以直接运行
D、C语言中的函数不可以单独进行编译

9、下面程序段输出结果是()

short int i = 32769;
printf("%d\n",i);

A、32769
B、32767
C、-32767
D、输出不是确定的数

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

void main() {
    int a=4, b=5, c=0, d;
    d = !a&&!b||!c;
    printf("%d\n",d);
};

A、1
B、0
C、非0的数
D、-1

11、以下叙述中正确的是()
A、复合语句在语法上包含多条语句,其中不能定义局部变量
B、花括号对{}只能用来表示函数的开头和结尾,不能用于其他目的
C、空语句就是指程序中的空行
D、当用scanf从键盘输入数据时,每行数据在没按下回车键(Enter键) 前,可以任意修改

12、已知year为整型变量,不能使表达式(year % 4 == 0 && year % 100 != 0) || year % 400 == 0的值为"真"的数据是()
A、1990
B、1992
C、1996
D、2000

13、使用语句scanf(“a=%f,b=%d”, &a, &b);输入数据时,正确的数据输入是:()

A、a=2.2,b=3
B、a=2.2 b=3
C、2.2 3
D、2.2,3

14、设j和k都是int类型,则下面for语句( )

for(j = 0, k = -1; k = 1; j++, k++)
    printf("****\n");

A、循环结束的条件不合法
B、是无限循环
C、循环体一次也不执行
D、循环体只执行一次

15、假定头文件及上下文均正常,且所有变量均已正确定义,则下列程序段运行后x的值是()

a = b = c = 0;
x = 35;
if (!a)
    x--;
else if (b)
    ;
if (c)
    x = 3;
else
    x = 4;

A、3
B、4
C、35
D、34

16、以下选项中,与 n=i++ 完全等价的表达式是:()

A、n=i,i=i+1
B、n+=i+1
C、i=i+1,n=i
D、n=++i

17、以下程序的输出结果为()

#include <stdio.h>
#define ADD(x)  x*x
 
void main( )
{  
int a=4,b=6,c=7,d=ADD(a+b)*c;
printf("d=%d",d);
}

A、d=70
B、d=80
C、d=140
D、d=700

18、若有说明语句:char c = ‘\72’;,则变量c
A、包含1个字符
B、包含2个字符
C、包含3个字符
D、说明不合法,c的值不确定

19、以下程序的输出是()

void main (void) {
    double x=28;
    int r;
    r= x%5;
    printf ("r=%d\n", r);
}

A、r = 3
B、运行错误
C、编译错误
D、都不是

20、若有以下程序()

#include <stdio.h>
int main() {
    int s = 0, n;
    for (n = 0; n < 4; n++) {
        switch (n) {
        default:
            s += 4;
        case 1:
            s += 1;
        case 2:
            s += 2;
        case 3:
            s += 3;
        }
    }
    printf("%d\n", s);
    return 0;
}

A、6
B、18
C、10
D、24

21、下列程序执行后的输出结果是()

int main() {
    int x='f';
    printf("%c\n", 'A'+(x-'a'+1));
}

A、G
B、H
C、I
D、J

22、下面程序的输出是()

#include <stdio.h>

void main()
{
    int x=023;
    printf("%d\n",--x);
}

A、17
B、18
C、23
D、24

23、以下叙述中正确的是()
A、在scanf函数的格式串中,必须有与输入项一一对应的格式转换说明符
B、只能在printf函数中指定输入数据的宽度,而不能在scanf函数中指定输入数据占的宽度
C、scanf函数中的字符串,是提示程序员的,输入数据时不必管它
D、复合语句也被称为语句块,它至少要包含两条语句

24、下面表达式的结果是:

(a = 5, b = 2, a > b ? a++ : b++, a + b)

A、7
B、8
C、9
D、2

25、下面代码的输出为()

int main() {
    int sum = 0;
    int i = 0,j = 0;
 
    for(j = 0; j < 6; j++){
        if (j%2) continue;
        sum++;
    }
 
    printf("sum = %d", sum); 
    return 0;
}

A、sum = 1
B、sum = 2
C、sum = 3
D、其他几项都不对

26、设有程序段, 则下面描述中正确的是()

int k=10while (k=0) k=k-1

A、while循环执行10次
B、循环是无限循环
C、循环体语句一次也不执行
D、循环体语句执行一次

27、i为整型变量,则以下循环语句的循环次数是:

for(i = 2;i < 2;) 
    printf("%d", i--);

A、无限次
B、0次
C、2次
D、1次

28、以下程序的输出结果是

int main()
{
    int a,b;
    for(a=1,b=1;a<=100;a++)
    {
        if (b >= 10)
            break;
        if(b % 3 == 1)
        {
            b += 3;
            continue;
        }
    }
    printf("%d\n",a);
    return 0;
}

A、101
B、6
C、5
D、4

29、下面哪个语句无法通过编译()

A、if (x>y);
B、if (x=y) && (x!=0) x+= y;
C、if (x!=y) scanf("%d",&x); else scanf("%d",&y);
D、if (x<y) {x++; y++;}

30、已知int x=10,y=20,z=30;以下语句执行后x,y,z的值是()

if(x>y)
z=x;
y=(x,x+z,z);
if (x=y)
y=z;
else
x=z;

A、x=10,y=20,z=30
B、x=30,y=30,z=30
C、x=10,y=30,z=30
D、x=20,y=30,z=20

31、执行下面的程序段,语句3的执行次数为()

for (i = 0; i <= n-1; i++)   // (1)
    for (j = n; j > i; j--) // (2)
        state;               // (3)

A、n(n+2)/2
B、(n-1)(n+2)/2
C、n(n+1)/2
D、(n-1)(n+2)

32、假设一个数组初始化为{2,9,5,4,8,1}。 在第一轮冒泡排序(由小到大)后,数组变成了?
A、2, 9, 5, 4, 8, 1
B、2, 9, 5, 4, 1, 8
C、2, 5, 9, 4, 8, 1
D、2, 5, 4, 8, 1, 9

33、以下对选择语句描述错误的是()
A、根据某一判断条件重复执行一部分代码直到满足终止条件为止
B、可以根据条件控制程序流程,改变程序执行的顺序
C、选择语句可以嵌套使用
D、当条件满足时就会执行相应的语句

34、以下选项中循环结构合法的是:

A、
while(int i<7){
    i++;
    printf("%d", i);
}
B、 
int j=3;
while(j) {
    printf("%d", j);
}
C、
int j=0;
for(int k=0; j+k!=10;  j++;k++){
    printf("%d, %d", k, j);
}
D、 
int j=0;
do {
    printf("%d", j++);
    if(j==3){continue loop;}
} while(j<10);

35、有如下代码:请写出程序的输出结果。

void main() {
    int x = 0;
    int y = 0;
    int k = 0;
    for (int z = 0; z < 5; z++) {
        if ((++x > 2) && (++y > 2) && (k++ > 2)){
            x++;
            ++y;
            k++;
        }
    }
    printf("%d %d %d", x, y, k);
}

A、4 3 2
B、5 3 1
C、4 2 1
D、5 2 3

36、下列关于if-else if选择结构的说法正确的是
A、多个else if块之间的顺序可以改变,改变之后对程序的执行结果没有影响
B、多个else if块之间的顺序可以改变,改变之后可能对程序的执行结果有影响
C、多个else if块之间的顺序不可以改变,改变后程序编译不通过
D、多个else if块之间的顺序可以改变,改变后程序编译可以通过

37、以下程序输出结果为:

void main() {
    for( int i=0;  i<=5;  i++) { 
        if( i%2 == 0 ) printf("*");
        else  break ;
        printf("#");
    }
    printf("$\n");
}

A、#$
B、
$
C、##*#$
D、**#$

38、以下代码的循环次数是

void main(){
    int i = 7;
    do {
        printf("%d", --i);
        --i;
    } while (i != 0);
    printf("%d", i);
}

A、 0
B、 1
C、 7
D、无限次

39、当x等于什么时,输出里面会存在Test2?

switch (x) {
    case 1: printf("Test1");
    case 2:
    case 3:
        printf("Test2");
        break;
    default:
        printf("Test3");
        break;
}

A、1
B、2
C、3
D、4
40、下面程序的输出结果是().

void main() {
    int i, k=0, a=0, b=0;
    for(i=1;i<=4;i++){
        k++;
        if (k%2==0) {a=a+k; continue;}
        b=b+k;
        a=a+k;
    }
    printf("k=%d a=%d b=%d\n",k,a,b);
}

A) k=5 a=10 b=4 B) k=3 a=6 b=4
C) k=4 a=10 b=3 D) k=4 a=10 b=4

编程题(每题5分)

1、输入一串字符,字符可以是字母,数字和特殊字符,请将所有的字母过滤出来,同时大写字母转为小写,小写字母转为大写字母,输出所有字母翻转后的结果
说明:字符中没有空格

输入样例1:
abcd12#$31ABCD
输出样例1:
dcbaDCBA

输入样例2:
abba
输出样例2:
ABBA

2、轮转数组
给定一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。
输入的第一行为移动的步数
输入的第二行为数组的大小
输入的第三行为数组的元素,按照空格分隔输入
说明:结果按照逗号分隔

输入样例1:
3
7
1 2 3 4 5 6 7
输出样例1:
5,6,7,1,2,3,4
解释:
向右轮转 1 步: [7,1,2,3,4,5,6]
向右轮转 2 步: [6,7,1,2,3,4,5]
向右轮转 3 步: [5,6,7,1,2,3,4]

输入样例1:
2
4
-1 -100 3 99
输出样例2:
3,99,-1,-100
解释:
向右轮转 1 步: [99,-1,-100,3]
向右轮转 2 步: [3,99,-1,-100]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值