11.26 +C语言总结

数字进制转换:

#include <stdio.h>
//数字进制转换
void func(void)
{   //输入要转换的数字
    int a = 0, b = 0;
    printf("输入正整数:");
    scanf("%d", &a);

    if (a < 0)
    {   return;
    }
    printf("输入要转换的进制:");
    scanf("%d", &b);
    //定义一个数组,保存转换的进制数
    char arr[100] = {0}, i = 0;
    do
    {
        arr[i] = a % b;
        a = a / b;
        i++;        //保存到数组中,数组中从头到尾保存的是个位到高位
    }while (a > 0);
    for (i=i-1; i>=0; i--)
    {
        //小于10直接输出。
        if (arr[i] < 10)
        {
            printf("%d", arr[i]);
        }
        else//大于10减去10以内的数。
        {
            printf("%c", arr[i]-10+'A');
        }
    }
    printf("\n");
}
int main(void)
{
    func();
    return 0;
}

数组:
数组是某一种数据类型的集合,本质上是声明数组的同时,在内存上申请一段连续的空间,用来存储数据,程序结束前,内存不释放。
数组有字符数组,有浮点数的数组。有很多的。有一维的数组,也有二维的数组。但是二维数组本质上在内存中还是线性的存储。因为内存是一维线性的。

#include <stdio.h>
int main(void)
{
    char a[10];申请了一段10*1的空间。存储char类型的数字,每段大小为10
    char b[10][100];申请了一段10*100*1的空间。存储char类型的数字,每段大小为100*1
    int c[10];申请了一段10*4的空间。存储Int类型的数字,每段大小为10
    int b[10][100];//申请了一段10*100*4的空间。存储Int类型的数字,每段大小为100*4
    return 0;
}

数组进行的操作,冒泡排序,选择排序,二分查找(有序的序列。)都是int型的数组的操作。

//冒泡排序
#include <stdio.h>
int main(void)
{
    int i = 0, j = 0, k = 0;
    int a[10];
    for(i=0; i<10; i++)
    {
        scanf("%d", &a[i]);
    }

    for(i=0; i<10-1; i++)
    {
        for(j=0; j<10-i-1; j++)
        {
            if(a[j] > a[j+1])
            {
                //寻找最大的数,放到最后一位,之后每次运行之后,把最后一位忽略。
                k = a[j];
                a[j] = a[j+1];
                a[j+1] = k;
            }
        }
    }
    for(i=0; i<10; i++)
        printf("%5d", a[i]);
    return 0;
}
//选择排序。
#include <stdio.h>
int main(void)
{
    int i = 0, j = 0, k = 0;
    int a[10];
    for(i=0; i<10; i++)
    {
        scanf("%d", &a[i]);
    }
    for(i=0; i<10-1; i++)
    {
        for(j=i+1; j<10; j++)
        {
            if(a[i] > a[j])//每次比较相邻两个,符合条件,执行if语句。
            {
                k = a[i];
                a[i] = a[j];
                a[j] = k;
            }
        }
    }
    for(i=0; i<10; i++)
    {
        printf("%d", a[i]);
    }
}
//二分查找,必须有序
#include <stdio.h>
#include <string.h>
int main(void)
{
    int i = 0, j = 0, k = 0;
    int left = 0, right = 0;
    int mid = 0;
    int a[10];
    for(i=0; i<10; i++)
        scanf("%d", &a[i]);
    printf("enter a number to serch");
    scanf("%d", &k);
    left = 0;
    right = 10 -1;
    while(left <= right)
    {
        mid = (left + right) / 2;
        if(a[mid] < k)
            left = mid + 1;//如果找到,比中间值大,左值变为mid+1
        if(a[mid] > k)
            right = mid - 1;//如果找到,比中间值小,右值变为mid-1
        if(a[mid] == k)
        {
            printf("find\n");
            printf("%d\n", mid);//如果找到,退出。
            break;
        }
    }
    return 0;
}

函数使用:
例子:
简单的传值调用:

#include <stdio.h>
void change(int a,int b)//有返回类型void改为返回的数据类型
{
    int c = 0;
    c = a;
    a = b;//交换a b的值
    b = c;
    // return 符合数据类型的值或者表达式,或者递归的函数,递归的函数最后必须有返回的条件。
}
int main(void)
{
    int a = 1, b = 2;
    change(a,b);//传的是值,没有改变实质
    printf("a = %d b = %d\n", a, b);//打印后发现a和b的值不变
    return 0;
}
//交换两个数字的值。
#include <stdio.h>
void change(int *a, int *b)
{
    int c = 0;
    c = *a;
    *a = *b;//交换两个值地址上的值。
    *b = c;
}
int main(void)
{
    int a = 1, b = 2;
    change(&a,&b);//传的是地址。改变了实质
    printf("a = %d b = %d\n", a, b);
}

字符串的操作也类似

#include <stdio.h>
#include <string.h>
//循环右移:2位->891234567
void func(char buf[], int steps)
{
    int i = 0, j = 0, lenth = 0;
    char temp = 0;
    lenth = strlen(buf);
    for (i=0; i<steps; i++)  // 等同于 while (steps--)
    {
        temp = buf[lenth-1];
        for (j=lenth-1; j>0; j--)
        {
            buf[j] = buf[j-1];
        }
        buf[0] = temp;
    }
}
int main(void)
{
    char buf[] = "123456789";
    int steps = 0;
    printf("输入要移动的位数:");
    scanf("%d", &steps);
    printf("buf = [%s].\n", buf);
    func(buf, steps);
    printf("buf = [%s].\n", buf);
    return 0;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值