五道选择题:

1、如果 x=2014 ,下面函数的返回值是( )

int fun(unsigned int x)
{
int n = 0;
while(x + 1)
{
n++;
x = x | (x + 1);
} 
return n;
}

 A、20   B、21    C、23     D、25

c语言每日一练(10)-LMLPHP

 2、如下函数 fun 计算 prod=1*2*3*…*n ,并返回计算结果值。但当 n>12 时,返回值不正确。要找出该程序的错误,正确的调试方法是( )

int fun(int n)
{
int prod = 1 , i = 0;
for(i = 1;i <= n;i++)
{
prod *= i;
}
return prod;
}

A、监视变量prod的值,在prod *= i;行处设置断点,然后单步运行,直到发现错误原因
B、监视变量prod的值,在return prod;行处设置断点,程序中断后,即可发现错误原因
C、在prod=1;处设置断点,然后在函数调用堆栈中即可发现错误原因
D、监视变量i的值,在for (i=1; i<=n; i++)行处设置断点,然后单步运行,直到发现错误原因

3、请问下列代码的输出结果有可能是哪些【多选】( )

#include <stdio.h>
typedef union
{
	int a;
	struct
	{
		short b;
		short c;
	};
}X;
int main()
{
	X x;
	x.a = 0x20150810;
	printf("%x,%x\n", x.b, x.c);
    return 0;
}

A、2015,810      B、50810,201     C、810,2015    D、20150,810

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

#include<stdio.h
int main()
{
int m, n;
printf("Enter m,n\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语言每日一练(10)-LMLPHP

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

#include <stdio.h>
int main()
{
	char c;
	int v0 = 0, v1 = 0, 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 

c语言每日一练(10)-LMLPHP

 编程题1:

9. 回文数 - 力扣(LeetCode)  

c语言每日一练(10)-LMLPHP

bool isPalindrome(int x) {
    if (x < 0)
        //当x为-1时,倒过来为1-,可看出,负数不可能为回文数
    {
        return false;
    }
    long long int sum = 0; long long int x1 = x;
    while (x1)
    {
        sum = sum * 10 + x1 % 10;
        x1 /= 10;
    }
    if (sum == x)
    {
        return true;
    }
    else
        return false;
}

编程题2:

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

c语言每日一练(10)-LMLPHP

bool lemonadeChange(int* bills, int billsSize) {
    //一开始我们是穷光蛋,一块钱都找不出
    if (bills[0] != 5)
        return false;
    int five = 0; int ten = 0;
    //只需要计算5块钱和10块钱的数目即可,因为找钱不可能拿20找
    int i = 0;
    for (i = 0; i < billsSize; i++)
    {
        if (bills[i] == 5)
            //给我们5美元的时候,直接收就行
        {
            five += 1;
        }
        if (bills[i] == 10)
            //10美元就一种情况,找5美元,收10美元
        {
            five -= 1;
            if (five < 0)
            {
                return false;
            }
            ten += 1;
        }
        if (bills[i] == 20)
            //两种情况,找3张5或1张10和1张5
        {
            if (five >= 3 && ten < 1)
            //确实没有办法了,就找3张5出去,可以找的时候找1张5和1张10
            //因为5相比10适用范围更大
            {
                five -= 3;
            }
            else
            {
                five -= 1;
                ten -= 1;
            }
            if (five < 0 || ten < 0)
            {
                return false;
            }
        }
    }
    return true;
}

  好了,今天的练习到这里就结束了,感谢各位友友的来访,祝各位友友前程似锦O(∩_∩)O

08-21 16:19