while语句
如果关心循环的次数或第几次就用for
while不关心 只要条件成立就行了
{
/*for(int i=0;i<10;i++)
/
int i=0;
while(i<10){
i++;
}
do{
}while(i<3)
/
2进制 1010 10100 111000
8进制 12 24 70
10进制 10 20 56
16进制 0A 14 38
*/
return
}
歌曲播放30min后停
int main(){
/*
for(int i = 0; i < 10; i++)
while(1)
int i = 0;
while(i < 3){
i++;
}
do{
}while(i < 3);
*/
/*
2进制 1010 10100
8进制 12 24
10进制 10 20
16进制 0A 14
请输入数字:56
2进制为:111000
8进制为:70
16进制为:38
*/
int num;
printf("请输入数字:");
scanf("%d",&num);
int jinzhi = 16;
//二进制
int wei = 1;
long long sum = 0;
while(1){
//取余 10100
// 00101
// 1*0 + 10*0 + 100*1 + 1000*0 + 10000*1
// 10100
int yu = num % jinzhi;
num = num / jinzhi; //10 5
//目前的总和:当前位数的值 + 之前的值
sum = sum + yu * wei;//0
wei = wei * 10 ;//1*10 100 1000
if(num < jinzhi){
sum = sum + num * wei;
break;
}
}
printf("%d\n", sum);
return 0;
}
数组
如何学好C语言核心:了解if for while 等控制语句,数组的使用,指针,结构体,动态分布内存
几乎任何程序都是由他们拼接起来的
基本数据类型:int float double它们只能存储一个数据
为什么要数组:它的特点是它能够存储多个同种类型的数据
1.数组的定义:必须明确知道数组元素的个数,系统为数组分配内存空间的时候能够确定(分房间必须确定人数)
int a=10;//4个内存空间
int(数组类型)array(数组名)[ ]={1,2,3,4};√
int array[4];(无初始值)√//44
int array[4]={1,2};√//44
int array[ ];×
2.数组的内存:数组名就是数组的首地址
3.数组的访问:通过下标访问0~(n-1)
4.Demo-产生4个随机数保存到数组并输出
进阶 :产生不同的四个随机数 思路:①生成数组②产生随机数的同时比较是否重复③如果重复就产生一个新的随机数④不重复就保存 在这里正好i的值可以用来判断产生随机数个数
2数组的内存 array[0] == *(array +0) 数组访问,注意不能越界。数组名就是数组的首地址。
printf("%p\n",array);
printf("%p\n",&array[0]);
printf("%p\n",&array+0);
这三个打印出来的都是一样的
demo
产生四个随机数,将这个四个随机数放到数组里面,然后输出。
int array[4];
int temp;
int i ;
for(i = 0;i <= 4;i++){
temp = rand()%9;
array[i] = temp;
printf("%d ",array[i]);
}
产生四个不同的随机数(这个贼难)
自己在课下重新写的时候,忘了先定义一个变量temp装着随机数
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
//产生随机数的同时比较是否重复
//如果重复,则重新再产生一个随机数
//如果不重复,就保存进去
//每次i的值和已经存入数值的元素的数目相等
int main (void){
int array[4] = {};//定义数组的时候最好这样写,就是要写{},相当于初始化了,就不会受之前就已经存在的值干扰了
srand(time(NULL));
for(int i = 0;i <= 3;i++){
int temp = rand()%5;
if ( i == 0){
array[i] = temp;//等于1的时候直接赋值
} else{
//判断前面与前面的元素是否相等
int j = 0;
for(j = 0;j < i;j++){
//比较j对应的值和前面的元素是否相同
if( temp == array[j]){//这里要判断一下,因为当temp!=array[j]的时候,不需要任何操作,所以直接判断当temp == array[j]的时候执行什么操作
//重复了,直接break
printf("重复了:%d\n",temp);//这条语句是后来加上的,主要是看哪个数重复了
break;
}
}
if(i == j){//判断是如何出来的,到底是正常出来的呢(j = i)还是重复出来的呢(j < i)如果正常出来,则保存
array[i] = temp;
//printf("%d",array[i]);//不能这样写,因为最起码第一个就没有打印
}else{
//重复了,但是相当于浪费掉了一次i,所以要i--一下
i--;
}
}
}
for(int i = 0;i <= 3;i++){
printf("%d",array[i]);
}
return 0;
}
总结
今天感觉收获不小的还是进制转换,之前一直懒得学,今天总算学到了,不过十进制转十六进制还是不会,课下需要再自己找视频学,另外,最后数组这个小demo的书写也是很费脑筋的,尤其是又定义了一个变量j,和最后通过判断j和i是否相等来看到底是怎么出来的循环。