//(2)//输入一串字符,逆序输出。要求使用指针实现。
#include <stdio.h>
#include <string.h>
typedef unsigned long long size_t;//typedef关键字的作用:就是给现有类型取个别名。
void reverse(char * str){
char * p = str;
char * q = str + strlen(str) - 1;
while(p<q){
char t = *p;
*p = *q;
*q = t;
p++;
q--;
}
}
int main(){
char str[100] = {0};
scanf("%s",str);
reverse(str);//数值型数组要设计地址后到底有多少内存块,字符串后有\0,没有必要设计n
printf("%s",str);
}
//(3)
//输入一串字符,逆序输出。要求使用数组实现。
//#include <stdio.h>
//#include <string.h>
//void reverse1(char * str) {
// int nums = 0;
// int couples = (nums = strlen(str))/2;//赋值表达式可以出现在任何允许表达式出现的地方。
// for(int i = 0;i < couples;i++){//有多少对,就循环多少次。
// int t = str[i];
// str[i] = str[nums-1-i];
// str[nums-1-i] = t;
// }
//}
//int main(){
// char str[100] = {0};
// scanf("%s",str);
// //reverse(str);//数值型数组要设计地址后到底有多少内存块,字符串后有\0,没有必要设计n
// reverse1(str);
// printf("%s",str);
//}
求公约数,辗转相除法:
#include <stdio.h>
int gcd(int a, int b) {
while (b != 0) {
int r = a % b;
a = b;
b = r;
}
return a;
}
int main() {
int a = 48, b = 18;
printf("GCD of %d and %d is %d\n", a, b, gcd(a, b));
return 0;
}
e 格式符:
作用: 以标准化的指数形式输出实数(小数点前必须有而且只能有一位为非0数字)。
格式:
① %e
② %m.ne
其中: %e —默认输出6位小数
m—字段宽度(指数部分占5列)
n —小数部分的位数
注意:
输出表列可以是变量、常数、数组元素,函数引用及带运算符的表达式。
例: printf(“%f %d %d %f ”, 3.14, a+b, x, cos(y));
输出表列中各输出项与各格式说明必须按照从左到右的顺序在类型上一一匹配。
如果实型数据用%d输出, 结果出错; 整型数据用%f 输出,结果为0。
当格式说明个数<输出项时,多余的输出项不予输出。
当格式说明个数>输出项时,输出不定值。
格式输入函数 scanf( )
格式: scanf(“格式控制”,地址表列 );
功能: 按格式控制所规定的格式, 从指定的输入设备(一般为键盘)上把数据输入到指定的变量中。
格式控制:
普通字符: 需原样输入的字符, 通常不使用。
格式说明: 用于指定需输入数据的输入格式
形式: %[ 修饰符 ] 格式字符
地址表列: 给出各变量的地址
“地址是由“&”运算得到的
“&”是取地址运算符, 得到变量在内存中的地址。单目运算符,右结合性。
格式输入的使用与注意:
1) 输入数据时采用的分隔符应与格式控制中的分隔符一致。格式控制中无普通字符时, 输入数值型数据可用空格、Tab键、回车键作分隔符。输入多个字符串也可以按空格
Tab键
2) 输入数据时不可规定精度, 但可指定宽度。
例: scanf(“%7.2f ”, &a) ;
scanf(“%3d%2d%3c”, &a, &b, &ch) ;
输入: 12346abc ↙
3) 输入格式符带有*,表示指针读取位置向前改变。
例: scanf(“ %d%*d%d ”, &a, &c) ;
输入: 12︺34︺567 ↙ 则 a=12, c=567, 34 被跳过。
4) 有无符号数可用 %d、%o、%x,%u 格式读入。
5) 用C格式符输入字符时, 任何输入都是有效字符。
例: scanf(“%c%c%c”, &a, &b, &c);
若键入 ABC ↙ 则 a=A,b=B,c=C
若键入 A︺B︺C ↙ 则 a=A, b=︺,c=B
若键入 A↙B↙ 则 C未送, 结果已出为:
a=A, b=↙, c=B
6) 在下列情况下可认为数据输入结束:
遇空格、回车、 Tab键;
遇宽度结束;
非法输入。
遇到空格,Tab键,回车键 | 遇到指定宽度 | 遇到非法字符 | ||
%f%e%x%o%d%e | √ | √ | √ | |
%s | √ | √ | × | |
%c | × | √ | × | |
/*
(1)
第一个参数:要转换的10进制的无符号整形数。
第二个参数:转换成多少进制。数据范围 2<=radix<=36
第三个参数:将无符号数,转成各种进制的字符串,存放到out这个内存块中。
返回值,把out返回。为啥这么设计此函数?不用白不用,因为有返回值就可以
当另外函数的实参了。否则如果是void,这个函数就没有办法作为另外函数的实参。
#include <stdio.h>
#include <stdlib.h>
char * convert(unsigned int a,int radix,char * out){
char * p = out;
char * q = out;
while(a>0){
int b = a%radix;
*p++ = b<10? b+'0':(b-10)+'a';
a/=radix;
}
for(q = out,p--;q<p;q++,p--){
char t = *q;
*q = *p;
*p = t;
}
return out;
}
int main(){
char buf[100] = {0};
printf(convert(100,16,buf));
putchar('\n');
itoa(100,buf,16);
printf("%s",buf);
}
(2)
sprintf:输出02:14: 07函数调用同(1)
int main(){
int hour = 2;
int minute = 14;
int seconds = 7;
char buf[100]={0};
sprintf(buf,"%02d:%02d:%02d",hour,minute,seconds);
printf("%s",buf);
}
(3)
2024 -07 -06 02:14: 07函数调用同(1)
int main(){
int year = 2024;
int month = 7;
int day = 6;
int hour = 2;
int minute = 14;
int seconds = 7;
char buf[100]={0};
sprintf(buf,"%4d-%02d-%02d %02d:%02d:%02d",
year,month,day,
hour,minute,seconds);
printf("%s",buf);
}
(4)
用sscanf拆串。函数调用同(1)
int main(){
char buf[100] = {"12:14:07"};
int hour = 0;
int minute = 0;
int seconds = 0;
sscanf(buf,"%d:%d:%d",&hour,&minute,&seconds);
printf("hour=%d,minute:%d,seconds=%d",hour,minute,seconds);
}