栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

暑期培训总结日记#NO.5

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

暑期培训总结日记#NO.5

C语言 continue

一、进制转换:

为什么要使用二进制、八进制、十进制、十六进制?

 因为现在的CPU只能识别高低电平,只能对二进制的数据进行计算。虽然二进制的数据可以直接被CPU识别计算,但是不方便书写和记录。

把二进制的数据转换成八进制是为了方便记录到文档中。由于CPU位数的发展不断增加,由8位逐渐发展到现在的64位,因此八进制就不能满足需求了,所以发展出了十六进制。

但是由于历史原因,八进制还不能完全淘汰。

十进制转二进制:

1.求余法(其他进制通用,对对应的进制求余):用2对数据求余,然后继续对商求余,直到商为0结束,该过程中产生的余数就是该数据的二进制(倒序输出)

2.求权法:从高位到低位数据减去2^(n-1)次方,可减则n位为1否则为0,直到数据减为0

手算:86 72 112 176 ——01010110  01001000  01110000  10110000

练习1:输入一个正整数m,输入n(n>=2),显示m的n进制,超过10的用字母显示(笔试真题)

#include 
#include 
int main(int argc,const char* argv[])
{
    int m=0,n=0,temp=0,step=0,i=0;
    printf("Please input a m:n");
    scanf("%d",&m);
    printf("Please input n:n");
    scanf("%d",&n);
    for(i=0;temp0)
    {   
        arr[step]=m%n;
        m=m/n;
        step++;
    }   
    for(int j=step-1;j>=0;j--)
    {   
        if(arr[j]>=10)
            printf("%c ",55+arr[j]);
        else
            printf("%hhd ",arr[j]);
    }   
    return 0;
}

转十进制:每位的2^(n-1)求和

二进制转八进制:从低位开始,每三位二进制位对应一位八进制

先划分位:1001010101110b ----001 001 010 101 110 八进制:11256

二进制转十六进制:从低位开始,每四位二进制位对应一位十六进制

在C语言中,以0开头的数是八进制数,例如 %c 072中072为8进制数,应该先转换为十进制。以0x开头的数是十六进制。

%o:以八进制显示数据

%x:以十六进制显示数据

%#o/x:可以把数据对应的前缀显示出来。要求输出的类型不一样结果可能不同(%hhd %hd)

二、原码、反码、补码:

原码:数据的二进制

反码:正数的反码就是它的原码,负数的反码就是它原码的除符号位外,其他位按位求反

补码:正数的补码就是它的原码,负数的补码是它的反码加一。

注意:内存中所有数据的存储都是以补码形式存储的

负数转换成二进制、符号位不变,其余按位取反,反码加一得到补码

-127在内存中:原码1111 1111反码1000 0000 补码1000 0001

补码转数据:1.无符号补码直接转换成十进制2.有符号,最高位是0为有符号正数,直接转换成十进制;最高位是1为有符号负数:补码减一得到反码,反码除符号位按位取反得到原码后再转换为十进制数

三、位运算符:

按位与&                A & B 按位相与

按位或|                  A | B按位相或

按位求反~                 ~A

异或^                 A^B 按位异或

按位左移<<          A<

按位右移>>         A>>n把A的补码右移n位,右边丢弃,左边补符号位

——先转换再算

左移一次相当于×2,右移一次相当于÷2.

int num=3; num<<12;

printf(“%dn”,num);   

 num=num<<12与num<<12

练习2:输入一个整数,把它的4到7位设置为1010,其他位不能变

1 0110 1011 0111 0101  num

1 0110 1011 1010 0101  (num & ~(0xf << 4)) | (0xA << 4)

四、函数:

一段具有某项功能的代码,是C语言中管理代码的最小单位,把代码封装成一个个函数,可以方便管理和调用代码。

函数的分类:标准库函数、系统函数、第三方库函数、自定义函数

标准库函数:

由C语言标准委员会为C语言以函数的形式提供的一些基础功能,被封装libc.so中,使用时需要包含对应的头文件,通过 函数名(实参)方式即可调用标准库中的函数

libm.so  

#include

time_t time(time_t *tloc);

功能:返回自1970-1-1 0:0:0到函数执行时总共过了多少秒 time_t sec = time(NULL)

#include

int system(const char *command);

功能:执行系统命令 system(“clear”)

int rand(void)  void为空 功能:返回一个随机数   int num = rand()

void srand(unsigned int seed); 功能:种随机种子  srand(time(NULL))

[a,b] =rand()%(b-a+1)+a

练习3:获取十个范围在100~1000之间的随机数,循环不超过十次

#include 
#include 
#include 
int main(int argc,const char* argv[])
{
    int a=0;
    srand(time(NULL));
    for(int i=0;i<10;i++)
    {   
        a=rand()%901+100;
        printf("%4d",a);
    }   
    return 0;
}

 

练习4:双色球----红球一共6组,每组从1-33中抽取一个,六个互相不重复,蓝球从1-16抽取一个,随机产生一组双色球号码

  1 #include

  2 #include

  3 #include

  4 int main(int argc,const char* argv[])

  5 {

  6     int redball[6]={0},blueball=0,step=0,i=0,j=0;

  7     srand(time(NULL));

  8     blueball=rand()%16+1;

  9     while(i<6)

 10     {

 11         step=rand()%33+1;

 12         for(j=0;j

 13         {

 14             if(redball[j]==step)

 15             {

 16                 break;

 17             }

 18         }

 19         if(j==i)

 20             {

 21                 redball[i++]=step;

 22             }

 23     }

 24     for(i=0;i<6;i++)

 25     {

 26         printf("%02d ",redball[i]);

 27     }

 28         printf("%02d ",blueball);

 29     return 0;

 30 }             

 

系统函数:

是操作系统以函数接口形式提供的一些列功能,但是它不是真正意义上的函数。内存管理、文件管理、文件IO、信号处理、进程管理、进程通信、线程管理、线程同步、网络通信

第三方库函数:

由第三方提供的开源或者收费的代码库  MD5加密算法/Json序列化、反序列化/Xml配置文件解析

自定义函数:

为了更好地管理自己的代码,减少代码冗余,把代码封装成函数形式。

  1. 函数声明:目的是为了告诉其他代码该函数的调用格式

隐式声明:在调用函数时,前面没有出现过该函数的声明或定义,就会产生隐式声明的警告,参数会根据实参来猜测,返回值会猜测为int类型,反正不要产生隐式声明:只要在调用前有声明或定义即可

返回值类型  函数名(形式参数:类型1 参数名,类型2 参数名);//封号记得加

注意:1.C中函数名一般全小写,可以用下划线分割2.如果返回值不需要,可用void,不能不写3.如果不需要形参,建议也写void 4.如果形参类型相同,每个都要加类型名,与定义变量时不同

  1. 函数定义:函数的实现代码

复制声明,去掉封号加上大括号

返回值类型  函数名(形式参数:类型1 参数名,类型2 参数名)

{  //函数体  

return (val);//val根据返回值类型,return如果是void也可以写,意义是结束}

  1. 函数调用: 函数名(实参);

注意:1.在函数调用之前有函数定义,则函数声明可以省略

2.函数的返回值会返回在调用位置,可以立即显示,也可以使用变量记录下来

3.一个函数建议最好不要超过50行代码

作业:

1、实现一个函数,判断是否是素数,调用它显示100~1000以内所有的素数

#include 
#include 
bool prime(int num);
bool prime(int num)
{
    int i=0;
    for(i=2;i<=num/2;i++)
    {   
        if(num%i==0)
        {
            return false;
        }
    }   
    if(i>num/2)
    {   
        return true;
    }   
}
int main(int argc,const char* argv[])
{
    int step=0;
    for(int i=100;i<=1000;i++)
    {   
        if(prime(i))
        {
            printf("%d ",i);
            step++;
        }
        if(step==8)
        {
            printf("n");
            step=0;
        }
    }   
}

 

2、输入两个日期(yyyy-mm-dd),计算两个日期间隔多少天

#include 
#include 
long reduce_day(int iyear,int imonth,int iday);
long reduce_day(int iyear,int imonth,int iday)
{
    int leapyear=0,simpleyear=0,totaldays=0,run=0;
    for(int i=1;i<=iyear;i++)
    {   
        if (i%4==0 && i%100!=0 || i%400==0)
        {
            leapyear++;
            if(i==iyear)
            {
                leapyear=leapyear-1;
                run=1;
            }
        }
        else
        {
            simpleyear++;
            if(i==iyear)
                simpleyear=simpleyear-1;
        }
    }   
    totaldays=leapyear*366+simpleyear*365;
    for(int i=1;i 

 

3、实现一个函数,判断一个整数是否是回文数,调用它显示1亿-10亿的所有回文数

#include 
#include 
#include 
bool is_huiwen(int num);
bool is_huiwen(int num)
{
    int n = 0,same = 0,temp = 0;
    temp=num;
    while(temp>0)
    {   
        n=temp%10;
        temp=temp/10;
        same=same*10+n;
    }   
    if(same==num)
    {   
        return true;
    }   
    else
    {   
        return false;
    }   
}
int main(int argc,const char* argv[])
{
    int step=0,i=0;
    for(i=100000000;i<=1000000000;i++)
    {   
        if(is_huiwen(i))
        {
            printf("%d ",i);
            step++;
        }
        if(step==12)
        {
            step=0;
            printf("n");
        }
    }   
    return 0;
}

 4、输入一个整数,显示它的补码

#include 
int main(int argc,const char* argv[])
{
    int num=0;
    printf("Please inout a number:n");
    scanf("%d",&num);
    char arr[32]={};
    for(int i=0;i<32;i++)
    {   
        arr[i]=num >> i & 1;
    }   
    for(int i=31;i>=0;i--)
    {   
        printf("%hhd",arr[i]);
    }   
}

 5、计算出100的阶乘

#include 

int main(int argc,const char* argv[])
{
    char rets[256]={1};  //存储结果每一位的数组
    int cnt=1;// 当前结果的位数/结果的最高位的下一位
    for(int i=2;i<=100;i++)
    {   
        int carry=0; //进位
        for(int j=0;j=0;i--)
    {   
        printf("%hhd",rets[i]);
    }   
}

 

暑期编程PK赛 得CSDN机械键盘等精美礼品!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1015567.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号