scanf("%d %d",&a,&b);
%f代表float,%lf代表double,但是在printf中,float与double都用%f
在执行完分支中的最后一条语句之后,如果后面没有break,就会顺序执行到下面的case里面去,直到遇到break或者swith结束为止。例:
switch ( month )
{
case 1: printf(“January\n”); break;
case 2: printf(“February\n”); break;
case 3: printf(“March\n”); break;
case 4: printf(“April\n”); break;
case 5: printf(“May\n”); break;
case 6: printf(“June\n”); break;
case 7: printf(“July\n”); break;
case 8: printf(“August\n”); break;
case 9: printf(“September\n”); break;
case 10:printf(“October\n”); break;
case 11:printf(“November\n”); break;
case 12:printf(“December\n”); break;
}
do-while循环与while循环不同,是在进入循环时候不做检查,而是在执行完一轮循环体代码之后再来检查循环的条件是否满足。
do
{
<循环体语句>
}while(<循环条件>);
随机数需要头文件
#include<stdlib.h>
#include<time.h>
使用语句
srand(time(0));
int a = rand();
可以用rand()%100来确定随机数范围为0~100。
!在math.h头文件中可以用fabs(x);函数,表示x的绝对值。
!1e-8表示10的负八次方。
逆序
#include <stdio.h>
int main()
{
int x;
scanf("%d", &x);
int digit;
int ret = 0;
while ( x> 0 ) {
digit = x%10;
printf("%d", digit);
ret = ret*10 + digit;
// printf("x=%d,digit=%d,ret=%d\n", x, digit, ret);
x /= 10;
}
printf("%d", ret);
return 0;
}
如果固定次数,用for
如果必须执行一次,用do_while
其他情况用while
用多层循环跳到最外层的时候用break只能跳出一层,所以要用
{{{goto out;}}}
out:
%E或%e用来输出科学计数法
char类型在输入输出时候,用%c
m<n ? x : a+5 如果m<n的话,结果是x,否则结果为a+5
return停止函数的执行,并送回一个值。分两种
return;
return 表达式;
数组变量本身不能被赋值,要把一个数组所有元素交给另一个数组,必须采用遍历。
二维数组列数必须给出,行数可以省略。
const int* p1 = &i;与int const* p2 = &i一样,都是*p不能变,无法通过指针p修改i的值。
int *const p3 = &i是指指针p不可修改。
!!闰年 y%4000||y%40&&y%100!=0
!!int a=(int)malloc(n*sizeof(int));需要用到stdlib.h头文件
!!最后用free(a);
例(结构体):
scanf("%d",&n);
Book *book = (Book )malloc(nsizeof(Book));
字符串不要忘记结尾还有一个0,例如hello,在数组里,长度为6
C语言字符串是以字符数组的形态存在的,不能用运算符对字符串做运算,可以通过数组的方式遍历字符串
char* s = “Hello,world!”;
s是一个指针,初始化为指向一个字符串常量,试图对s所指的字符串做写入会导致严重的后果,如果需要修改字符串,应该用
数组 char s[] = “Hello,world!”;
char string[8];
scanf("%s",string);
printf("%s",string);
scanf读入一个单词(到空格、tab或回车为止)
scanf是不安全的,因为不知道要读入内容的长度
若scanf("%7s",string); 在%和s之间的数字表示最多允许读入的字符的数量,这个数字应该比数组的大小小一,这种情况下,不会再
依赖于空格回车之类的,而是到了满足的字符数量,直接开始读入下一个%s
!!gets(str)是读入一行,可以读入空格,遇到回车才结束。
!!用getchar、scanf输入字符的时候,输入字符后再用回车换行,回车符会对后面使用输入字符的函数造成影响。此时需要用getchar();把回车!!符吸收。
!!用gets输入字符串的时候,输入字符串再用回车换行,回车符不会对后面使用输入字符的函数造成影响。
!!while(scanf("%d",&n)!=EOF){}输入多组数据,遇到ctrl+z结束
单个字符的输入输出
int ch;
ch=getchar();
putchar(ch);
头文件string.h中
strlen(s); 返回字符串中的字符个数
strcmp(s1,s2); 若两者相等则返回0,若s1>s2则返回1,若s1<s2则返回-1
char dst=(char)malloc(strlen(src)+1);
strcpy(dst,src); 把src复制到dst
strcat(s1,s2); 把s2拷贝到s1后面,接成一个长的字符串并返回s1(但是需要注意s1必须具有足够的空间)
strncmp(s1,s2,n); 判断前n个的大小相等关系
strncpy(dst,src,n); 将src前n个复制到dst
strncat(s1,s2,n); 将s2前n个拷贝到s1后面,接成一个长的字符串并返回s1
strchr(s1,c); 在字符串s1中寻找第一个字符c的位置并返回对应指针
strrchr(s1,c); 与上面一样,只不过是从右边开始查找
strstr(s1,s2); 在字符串s1中寻找字符串s2
strcasestr(s1,s2); 与上面一样,只不过忽略大小写
结构体
struct date{
int month;
int day;
int year;
};
struct date taday;
taday.month=07;
typedef struct ADate(可以省略){
int month:
int day;
int year;
}Date;
Date day;
day.month=07;
p1=(struct point){5,10}; //相当于p1.x=5;p1.y=10;
p1=p2; //相当于p1.x=p2.x;p1.y=p2.y
返回本地变量的地址是危险的,但是返回全局变量或静态本地变量的地址是安全的。
最好的办法是,返回传入的指针。
在printf中,%9d是指输出占据9个字符的空间,靠右对齐;%-9d是指靠左对齐;%09d中的0是指用0来填充;
%9.2f是指整个输出占据9个字符,并且小数点后面两个位置。
文件的输入输出
r 打开只读
r+ 打开读写。从文件头开始 (一般用来修改)
w 打开只写。如果不存在则新建,如果存在则清空
w+ 打开读写。如果不存在则新建,如果存在则清空
a 打开追加。如果不存在则新建,如果存在则从文件尾开始
…x 主要结合w和a使用。只新建,如果文件已存在,则不能打开
打开文件的标准代码
FILE *fp = fopen(“12.in”,“r”);
if(fp){
int num;
fscanf(fp,"%d",&num);
printf("%d",num);
fclose(fp);
}
else{
printf(“无法打开文件\n”);
}