编程练习2(一)

来源:互联网 发布:编程软件cimit怎么样 编辑:程序博客网 时间:2024/06/05 11:39

1、从一个字符数组中读出相应的整数、实数

#include<stdio.h>void read(char *str){    int i = 0;    int m = 0;    int n = 0;    int temp1 = 0;    float k = 0.1;    float temp2 = 0.0;    int a[100] = {0};    float b[100] = {0};    while( *(str + i) != '\0' )    {        while( (*(str + i) >= '0' && *(str + i) <= '9') || *(str + i) == '.' )          //当字符串中的字符大于0小于9或者为小数点时进入循环        {            while( *(str + i) >= '0' && *(str + i) <= '9' )//当字符为数字时            {                temp1 = temp1 * 10 + *(str + i) - '0';      //将遇到的字符转换为整型数字                i++;            }            if( *(str + i) == '.' )                                     //当遇到小数点时            {                temp2 = temp1;                                                  //将之前的整型数字赋给temp2,作为浮点型的整数部分                i++;                while( *(str + i) >= '0' && *(str + i) <= '9' )                 //当小数点后为数字时                {                    temp2 = temp2 + ( *(str + i) - '0' ) * k;                   //让字符乘以相应的小数位上的单位数值再加给temp2                    k = k * 0.1;                                                //用来控制相应的小数位上的单位数值                    i++;                }                b[n++] = temp2;                                                 //将所得的浮点型数值传给浮点型数组b                temp2 = 0;                                                      //让temp2清零            }            else            {                a[m++] = temp1;                                                 //没有遇到小数点说明是整型数,传给整型数组a                i++;                temp1 = 0;                                                      //让temp1清零            }           }        i++;    }    printf("整型数有:\n");    for( i = 0; i < m; i++ )    {        printf("%d   ",a[i]);                                                   //输出整型数组a中的数值    }    printf("\n");    printf("浮点型数有:\n");    for( i = 0; i < n; i++ )    {        printf("%.4f  ",b[i]);                                                  //输出浮点数数组b中的数值,并让数值小数点后输出4位    }    printf("\n");}int main(){    char str[100] = {0};    printf("please input a string with some numbers:\n");    scanf("%s",str);                                                            //输入带数字的字符串    read(str);                                                                  //调用read函数    return 0;}

2、将整数转换为相应的一个字符数组。
分析:从个位提取数字,组合字符
符号位的处理 12345=>”12345”

#include <stdio.h>void convert(int num, char *str){    int i = 0;    int j = 0;    while( num != 0 )    {        if(num < 0)        {            num = -num;                     //如果num < 0,将其变成正数        }        i = num % 10 + '0';        str[j++] = i;        num /= 10;                          //从最低位开始将num中每一位取出加上'0'变成数字字符并存到str数组中    }    while(j--)    {        printf("%c",str[j]);                //倒着输出str数组中的字符    }    printf("\n");}int main(){    char str[100] = {0};    int num = 0;    printf("please input a number:");    scanf("%d",&num);                       //输入num的值    if(num < 0)    {        printf("-");                        //如果num < 0,输出一个'-'    }    convert(num, str);                      //调用转换函数    return 0;}

3、字符串数组的冒泡排序,从小到大

#include <stdio.h>#include <string.h>void bubble( char **str, int len ){    int i = 0;    int j = 0;    char *temp = NULL;    for( i = 0; i < len - 1; i++ )    {        for( j = 0; j < len - 1 - i; j++ )        {            if(strcmp( str[j],str[j + 1] ) >= 0)                    //调用字符串比较函数比较字符串函数中前后两个字符串的大小            {                temp = str[j];                str[j] = str[j + 1];                str[j + 1] = temp;            }                                                       //如果前面的字符串大于后面的字符串,交换两者位置        }    }}int main(){    char *str[10] = {"ertyu","werkt","tyuio","cvbnm","asdfz"};    int i = 0;    int len = 5;    bubble( str, len );                                             //调用bubble函数    for( i = 0; i < len; i++ )    {        printf("%9s",str[i]);                                       //输出排好序的字符串函数,并让每个字符串占9个字节空间    }    printf("\n");    return 0;}

4、查找介于n1与n2(0

#include <stdio.h>int prime(int i){    int j = 2;    for( j = 2; j < i; j++ )    {        if( i % j == 0)        {            return 0;                                       //如果i能整除比1大,比i小的数说明i不是素数,返回0,不能整除说明是素数返回1        }    }    return 1;}int twosame( int i ){    int j = 0;    int m = 0;    int n = 0;    int count = 0;    int a[10] = {0};    while(i)    {        a[j++] = i % 10;        i /= 10;                                            //将i每一位上的数取出,放入数组a[j]中    }    for( m = 0; m < j; m++ )    {        for( n = m + 1; n < j; n++ )        {            if( a[m] == a[n] )            {                count++;                                    //从头开始比较后面的数有没有和前面的相同的,有count+1            }        }    }    if(count == 1)    {        return 1;    }    else    {        return 0;    }                                                       //如果count==1,说明a[j]数组中有且只有两个数相等即i的十进制表示中有且仅有两个相同的数字位,返回1,不为1,返回0}int main(){    int i = 0;    int count = 0;    int n1 = 0;    int n2 = 0;    printf("please input 2 number(0 < n1 < n2 <32678):");    scanf("%d,%d",&n1,&n2);                                 //输入n1 n2的值    printf("The result is:\n");    for( i = n1; i <= n2; i++ )    {        if( (prime(i) == 1) && (twosame(i) == 1) )          //调用prime函数和twosame函数,如果两个函数返回值都为1,执行if语句        {            count++;                                        //当一个数满足条件count+1            printf("%8d",i);                                //输出该数,并让该数占5个字节空间            if( count % 10 == 0)            {                printf("\n");            }                                               //当count能整除10时,一行已经输出10个值,换行        }    }    printf("\n");    return 0;}

5、编写函数void change(char *a,char *b,char*c)。 函数功能是首先把b指向的字符串逆向存放,然后将a指向的字符串和b指向的字符串按排列顺序交叉合并到c指向的数组中,两个字符串中过长的剩余字符接在c指向数组的尾部。
例如,当a指向的字符串为”abcdefg”,b指向的字符串为”1324”时,c指向的数组中字符串应为”a4b2c3d1efg”。

#include <stdio.h>#include <string.h>void swap( char *b ){    int i = 0;    int temp = 0;    int len = strlen(b);    for( i = 0; i < len / 2; i++ )    {        temp = b[i];        b[i] = b[len - 1 - i];        b[len - 1 - i] = temp;    }                                                   //逆序函数,将字符串b中的字符逆向存放}void change( char *a, char *b, char *c ){    swap(b);                                            //调用逆序函数    while( *a != '\0' && *b != '\0' )    {        *c = *a;        c++;        a++;        *c = *b;        c++;        b++;    }                                                   //当字符串a b都不为空时,将a b中的字符交叉存放到字符串c中    while( *a != '\0' && *b == '\0' )    {        *c = *a;        c++;        a++;    }                                                   //当字符串a不为空,b为空时,将a中剩余的字符存放到c中    while( *a == '\0' && *b != '\0' )    {        *c = *b;        c++;        b++;    }                                                   //当字符串a为空,b不为空时,将b中剩余的字符存放到c中    *c = '\0';}int main(){       char a[100] = {0};    char b[100] = {0};    char c[100] = {0};    printf("please input the first string:\n");    scanf("%s",a);                                      //输入字符串a    printf("please input the second string:\n");    scanf("%s",b);                                      //输入字符串b    change(a,b,c);                                      //调用change函数    printf("the result is :\n");    printf("%s\n",c);                                   //输出结果字符串c    return 0;}
原创粉丝点击