编程练习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;}
阅读全文
0 0
- 编程练习2(一)
- 编程练习(一)
- MapReduce编程练习(一)
- DOM编程练习(一)
- linux c 多线程编程练习(一)
- c语言编程练习(一)
- (一二一)第十章编程练习
- (一三五)第十二章编程练习
- (一四五)第十三章编程练习
- 13、python网络编程练习(一)
- java编程练习一
- Java编程 练习一
- mapreduce编程练习(一)简单的练习 WordCount
- 编程练习(2)
- 编程练习(2)
- 编程练习(2)
- JAVA编程综合练习(一)
- bash shell 编程练习一
- 关于Maxpooling层的求导
- POJ 2201 Cartesian Tree 笛卡尔树裸题加讲解
- 剑指Offer:表示数值的字符串
- js的闭包的理解
- STL之序列式容器
- 编程练习2(一)
- 带权并查集 向量并查集 poj1182 食物链
- HDU 1251 统计难题(字典树,map)
- MyEclipse Spring开发教程:用Spring创建iPhone App(2/2)
- CVPR2017_Papers下载爬虫程序
- HDU
- 理解Golang包导入
- 温州嵌入式培训机构
- 计算机系统基础(bomb实验报告)