电商专业学习嵌入式软件开发第二十九天
-
C第三天
今天老师讲的是循环,理解起来都不难,就是运用到题目中很难,而且老师主要是以做题为主,老师在讲课之前先把昨天的作业给讲了一。今天做的练习都不是第一次做了,但是除了前面的较简单的题目,后面的都做不出来。
作业:简单计算器
#include <stdio.h>
void main()
{
float a,b;
char c;
printf("请输入:");
scanf("%f%c%f",&a,&c,&b);
switch(c)
{
case '+':
printf("%.1f\n",a+b);
break;
case '-':
printf("%.1f\n",a-b);
break;
case '*':
printf("%.1f\n",a*b);
break;
case '/':
if(!b) //也可以写为if(b == 0)
printf("除数不能为0!\n");
else
printf("%.1f\n",a/b);
break;
default:
printf("输入有误,请重新输入!\n");
}
}
循环语句:
1.while
格式:
while(条件)
{
语句;
}
原理:当条件成立的时候(真),就执行大括号中的语句,执行完成之后,回过去继续判断条件是否成立,如果成立,就继续执行大括号对应的语句,如果不成立,不再执行对应的语句,转而执行大括号后面的语句。
例:
#include <stdio.h>
void main()
{
int a=5;
while(a>0)
{
printf("a=%d\n",a);
a--;
}
printf("xxx\n");
}
练习:计算1~100之和
sum前1=1;
sum前2=sum前1+2
...
sum前97=sum前96+97
sum前98=sum前97+98
sum前99=sum前98+99
sum前100=sum前99+100
=>sum=sum+n n=1~100
#include <stdio.h>
void main()
{
int sum=0,n=1;
while(n<=100)
{
sum=sum+n; //记住
n++;
}
printf("sum = %d\n",sum);
}
练习:写一个自动销售饮料的售货机的程序,有相应的界面,购买的时候,输入金额,和购买产品。售货机会给出相应的提示。
#include <stdio.h>
#include <stdlib.h>
void main()
{
char ch='y';
while(ch=='y')
{
system("clear");//清理系统
printf("\n\n");
printf(" ***********************************\n"); //那么多星星只是为了好看。。。
printf(" * 欢迎选购 *\n");
printf(" * *\n");
printf(" * 1.红茶 ¥3 *\n");
printf(" * 2.脉动 ¥4 *\n");
printf(" * 3.红牛 ¥6 *\n");
printf(" * 4.牛奶 ¥5 *\n");
printf(" * *\n");
printf(" * 请选择: *\n");
printf(" * 请投币: *\n");
printf(" ***********************************\n");
int c,m;
system("tput cup 10 24");//定位:tput行坐标 cup列坐标
scanf("%d%*c",&c);
system("tput cup 11 24");
scanf("%d%*c",&m);
system("tput cup 13 1");
switch(c)
{
case 1:
if(m>3)
printf("给你红茶,收好找零:%d\n",m-3);
else if(m==3)
printf("红茶不能多喝哦!\n");
else
printf("不好意思,余额不足!\n");
break;
case 2:
if(m>4)
printf("脉动回来,收好找零:%d\n",m-4);
else if(m==4)
printf("脉动给你力量!\n");
else
printf("不好意思,余额不足!\n");
break;
case 3:
if(m>6)
printf("红牛真牛,收好找零:%d\n",m-6);
else if(m==6)
printf("跟着红牛一起牛!\n");
else
printf("不好意思,余额不足!\n");
break;
case 4:
if(m>5)
printf("给你牛奶,收好找零:%d\n",m-5);
else if(m==5)
printf("牛奶多喝长个!\n");
else
printf("不好意思,余额不足!\n");
break;
default:
printf("选择有误!\n");
}
printf("是否继续输入?(y/n)\n");
ch=getchar();
}
}
练习:从键盘上输入若干个整数,当输入0时结束输入,求输入的整数之和。
方法1:使用while
#include <stdio.h>
#include <stdlib.h>
void main()
{
int sum=0,num;
printf("intput num: ");
scanf("%d",&num);
while(num!=0)
{
sum=sum+num;
printf("intput num: ");
scanf("%d",&num);
}
printf("sum is:%d\n",sum);
}
方法2:使用do...while
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,sum = 0;
do
{
scanf("%d",&i);
sum += i;
}while(i != 0);
printf("整数之和是:%d\n",sum);
}
练习:输入一个整数,使这个数逆序输出
12345=>54321
#include <stdio.h>
#include <stdlib.h>
void main()
{
int data,r_data;
printf("请输入一个数:");
scanf("%d",&data);
while(data!=0)
{
r_data=data%10;
printf("%d",r_data);
data=data/10;
}
printf("\n");
}
练习:36块砖,36个人搬,4/男,3/女,2个小孩抬1块。问一次性搬完,男,女,小孩各多少人。
男:9
女:12
小孩:36-男-女
男:1 女:1~12 小孩:36-男-女
男:2 女:1~12 小孩:36-男-女
...
男:9 女:1~12 小孩:36-男-女
while(男<9)
{
女=1;
while(女<12)
{
小孩=36-男-女;
if(4*男+3×女+小孩/2==36 && 小孩%2==0)
printf(...);
女++;
}
男++;
}
方法1:使用while
#include <stdio.h>
void main()
{
int man,woman,child;
man=1;
while(man<9)
{
woman=1;
while(woman<12)
{
child=36-man-woman;
if((man*4+woman*3+child/2)==36 && child%2==0)
printf("man:%d woman:%d child:%d\n",man,woman,child);
woman++;
}
man++;
}
}
方法2:使用for
#include <stdio.h>
void main()
{
int m,w,c;
for(m = 1;m < 9;m++)
{
for(w = 1;w < 12;w++)
{
c = 36 - m - w;
if(4*m+3*w+c/2==36&&c%2==0)
printf("m:%d w:%d c:%d\n",m,w,c);
}
}
}
2.do...while
格式:
do
{
语句;
}while(条件);
原理:先执行一次循环语句,然后判断条件是否成立,如果条件成立,就继续回去执行循环语句,接着再判断条件是否成立,如果不成立,循环结束,故此循环不管条件成立不成立,都会至少执行一次循环体。
while:先判再做
do...while:先做再判
练习:统计从键盘输入的字符的个数。do...while
enter:\n\r;
#include <stdio.h>
void main()
{
char c,p;
int x=0;
do
{
printf("请输入字符:");
do
{
c=getchar();
x++;
}while(c!='\n');
printf("统计输出的字符个数为:%d\n",--x);
printf("是否继续统计?");
p=getchar();
getchar();
}while(p=='y' || p=='Y');
}
练习:计算机猜拳游戏:石头,剪刀,布
玩法:先自己出个拳,计算机随机出一个石头/剪刀/布,然后给出谁赢了。
怎么产生一个随机值:
#include <time.h>
#include <stdlib.h>
srand((unsigned)time(NULL));//产生一个随机值发生器
//srand(time(0));
a=rand();
a%3: 0:剪刀 1:石头 2:布=>计算机
3:剪刀 5:石头 7:布=>人
计算机赢了:4 7 if
我赢了:5 8 else if
平了:else
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
void main()
{
char c;
int people,computer,total;
while(1)
{
sleep(3);
system("clear");
printf("\n\n 这是一个猜拳小游戏\n");
printf(" A.剪刀\n");
printf(" B.石头\n");
printf(" C.布\n");
printf(" D.不玩了\n");
printf(" 请选择:");
c=getchar();
getchar();//吸收残留回车
switch(c)
{
case 'A':
case 'a':
people=3;
break;
case 'B':
case 'b':
people=5;
break;
case 'C':
case 'c':
people=7;
break;
case 'D':
case 'd':
return; //结束当前函数
}
srand((unsigned)time(NULL));
computer=rand()%3;
switch(computer)
{
case 0:
printf("电脑出了\"剪刀\"!\n");
break;
case 1:
printf("电脑出了\"石头\"!\n");
break;
case 2:
printf("电脑出了\"布\"!\n");
break;
}
total=computer+people;
if(total==4 || total==7)
printf("电脑赢了!\n");
else if(total==5 || total==8)
printf("你赢了!\n");
else
printf("平局\n");
}
}
3.for