C语言学习第三章

时间:2023-03-10 00:07:50
C语言学习第三章

写在课前,提醒自己写代码的时候一定要注意不能漏写符号!提醒自己写代码的时候一定要注意不能漏写符号!提醒自己写代码的时候一定要注意不能漏写符号!

今天主要学习掌握if...else条件结构,多重if条件分支结构if….else if…else if…else。和switch条件结构.

我们知道程序就是为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合,而这一系列的有序指令是需要按照一定的顺序进行执行的,不然也没办法组成一个强大的程序,if.....else就是为了给计算机规定运行命令的顺序,if.....else的意思和我们平常所说的“如果.....否则”是一样的意思()如果怎样怎样就怎样怎样,否则就怎样)。

示例:

    #include <stdio.h>
    void main(){
      int i,j,k;
      i=1;
      j=2;
      k=3;
      if(j<i){
        printf("算错了");
    }
    else{
      printf("算对了");
    }

这其中还用到了运算符(j<i),< 就是一个运算符,就是平常用的小于符号。其他的还有前一天学习的一元运算符( ++,--   (i++,++i,i--,--i))

和二元运算符:+,/,*,/, %(求余或取模)。还有赋值运算符: = ,和你看到的一样这就是一个等于符号。复合赋值运算符:+=,-=,*=,/=,%=这些的意思就像

sum=sum+1就等于sum+=1最后出来的sum结果是一样的,后面的-=,*=,/=,和前面的+=都是一样的意思,%=则是先求余再等。

比较运算符:比较数值的大小和关系(>,>=,<,<=,!=,==)。!=是不等的意思,再程序中比较等于要用==,单独一个=是赋值用的!

逻辑运算符:连接多个条件与&&,或||,非!可以理解成并且(&&)或者(||)非真即假(!)示例:if(i<j&&i<k||k>i&&j>i) 只是示例逻辑运算符的运用,大家不要纠结这有点弱的写法哈:-D

与(并且):多个条件同时为真结果才为真,总结为一假比假。

或(或者):在多个条件中只要有一个条件为真,其结构为真,总结为一真必真。

非(取反): 非真比假,非假必真。

If条件结构:如果条件成立将执行其下大括号中的语句

语法:

if(条件)

{

//语句;

}

C语言学习第三章

示例:

int age;

printf("请输入年龄:");

scanf("%d",&age);

if(age>=18)

{

printf("你已经成年,可以进入!");

}

if(age<18)

{

printf("你是未成年人,禁止入内!!");

}

一个极其重要的练习:

      计算用户输入的数字是不是水仙花数的小程序,水仙花数就是一个三位数的个位的三次方+ 十位数的三次方+ 百位数的三次方等于这个三位数。面试可能会考。

      int num,ge,shi,bai,he;
      printf("请输入三位数");
      scanf("%d",&num);
      //用户输入的数=个位的三次方+ 十位数的三次方+ 百位数的三次方
      //1.从num获取个位
      ge=num%10;
      //2.从num获取十位
      shi=num/10%10;
      //3.从num获取百位
      bai=num/100;
      he=ge*ge*ge+shi*shi*shi+bai*bai*bai;
      if(he==num)
      {
      printf("%d是水仙花数:",num);
      }
      else
      {
      printf("%d不是水仙花数:",num);
      }

下面开始学If…else 结构:如果条件成立执行if中的语句,否则执行else中的语句

C语言学习第三章

示例:

if(age>=18)

{

printf("你已经成年,可以进入!");

}

else

{

printf("你是未成年人,禁止入内!!");

}

小练习:

//学习使用&&和||这两个逻辑运算符的小程序,算用户输入的是不是小写字母。
char l;
printf("输入一个字母;");
scanf("%c",&l);

if(l>'a'&&l<'z'){
printf("%c这是一个小写字母",l);
}
else{
printf("%c这不是一个小写字母",l);
}
分割
if(l<'a'||l>'z'){
printf("%c这不是一个小写字母",l);
}
else{
printf("%c这是一个小写字母",l);
}

实现猜拳游戏: 用户A和用户B分别输入要出的拳(0:剪刀,1:石头,2:布)老师讲解版。

int userA,userB;

printf("******************************************\n");

printf("************郑州尚学堂猜拳游戏**************\n");

printf("******************************************\n");

//1.分别获取用户A和用户B所出的拳

printf("请1号选手出拳:0代表剪刀,1代表石头,2代表布\n");

printf("请用户A出拳:\n");

scanf("%d",&userA);

printf("请用户B出拳:\n");

scanf("%d",&userB);

//2.根据用户A和用户B所出的拳进行比较

//用户A胜==>(用户A:0(剪刀)&&用户B:2(布));(用户A:1(石头)&&用户B:0(剪刀));(用户A:2(布)&&用户B:1(石头))

if((userA==0&&userB==2)||(userA==1&&userB==0)||(userA==2&&userB==1))

{

printf("恭喜用户A获胜~~~~~~~~~~\n");

}

//平局==>用户A==用户B

if(userA==userB)

{

printf("真衰,平局~~~~~~~~~\n");

}

//用户B胜==>(用户A:0(剪刀)&&用户B:1(石头));(用户A:1(石头)&&用户B:2(布));(用户A:2(布)&&用户B:0(剪刀))

if((userA==0&&userB==1)||(userA==1&&userB==2)||(userA==2&&userB==0))

{

printf("恭喜用户B获胜~~~~~~~~~~\n");

}

自己练习写的,有点小恶搞..

int a,b;
printf("0代表剪刀,1代表石头,2代表布\n");
printf("请一号出拳");
scanf("%d",&a);
printf("二号出拳");
scanf("%d",&b);
if(a==0&&b==2||a==1&&b==0||a==2&&b==1)
{
printf("一号更傻\n");
}
if(a==0&&b==1||a==1&&b==2||a==2&&b==0)
{
printf("二号更二\n");

}
if(a==b){
printf("你俩一样二了\n");
}
if(a>2||b>2){
printf("看规则啊 傻逼");

练习.判断输入的5位数字是否是回文数字:像46564或者12321一样的数字。

int num,ge,shi,qian,wan;

printf("请输入一个五位数:");

scanf("%d",&num);

//判断是否为5位数

if(num>=10000&&num<=99999)

{

//获取个位,十位,千位,万位

ge=num%10;//个位

shi=num/10%10;//十位

qian=num/1000%10;//千位

wan=num/10000;//万位

if((ge==wan)&&(shi==qian))

{

printf("%d是一个回文数!",num);

}

else

{

printf("%d不是一个回文数!",num);

}

}

else

{

printf("您输入的数字不是5位数,请重新输入!");

}

自己练手版

int num,ge,shi,qian,wan;
printf("请输入一个五位数;");
scanf("%d",&num);
if((num>=10000)&&(num<=99999))
{
ge=num%10;
shi=num/10%10;
qian=num/1000%10;
wan=num/10000;
if((ge==wan)&&(shi==qian))
{
printf("%d是一个回文数",num);
}
else
{
printf("%d不是回文数",num);
}
}
else {
printf("%d不是一个五位数",num);
}
*/

下面是多重if…else if….else if….else 结构,要开始循环嵌套喽。

语法:

if(条件1)

{

语句1;

}

else if(条件2)

语句2;{

}

else if(条件3)

{

语句3;

}

else

{

语句N;

}

C语言学习第三章

示例:

根据用户输入的成绩,给出该成绩对应的级别(90~100:A;80~90:B;70~80:C;60~70:D;60以下:E)

int score;

printf("请输入您的成绩:");

scanf("%d",&score);

if(score>=90&&score<=100){

printf("A类");

}else if(score>=80&&score<90){

printf("B类");

}else if(score>=70&&score<80){

printf("C类");

}else if(score>=60&&score<70){

printf("D类");

}else{

printf("E类");

}

自己练习版:*成绩分类小程序,

else if 注意事项,

int cheng;
printf("输入你的成绩;\n");
scanf("%d",&cheng);
if(cheng>=90&&cheng<=100){
printf("A级,不错还不傻\n");
}
else if(cheng>=80&&cheng<90){
printf("B级,有点傻啊\n");
}
else if(cheng>=70&&cheng<80){
printf("C级,傻吊啊你\n");
}
else if(cheng>=60&&cheng<70){
printf("D级,是不是傻?是不是傻?\n");
}
else{
printf("E级,你还是吞粪自尽吧\n");
}

我自己犯得错及注意事项.

*1,else if中间有空格
*2,else if表示这是if的分支语句,不能省略else,省略的话就变成了多个if语句并列。
*3,这类语句的顺序不同,预算的结果就会产生差别,必须注意条件的限定。 

接下来是switch条件结构:它只能代替多重if条件结构做等值判断。小心case穿透(遇到break跳出switch语句)有时候case穿透也是有用的,所以一定要小心,区别自己是不是需要它穿透。

示例:

令狐冲参加武林大会: 第一名:奖励葵花宝典; 第二名:辟邪剑谱;第三名:独孤九剑;前三名之外:逐出师门。

int num;

printf("请输入获得名次:");

scanf("%d",&num);

switch(num){

case 1:

printf("奖励葵花宝典一本\n");

break;

case 2:

printf("奖励辟邪剑谱一本\n");

break;

case 3:

printf("奖励独孤九剑一本!\n");

break;

default:

printf("逐出师门!\n");

break;

自己练习版本: 

int num;
printf("你获得了第几?\n");
scanf("%d",&num);
switch(num){
case 1:
printf("奖励你个美女\n");
break;
case 2:
printf("奖励你一打金币\n");
break;
case 3:
printf("奖励你一本葵花宝典\n");
break;

*注意事项,容易犯错的地方
*1.case跟后面的序数中间要加空格
*2.case语句后面用的冒号:不是结束用的;

*3.还是要小心case穿透。

当天课后作业

  1. 输入一个整数day代表星期几,根据day的值输出对应的星期几,比如day==1,就输出“星期一”(用两种方式实现)
  2. int day;

    printf("请输入1~7的数字");

    scanf("%d",&day);

    if(day>0&&day<8)

    {

    //多重if...else if条件分支实现

    if(day==1){

    printf("星期一");

    }else if(day==2){

    printf("星期二");

    }else if(day==3){

    printf("星期三");

    }else if (day==4){

    printf("星期四");

    }else if (day==5){

    printf("星期五");

    }else if(day==6){

    printf("星期六");

    }else{

    printf("星期天");

    }

    switch(day){

    case 1:

    printf("星期一");

    break;

    case 2:

    printf("星期二");

    break;

    case 3:

    printf("星期三");

    break;

    case 4:

    printf("星期四");

    break;

    case 5:

    printf("星期五");

    break;

    case 6:

    printf("星期六");

    break;

    default:

    printf("星期天");

    }

    }else{

    printf("您输入的数字有误!请重新输入!");

    }

2.输入一个整数score代表分数,根据分数输出等级(A-E)

if(score<0||score>100){

printf("输入的分数有误,分数应该在0~100之间!");

}else{

switch(grade){

case 10:

case 9:

printf("A\n");

break;

case 8:

printf("B\n");

break;

case 7:

printf("C\n");

break;

case 6:

printf("D\n");

break;

default:

printf("E\n");

break;

}

}

3.根据用户输入的年份,月份,日期计算该日期是一年中的第几天?这个例子的下面会试验上面所说的case穿透的有利一面,利用好了会很有帮助。

int isRun=0;//是否为闰年(计算2月的天数)

printf("请输入年份:\n");

scanf("%d",&year);

printf("请输入月份:\n");

scanf("%d",&month);

printf("请输入日期:\n");

scanf("%d",&day);

//判断当前输入的年份是否是闰年:闰年2月为29天,平年2月为28天

if((year%4==0&&year%100!=0)||(year%400==0)){

isRun=1;

}//2月份的总天数=28+isRun;

/*

if(month==1){

total=day;//1月15日===>

}else if(month==2){

total=31+day;

}else if(month==3){

total=31+28+isRun+day;//1月份的天数+2月份的天数+日期

}else if(month==4){

total=31+28+isRun+31+day;

}else if(month==5){

total=31+28+isRun+31+30+day;

}else if(month==6){

total=31+28+isRun+31+30+31+day;

}else if(month==7){

total=31+28+isRun+31+30+31+30+day;

}else if(month==8){

total=31+28+isRun+31+30+31+30+31+day;

}else if(month==9){

total=31+28+isRun+31+30+31+30+31+31+day;

}else if(month==10){

total=31+28+isRun+31+30+31+30+31+31+30+day;

}else if(month==11){

total=31+28+isRun+31+30+31+30+31+31+30+31+day;

}else if(month==12){

total=31+28+isRun+31+30+31+30+31+31+30+31+30+day;

}

*/

//利用switch的case穿透特性实现==>3月16号

switch(month)

{

case 12:

total+=30;//加上11月份的30天

case 11:

total+=31;//加上10月份的31天

case 10:

total+=30;//加上9月份的30天

case 9:

total+=31;//加上8月份的31天

case 8:

total+=31;//加上7月份的31天

case 7:

total+=30;//加上6月份的30天

case 6:

total+=31;//加上5月份的31天

case 5:

total+=30;//加上4月份的30天

case 4:

total+=31;//加上3月份的31天

case 3:

total+=28+isRun;//加上2月份的28或29天

case 2:

total+=31;//加上1月份的31天

case 1:

total+=day; //加上输入的日期

}

printf("%d年%d月%d日是一年中第%d天",year,month,day,total);

扩展练习:

1.将用户输入的三个数字进行排序(升序),这个程序要点在于比较两个数字大小并交换顺序,引入了一个第三方中间变量的一种方法。要牢记!

int a,b,c,temp;

printf("请输入第一个数字:\n");

scanf("%d",&a);

printf("请输入第二个数字:\n");

scanf("%d",&b);

printf("请输入第三个数字:\n");

scanf("%d",&c);

printf("排序前:a=%d,b=%d,c=%d\n",a,b,c);

//比较a和b的大小

if(a>b){

temp=a;

a=b;

b=temp;

}

// 比较a和c

if(a>c){

temp=a;

a=c;

c=temp;

}

//比较b和c

if(b>c){

temp=b;

b=c;

c=temp;

}

printf("排序后:a=%d,b=%d,c=%d\n",a,b,c);

2.个人所得税计算器: (工资-起征税额)*税率-速算扣除数,这个程序是一堆循环的嵌套,因数量较多要注意符号一定不能搞错了,大括号不能弄错。

float totalSalary;//税前工资

float tax;//个税

float realSalary;//税后工资

float taxSalary;//应缴税的工资=(税前工资-起征税额);

printf("请输入您的税前工资:\n");

scanf("%f",&totalSalary);

taxSalary=totalSalary-3500;

if(totalSalary<3500){

printf("对不起,你属于贫农,不需要交税!");

}else{

if(taxSalary<=500){

tax=taxSalary*0.05;

}else if(taxSalary>500&&taxSalary<=2000){

tax=taxSalary*0.1-25;

}else if(taxSalary>2000&&taxSalary<=5000){

tax=taxSalary*0.15-125;

}else if(taxSalary>5000&&taxSalary<=20000){

tax=taxSalary*0.2-375;

}else if(taxSalary>20000&&taxSalary<=40000){

tax=taxSalary*0.25-1375;

}else if(taxSalary>40000&&taxSalary<=60000){

tax=taxSalary*0.3-3375;

}else if(taxSalary>60000&&taxSalary<=80000){

tax=taxSalary*0.35-6375;

}else if(taxSalary>80000&&taxSalary<=100000){

tax=taxSalary*0.4-10375;

}else{

tax=taxSalary*0.45-15375;

}

realSalary=totalSalary-tax;

printf("您的税前工资为%7.2f,应缴个税%7.2f,税后工资:%7.2f",totalSalary,tax,realSalary);

}

下面是我自己的练习版本:

//输入三个数之后按照升序排列

#include <stdio.h>
void main(){
int a,b,c,num;
printf("输入一个数:\n");
scanf("%d",&a);
printf("再输入一个数:\n");
scanf("%d",&b);
printf("再输入一个数:\n");
scanf("%d",&c);
printf("排序前:%d,%d,%d\n",a,b,c);
if(a>b){
num=a;
a=b;
b=num;
}
if(a>c){
num=a;
a=c;
c=num;
}
if(b>c){
num=b;
b=c;
c=num;
}
printf("排序后:%d,%d,%d\n",a,b,c);
}
*/

//个税计算器。
#include <stdio.h>
void main(){
float gongzi;//税前工资
float jiao;;//个税
float shuihou;;//税后工资
float ji;//应缴税的工资
printf("你的工资有多少呀?骚年\n");
scanf("%f",&gongzi);
ji = gongzi-3500;
if(gongzi>3500){
if(ji<=500){
jiao = ji*0.05;
}
else if(ji<=2000&&ji>500){
jiao = ji*0.1-25;
}
else if(ji<=5000&&ji>2000){
jiao = ji*0.15-125;
}
else if(ji<=20000&&ji>5000){
jiao = ji*0.2-375;
}
else if(ji<=40000&&ji>20000){
jiao = ji*0.25-1375;
}
else if(ji<=60000&&ji>40000){
jiao = ji*0.3-3375;
}
else if(ji<=80000&&ji>60000){
jiao = ji*0.35-6375;
}
else if(ji<=100000&&ji>80000){
jiao = ji*0.4-10375;
}
else{
jiao = ji*0.45-15375;
}
shuihou = gongzi-jiao;
printf("以你的工资%7.2f算,你应该缴%7.2f块钱,剩下%7.2f块钱",gongzi,jiao,shuihou);
}
else{
printf("等我给你推荐个卖肾的地儿赶紧挣钱去吧\n");
}

}