目录
顺序控制
程序从上到下逐行地执行,中间没有任何判断和跳转
分支控制
if-else(单分支)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void main() {
int x = 4;
int y = 1;
if (x > 2) {
if (y > 1) {
printf("x+y=%d", x + y);
}
printf("我爱中华");
}
else {
printf("x is =%d", x);
}
getchar();//我爱中华
}
求二次元方程是否有解
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
//求的是二次元方程是否有解
void main() {
double a = 0;
double b = 0;
double c = 0;
printf("请输入a的值:");
scanf("%lf", &a);
printf("请输入b的值:");
scanf("%lf", &b);
printf("请输入c的值:");
scanf("%lf", &c);
double z = b * b - 4 * a * c;
double x1 = 0;
double x2 = 0;
if (z >= 0) {
x1 = -b + sqrt(z) / 2 * a;
x2 = -b - sqrt(z) / 2 * a;
printf("方程的两个解分别为:%.lf,%.lf", x1, x2);
}
else {
printf("方程无解");
}
getchar();
getchar();
}
if-else(多分支)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void main() {
double score = 0.0;
printf("请输入小明的C二级考试成绩:");
scanf("%lf", &score);
if (score == 100) {
printf("奖励一台宝马");
}
else if (score>80&&score<100){
printf("奖励一部苹果手机");
}
else if (score >= 60 && score <= 80) {
printf("奖励一个ipad");
}
else {
printf("什么奖励都没有");
}
getchar();//得到的回车
getchar();//控制台暂停
}
嵌套分支
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//参加百米运动会,如果用时8秒以内进入决赛,否则提示淘汰。并且根据性别提示进入男子组或女子组。
void main() {
double time = 0.0;
char gender = ' ';
printf("请输入百米运动会成绩(s):");
scanf("%lf", &time);
if (time < 8) {
printf("请输入同学性别(m/f):");
scanf("%c", &gender);//接收到上次回车
scanf("%c", &gender);
if (gender == 'f') {
printf("进入女子组决赛");
}
else {
printf("进入男子组决赛");
}
}
else {
printf("淘汰");
}
getchar();
getchar();
}
switch分支结构
细节讨论
- switch语句中的表达式是一个常量表达式,必须是一个整数(char、short、int、long)或枚举类型
- case子句中的值必须是常量,而不能是变量
- default子句是可选的,当没有匹配的case时,执行default
- break语句用来执行完一个case分支后使程序跳出switch语句块
- 如果没有写break,会执行下一个case语句块,直到遇到break或者执行到switch结尾,这个现象称为穿透
double score = 0.0;
printf("请输入学生成绩(满分100分):");
scanf("%lf", &score);
switch ((int)(score / 60)) {
case 0:
printf("不合格");
break;
case 1:
printf("合格");
break;
default:
printf("输入成绩有误");
}
switch和if的比较
- 如果判断的具体数值不多,而且符合整型、枚举类型,此时建议使用switch语句
- 对区间判断,对结果为真假的判断,使用if
for循环控制
注意事项和细节说明
- 循环条件是返回一个表示真假的表达式
- for(;循环判断条件;)中的初始化和变量迭代可以不写
- 循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开,循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开
练习题
#include<stdio.h>
void main() {
//打印1-100之间所有是9的倍数的整数的个数及总和
int count = 0;
int sum = 0;
for (int i = 1; i <= 100; i++) {
if (i % 9 == 0) {
count++;
sum += i;
}
}
printf("1-100之间是9的倍数的整数有%d个,\n",count);
printf("1-100之间是9的倍数的整数总和是%d,", sum);
int j = 0;
printf("请输入一个整数:");
scanf("%d", &j);
for (int i = 0; i <= j; i++) {
printf("\n %d + %d = %d", i, j - i, j);
}
getchar();
}
While循环控制
#include <stdio.h>
#include <string.h>
void main() {
//不断输入姓名,直到输入 "exit" 为止[使用while完成]
//分析
//1. 需要接受用户的输入,字符串[字符数组]
//2. 提示: <string.h> 有一个strcmp 函数,判断两个字符串是否相同
// int strcmp(const char *str1, const char *str2) // 返回0 表示相等,非0表示不相等
char name[10] = "";
while( strcmp(name,"exit") != 0) { // exit = > 0 != 0
printf("\n请输入名字");
scanf("%s", name); // 这里不需要 加 &name, 因为 数组的名称就是地址
printf("\n你输入的名字是=%s", name);
}
printf("退出while");
getchar(); //过滤 回车
getchar(); // 暂停控制台
}
do-while循环控制
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void main() {
//打印1-100的和
int i = 0;
int j = 100;
int sum = 0;
do {
sum += i;
i++;
} while (i <= j);
printf("1-%d的和为:%d", j, sum);*/
//统计1-200之间能被5整除但不能被3整除的个数
int count = 0;
int j = 200;//区间的最大值
int i = 1;
do {
if (i % 5 == 0 && i % 3 != 0) {
count++;
}
i++;
}while (i <= j);
printf("1-200之间能被5整除但不能被3整除的个数:%d个", count);
//如果老公同意老婆购物,则老婆将一直购物;
//直到老公说不同意为止[printf("老婆问:我可以继续购物吗?y/n")]
char answer = ' ';
do {
printf("老婆问:我可以继续购物吗?(y/n)\t");
scanf("%c", &answer); // 获取用户输入
getchar(); //过滤掉 回车符
} while (answer == 'y');//严格大小写
printf("老婆终于退出购物~~~~");
getchar();
}
多重循环控制
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void main() {
//统计3个班成绩情况,每个班有5名同学,求出各个班的平均分和所有班级的平均分[学生的成绩从键盘输入]。
//1. 各个班的平均分
//2. 所有班级的平均分, 得到所有班级的总分 allClassTotalScore
//3. 定义变量表示 班级个数 classNum , 定义变量表示 学生个数 stuNum
//4. 定义变量 classTotalScore 每个班级总分
//5. 定义变量 score , 接收学生成绩
//6. 使用两层for循环
int classNum = 3;
int stuNum = 5;
double score = 0.0;
double classTotalScore = 0.0;
double allClassTotalScore = 0.0;
int count = 0;//每班不及格人数
int count1 = 0;//全部班不及格人数
int i = 0;
int j = 0;
//每次给一个班级输出成绩时,需要清零
classTotalScore = 0.0;
for (int i = 1; i <= classNum; i++) {
count = 0;
for (int j = 1; j <= stuNum; j++) {
printf("请输入第%d个班的第%d个的同学的成绩:", i, j);
scanf("%lf", &score);
if (score < 60) {
count++;
}
classTotalScore += score;
}
count1 += count;
allClassTotalScore += classTotalScore;
printf("第%d个班的总成绩为%.2lf,平均分为%.2lf\n", i, classTotalScore, classTotalScore / stuNum);
printf("第%d个班不及格的人数为%d\n", i, count);
}
printf("全部班级学生的总成绩为%.2lf,平均分数为%.2lf\n", allClassTotalScore, classTotalScore / stuNum * classNum);
printf("全部班不及格的人数为%d",count1);
getchar();
getchar();
}
跳转控制语句-break
- break语句用于终止某个语句块的执行,一般使用在switch或者循环中
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
void main() {
//int i;
//for(i = 0; i < 10; i++) {
// if(i == 3) {
// break; //当执行到break 时,就会退出for循环
// }
// printf("i=%d\n", i); // 0 - 9
//}
//100以内的数求和,求出当和第一次大于20的当前数
/*int i = 1;
int sum = 0;
for (i = 0; i < 100; i++) {
sum += i;
if (sum > 20) {
break;
}
}
printf("i=%d\n", i);*/
//实现登录验证,有三次机会,如果用户名为”张无忌” ,密码”888”提示登录成功,
//否则提示还有几次机会,请使用for 循环完成
//分析
//1. 首先要定义一个变量,保存登录的机会(次数) chance
//2. 定义两个字符数组,接收 用户名和密码
//3. 使用for循环+break , 如果登录成功,就提前退出
//int chance = 3;
//int loginCount = 3;//登录次数
//char name[10] = " ";
//char pwd[10] = "";
//int i;//循环变量
//for (int i = 1; i <= loginCount; i++) {
// printf("请输入用户名:");
// scanf("%s", name);
// printf("请输入密码:");
// scanf("%s", pwd);
// //判断字符串相等使用strcmp
// if (strcmp("张无忌", name) == 0 && strcmp("888", pwd) == 0) {
// printf("\n登陆成功!");
// break;
// }
// else {
// //机会次数-1
// chance--;
// printf("你还有%d次登陆机会\n", chance);
// }
//
//}
//getchar();
//getchar();
//出现随机数97的次数
//int num = rand() % n + a
//a是起始值,n-1+a是终止值,n是整数的范围
//srand((unsigned)time(NULL));
int i;
for (i = 1; i < 1000; i++) {//生成1000个随机数
int num = rand() % 100 + 1;
printf("num=%d\t%d\n", num,i);
if (num == 97) {
break;
}
}
printf("出现随机数97需要的次数为%d", i);
}
跳转控制语句-continue
- continue语句用于结束本次循环,继续执行下一次循环
- continue语句,只能配合使用循环语言使用,不能单独和switch/if使用
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void main() {
//从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,
//输入为0时结束程序【使用for循环 ,break, continue完成】 【positive 正数,negative】
//1. 定义变量 positive 保存正数的个数
//2. 定义变量 negative 保存负数的个数
//3. 使用for + break + continue
int positive = 0;
int negative = 0;
int num = 0;//接收从控制台输入的数
for (; ;){//死循环,永远不退出
printf("请输入数字:");
scanf("%d", &num);
if (num == 0) {
break;//跳出for
}
if (num > 0) {
positive++;
continue;
}
negative++;
}
printf("正数有%d个\n",positive);
printf("负数有%d个\n", negative);
getchar();
//某人有100000元, 每经过一次路口,需要交费, 规则如下:
//当现金>50000时,每次交5%
//当现金<=50000时,每次交1000
//编程计算该人可以经过多少次路口,使用 while break方式完成
//小于1000时,就不能再过路口了
double money = 1000;
int count = 0;
while (1) {
if (money < 1000) {
break;
}
if (money > 50000) {
money = money * 0.95;
count++;
continue;
}
else if(money<=50000){
money = money - 1000;
count++;
}
}
printf("该人一共能经过%d次路口.剩余%d元", count,money);
getchar();
}
跳转控制语句
- C语言的goto语句可以无条件地转移到程序中指定的行
- goto语句通常与条件语句配合使用。可以来实现条件转移,跳出循环体等功能
#include<stdio.h>
void main() {
//定义标签
printf("start\n");
goto label1;
printf("ok1\n");
printf("ok2\n");
label1://下边就是对label标签的定义
printf("ok3\n");
printf("ok4\n");
getchar();
}
循环控制练习
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void main() {
/*int num = 0;
printf("请输入一个整数:");
scanf("%d", &num);
if (num > 0) {
printf("该数大于0");
}
else if (num < 0) {
printf("该数小于0");
}
else {
printf("该数等于0");
}
getchar();*/
//判断一个年份是否是闰年
int year = 0;
printf("请输入一个年份:");
scanf("%d", &year);
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
printf("%d年是闰年", year);
}
else {
printf("%d年是平年", year);
}
getchar();
//判断一个整数是否是水仙花数
int num;
printf("请输入一个整数:");
scanf("%d", &num);
int a = num / 100;//百位
int b = num % 100 / 10;//十位
int c = num % 10;//个位
if (num = a * a * a + b * b * b + c * c * c) {
printf("%d是水仙花数", num);
}
else {
printf("%d不是水仙花数", num);
}
int m = 0, n = 3;
if (m > 0) {
if (n > 2) {
printf("A");
}
else {
printf("B");
}
}
//保存用户名和密码,判断用户名是否为“张三”,密码是否为1234
char name[10] = "";
char pwd[10] = "";
printf("请输入用户名:");
scanf("%s", name);
printf("请输入密码:");
scanf("%s", pwd);
if (strcmp("张三", name) == 0 && strcmp("1234", pwd) == 0) {
printf("登陆成功");
}
else {
printf("登陆失败");
}
//根据输入的月份和年份,求出该月的天数
int year;
int month;
printf("请输入当前的年份:");
scanf("%d", &year);
printf("请输入当前的月份:");
scanf("%d", &month);
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
if (month == 2) {
printf("当前月份为29天");
}
}
else {
if (month == 2) {
printf("当前月份为28天");
}
}
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
printf("当前月份为31天");
}
if (month == 4 || month == 6 || month == 9 || month == 11) {
printf("当前月份为30天");
}
}
调和级数相加
//求出1-1/2+……-1/100的和
double sum = 0.0;
int i;
for (i = 1; i <= 100; i++) {
if (i % 2 != 0) {
sum += 1.0 / i;
}
else {
sum -= 1.0 / i;
}
sum += 1.0 / i;
}
printf("调和级数的和为%.6f", sum);
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/83274.html