有基础C语言复习巩固(易忘点、易错点)(一、输入输出、字符串、数组等)

文件扩展名保存

C语言的文件扩展名为.c,C++的文件扩展名为.cpp

保存成.cpp文件因为C++向下兼容C


头文件

C++的标准中stdio.h更推荐使用等价写法cstdio

#include<stdio.h>和#include<cstdio>等价 

standard input output h为head的缩写

#include<math.h>和#include<cmath>等价

#include<string.h>和#include<cstring>等价


输入与输出

cin和cout消耗的时间比scanf和printf多得多

注:不要在同一个程序中同时使用cout和printf有时候会出问题

%d是int型的输出格式

%f是float和double型的输出格式

%.1f保留一位小数输出

%.2f保留两位小数输出

%c是char型的输出格式

%s是字符串常量的输出格式

scanf("%d",&n);

常见的scanf格式符
数据类型格式符举例
int%dscanf("%d",&n);
long long%lldscanf("%lld",&n);
float%fscanf("%f",&fl);
double%lfscanf("%lf",&db);
char%cscanf("%c",&c);
字符串(char数组)%sscanf("%s",str);

只有str前面没有取地址运算符&,这是因为数组名称本身就代表了这个数组第一个元素的位置

注:只有%c会把空格按字符读入,其他格式符是以空格换行为结束标志的

常见的printf格式符
数据类型格式符举例
int%dprintf("%d",n);
long long%lldprintf("%lld",n);
float%fprintf("%f",fl);
double%fprintf("%f",db);
char%cprintf("%c",c);
字符串(char数组)%sprintf("%s",str);

%md   

printf("%5d",a)    //不足5位的前面用空格填充,大于5位的直接输出

%0md

print("%05d",a)  //不足5位的前面用0填充,大于5位的直接输出

%.mf       浮点数保留m位小数


getchar putchar       注:getchar能识别换行符并储存为字符

输入输出单个字符

#include<stdio.h>

int main(){

char c1,c2,c3;

c1=getchar();

getchar();

c2=getchar();

c3=getchar();

putchar(c1);

putchar(c2);

putchar(c3);

return 0;

}

输入数据:abcd

输出结果:acd


常用math函数

fabs(double x) 对double型变量取绝对值

floor(double x) ceil(double x)  向下取整和向上取整,返回类型为double

pow(double r,double p)    函数返回r的p次方

sqrt(double x)    算术平方根

log(double x)     返回double型变量以自然对数为底e的对数

logab=logeb/logea

round(double x)       四舍五入


选择结构

if{

        }else if{

        }else{

}

switch

int a=1,b=2;

switch(a+b){

        case 2:

                printf("%d\n",a)

                break;

        case 3: 

                printf("%d\n",b)

                break;

        case 4:

                printf("%d\n",a+b)

                break;

        default:

                printf("sad story\n")


字符与字符串

char c1='z' , c2='j' ,c3 = 117; //把字符变量赋值给字符常量

printf("%c%c%c",c1,c2,c3);

输出结果:zju

char str1[25] = "Wo chao ai ni de" ; //把字符串常量赋值给字符数组

print("%s",str1);

输出结果:wo chao ai ni de 


变量名: 1>不能是C语言标识符

                2>第一个字符必须是字母或下划线

                3>区分大小写


运算符

/    当被除数和除数都是整数时,得到的结果也是整数(向下取整)

(  ? :)是C语言中唯一的三目运算符

int a = 3;b = 5;

int c = a > b ? 7 : 11;  //a>b成立返回7,不成立则返回11

printf("%d\n",c);

输出结果:11

n/=m+1 ;  //n = n/(m+1)


     数组      

输入a[0],并将数组中后续元素都赋值为前一个元素的两倍

int main(){

        int a[10];

        scanf("%d",&a[0]);

        for(int i=0;i<10;i++){

                a[i]=a[i-1]*2;

                }

        for(int i=0;i<10;i++){

                printf("a[%d]=%d",i,a[i]);

        }

return 0;

}

        冒泡排序        

int main(){

        int a[10]={3,1,4,5,2};

        for(i=1;i<=4;i++){

                for(j=0;j<5-i;j++){

                     if( a[j]>a[j+1]){

                        int temp=a[j];

                        a[j]=a[j+1];

                        a[j+1]=a[temp];

                        }

          }

        for(int i=0;i<5;i++){

                printf("%d",a[i]);

}
 

     二维数组    

#include<stdio.h>

int main(){

        int a[3][3],b[3][3],c[3][3];

        for(i=0;i<3;i++){

                 for(j=0;j<3;j++){

                        scanf("%d",&a[i][j]);

                        scanf("%d",&b[i][j]);

                        c[i][j]=a[i][j]+b[i][j];

                        printf("%d\n",c[i][j]);

}               

}        

}

 注:如果数组比较大(大概10^6级别),则需要将其定义在主函数的外面,以为函数内部申请的局部变量是系统栈,允许申请的空间小;函数外部申请的全局变量来自静态存储区,空间大。


memset——对数组中的每一个元素赋相同的值

memset(数组名,值,sizeof(数组名));

注:需要添加头文件#include<string.h>


字符数组

1.字符数组的初始化

#include<stdio.h>

int main(){

        char str[15] = {'G','o','o','d',',','s','t','o','r','y','!'};

        for(int i=0;i<11;i++){

                printf("%c",str[i]);

}

        return 0;

}

输出结果:Good,story!

字符数组也可直接通过赋值字符串来完成初始化 (仅限于初始化这样做)

char str[15] = "Good story!";

注:字符数组的末尾是\0,所以字符数组的长度一定要比实际字符长度多一

用scanf和gets输入时会自动在末尾加上\0,而用其他输入如getchar就需要手动输入\0,否则putchar和printf无法识别字符串末尾,而出现乱码

string.h头文件包含了许多用于字符数组的函数

strlen(字符数组名)     //字符个数

strcmp()    //返回两个字符串大小比较的结果(按字典序   返回1,-1,0)

strcpy(str1,str2)  //把字符串2复制给字符串1

strcat(str1,str2)    //把一个字符串2接到另一个字符串1后面

sscanf和sprintf在stdio.h头文件下

sscanf(str,"%d",&n);      //把str的内容以%d的格式传输到n中(从左至右)

sprintf(str,"%d",n);           //把n的内容以%d的格式传输到数组中(从右至左)

#include<stdio.h>

int main(){

        int n;

        char str[100]="1,2,3";

        sscanf(str,"%d",&n);

        printf("%d",n);

        return 0;

}

输出结果:123

#include<stdio.h>

int main(){

        int n=233;

        char str[100];

        sprintf(str,"%d",n);

        printf("%d",str);

        return 0;

}

输出结果:233

注:支持其他格式 如:"%d:%lf,%s" 及正则表达式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值