2020-11-16第一次阶段考错题

一、判断题

1-9

为了检查以下if-else语句的两个分支是否正确,至少需要设计3组测试用例,即x的取值至少有三组(小于15的数、15和大于15的数)。

if (x <= 15){ 
   y = 4 * x / 3;
} else{ 
   y = 2.5 * x - 10.5;
}

错F 正确T
【思想】:暂时没找到 暂定为 自己思考有几组就几组;

选择题

若变量已正确定义,要求程序段完成求5!的计算,以下不能完成此操作的是

A.
for (i = 1, p = 1; i <= 5; i++) p *= i;
B.
for (i = 1; i <= 5; i++) {p = 1; p *= i;}
C.
i = 1; p = 1; while (i <= 5) {p *= i; i++;}
D.
i = 1; p = 1; do {p *= i; i++;} while (i <= 5);

错D 正确B
错因:B每次循环后P=1 自我认为do whlie的算到6了 为什么没算到6?
因为i++ 判断时候已经加了1 !

三、填空题

4-1

已知字符’a’的ASCII码为97,则下列语句的输出结果为
b#100#

printf("%c#%d#", 98 , 'c' );

错 b#100# 对b#99#
错因:粗心

4-6

当a=1,b=2,c=3时,下面打印语句的输出是
1#0#

printf(“%d#%d#”, (a, b), a>b?(c=4):(c=5) );

错1#0# 对2#5#
错因
1.逗号表达式不会
2.认为后面的赋值是拿来判断(c=5)= =0

【思想】:逗号表达式:从左往右逐个计算表达式,整个表达式的值为最后一个表达式的值

程序填空题

5-1

小写转大写(基础版)
下面的程序输入小写字母,输出对应的大写字母。请在空白处填写表达式完成该程序。

#include <stdio.h>

int main()
{
    char lower, upper;
    lower = getchar();
    upper = ________;
    
    putchar(upper);
    putchar('\n');
    return 0;
}

错lower+(‘a’-‘A’) 正确:lower-‘a’+‘A’;
【错因】 小写字母ASCII码大于大写

【思路】
1.不能写成 ‘lower’-‘a’+‘A’;因为lower本身已经是个字符,字符在计算时会直接用本身ASCII码计算!!

5-2

输入一个正整数n,再输入n个整数,输出其中的偶数。要求相邻数字中间用一个空格分开,行末不得有多余空格。

# include <stdio.h>
int main()
{
    char ch;
    int first, k, n, x; 

    scanf("%d", &n);
    
_______
    for(k = 1; k <= n; k++){
        scanf("%d", &x); 
        if 
_______
{
            if ( first == 1 ){ 
                printf("%d", x); 
                
_______

            }else{ 
                
________

            }
        }
    }

    return 0;
}


1.first=1;
2.(x%2==0)
3.first++;
4.printf(" ")

错因:4.printf(" %d",x);

【思想】scanf输入多个数 (for)时 可以回车也可以空格

求素数

错误

#include<stdio.h>
int main()
{
	int i,j,n,y=1;
	scanf("%d",&n);
	for(i=2;i<n;i++)
	   {
	   for(j=2;j<i;j++)
	   {
	   if(i%j==0)
	   break;
	   else if(i%j!=0)
	   continue;}
	   if(j==i+1)
	   printf("%d",i);}
}

正确

#include<stdio.h>
#include<math.h>
int main()
{
	int i,n;
	scanf("%d",&n);
	for(i=2;i<=n;i++)
	{
	
		int j;
		for(j=2;j<i;j++)
			if(i%j==0) break;
			if(j>=i)
			{
				printf("%d ",i);
				
			}
	}
	return 0;
}

错误 最后的if应该是(j= =i) 写j= =i+1本意是防止j与i相等 但for中已经避免了这个东西

【思想】1.不用else if continue也行 因为if一个条件如果不满足,则自动去重新开始循环;
2.后面的这个(j= =i)这里 自己认为是j怎么可能到i 以为在循环中j只能等于i-1 其实不然 因为要等于i才能跳出循环

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值