C-4练习题

答案​​​​​​​

一、单项选择题(本大题共20小题,每小题2分,共40分。在每小题给出的四个备选项中,选出一个正确的答案,并将所选项前的字母填写在答题纸的相应位置上。)

1. C 程序是由()构成的。

A.常量

B.变量

C.运算符

D. 函数

2.下列合法的标识符是()

A. case

B. Li-da-yong

C. 3con

D. $a

3. 以下描述不正确的是()

A.宏名无类型

B.宏替换不占用运行时间

C.宏名必须用大写字母表示

D.宏替换只是字符替换

4. 以下正确的字符常量是()。

A. '\412'

B. 255

C. '\108'

D..'\'

5.下面叙述中正确的是()

A.若int a=3, b=2, c=1;f=a>b>c;则f值为真

B.若int m=0, n=1, a=1, b=2,c=3;(m=a>b)&&(n=c>4),则n值为真

C.若 int a=2,b=3,c=1;c=a/b;则c的值为真

D.若int a=2,b=3;表达式a>b?a:0的值为真

6.定义 double i=3.5.j=5.5;则表达式(int)i+j的值是()

A.9.0

B.8.5

C.8

D. 8.0

7. 若 int x=6;则x+=x-=x*=x; x 的值为()。

A.0

B.-60

C. 60

D.-24

8.已有定义“int x=3,y=4,z=5;”,则表达式“!(x+y)+z-1&&y+z/2”的值是()。

A.6

B.0

C.2

D.1

9.对于循环while(le)语句,!e等价于( ).

A. e==0

B.e! =0

C.e==1

D.e! =1

10. 使用“scanf("X=%f,y=%f",&x,&y)”,要使X,y均为1.25,正确的输人是( )。

A.1.25,1.25

B. 1.25 1.25\

C. X=1.25,y=1.25

D.X=1.25y=1.25

11.设变量已正确定义,以下( )与其它switch语句不等价。

A

        switch(op){

                case '+': printf("%dn", valuel + value2); break;

                case '-': printf("%d\n", valuel - value2); break;

                case "*': printf("%din", valuel *value2); break;

                 default: printf("Errorln"); break;

        }

B

        switch(op){

                default: printf("Errorin"); break;

                case "*': printf("%din", valuel *value2); break;

                case '-': printf("%dn", valuel - value2); break;

                case '+': printf("%dun", valuel + value2); break;

        }

C.

        if(op != '+'&& op!='-'&& op!= '*'){

                printf("Errorln");

        }else{

                switch(op){

                        case '+': printf("%dn", valuel + value2): break;

                        case '-': printf("%din", valuel - value2); break;

                        case "*': printf("%dn", valuel *value2); break;

                }

        }

D.

        switch(op){

                case '+': printf("%dn", valuel + value2); break;

                case '-': printf("%dn", valuel - value2); break;

                case '*': printf("%din", valuel*value2); break;

}

12. 若变量已正确定义,对以下while循环结束条件的准确描述是()。

        flag = 1;

        denominator = 1;

        item = 1.0;

        pi=0;

        while(fabs(item) > 0.0001){

                item = flag*1.0/ denominator;

                pi = pi + item;

                flag=-flag;

                denominator = denominator +2;

}

A. item的绝对值不大于0.0001

B. item的绝对值不小于0.0001

C. item的绝对值等于0.0001

D. item的绝对值不等于0.0001

13.若有定义,int a[10];,则对数组 a元素的正确引用是()

A.a[10]

B. a[3.5]

C. a(5)

D. a[10-10]

14. 下面的程序段将输出()

double a[J[5]={(1, 2,3), (4,5), (6}};

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

A.48

B.72

C.88

D. 120

15,有两个字符数组a,b,则以下正确的输入语句是()

A. gets(a,b);

B. scanf("%s%s",a,b);

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

D. gets("a"),gets("b");

16.C语言程序中,当调用函数时()

A.实参和形参各占一个独立的存储单元

B.实参和形参共用一个存储单元

C.可以由用户指定是否共用储存单元

D.由系统自动指定是否共用存储单元

17.关于C语言中的函数,下列说法错误的是()

A.在不同的函数中可以使用相同名称的变量。

B.函数中的形式参数是在栈中保存的。

C.在一个函数内定义的变量只在本函数范围内有效。

D.在一个函数内的复合语句中定义的变量在本函数范围内有效。

18. 若变量已正确定义并且指针p已经指向某个变量x,则(*p)++相当于()。

A.p++

B.x++

C.+(p++)

D. &x++

19. 定义下列结构体数组:

struct st {char name[15);int age;a[10)=("ZHAO",14, "WANG",15, "LIU",16, "ZHANG",17);

执行语句print["%d,%c",a[2].age,*(a[3].name+2)的输出结果为()。

A. 15, A

B. 16, H

C. 16,A

D. 17, H

20.若有以下说明inta]=(0,1,2,3,4,5,6,7,8,9),*p=a,i:,且0<=i<10,则对数组元素的错误引用是()

A.*(a+i)

B. alp-ati]

C. p+i

D.*(&ai])

二、程序阅读题(本大题共 5小题,每小题 6分,共 30分。请将程序的运行结构填写在答题纸的相应位置上。)

1__________

#include <stdio.h> 
void main()
{
    int i,score;
    char grade;
    for( i=1; i<7; i++){
        scanf("%d", &score);
        score=score/10;
        switch(score){
        case 10: case 9: case 8: case 7: case 6: grade = 'P'; break;
        default:
            grade = 'F'; break;
        }
        putchar(grade);
        }
        printf("Thanks");
}
#输人 100 90 50 827269

2________

#include <stdio.h>
double f1(double x, int n)
{
    if(n == 1) return x;
    else return f1(x, n-1)*x;
}
void f2(char cc, int n)
{
    printf("%c",cc);
    if(n> 1) f2(cc+1, n-1);
}
    void main()
    {
        printf("%.0f\n", f1(2.0, 1));
        printf("%.0f\n", f1(2.0, 3));
        f2('d',1);
        printf("\n");
        f2('b',4);
        printf("\n");
    }

3________

#include<stdio.h>
int main()
{
    int a,b,c,d;
    a=c=0;
    d=20;
    if(a) d=d-10;
    else if(!b)
        if(!c) d=25;
        else d=15;
        printf("d=%din",d);
        return 0;
}
4___________
#include<stdio.h>
int main()
{
    int x[]={0,1,2,3,4,5,6,7,8,9};
    int s,i,*p;
    s=0;
    p=&x[0];
    for(i=1;i<10;i+=2)
        s+=*(p+i);
    printf("sum=%d",s);
    return 0;
}

5___________

#include <stdio.h>
struct date
{
    int year;
    int month;
    int day;
    };
    void func(struct date *p)
    {
        p->year = 2000;
        p->month =5;
        p->day = 22;}
        int main()
        {
            struct date d;
            d.year = 1999;
            d.month = 4;
            d.day= 23;
            printf("%d,%d,%d\n",d.year, d.month, d.day);
            func(&d);
            printf("%d,%d,%d\n",d.year, d.month, d.day);
        }

三、程序填空题(每空5分,共35分。请将答案填写在答题纸的相应位置上。)

1. 以下程序的功能是将无符号八进制数字构成的字符串转换为十进制整数。例如输入的字符串为“556",则输出十进制整数366

#include <stdio.h>
void main()
{
    char *p,s[6];
    int n;
    _______
    gets(p);
    n=*p-'0';
    while (______!=10)
        n=_________;
    printf("%d\n", n); 
    return 0;
}

2.求fibonacci数列问题,打印前20项数列,每行打印4个数。

#include<stdio.h>

int main(){

        int i;

        int f[20]={__________};

        for (i=2;i<20;i++)

                f[i]=_______;

for ( _________;i<20;i++)

{

        if(_______)printf("\n");

        printf("%d ",f[i]);

}

return 0;

}

四、编程题(本大题共 3小题,每小题 15分,共 45分。请在答题纸的相应位置上作答。)

1,根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间。输人在一行中给出2个4位正整数,分别表示火车的出发时间和到达时间。每个时间的格式为2位小时数(00-23)和2位分钟数(00-59),假设出发和到达在同一天内。输出格式:“hh:mm”,其中hh为2位小时数、mm为2位分钟数。

2.输人一行字符,统计其中的数字字符、大写字母、小写字母、空格、其他字符分别有多少个。

3. 编写函数 char*str(char *s,char x),函数功能:在给定的字符串s中寻找一个特定的字符x,若找到x,则返回x在s中的第一次出现的地址。在主函数中把s中该字符和该字符之前的字符按逆序输出。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YJlio

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值