11.26 +C语言总结

来源:互联网 发布:js@700iiii.cc 编辑:程序博客网 时间:2024/06/04 19:41

数字进制转换:

#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位->891234567void 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;}
原创粉丝点击