• C语言--每日五道练习题--Day13


    第一题

    1、设变量已正确定义,以下不能统计出一行中输入字符个数(不包含回车符)的程序段是

    A: n=0;while(ch=getchar()!='\n')n++; 

    B: n=0;while(getchar()!='\n')n++;

    C: for(n=0;getchar()!='\n';n++); 

    D: n=0;for(ch=getchar();ch!='\n';n++);

    答案及解析 

    getchar这个函数,是用来在读我们键盘输入的字符的。

    所以题中说不包含回车符,循环的条件就是当我们getchar取到的字符不是回车;

    那么ABC都可以;

    D选项是把getchar取到的字符给ch,for循环初始化的语句只会执行一次,所以无法统计出一行输入的字符个数的,是一个死循环;

    第二题

    2、运行以下程序后,如果从键盘上输入 65 14<回车> ,则输出结果为( )

    1. int main()
    2. {
    3. int m, n;
    4. printf("Enter m,n;");
    5. scanf("%d%d", &m,&n);
    6. while (m!=n) //1
    7. {
    8. while(m>n)
    9. {
    10. m=m-n; //2
    11. }
    12. while(n>m)
    13. {
    14. n=n-m; //3
    15. }
    16. }
    17. printf("m=%d\n",m);
    18. return 0;
    19. }

    A: 3 

    B: 2 

    C: 1 

    D: 0

    答案及解析 C

    这个就是挨个算,细心就行。

    第三题

    3、若运行以下程序时,从键盘输入 ADescriptor<回车> ,则下面程序的运行结果是( )

    1. #include
    2. int main()
    3. {
    4. char c;
    5. int v0 = 0;
    6. int v1 = 0,
    7. int v2 = 0
    8. do
    9. {
    10. switch(c=getchar())
    11. {
    12. case'a':
    13. case'A':
    14. case'e':
    15. case'E':
    16. case'i':
    17. case'I':
    18. case'o':
    19. case'O':
    20. case'u':
    21. case'U':
    22. v1 += 1;
    23. default
    24. v0 += 1;
    25. v2 += 1;
    26. }
    27. }while(c != '\n');
    28. printf("v0=%d,v1=%d,v2=%d\n",v0,v1,v2);
    29. return 0;
    30. }

    A: v0=7,v1=4,v2=7 

    B: v0=8,v1=4,V2=8 

    C: v0=11,v1=4,v2=11 

    D: v0=12,v1=4,v2=12

    答案及解析 D

    这里考察的就是我们对getchar函数,switch语句和do-while语句的认识,do-while语句的循环条件在后面,所以是比正常结束循环多执行一次,也就是说当getchar取到回车字符的时候,do-while会执行,最后判断。

    switch语句中的case和default语句,如果我们在每个case语句和default后面没有break语句,就会继续执行,直到switch执行结束或者遇到break语句才停下来。

    所以答案是D

    第四题

    4、如下函数是求两个int数字最大公约数的,指出其中存在的问题【多选】( )

    1. int gcd(char x,char y)
    2. {
    3. int min = x < y ? x : y;
    4. for (min = 0; min > 0; min--)
    5. {
    6. if (x % min = 0 && y % min = 0)
    7. return min;
    8. }
    9. }

    A: 参数类型不对 

    B: 循环变量min初值不对 

    C: 判断等于的符号不对 

    D: 返回类型不对

    答案及解析 ABC

    问题一:我们要求两个int数字的最大公约数,所以形参的类型必须是int类型,参数类型错误;

    问题二:程序是定义了局部变量min,找的是x和y之间小的那个,之后让min--,看他们是否都可以整除min,所以for循环的初始值应该是min本身,如果是0,就找不到最大公约数了;

    问题三:if语句中判断相等应该用==,不是=。‘ = ’是赋值语句,语句恒为真,无法判断;

    其实还有个问题就是只有在if语句成立才有返回值,不成立的话就没有返回值,这里看编译器自身,但是建议大家可以在没有最大公约数的时候,添加个返回值return -1;

    第五题

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

    1. for(i = 0; i <= n-1; i++) // (1)
    2. {
    3. for(j = n; j > i; j--) // (2)
    4. {
    5. state; // (3)
    6. }
    7. }

    A: n(n+2)/2 

    B: (n-1)(n+2)/2 

    C: n(n+1)/2 

    D: (n-1)(n+2)

    答案及解析 C

    这里我们找规律就OK了;第一次循环执行了n次,第二次n-1,......最后一次是1;

    这个是等差数列:n+(n-1)+ ....+ 1;

    等差数列的和就是语句三的执行次数;

  • 相关阅读:
    macOS Monterey安装Jekyll
    内存管理【C++】
    RedisDesktopManager远程连接redis
    Java安全-CC1
    计算机网络的故事——确认访问用户身份的认证
    网络安全——SQL注入之安全狗bypass深度剖析
    随着产业互联网的发展,有关互联网的落地和应用也就变得宽阔了起来
    c语言终点站--文件操作
    AIRIOT答疑第6期|如何使用二次开发引擎?
    来自阿里十余年的老架构师自述:成为架构师你只差了一步
  • 原文地址:https://blog.csdn.net/2302_76941579/article/details/134413643