本帖最后由 鸦领主 于 2020-12-28 16:05 编辑
·目录
一、进制转换(进阶) 1.输入16以内十进制转换一个十六进制 2.输入42亿以内十进制转换八个十六进制
3.printf宽度管理 4.输入16以内十进制转换一个十六进制(使用分支语句) 5.输入42亿以内十进制转换八个十六进制(使用循环语句) 1)pow函数 2)改进代码
二、分支语句 1.单分支语句 2.双分支语句 3.多分支语句 三、循环语句 1.while循环语句 2.do while循环语句
3.循环控制 四、循环分支语句使用列子 1.打印菜单栏 2.判断数字是否为素数 1)第二种思路 2)嵌套循环 五、补充 1.swichi语句(分支) 2.for语句(循环)
一、十转换十六进制打印
1.输入一个16以内的十进制数,用%X打印成一个十六进制数
#include<stdio.h>
int main()
{
int i;
printf("输入一个16内的数字:");
scanf_s("%d",&i);
printf("0x%04X",i); // %04X中间的0代表打印出的数字,4代表4个位置,双字节(00是单字节 00 00是双字节等)
return 0;
}
效果:
C语言学习第五天
2.输入一个42亿以内的十进制数,用%X打印成8个十六进制数
#include<stdio.h>
int main()
{
unsigned int i; // 不能用 int因为有符号,unsigned int 无符号
printf("输入42亿内的数字:");
scanf_s("%d",&i);
printf("0x%08X\n",i);
printf("或者可以这样输入,每俩个十六进制数间隔\n");
printf("%X",i/16/16/16/16/16/16/16%16);
printf("%X ",i/16/16/16/16/16/16%16);
printf("%X",i/16/16/16/16/16%16);
printf("%X ",i/16/16/16/16%16);
printf("%X",i/16/16/16%16);
printf("%X ",i/16/16%16);
printf("%X",i/16%16);
printf("%XH",i%16);
return 0;
}
错误方式:
C语言学习第五天
正确方式:
C语言学习第五天
3.printf加强功能宽度管理
整数宽度:
(算上自己本身占的位置,比如 55前面6个位置加上自己2个位置是8个位置)
printf("%8d",55);8表示右对齐占8个位置,;
printf("%-8d",44);-8表示左对齐占8个位置;
printf("%08d",33);0表示右对齐8个位置填充为0,左对齐填充0无效。
(字符串,浮点数同理)
C语言学习第五天
4.输入一个16以内的十进制数,不用%X打印出一个十六进制数
#include<stdio.h>
int main()
{
int i;
printf("输入一个16内的数字:");
scanf_s("%d", &i);
if (i < 10) //如果输入的是1-9
printf("%d", i); //将执行这一句
else if (i == 10)//输入10
printf("A");//执行这一句
else if (i == 11)
printf("B");
else if (i == 12)
printf("C");
else if (i == 13)
printf("D");
else if (i == 14)//输入14
printf("E");//执行这一句
else if (i == 15)
printf("F");
else
printf("输入的数字无效") //如果没有符合的将直接执行到这一句
return 0;
}
效果:
C语言学习第五天
C语言学习第五天
5.输入一个42亿以内的十进制数,不用%X打印出8个十六进制数(使用循环语句)
#include<stdio.h>
#include<math.h>
int main()
{
unsigned int i, m;
printf("输入一个42亿内的数字进行进制转换:");
scanf_s("%d", &i);
printf("转换结果为:0x");
int n = 0;
while (n < 8) //n大于等于8就不在循环
{
m = i / (int)pow(16, (7-n)) % 16;
if (m < 10)
printf("%d", m);
else if (m == 10)
printf("A");
else if (m == 11)
printf("B");
else if (m == 12)
printf("C");
else if (m == 13)
printf("D");
else if (m == 14)
printf("E");
else
printf("F");
n++; //每次循环n+1
}
}
效果:
C语言学习第五天
1)pow函数:x的x次方(用到#include<math.h>头文件,包括了数学计算之类的函数)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
int main()
{
int i, n;
printf("请输入:");
scanf("%d%d",&i,&n);
printf("%d的%d次方是:%0.0f",i,n,pow(i,n));
return 0;
}
效果:
C语言学习第五天
2)改进代码
#include<stdio.h>
#include<math.h>
int main()
{
unsigned int i, m, s;
printf("请输入42亿以内的数字进行转换:");
scanf_s("%d", &i);
printf("0x");
int n = 0;
while (n < 8)
{
s = (int)pow(16,(7 - n)); //第一次n=7-0 第二次n=7-1
m = i / s % 16; //第一次i/16的7次方,第二次i/16的6次方... 第八次i/16的0次方
if (m < 10)
putchar(48+m); //=printf("%d",m) 48在ascii中是0,如果m=5的话,0+5等于5将会打印出5
else
putchar('A' + m - 10); //A在ascii中是65,如果m是11的话 11-10=1,65+1=66,66是B将会打印B
n++;
}
}
效果:
C语言学习第五天 进阶进制转换 分支语句 循环语句
与上面那个效果一样,更加方便了一些
==========================================================================
二、分支语句
1.单分支语句:
if
#include<stdio.h>
int main()
{
int i, m;
printf("请输入你的销售数量:");
scanf_s("%d",&i);
m = i*20; //卖一件提成20元,卖i件=i*20元
if (i >= 100) //如果卖出大于等于100件
m = m + 500; //则额外获得500元
printf("本月获得提成:%d元",m);
return 0;
}
效果:
C语言学习第五天
C语言学习第五天
2.双分支语句:
if
else
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int i, m; //i是数量,m是多少元
printf("输入本月销量:");
scanf("%d", &i);
if (i < 100) //如果小于100件
m = i* 20;//每件提成20元
else
m = i * 30; //大于100件每件30元
printf("%d元",m);
return 0;
}
效果:
C语言学习第五天
C语言学习第五天
3.多分支语句:
if
else if
else if
.....
else
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int i, m; //i是数量,m是多少元
printf("输入本月销量:");
scanf("%d", &i);
if (i < 100) //如果小于100件 1-99会执行这里
m = i * 20;//每件提成20元
else if (i < 200) //小于200件, 100-199会执行这里
m = i * 30; //每件30元
else
m = i * 40; //200以上会执行这里
printf("%d元",m);
return 0;
}
效果:
C语言学习第五天
C语言学习第五天
C语言学习第五天
==========================================================================
三、循环语句
1.while循环语句:先判断条件成不成立,成立执行不成立不执行
#include<stdio.h>
int main()
{
int i = 1, n = 0; //初始化区(i是决定从那个数值开始)
while (i<=100)//<100的话是99加过一次就跳出循环,<=100是100也要加一次
{
n = n + i;//(每循环一次n加一次i)等价于n +=i
i = i + 1;//(每循环一次i加一次1)//等价于i++;/++i;
}
return 0;
}
C语言学习第五天
2.do while循环语句:先无条件的执行一次在判断条件成不成立
#include<stdio.h>
int main()
{
int i = 20,n=0;
do
{
n += i;
i++;
} while (i<10); //可以看到条件不成立但还是执行了一次
return 0;
}
效果:
C语言学习第五天
3.循环控制
int n=0;
while(n<8) //n从0-7
i++;
int n=7
while(n>=0)n从7-0
m = i / (int)pow(16, n) % 16;
i--;
等价于
int n=7
while(n<8) //n从0-7
m = i / (int)pow(16, 7-n) % 16; //加了7-n变成了n从7-0
i++
==========================================================================
四、循环分支使用列子
1.打印菜单栏(循环分支语句)
system("cls")清除数据
system("pause")按任意件继续(停顿)
用system需要#include<stdlib.h>或者#include<windows.h>(windows.包括了stdlib.h)
#include<stdio.h>
#include<windows.h>
int main()
{
int i=1;
while (i!=0) // i不等于0继续循环 ( !=不等于,==等于)
{
system("cls"); //清除数据
puts("1.添加数据");
puts("2.删除数据");
puts("3.修改数据");
puts("0.退出程序");
puts("===============");
puts("请输入你的选择:");
scanf_s("%d", &i);
if (i == 1)
puts("你选择了添加数据");
else if (i == 2)
puts("你选择了删除数据");
else if (i == 3)
puts("你选择了修改数据");
else if (i == 0)
puts("你选择了退出程序");
else
puts("你的选择无效");
system("pause"); //停顿
}
return 0;
}
输入1之后出现你选择了添加数据,输入2之后出现你选择了删除了数据,输入0退出程序
2.判断一个数字是否为素数(循环分支语句)
#include<stdio.h>
int main()
{
int n;
printf("请输入一个数字:"); //输入11
scanf_s("%d" ,& n);
int i = 2;
while (i<n) //循环9次,i=n不在循环
{
if (n % i == 0) //没有符合条件,继续循环
break; //不执行中途退出循环
i++; //每次循环加1
}
if (n == i) //n为11,i为11
printf("%d是素数", n); // 11是素数
else
printf("%d不是素数", n);
return 0;
}
效果:
C语言学习第五天 进阶进制转换 分支语句 循环语句
C语言学习第五天 进阶进制转换 分支语句 循环语句
1)第二种思路
#include<stdio.h>
int main()
{#include<stdio.h>
int main()
{
int n,f=0;
printf("请输入一个数字:"); //输入一个33
scanf_s("%d" ,& n);
int i = 2; //第一次i=2继续循环+1,i=3
while (i<n)
{
if (n % i == 0) //33%3余数0
{
f = 1; //执行f=1
break;//执行中途退出
}
i++;
}
if (f==0) //此时f=1
printf("%d是素数", n);
else
printf("%d不是素数", n); //f不等于0,则33不是素数
return 0;
}
复合语句:在函数内用大括号包起来的就是复合语句。
缺省情况:if或while只能控制一个分号;
如果要控制多行就要用大括号包起来。
2)嵌套循环(循环中有循环)
#include<stdio.h>
int main()
{
int n;
while (1) //while(1)为死循环,死循环会一直循环,没有退出条件,可以自己加退出条件
{
printf("请输入一个数字:");
scanf_s("%d", &n);
if (n == 0) //如果 n=0,
break; //则退出,
int i = 2;
while (i < n)
{
if (n % i == 0)
break;
i++;
}
if (n == i)
printf("%d是素数\n", n);
else
printf("%d不是素数\n", n);
}
return 0;
}</span></code></pre>
效果:
C语言学习第五天 进阶进制转换 分支语句 循环语句
俩种复合条件:而且&&,或则||
if(n==0||n==1) n等于1或者等于0才会执行下面代码
if(n==0&&n==1)n等于0而且等于1才会执行下面代码
==========================================================================
补充:
1.swichi语句:
a)if语句所控制的往往范围较大,而switch语句往往是对少量的单一条件判断;
b)switch只有一次无限大范围条件的控制,.就是default语句。
c)case语句中丕能带有变量:必须是一个常量了数字);
d)一个switchi语句下面所有的case都是不可以重复的:.
e)在每个case区域尽量不要定义变量,定义变量最好在switch之前;
格式:
swichi(xxx)
{
case'xxx';
puts("xxx")
break;
case'xxx';
puts("xxx")
break;
default;
}
2.for语句
for(初始化区;判断区;递增区)
{
运算区
}
a)递增区是在没每次循环结束时执行
b)当判断区不写入东西的时候代表无条件循环
c)for的括号内3个区都可以为空
============
break;中途退出循环
return 1;直接退出函数
contiune;返回循环开始
|