顺序
说白了就是从上到下执行
选择结构
if语句:满足或者不满足
if(判别表达式){
判别表达式为真,执行代码
}
else{
判别表达式为假,执行代码
}
int main(void) {
int score;
printf("请输入学生成绩:");
scanf("%d", &score);
if (score <= 100 && score >= 90)
{
printf("优秀\n");
}
else if(score < 90 && score >= 70) {
printf("良好\n");
}
else if (score < 70 && score >= 60) {
printf("及格\n");
}
else {
printf("不及格\n");
}
return 0;
}
scanf的4996错误:scanf是不安全的,只要把错误提示里面的宏添加到头上就行了。
这个宏最好放在。c文件的第一行
#define _CRT_SECURE_NO_WARNINGS
//三只小猪称体重
int main(void) {
int pig1, pig2, pig3;
printf("请输入三只小猪的体重,用空格分隔:\n");
scanf("%d %d %d",&pig1, &pig2, &pig3);
if (pig1 > pig2) {
if (pig1 > pig3) {
printf("一号小猪最重,体重为%d\n",pig1);
}
else
{
printf("三号小猪最重,体重为%d\n",pig3);
}
}
else
{
if (pig2 > pig3) {
printf("二号小猪最重,体重为%d\n", pig2);
}
else
{
printf("三号小猪最重,体重为%d\n", pig3);
}
}
}
switch 分支语句
switch (判别表达式){
case 1:
执行语句1;
break;
case 2:
执行语句2;
break;
。。。
case n:
执行语句n;
break;
default: //上面的东西都没匹配上
break;
}
#include <stdio.h>
int main(void) {
int score;
printf("请输入学生成绩:");
scanf("%d", &score);
switch (score/10)
{
case 10:
printf("优秀\n");
break;
case 9:
printf("优秀\n");
break;
case 8:
printf("良好\n");
break;
case 7:
printf("良好\n");
break;
case 6:
printf("及格\n");
break;
default:
printf("不及格\n");
break;
}
}
case穿透:
每一个case后面的break就是为了防止case穿透,如果没有写break,那么他会向下继续执行一个case分支
switch (score/10)
{
case 10:
case 9:
printf("优秀\n");
break;
case 8:
case 7:
printf("良好\n");
break;
case 6:
printf("及格\n");
break;
default:
printf("不及格\n");
break;
}
}
if分支是匹配一个范围,属于模糊匹配,case后面一定是一个具体的数,不能是表达式,switch是属于精确匹配
循环
while(这个表达式为真才执行){
循环体
}
敲7游戏:
#include <stdio.h>
int main(void) {
int num = 1;
while (num <= 100)
{
if ((num % 7 == 0) || (num % 10 == 7) || (num / 10 == 7)) { //个位含7,十位含7,7的倍数
printf("敲桌子\n");
}
else
{
printf("正常数数:%d\n",num);
}
num++;
}
return 0;
}
dowhile循环:先执行一次循环体,然后在判断是否进行循环
do{
循环体
}while(条件判别表达式)
无论是while还是do-while,判别表达式为真的时候才执行
求水仙花数:
一个三位数,各个位上的数字的立方和=本数字
eg:3的立方+6的立方+7的立方=367,那367就是水仙花数(这个数是瞎编的)
分别用while和do-while循环做水仙花数
int main(void) {
int num = 100;
int ge,shi,bai;
int sum;
while (num < 1000) {
ge = num % 10; //取出个位
shi = (num % 100) / 10;
bai = num / 100; //取出百位
if (ge*ge*ge + shi*shi*shi + bai*bai*bai == num)
{
printf("水仙花数:%d\n", num);
}
num++;
}
/*
do
{
ge = num % 10; //取出个位
shi = (num % 100) / 10;
bai = num / 100; //取出百位
if (ge*ge*ge+shi*shi*shi+bai*bai*bai == num)
{
printf("水仙花数:%d\n", num);
}
num++;
} while (num < 1000);
return 0;*/
}
for循环
for(表达式1;表达式2;表达式3){
循环体
}
表达式1执行完执行表达式2,通常2是判别表达式,如果2是真,就执行循环体,2执行完了就执行3,3执行完了再执行2来判断,如果是真就继续做循环体,否则跳出
循环因子:定义在for之外,for循环结束也能使用(这就是全局变量和局部变量作用域的关系)
猜数字游戏:
规则:生成一个随机数:添加一个随机数种子,如果不播种的话后面生成的数是伪随机(无论执行多少次都是第一次生成的那个数):原理:利用系统的时间作为计算基数
#include <time.h>
#include <stdlib.h>
srand(time(NULL)); //这个是标准写法,记下来
int n = rand() %100; //这是生成随机数,和100取余之后就可以限制范围到100以内,不然的话会很大
2、循环输入数据来猜
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
srand(time(NULL));
int a = rand()%100;
int input;
printf("请输入100以内的数字:\n");
while (1)
{
scanf("%d",&input);
if (a == input) {
printf("猜对了,这个数就是:%d\n",a);
break;
}
else if (a < input)
{
printf("猜大了,请继续\n");
}
else
{
printf("猜小了,请继续\n");
}
}
return 0 ;
}