《C语言程序设计(第3版)》教材配套习题 第三章

if-else中的猫腻

两个并列的if
mynumber = 38;
scanf ("%d", &yournumber); 
if(yournumber == mynumber){ 
    printf("Right");
}
if(yournumber > mynumber ){ //这里不是else if,即这里的判断不在上一个if不成立的前提下
    printf("Big");
}else{ 
    printf("Small");
}
if后的马上分号
double grade; 
scanf ("%lf", &grade); 
if(grade < 60); {	//注意这里的分号,即if已经结束
    printf("Fail"); 
}
printf("?");
在if (表达式) 中用赋值语句
int k, flag;
if (k = 0) { //k赋值为0后,用k来判断是否为true
  flag = 0;
} else {
  flag = 1;
}

但是不能在逻辑运算符后赋值

int k=1, flag;
if (k = 0 && k==1) { //先赋值编译是可以通过的
  flag = 0;
} else if(k = 0 && k==1){ //后赋值编译无法通过
  flag = 1;
}

switch中的猫腻

switch (表达式)

可以是常量、变量、常量表达式、变量表达式
注意,常量不只有数值类型,变量也是

switch(9){}
switch(1+1){}
switch(choice){}
switch(choice* choice+1){}
case 常量表达式n:
  1. 不能含有变量,只能是常量或常量表达式
  2. 常量表达式的结果不能重复(编译错误)
填空题易漏" break; "
没有break时的执行顺序

[例] 从判断到的位置开始顺序执行,default的位置任意且(无break时)影响结果

switch(op){
       case '+': printf("%d", value1 + value2); 
       default: printf("Error"); 
       case '-': printf("%d", value1 - value2); 
}

当op为’+‘时,从case ‘+’:后面顺序输出;
当op为’/‘时,从default:后面顺序输出;
当op为’-'时,从case ‘-’:后面顺序输出。

输出的空格/换行控制

坑人的空格填空题…

[例1]
输入一个正整数n,再输入n个字符,将这些字符输出,输出时在字符之间加一个空格,最后一个字符的后面没有空格。

# include <stdio.h>

int main()
{    
    char ch;
    int first = 1, k, n; 

    scanf("%d\n", &n);
    for(k = 1; k <= n; k++){
   		________________ //填空①
   		if ( first == _______ ) //填空②
		{ 
	    	putchar(ch); 
            ________________ //填空③
		}else{ 
     	    ________________ //填空④
     	    putchar(ch);
	 	}
    }

    return 0;
}

[例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;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值