C语言基础练习题总结(嵌入式基础学习2)

本文提供了一系列C语言编程练习,涉及进制转换(10进制到8进制、16进制),位运算(补码、右移、左移),字符串处理(大小写转换,删除特定字符,循环移位),数组操作(累加求和,找最大值,循环移动,删除子串),以及函数和指针的运用(自定义比较函数,字符串拼接)。此外,还有冒泡排序的实现,包括对整型数组和字符数组的排序。
摘要由CSDN通过智能技术生成

(本篇是基于嵌入式基础学习1中笔记进行的实战练习,代码存在疑问,还望大家多多指正)


作业1:

1、把456转换成8进制
456是十进制:
    十进制转换为8进制,需先转换成2进制
​
456转2进制:456=256+125+64+8=2^8+2^7+2^6+2^3
​
                            =111001000
​
转换为8进制:111=7     001=1    000=0  (三者为一组)
结果为0710
2、把0456转换成16进制
0456为8进制,则要转换为16进制,需先转换为2进制
​
0456转2进制:(因2进制转换为8进制为三个为一组)
​
    0456=100  101110
​
转换为16进制:(从右到左,四个为一组)
​
    结果0x12e
3、把0x456转换成8进制
0X456为十六进制,则要转换为8进制,需要先转换为2进制
0X456转换为2进制:0100 0101 0110
2进制转换为8进制:(三个为一组)
        结果为:0212
4、char a = 456,输出结果是printf("%d",a)?
//注意关键字:char 字符型 有1个字节,占8位,
456为十进制,转换为二进制:456=256+125+64+8=2^8+2^7+2^6+2^3
            =111001000(这是补码)
补码-1=反码:  111000111
反码取反=原码:  100111000     //第一位1位符号位,不进行改变
 转换为十进制:=-56

作业2:

1、int a = 1, b = 2, c = 0, d;d = a++ || c++ && ++b;a、b、c、d分别是?
a=2 ;b=2; c=0 ;d=1
2、char a = -1, c; c = a >> 1;printf("%d %d\n", a, c);输出结果是?
//数据在类型中进行存储时,一定要按二进制形式进行存储,负数是按照补码进行存储的
​
-1: 10000001(补码)
    11111110(反码)
    11111111(原码=反码+1)
右移:  11(这里缺位,看前面符号位,如果为-1,即补1,如果为0,即为0)111111  
a=-1;c=-1
3、int a = 0x20a1;将a的第4到7位清0,写出表达式
a=a& (~(0xf<<4));
a& (~(00000000000000000000000011110000  ))
a& (11111111111111111111111100001111)
4、short a = 32767; a++; printf("%d\n", a);输出结果是?
-32768        
//2^15 - 1,有符号short类型最大的正数,最大正数加1,符号位变为1,其他变为0=最小负数再减一:-32767-1=-32768
5、编写程序实现如下功能:pleaes input Y|N:输入'Y'打印字符"OK",输入'N'打印字符"NO".
char a;
printf("please input Y|N:\n");
a=getchar();
if(a=='Y')
puts("ok");
if(a=='N')
puts("NO");
6.有如下程序
 int main()
 {
    char a = 1;
    while(a++);
 }
 该程序是不是死循环?
     不是
7.int i = 10;printf("%d %d %d %d\n", i, ++i, i++,++i);输出结果是?
从右向左计算!!!13 13 11 13

作业3:(C基础)

1.编写程序实现输入一个年份,判断是否是闰年.能被4整除,但不能被100整除的年份;能被100整除,又能被400整除的年份;
#include <stdio.h>
​
int main(int argc, char*argv[])
{ 
    int y;
    printf("please input year: ");
    scanf("%d", &y);
​
    if(y%4==0&&y%100!=0){
        puts("闰年");
    }elseif(y%100==0&&y%400==0){
        puts("闰年");
    }else{
        puts("不是闰年");
    }
    return 0;
} 
2、打印100以内的偶数.
#include <stdio.h>
​
int main(int argc, char*argv[])
{ 
    for(inti=0; i<=100; i++){
        if(i%2==0)
            printf("%d ", i);
    }
    puts("");
    return 0;
} 
3、打印所有的水仙花数。

一个三位数,它的个位十位百位的立方和等于它本身

#include <stdio.h>
​
int main(int argc, char*argv[])
{ 
    int a, b, c;
    for(int i=100; i<1000; i++){
        a=i/100;
        b=i/10%10;
        c=i%10;
        if(i==a*a*a+b*b*b+c*c*c){
            printf("%d ", i);
        }
    }
    puts("");
​
    int i=100;
    while(i<1000){
        a=i/100;
        b=i/10%10;
        c=i%10;
        if(i==a*a*a+b*b*b+c*c*c){
            printf("%d ", i);
        }
        i++; 
    }
    puts("");
    return 0;
} 
4、打印99乘法表。
#include <stdio.h>
​
int main(int argc, char*argv[])
{ 
    for(int i=1; i<10; i++){
        for(int j=1; j<=i; j++){
            printf("%d * %d = %-3d", i, j, i*j);
        }
        puts("");
    }
​
    return 0;
} 
5、打印如下图形

*

***

*****

********

**********

#include <stdio.h>
​
int main(int argc, char*argv[])
{ 
    int N, i, j, z;
    printf("please input num: ");
    scanf("%d", &N);
​
    for(i=1; i<=N; i++){
        for(z=1; z<=N-i; z++)
            printf(" ");
        for(j=1; j<=2*i-1; j++)
            printf("*");
        puts("");
    } 
​
    return 0;
} 
6、 打印100以内所有的质数.
#include <stdio.h>
​
int main(int argc, char*argv[])
{ 
    int j;
    for(int i=2; i<1001; i++){
        for(j=2; j<i; j++){
            if(i%j==0)
                break;
        }
        if(j==i){
            printf("%d ", i);
        }
    }
    puts("");
    return 0;
} 
7、用while循环实现第2、3题
第2题:
#include <stdio.h>
    
int main(int argc, char*argv[])
{
    int a;
    while(a<=100){
        if(a%2==0);
        printf("%-3d",a);
        a++;
        continue;
    }
    puts("");
    return 0;
}
第3题:
#include <stdio.h>
​
int main(int argc, char*argv[])
{ 
    int a, b, c;
    int i=100;
    while(i<1000){
        a=i/100;
        b=i/10%10;
        c=i%10;
        if(i==a*a*a+b*b*b+c*c*c){
            printf("%d ", i);
        }
        i++; 
    }
    puts("");
    return 0;
}
8、不使用for和while实现求1-100的累加求和.(goto)
#include <stdio.h>
​
int main(int argc, char*argv[])
{ 
    int i=1, sum=0;
loop:
    sum+=i;
    i++;
    if(i<=100)
        gotoloop;
    printf("sum = %d\n", sum);
    return 0;
} 
9、有如下程序:
int a=0;
for(int n=0; n<4; n+=2){
    switch(n){
        case0:
            a+=3;
        case1:
            a*=2;
            break;
        case2:
            a-=3; //第二次,当n=2时,上次循环a=6,需带到这一个循环中
        case3:
            a+=2;
        default:
            a=0;
    }   
    printf("%d\n", a);
}
 输出结果是?       
 60

作业4:(数组)

1、编写程序计算一个数组中所有元素的和.(遍历数组)
#include <stdio.h>
​
int main(int argc, char*argv[])
{ 
    int n;
    printf("please input num: ");
    scanf("%d", &n);
    int a[n];
    for(int i=0; i<n; i++) //
    {
        printf("please input arr[%d]: ", i);
        scanf("%d", &a[i]);
    }
​
    int sum=0; //避免有新元素干扰,进行初始化,如果是乘法,初始化应该为1
    for(int i=0; i<n; i++) //遍历数组
    {
        sum+=a[i];  //元素求和公式
    }
​
    printf("%d\n", sum);
    return 0;
} 
2、编写程序找出数组中最大的元素,并且打印它的下标。
#include <stdio.h>
​
int main(int argc, char*argv[])
{
    //x记录最大元素的下标
    int a[5] = {11, -7, 9, 3, 10}, max=a[1], x=1; //如果max初始化为0时,不会引用新的数据,不严谨
    for(int i=0; i<5; i++)         //
    {
        if(max<a[i]){
            max=a[i];
            x=i;
        }
    }
    printf("max:%d  pos:%d\n", max, x);
    return 0;
} 
3、编写程序,从键盘录入字符串,然后字母字符将大写转小写,小写转大写输出,其它字符原样输出.
#include <stdio.h>
​
int main(int argc, char*argv[])
{ 
    char buf[20] = {0};   //定义一个字符数组
    puts("input string:");   //键盘输入
    gets(buf);
​
    for(int i=0; buf[i] !='\0'; i++)    //数组遍历,buf[i] != '\0' = buf[i] 表示任意地址字符只要不是斜杠0就能执行循环
    {
        if('A'<=buf[i] &&buf[i] <='Z'){  //进行判断,当在A-Z之间的字符,即转为小写,+32
            buf[i] +=32;
        }
        elseif('a'<=buf[i] &&buf[i] <='z'){  //当在a-z之间的字符时,转为大写,即-32
            buf[i] -=32;
        }
    }
    puts(buf);
    return 0;
} 
4、编写程序实现数组的循环移动,输入一个数m,当m > 0则数组向右循环移动m位,当m < 0则数组向左循环移动m位.
#include <stdio.h>
​
int main(int argc, char*argv[])
{ 
    int a[5] = {1,2,3,4,5}, m, tmp;
    printf("please input move num: ");
    scanf("%d", &m);
    m%=5;     //取余是为了确保当m取值超过时,依旧保持在规定位数以内,确保不会超额
    if(m<0){
        m*=-1;  //m = -m;
        while(m--)
        {
            //向左循环移动1位
            tmp=a[0];
            for(int i=0; i<4; i++)
                a[i] =a[i+1];
            a[4] =tmp;
        }
    }else{
        while(m--)
        {
            //向右循环移动1位
            tmp=a[4];
            for(int i=4; i>0; i--)
                a[i] =a[i-1];
            a[0] =tmp;
        }
    }
​
    for(int i=0; i<5; i++)
    {
        printf("%d ", a[i]);
    }
    puts("");
    return 0;
} 
5、将一个数字字符串转化成十进制整数如:"12345" -> 12345 或 "-123456" -> -123456
#include <stdio.h>
​
int main(int argc, char*argv[])
{ 
    char buf[30] = {0};
    int num=0;
    printf("please input num: ");
    gets(buf);
    if(buf[0] =='-') //
    {
        for(int i=1; buf[i]; i++)
        {
            if(buf[i] <'0'||buf[i] >'9')
            {    
                break;
            }
            num=buf[i]-'0'+num*10;
        }
        num*=-1;
    }
    else
    {
        for(int i=0; buf[i] !='\0'; i++)
        {
            if(buf[i] <'0'||buf[i] >'9')
                break;
            num=buf[i]-'0'+num*10;
        }
    }
    printf("%d\n", num);
    return 0;
} 
6、删除指定字符串中的空格,如"hello world"删除后变为"helloworld"
#include <stdio.h>
​
int main(int argc, char*argv[])
{ 
    char buf[20] = {0};
    puts("input string: ");
    gets(buf);
​
    int i=0, j;
    while(buf[i]) //while(buf[i]!='\0')
    {
        if(' '==buf[i])   //删除指定字符,将空格改成字符即可
        {
            j=i;  //记录空格的下标
            //依次左移
            while(buf[j]) //循环j的位置
            {
                buf[j] =buf[j+1];
                j++;
            }
            i--; //空格未删完,跳过了当下空格,故i--
        }
        i++;  //不然会在原地走
    }
    puts(buf);
​
    return 0;
} 

作业5:(字符)

1、编写程序实现strlen的功能.
#include <stdio.h>
​
int main(int argc, char*argv[])
{ 
    char str[100];   //定义字符数组
    printf("input string: ");
    gets(str);  //键盘输入
    int n=0;   
    int i=0;
    /*
    for(i; str[i]; i++)
    {
        n++;
    }
    */
​
    while(str[i])  //str[i] != '\0'
    {
        i++;
        n++;
    }
​
    printf("input string len: %d\n", n);
    return 0;
} 
2、编写程序实现strcat的功能.//拼接
#include <stdio.h>
​
int main(int argc, char*argv[])
{ 
    char str[100], dst[100];
    printf("input str sting: ");
    gets(str);
    printf("input dst sting: ");
    gets(dst);
​
    int i=0, j=0;
    while(str[i++]);
    i--;
    /*
    while(dst[j])
    {
        str[i++] = dst[j++]; //str[i] = dst[j]; i++, j++;
    }
    str[i] = 0;
    */
    while(str[i++] =dst[j++]);
​
    puts(str);
    return 0;
} 
3、编写程序实现strcmp的功能.//比较
#include <stdio.h>
​
int main(int argc, char*argv[])
{ 
    char str[100],dst[100];
    printf("input str string: ");
    gets(str);
    printf("input dst string: ");
    gets(dst);
    int cmp=0, i;
    for(i=0; str[i]; i++)
    {
        /*
        if(0 == str[i]-dst[i])
            continue;
        else
            break;
        */
        if(0!=str[i] -dst[i]) //str[i] != dst[i]
            break;
    }
    cmp=str[i] -dst[i];
    printf("cmp: %d\n", cmp);
    return 0;
} 
4、编写程序实现strncat的功能.

scanf用于数值

gets用于字符

#include <stdio.h>
​
int main(int argc, char*argv[])
{ 
    char str[100], dst[100];
    printf("input str sting: ");
    gets(str);
    printf("input dst sting: ");
    gets(dst);
    int n;
    printf("input copy num: ");
    scanf("%d", &n);
    int i=0, j=0;
    while(str[i++]);
    i--;
    for(j; dst[j] &&j<n; j++,i++)
        str[i] =dst[j];
    str[i] ='\0';
    puts(str);
    return 0;
} 
5、编写程序实现字符串的循环移位
#include <stdio.h>
#include <string.h>
​
int main(int argc, char*argv[])
{ 
    char str[100];
    puts("input string: ");
    gets(str);
    int m;
    puts("input move num:");
    scanf("%d", &m);
    int n=strlen(str);
    char ch;
    while(m--)
    {
        ch=str[n-1];
        for(int i=n-1; i>0; i--)
            str[i] =str[i-1];
        str[0] =ch;
    }
    puts(str);
    return 0;
} 
6、编写程序实现删除字符串中指定的字符.
#include <stdio.h>
​
int main(int argc, char*argv[])
{ 
    char str[100], ch;
    printf("input string: ");
    gets(str);
    printf("input delete char: ");
    scanf("%c", &ch);
    int i, j;
​
    for(i=0; str[i]; i++)
    {
        if(ch==str[i])
        {
            j=i;
            while(str[j])
            {
                str[j] =str[j+1];
                j++;
            }
            i--;
        }
    }
​
    puts(str);
    return 0;
} 
7、编写程序实现将整型数据转换成字符串的功能 1234 -> "1234"
num%10+'0'  :取个位
    num/=10;    
for(intj=0;j<i/2;j++)
代码如下:
#include <stdio.h>
​
int main(int argc, char*argv[])
{ 
    int num, i;
    char str[100] = {0};
    printf("input num: ");
    scanf("%d", &num);
    for(i=0; num;i++)
    {
        str[i] =num%10+'0';
        num/=10;  // num = num / 10;
    }
​
    for(int j=0; j<i/2; j++)
    {
        str[j] ^=str[i-j-1];
        str[i-j-1] ^=str[j];
        str[j] ^=str[i-j-1];
    } 
    puts(str);
    return 0;
} 
8、删除目标字符串中指定的字符串 如"abcdefg" 删除"cde" -> "abfg"
#include <stdio.h>
​
int main(int argc, char*argv[])
{ 
    char str[100],dst[20];
    printf("input str string: ");
    gets(str);
    printf("input dst string: ");
    gets(dst);
​
    int i=0, j, k, n, m;
    while(str[i])
    {
        if(str[i] ==dst[0])
        {
            j=i+1;
            k=1;
            while(dst[k])
            {
                if(str[j++] !=dst[k])
                    break;
                k++;
            }
            if(dst[k] =='\0')
            {
                n=k;
                m=i;
                while(k--)
                {
                    str[m] =str[m+n];
                    m++;
                }
                i--;
            }
        }
        i++;
    }
    puts(str);
    return 0;
} 
9、删除字符串中所有重复的字符如:"abacdbec" -> "abcde"
#include <stdio.h>
​
int main(int argc, char*argv[])
{ 
    char str[100], ch;
    puts("input string:");
    gets(str);
    
    int i=0, j, k;
    while(str[i])
    {
        ch=str[i];
        j=i+1;
        while(str[j])
        {
            if(ch==str[j])
            {
                k=j;
                while(str[k])
                {
                    str[k] =str[k+1];
                    k++;
                }
                j--;
            }
            j++;
        }
        i++;
    }
    puts(str);
    return 0;
} 
10、从键盘输入若干个整数,其值在0-4范围内,输入-1表示结束输入,统计各个数字的个数
#include <stdio.h>
​
int main(int argc, char*argv[])
{ 
    int num, count[5] = {0};
    while(1)
    {
        printf("please input 0-4: ");
        scanf("%d", &num);
        if(-1==num)
            break;
        count[num]++;
    }
​
    for(int i=0; i<5; i++)
        printf("%d input num = %d\n", i, count[i]);
    return 0;
} 
11、输入一行字符,统计大写字母、小写字母、数字、空格以及其它字符个数。
#include <stdio.h>
​
int main(int argc, char*argv[])
{ 
    char str[100];
    int num[5] = {0};
    puts("input string: ");
    gets(str);
​
    for(int i=0; str[i]; i++)
    {
        if(str[i] >='A'&&str[i] <='Z')
        {
            num[0]++;
        }
        elseif(str[i] >='a'&&str[i] <='z')
        {
            num[1]++;
        }
    }
    return 0;
} 

作业6:(二维数组)

1、计算二维数组所有元素的和
#include <stdio.h>
    
int main(int argc,char*argv[])
{
    int n,m;
    printf("input n:"); 
    scannf("%d",&n);    //键盘输入数组行
    printf("input m:"); 
    scanf("%d",&m);//键盘输入数组列
    inta[i][j];
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            printf("please input a[%d][%d}: ",i,j);
            scanf("%d",&a[i][j];
        }
    }
    int num=0;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            num+=a[i][j];
        }
    }
    printf("%d\n",num);
    return 0;
}       
2、把一个二维数组每一行都按从大到小排列.
#include <stdio.h>

int main(int argc, char*argv[])
{
    int n,m;
    printf("input n:");
    scannf("%d",&n);
    printf("input m:");
    scanf("%d",&m);
    int a[i][j];
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            printf("please input a[%d][%d}: ",i,j);
            scanf("%d",&a[i][j];
        }
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            for(int j=o; j<m-1;j++)
            {
                if(a[i][j] <a[i][j+1])
                {
                    a[i][j] ^=a[i][j+2];
                    a[i][j+1] ^=a[i][j];
                    a[i][j] ^=a[i][j+1];
                }
            }
        }
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            printf("%d",a[i][j]);
        }
        puts("");
    }
    return 0;
}
3、删除二维字符数组中指定的字符.
#include <stdio.h>

int main(int argc, char*argv[])
{
    int n;
    printf("input n:");
    scannf("%d",&n);
    char ch,a[n][1000];
    for(int i=0;i<n;i++)
    {
            printf("please input a[%d][1000}: ",i);
            gets(a[i]);
    }
    printf("input delete char: ");
    scanf("%c",&ch);
    for(int i=0;i<n;i++)
    {
        for(int j=0; a[i][j];j++)
        {
            if(a[i][j] ==ch)
            {
                k=j;
                while(a[i][j])
                {
                    a[i][k] =a[i][k+1];
                    k++;
                }
                j--;
            }
        }
    }
    for(int i=0;i<n;i++)
    {
        printf("%s",a[i]);
        puts("");
    }
    return 0;
}

作业7:用指针实现如下题目:

1、编写程序实现strcmp的功能
#include <stdio.h>
​
int main(int argc, char*argv[])
{ 
    int op=0;
    char str[100], dst[100];
    printf("input str sting: ");
    gets(str);
    printf("input dst sting: ");
    gets(dst);
    
    char*ps=str, *pd=dst;
​
    while(*ps){
        if(*ps!=*pd)
            break;
        ps++;
        pd++;
    }
    op=*ps-*pd;
​
    printf("op: %d\n", op);
​
    return 0;
} 
2、编写程序实现strncat的功能.
#include <stdio.h>
​
int main(int argc, char*argv[])
{ 
    int op=0;
    char str[100], dst[100];
    printf("input str sting: ");
    gets(str);
    printf("input dst sting: ");
    gets(dst);
    printf("input num: ");
    scanf("%d", &op);
​
    char*ps=str, *pd=dst;
    while(*ps++);
    ps--;
​
    while(op--){
        *ps++=*pd++;
    }
​
    *ps=0;
    puts(str);    
​
    return 0;
} 
3、编写程序实现字符串的循环移位
#include <stdio.h>
​
int main(int argc, char*argv[])
{ 
    int op=0;
    char str[100];
    printf("input str sting: ");
    gets(str);
    printf("input num: ");
    scanf("%d", &op);
​
    char*ps=str, ch, *pt;
    while(*ps++);
    ps-=2;
    pt=ps;
    while(op--){
        ps=pt;
        ch=*ps;
        while(ps!=str){
            *ps=*(ps-1);
            ps--;
        }
        *ps=ch;
    }
    puts(str);    
​
    return 0;
}
4、编写程序实现删除字符串中指定的字符.
#include <stdio.h>

int main(int argc, char*argv[])
{ 
    char str[100], ch;
    printf("input str sting: ");
    gets(str);
    printf("input delete char: ");
    scanf("%c", &ch);
​
    char*ps=str, *q;
    while(*ps){
        if(ch==*ps){
            q=ps;
            while(*q){
                *q=*(q+1);
                q++;
            }
            ps--;
        }
        ps++;
    }
    puts(str);    
    return 0;
} 
5、编写程序实现将整型数据转换成字符串的功能 1234 -> "1234"
#include <stdio.h>
​
int main(int argc, char*argv[])
{ 
    int num;
    char str[100] = {0}, *ps=str;
    puts("input num: ");
    scanf("%d", &num);
    while(num){
        *ps++=num%10+'0';
        num/=10;
    }
    *ps--=0;
    char*q=str;
    while(q<ps){
        *q^=*ps;
        *ps^=*q;
        *q^=*ps;
        q++, ps--;
    }
    puts(str);
    return 0;
} 
6、删除字符串中所有重复的字符如:"abacdbec" -> "abcde"
#include <stdio.h>
​
int main(int argc, char*argv[])
{ 
    char str[100], *p=str, *q, *t;
    puts("input string: ");
    gets(str);
​
    while(*p){
        q=p+1;
        while(*q){
            if(*p==*q){
                t=q;
                while(*t){
                    *t=*(t+1);
                    t++;
                }
                q--;
            }
            q++;
        }
        p++;
    }
​
    puts(str);
​
    return 0;
} 

作业8:(字符指针、函数)

1、根据字符指针数组里每个字符串的长度进行排序.
#include <stdio.h>
#include <string.h>
        
int main(int argc,char*argv[])
{
    char*s[3] = {"hello","welcome","world"}
    char*p=s[0];
    for(int i=0; i<2;i++)
    {
        for(int j=0;j<2;j++)
        {
            if(strlen(s[j]) >strlen(s[j+1]))
            p=s[j];
            s[j] =s[j+1];
            s[j+1] =p;
            
        }
    }
        for(int i=0;i<3;i++)
        {
            puts(s[i]);
        }
        return 0;
}
2、实现一个整型的算术计算器
#include <stdio.h>
        
int add(int a,int b);
int sub(int a,int b);
int mul(int a,int b);
int div(int a,int b);
int mod(int a,int b);
        
int main(int argc, char*argv[])
{
    int a,b;
    char op;
    while(1)
    {
        scanf("%d %c %d", &a, &op, &b);
        switch(op){
            case '+':
                printf("%d %c %d = %d\n", a, op, b, add(a,b));
                break;
            case '-':
                printf("%d %c %d = %d\n", a, op, b, sub(a,b));
                break;
            case '*':
                printf("%d %c %d = %d\n", a, op, b, mul(a,b));
                break;
            case '/':
                printf("%d %c %d = %d\n", a, op, b, div(a,b));
                break;
            case '%':
                printf("%d %c %d = %d\n", a, op, b, mod(a,b));
                break;
        }
    }
    return 0;
} 
        
int add(int a,int b)
{
    return a+b;
}
int sub(int a,int b)
{
    return a-b;
}
int mul(int a,int b)
{
    return a*b;
}
int div(int a,int b)
{
    return a/b;
}
int mod(int a,int b)
{
    return a%b;
}
3、封装函数mystrcmp实现strcmp的功能
#include <stdio.h>
​
int mystrmp(char art[],char dst[])
{
    
    while(*str==*dst)
    {
        if(!*str)
            return 0;
        str++;
        dst++;
    }
    return *str-*dst;
}
​
int main(int argc,char*argv[])
{
    char art[100],dst[100];
    printf("input str string: ");
    gets(str);
    printf("input dst string: ");
    gets(dst);
    
    printf("cmp: %d\n", mystrcmp(str, dst));//调用函数mystrcmp
    return 0;
}
4、封装函数myatoi实现atoi函数的功能.//将整数型转换为字符型
#include <stdio.h>
int myatoi(char*str)
{
    int op=1, num=0;
    if('-'==*str){
        op=-1;
        str++;
    }
    while(*str){
        if(*str<'0'||*str>'9')
            break;
        num= (*str-'0') +num*10;
        str++;
    }
    return num*op;
}
intmain(int argc,char*argv[])
{ 
    char str[100];
    while(1){
    printf("input string: ");
    gets(str);
    printf("myatoi: %d\n", myatoi(str));
   }
    return 0;
}   
5、封装一个函数,实现对任意int型数组冒泡排序.//两个数组,通过冒泡法进行排序
#include <stdio.h>
​
void maopao(int a[], int n)
{
    //sizeof(a)/sizeof(a[0]); //err a是数组的地址
    for(int i=0; i<n-1; i++)
    {
        for(int j=0; j<n-1-i; j++)
        {
            if(a[j] >a[j+1])
            {
                a[j] ^=a[j+1];
                a[j+1] ^=a[j];
                a[j] ^=a[j+1];
            }
        }
    }
    /*
     * 验证a是否是一个变量
    int c = 10;
    a = &c;
    */
}
​
void arr_ptr(int*a, int n)
{
    for(int i=0; i<n; i++)
        printf("%d ", a[i]);
    puts("");
}
​
int main(int argc, char*argv[])
{
    int a[5] = {-7, 9, 2, 3, 6};
    int b[7] = {1, -5, -9, 3, 9, 7, 0};
​
    puts("a:");
    arr_ptr(a, 5);
    puts("maopao a:");
    maopao(a, 5);
    arr_ptr(a, 5);
    
    puts("b:");
    arr_ptr(b, 7);
    puts("maopao b:");
    maopao(b, 7);
    arr_ptr(b, 7);
    return 0;
}   
​
//第二种
#include <stdio.h>
void maopao(int*a,int n)
{
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n-1-i;j++)
        {
            if(*(a+j) >*(a+j+1))
            {
                *(a+j) ^=*(a+j+1);
                *(a+j+1) ^=*(a+j);
                *(a+j) ^=*(a+j+1);
            }
        }
    }
}
​
int main(int argc, char*argv[])
{ 
    int a[5] = {9,5,7,8,6},n=5;
    maopao(a,n);
    for(int i=0;i<n;i++)
        printf("%d",a[i]);
    puts("");
}

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

摸鱼特长生.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值