2019-11-22Day6 C语言实战开发while的使用 进制转换demo 数组介绍

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};√//4
4
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
#include
#include

    
    
//产生随机数的同时比较是否重复
//如果重复,则重新再产生一个随机数
//如果不重复,就保存进去 
//每次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是否相等来看到底是怎么出来的循环。

你可能感兴趣的:(2019-11-22Day6 C语言实战开发while的使用 进制转换demo 数组介绍)