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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 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++);

答案及解析 D


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


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


那么ABC都可以;


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

第二题

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

int main()
{
    int m, n;
    printf("Enter m,n;");
    scanf("%d%d", &m,&n);
    while (m!=n) //1
    {
        while(m>n) 
        {
            m=m-n; //2
        }
        while(n>m) 
        {
            n=n-m; //3
        }
    }
    printf("m=%d\n",m);
    return 0;
}


A: 3

B: 2

C: 1

D: 0

答案及解析 C

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

第三题

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

#include <stdio.h>
int main()
{
    char c;
    int v0 = 0;
    int v1 = 0,
    int v2 = 0;
    do
    {
        switch(c=getchar())
        {
            case'a':
            case'A':
            case'e':
            case'E':
            case'i':
            case'I':
            case'o':
            case'O':
            case'u':
            case'U':
                v1 += 1;
            default:
                v0 += 1;
                v2 += 1;
        }
    }while(c != '\n');
    printf("v0=%d,v1=%d,v2=%d\n",v0,v1,v2);
    return 0;
}

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数字最大公约数的,指出其中存在的问题【多选】( )

int gcd(char x,char y)
{
    int min = x < y ? x : y;
    for (min = 0; min > 0; min--)
    {
        if (x % min = 0 && y % min = 0)
            return min;
    }
}


A: 参数类型不对

B: 循环变量min初值不对

C: 判断等于的符号不对

D: 返回类型不对

答案及解析 ABC

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


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


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


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

第五题

5、执行下面的程序段,语句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)

答案及解析 C


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

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

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

相关文章
|
7月前
|
C语言
C语言练习题
C语言练习题
34 0
|
7月前
|
C语言
C语言练习题 温度自动转换‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪
C语言练习题 温度自动转换‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪
|
7月前
|
C语言 数据安全/隐私保护
C语言练习题
C语言练习题
45 1
|
7月前
|
C语言
c语言编程练习题:7-60 Welcome to You!
c语言编程练习题:7-60 Welcome to You!
77 0
|
6月前
|
人工智能 算法 Java
|
7月前
|
存储 C语言
C语言从入门到实战——数组和指针的强化练习题
C语言中指针和数组有着密切的关系,因为数组名在C语言中可以看作是一个指针常量。 指针是一个变量,存储的是另一个变量的地址。可以通过指针来访问另一个变量的值。指针变量可以存储任何类型的地址,包括数组的地址。 数组是一组相同类型的数据元素的集合。在C语言中,可以用数组名来表示整个数组,在这个意义上,数组名看起来像一个指针变量。实际上,数组名在C语言中可以看作是一个指向数组首元素的指针常量。
66 0
|
7月前
|
C语言
c语言编程练习题:7-59 打印菱形图案
c语言编程练习题:7-59 打印菱形图案
75 0
|
7月前
|
C语言
c语言编程练习题:7-58 求幂级数展开的部分和
c语言编程练习题:7-58 求幂级数展开的部分和
77 0
|
7月前
|
C语言
c语言编程练习题:7-57 求e的近似值
c语言编程练习题:7-57 求e的近似值
79 0
|
7月前
|
C语言
c语言编程练习题:7-56 求给定精度的简单交错序列部分和
c语言编程练习题:7-56 求给定精度的简单交错序列部分和
89 0