基本数据类型和字符类型的转换
基本数据类型和字符类型的转换
介绍:将基本数据类型和字符类型的转换(即char数组)之间的转换。
sprintf函数的用法
(1)头文件 <stdlib.h>
(2)sprintf 和平时我们常用的 printf 函数的功能很相似 。sprintf 函数打印到字符串中,而 printf 函数打印输出到屏幕上。sprintf函数在我们完成其他数据类型转换成字符串类型的操作中应用广泛。
基本数据类型转换成字符串类型(即char数组)。
#include<stdio.h>
void main(){
char str1[20],str2[20],str3[20];//定义字符数组,即字符串
int a = 20984,b = 48090;
double d1 = 14.309948;
//sprintf 是一个系统函数,可以将结果存放在字符串中
sprintf(str1,"%d%d",a,b);//将 a,b 这2个整数放在str1中
sprintf(str2,"%.2f",d1);
sprintf(str3,"%8.2f",d1);//保存8位数,小数占2位,不足8位前面补相应空格
printf("str1=%s str2=%s str3=%s",str1,str2,str3);
}
将字符串转化成基本数据类型
通过<stdio.h>的函数调用 atoi (转换成整数)和 atof(转换成小数)
#include<stdio.h>
#include<stdlib.h>
void main(){
//字符数组
char str1[10]="123456";
char str2[10]="12.67423";
char str3[10]="ab";
char str4[10]="111";
//atoi 转换成整数
int num1 = atoi(str1);
int num2 = atoi(str4);
//atof 转换成小数
double num3 = atof(str2);
char num4 = str3[0];//表示取 str3 的第一个字符 a
printf("num1=%d \nnum2=%d \nnum3=%f \nnum4=%c \n",num1,num2,num3,num4);
}
注意事项
**(1)在将char 数组类型转成基本数据类型时,要确保能够转成有效的数据,比如我们可以把"123",转成一个整数,但是不能把"hello”转成一个整数。
(2)如果格式不正确,会默认转成0或者0.0。(注意软件不会报错)
**
案例
#include<stdio.h>
#include<stdlib.h>
void main(){
char str3[10]="ab";
//假设我把字符 a 改成整形,因为格式不对,会输出 0
int num4 = str3[0];//取 str3 的第一个字符
char num5 = str3[0];
printf("num4=%d num5=%c",num4,num5);
}
函数例题
1.函数可以没有返回值案例,编写一个函数,从终端输入一个整数打印出对应的金子塔。
打印实心
#include<stdio.h>
void jzt(int m){
int i,j,k;
for(i=1;i<=m;i++){//控制层数
for(j=1;j<=m-i;j++){//打印前面的空格
printf(" ");
}
for(j=1;j<=2*i-1;j++){
printf("*");
}
printf("\n");//一次循环后换行
}
}
void main(){
int n=0;
scanf("%d",&n);
jzt(n);
}
打印空心
#include<stdio.h>
void jzt(int m){
int i,j,k;
for(i=1;i<=m;i++){//控制层数
for(k=1;k<=m-i;k++){//打印前面的空格
printf(" ");
}
for(j=1;j<=2*i-1;j++){
if(j==1 || j==2*i-1 || i==m){//第一层和最后一层全打,中间就打印首尾
printf("*");
}
else{
printf(" ");//打印中间的空格
}
}
printf("\n");//一次循环后换行
}
}
void main(){
int n=0;
scanf("%d",&n);
jzt(n);
}
2.编写一个函数,从终端输入一个整数(1—9),打印出对应的乘法表。
#include<stdio.h>
void cfb(int n){
int i,j;
for(i=1;i<=n;i++){
for(j=1;j<=i;j++){
int sum = i*j;
printf("%d * %d = %d ",i,j,sum);
}
printf("\n");
}
}
void main(){
int m;
scanf("%d",&m);
cfb(m);
}
3.编写函数,对给定的一个二维数组(3×3)转置。
#include<stdio.h>
void change(int a[3][3]) {
int i, j, temp;
for(i=0; i<3; i++) {
for(j=0; j<i; j++) { //这里是j<i而不是j<3,如果是j<3的话,那么有的值就会换两次,即没变;
//数据互换
temp=a[i][j];
a[i][j]=a[j][i];
a[j][i]=temp;
}
}
}
void main() {
int a[3][3];//定义3行3列数组
int i, j;
for(i=0; i<3; i++) {
for(j=0 ; j<3 ; j++) {
scanf("%d",&a[i][j]);
}
}
change (a);//当发生 change 事件时运行的函数
printf("转换后:\n"); //这里写转置后,可能更好
for(i=0; i<3; i++) {
for(j=0; j<3; j++) {
printf("%d ",a[i][j]);
}
printf("\n");
}
}
change () 函数触发 change 事件,或规定当发生 change 事件时运行的函数。
注释: 当用于 select 元素时,change 事件会在选择某个选项时发生。 当用于 text field 或 text area 时,该事件会在元素失去焦点时发生。 触发被选元素的 change 事件。 规定当被选元素的 change 事件发生时运行的函数。
4.定义函数,实现求两个double数字的最大值,并返回。
传统函数
#include<stdio.h>
void getMax(double m,double n){
double sum = m -n;
if(sum>0){
printf("最大值为:%lf",m);
}
else if(sum<0){
printf("最大值为:%lf",n);
}
else{
printf("一样大!!!");
}
}
void main(){
double m,n;
scanf("%lf%lf",&m,&n);
getMax(m,n);
}
三元运算符
#include<stdio.h>
double getMax(double a,double b){
return a>b ? a:b;
}
void main(){
double m,n;
scanf("%lf%lf",&m,&n);
double d1 = getMax(m,n);
printf("最大值为:%f",d1);
}
5.定义函数,求出三个int类型数的和,并返回。
#include<stdio.h>
int Sum(int a,int b,int c){
int sum;
return sum = a + b + c;
}
void main(){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
printf("和为:%d",Sum(a,b,c));
}