C语言小练习(四)

C语言小练习(四)_第1张图片
“欲买桂花同载酒,终不似少年游!”不惧岁月不惧风,心之所向素履以往。愿你出走半生,归来仍是少年。青春没结束,我们永远风华正茂。

Day04

  • 选择题

选择题

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
答题思路:对于for循环,第一项初始化表达式只执行一次,因此ch只从输入流中取一个字符,之后就不会再取字符了。所以这里我们需要了解for循环的执行流程。
C语言小练习(四)_第2张图片

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

#define _CRT_SECURE_NO_WARNINGS 1
#include 
int main()
{
	int m, n;
	printf("Enter m,n:");
	scanf("%d%d", &m, &n);
	while (m != n)
	{
		while (m > n)
			m = m - n;
		while (n > m)
			n = n - m;
	}
	printf("m=%d\n", m);
	return 0;
}

A: 3 B: 2 C: 1D: 0

答案:C
答题思路:本题的解题流程如下:C语言小练习(四)_第3张图片
✅ 运行结果如下:
C语言小练习(四)_第4张图片

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

#include 
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

答案:D
答题思路:代码 switch 语句中没有 break ,则每次找到入口进入后,顺序执行到代码块结束为止。例如当 c 为 'A' 时,从 case 'A' 进入,先后执行v1+=1;v0+=1;v2+=1; ,而当 c 为 'p' 时,从 default 进入,先后执行 v0+=1;v2+=1; ,容易看出最终 v0 和 v2 是相等的
本题的解题流程如下:
C语言小练习(四)_第5张图片
✅运行结果如下:
C语言小练习(四)_第6张图片

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
答题思路:
1.函数实参是int,形参用char不对,会发生截断丢失数据;
2.minfor循环开始时更新为0,不再是两个形参中的较小值;
3.判断是否整除的时候误将==写成=赋值运算符
4.函数最终要返回一个int值,返回值类型没问题,但是这里要强调一个选项中没写出的问题,如果是牛客网上的题,会报编译错误,说该函数不是在所有情况下都有返回值,只有在if条件成立的情况下有返回值,一般在vs上这种情况能通过,编译器会给一个默认的返回值。

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
答题思路:外循环有n次,当i=0,内循环为n次,当i=1,内循环为n-1次,当i=2时,内循环为n-2次,以此类推,总次数为n+(n-1)+(n-2)+......+2+1,就是个等差数列,等于n(n+1)/2.

好啦,第四天的练习到这里就结束啦!今天少了两题编程,明天补上!后期会继续更新C语言的小练笔,欢迎大家持续关注、点赞和评论!❤️❤️❤️

你可能感兴趣的:(c语言,算法,开发语言)