在 C 语言知识体系中,
数据类型 --- 》 点
运算符 --- 》 线
逻辑结构 --- 》 面
函数 --- 》 体
1. 控制流 - 分支结构
1. if-else 分支: 两路分支一般形式:
代码语言:javascript复制if( 逻辑表达式 ) {
// 如果表达式为逻辑真, 则执行分支体 1
}
else {
// 如果表达式为逻辑假, 则执行分支体 2
}
2 } 多路分支一般形式:
备注:
1. 两路或者多路分支中, else 可省略, 主要看使用场景。
2. 当多路分支中, 某一个为逻辑真, 执行分支体后直接结束分支。
3. 多路分支没有规定分支总数。
4. if-else 分支结构中, 如果分支体只有 1 条语句, 范围括号 {} 可省略。
5. 尽量减少分支、 循环的嵌套, 尽量小于 5 层, 否则导致程序逻辑可读性变差。
2. 入口选择分支: switch-case
备注: 1. 进入某个入口后, 按照顺序向下执行。 如果需要提前结束 swich-case , 可使用 break
练习
.1.从小到大输入 3 个数字(三角形的三边长) a. 判断是否能组成三角形? ( 两短边之和, 大于第三边。) (如果成立继续执行 b , 如果不成立提前结束程序。) b. 判断该三角形属于直角?钝角?锐角?
代码语言:javascript复制#include <stdio.h>
int main()
{
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
/* // 2层if嵌套
if(a b > c)
{
// 正常的三角形,开始执行b
if(a*a b*b == c*c)
printf("直角三角形n");
else if(a*a b*b < c*c)
printf("钝角三角形n");
else if(a*a b*b > c*c)
printf("锐角三角形n");
}
else // 不是三角形
printf("不是三角形n");
*/
// 1层if
if(a b <= c)
{
printf("不是三角形n");
return -1; // 返回数值无所谓(一般错误使用负数)
}
// 正常的三角形,开始执行b
if(a*a b*b == c*c)
printf("直角三角形n");
else if(a*a b*b < c*c)
printf("钝角三角形n");
else if(a*a b*b > c*c)
printf("锐角三角形n");
return 0;
}
2.下列代码会打印哪个数字?
代码语言:javascript复制int a=-1;
if( a)
printf("1n");
else if(a )
printf("2n");
else if(a )
printf("3n");
else if(a )
printf("4n");
else if(a )
printf("5n");
else
printf("6n");
printf("a: %dn", a);
while
代码语言:javascript复制#include <stdio.h>
int main()
{
/*
if(逻辑表达式)
{
//逻辑真,则执行分支体
// 执行完毕后,结束。
}
while(逻辑表达式)
{
//逻辑真,则执行循环体。
// 执行完毕后,再次判断
}
*/
int var1 = 1;
while(var1<=10)
{
printf("var1: %dn", var1);
var1 ;
}
// 可简化为:
int var1 = 1;
while(var1<=10)
printf("var1: %dn", var1 );
return 0;
}
作业:
1、编写一个程序,要求用相应的控制流语句往屏幕打印 26 个小写字母。
代码语言:javascript复制#include<stdio.h>
int main()
{
for (int i = 97; i <=122; i )
{
char a=i;
printf("%ct",a);
}
printf("n");
return 0;
}
2、编写一个程序,用户输入某个大写字母,产生一个金字塔图案。例如用户输入字母 E,则产生如下图案:
代码语言:javascript复制#include<stdio.h>
int main()
{
printf("请输入一个大写字母n");
char a;
scanf("%c",&a);while (getchar()!='n');
int asciiCode=(int)a-64;
printf("现在有%d数n",asciiCode);
int lineNum;
for (int i = 0; i <asciiCode; i )
{
for (int z = 2*asciiCode-1-i; z>= 0; z--)printf(" ");
for (int j = 0; j <i 1; j )
{
printf("%c",(char)65 j);
if(j==i){
for (;j>0;j--)
{
printf("%c",(char)65 j-1);
}
j=i;
}
}
printf("n");
}
return 0;
}
3、编写一个程序,该程序读取输入直到遇到#字符,然后报告读取的空格数目、读取的换行符数目以及读取的所有其他字符数目。
代码语言:javascript复制#include <stdio.h>
int main(int argc, char **argv)
{
char ch;
int space = 0;//空格数
int line = 0; //换行数
int otherchars = 0; //其他字符数
printf("请输入文本:(输入'#'结束)n");
while(1)
{
scanf("%c", &ch);
if(ch == '#') //遇到'#'就结束循环
{
break;
}
if(ch == ' ') //遇到空格,space 1
{
space ;
}
else if(ch == 'n') //遇到换行,line 1
{
line ;
}
else
{
otherchars ;
}
}
printf("空格数:%dn", space);
printf("换行数:%dn", line);
printf("其他字符数:%dn", otherchars);
return 0;
}
4、编写一个程序,接受一个整数输入,然后显示所有小于或等于该数的素数。
代码语言:javascript复制#include<stdio.h>
void sushu(int a) {
//素数(质数)计算方法
int i,j;
for (i = 1; i <= a; i ) {
for (j = 2; j < i; j ) {
if (i % j == 0) {
// printf(i "不是素数n");
break;
}
}
if (i == j) {
printf("%dt",i);
}
}
}
int main()
{
int a;
printf("输入一个整数n");
scanf("%d",&a);
// unsigned char b;
sushu(a);
return 0;
}
5、输入一个华氏温度,要求输出摄氏温度。要求结果保留 2 位小数。
转换公式为:c = 5(F-32)/9
代码语言:javascript复制#include<stdio.h>
int main()
{
float a;
printf("输入一个华氏温度");
scanf("%f",&a);
float c=5* (a-32)/9;
//1 华氏度(华氏温度)=-17.222222222 摄氏度
// printf("%.2f华氏度=%.2f℃n",a,a*17.222);
printf("%.2f华氏度=%.2f℃n",a,c);
return 0;
}
6.打印如下图案:
代码语言:javascript复制#include<stdio.h>
int main()
{
int i, j, k;
for (i = 0; i < 4; i ) //先输出前四行
{
for (j = 0; j < 3 - i; j ) //随行数增加而减少每行空格的输出
{
printf(" ");
}
for (k = 0; k <= 2 * i; k ) //随行数增加而增加每行*的输出
{
printf("*");
}
printf("n");
}
for (i = 0; i < 3; i ) //输出后三行
{
for (j = 0; j < i 1; j ) //随行数增加而增加空格的输出
{
printf(" ");
}
for (k = 0; k <= 4-2*i; k ) //随行数的增加而减少*的输出
{
printf("*");
}
printf("n");
}
return 0;
}
7、将一个十进制数转换为十六进制数。比如输入 10,输出 0xA
代码语言:javascript复制#include<stdio.h>
int main()
{
int a;
printf("输入一个10进制数:n");
scanf("%d",&a);
printf("转为16进制数是:0x%xn",a);
return 0;
}