C Primer Plus第七章学习笔记以及编程题

1.一对字符输入/输出函 数:getchar()和putchar()

getchar()函数不带任何参数,它从输入队列中返回下一个字符。

例如, 下面的语句读取下一个字符输入,并把该字符的值赋给变量

ch: ch = getchar();

该语句与下面的语句效果相同:

scanf("%c", &ch);

putchar()函数打印它的参数。例如,下面的语句把之前赋给ch的值作为 字符打印出来: putchar(ch);

该语句与下面的语句效果相同:

printf("%c", ch);

由于这些函数只处理字符,所以它们比更通用的scanf()和printf()函数更快、更简洁。而且,注意 getchar()和 putchar()不需要转换说明,因为它们只 处理字符。这两个函数通常定义在 stdio.h头文件中(而且,它们通常是预处 理宏,而不是真正的函数)

2.条件运算符:?: 

带一个运算对象的运算符称为一元运算符

带两个运算 对象的运算符称为二元运算符

以此类推,带 3 个运算对象的运算符称为三 元运算符

条件运算符是C语言中唯一的三元运算符

下面的代码得到一个 数的绝对值:

x = (y < 0) ? -y : y;

在=和;之间的内容就是条件表达式,该语句的意思是“如果y小于0,那 么x = -y;否则,x = y”。

用if else可以这样表达:

if (y < 0) x = -y;

else x = y;

条件表达式的通用形式如下:

expression1 ? expression2 : expression3

如果expression1为真,整个条件表达式的值是expression2的值;

否则, 是expression3的值。

示例:

(5 > 3) ? 1 : 2 值为1

(3 > 5) ? 1 : 2 值为2

(a > b) ? a : b 如果a >b,则取较大的值

3. 循环辅助:continue和break
 1.continue语句

3种循环都可以使用continue语句。

执行到该语句时,会跳过本次迭代的 剩余部分,并开始下一轮迭代

如果continue语句在嵌套循环内,则只会影响包含该语句的内层循环。 

 2.break语句

 程序执行到循环中的break语句时,会终止包含它的循环,并继续执行 下一阶段。

4.多重选择:switch和break 

 switch在圆括号中的测试表达式的值应该是一个整数值(包括char类 型)。case标签必须是整数类型(包括char类型)的常量或整型常量表达式 (即,表达式中只包含整型常量)。不能用变量作为case标签。switch的构造如下:

switch ( 整型表达式)

{

case 常量1:

语句   <--可选

case 常量2:

语句   <--可选

default :

语句   <--可选

}

顺带一提,break语句可用于循环和switch语句中,但是continue只能用 于循环中。尽管如此,如果switch语句在一个循环中,continue便可作为 switch语句的一部分。这种情况下,就像在其他循环中一样,continue让程序 跳出循环的剩余部分,包括switch语句的其他部分。

5.何时使用switch?何时使用if else? 

何时使用switch?何时使用if else?你经常会别无选择。如果是根据浮 点类型的变量或表达式来选择,就无法使用 switch。如果根据变量在某范围 内决定程序流的去向,使用 switch 就很麻烦,这种情况用if就很方便: if (integer < 1000 && integer > 2) 使用switch要涵盖以上范围,需要为每个整数(3~999)设置case标 签。但是,如果使用switch,程序通常运行快一些,生成的代码少一些。 

 6.编程练习
1.编写一个程序读取输入,读到#字符停止。程序要打印每个输入的字符以及对应的ASCII码(十进制)。一行打印8个字符。建议:使用字符计数和求模运算符(%)在每8个循环周期时打印一个换行符。
#include <stdio.h>
#include <ctype.h>
​
int main(void ){
   int count = 0;
   char ch = 0 ;
   int charactors = 0;
   while ((ch=getchar()) != '#'){
       printf("%d:%c  ",ch,ch);
       count++;
       if(count%8==0){
           printf("\n");
       }
    }
​
}
2.编写一个程序,读取整数直到用户输入 0。输入结束后,程序应报告用户输入的偶数(不包括 0)个数、这些偶数的平均值、输入的奇数个数及其奇数的平均值。 
#include <stdio.h>
#include <ctype.h>
​
int main(void ){
   int doublecount = 0;
   int alldbcount = 0;
   int singlecount = 0;
   int allsigcount = 0;
   int ch = 0 ;
   int charactors = 0;
   printf("Enter your numbers end of 0:");
   while ((scanf("%d",&ch))&&ch!=0){   
//主要是这一行代码的&&,如果要使用scanf函数只能用这种写法,其他方式尝试过,会无法终止循环
       if(ch%2==0){
           doublecount++;
           alldbcount = alldbcount + ch;
       }else{
           singlecount++;
           allsigcount =allsigcount+ch;
       }
   }
    printf("count even:%d,svgeven: %.2f\n",doublecount,1.0*alldbcount/doublecount);
    printf("count odd:%d,svg odd :%.2f",singlecount,1.0*allsigcount/singlecount);
​
}
3.编写程序读取输入,读到#停止,报告ei出现的次数
#include <stdio.h>
#include <stdlib.h>
​
int main(void)
{
    char ch;
    int count = 0, f = 0;
    while((ch = getchar()) != '#')
    {
        switch(ch)
        {
            case 'e':
                f = 1;
                break;
            case 'i':
                if(f)
                {
                    count++;
                    f = 0;
                }
                break;
            default:
                break;
        }
    }
    printf("\n%d\n", count);
    return 0;
}

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值