c语言中的经常接触的标准库函数:
<stdio.h>标准输入输入:putchar();getchar();scanf();printf();
<string.h>字符串函数:puts(str)将一个字符串输出知道"\0"结束;gets(str)在终端输入一字符串str,其中puts和gets只能输出一个字符串部门输出多个;strcat(str1,str2)将str2连接到str1中,并且取消str1末尾的“\0”;strcpy(str1,str2)把str2复制到str1;strcmp(str1,str2)字符比较函数,str1和str2比较,str1=str2,则输出0,str1<str2,则输出-1,str1>str2,则输出1;strlen(str)计算字符串的具体长度,不包括“\0”。strlwr(str)将字符串中的大写字母改写成小写字母;strupr(str)将字符串中的小写字母改写成大写字母;
<math.h>数学函数:fabs(x)――求x的绝对值;sqrt(x)――求x的开平方;float pow(float x,float y),表示x的y次幂,其中x不能为0;
多维数组和函数:
二维数组可以看做是一维数组中的每个元素存放的是一个个一维数组,多维数组一次类推;二维数组的格式:数组类型 数组名[][];
如:int array[3][4];//表示定义一个三行四列的数组;
二维数组在初始化的时候可以省略第一个下标;int array[][2]={{12,14},{15,16}};这样表示array[2][2];
在一个程序中,程序的开始都是从main函数开始,所以函数在被main函数调用前必须声明函数的原型;c语言在编译的时候是至上而下的,所以只要函数或者变量在main函数或者在被调用以前定义就不用再声明;#include <>下面定义的变量叫做全局变量,他的生存周期是程序执行完毕,他的作用范围是这个程序的任何位置,通过添加static就可以吧全局变量的作用域限定在他所在的源程序文件中,其他源程序文件不能调用它;定义在函数体内的变量叫做局部变量,局部变量只能作用于该函数,函数调用结束它的生命就over了,局部变量能够覆盖全局变量的作用域,而且局部变量和全局变量的变量名可以一样;
int max(int a,int c)//这个是函数头,不是函数的原型,这个是函数定义的开始
{
}
c语言编译器在,编译函数的声明时只检查函数的类型、函数名、函数的形参类型、形参个数和顺序,并不检查形参变量名,所以在很多时候函数的声明可以表示成:int max(int ,int).
练习题:
1.输入一个字符串,打印出有多少多个空格和字符和数字,还有其他字符
源程序:
#include <stdio.h>
#include <string.h>//使用字符串函数
int main()
{
char str[100],comand[10];//定义两个字符串,一个接受要计算的字符,一个是判断是否继续
loop: printf("输入字符串:\n");
gets(str);
int blank=0,figure=0,letter=0,others=0,i;
printf("系统正在计算,请等待.......\n");
for(i=0;i<100&&str[i]!='\0';i++)
{
if(str[i]==' ')//是否是空格
blank+=1;
else if (str[i]>='0'&&str[i]<='9')//是否是数字
figure+=1;
else if (str[i]>='A'&&str[i]<='Z'||str[i]>='a'&&str[i]<='z')//是否是字母
letter+=1;
else
others+=1;
}
printf("空格字数:%d\n数字个数:%d\n字母个数:%d\n其他字符:%d\n",blank,figure,letter,others);
printf("是否继续进行运算(yes or not):");
gets(comand);
if(strcmp(comand,"yes")==0||strcmp(comand,"y")==0)//判断是否在继续
goto loop;//使用了goto语句,重复输出
return 0;
}
输出结果:
2.求出S(n)=a+aa+aaa+...+aaa....
源代码:
#include <stdio.h>
int main()
{
long int sum=0,b=0,k=1;
int a,n;
loop:printf("输入a和n:\n");//从键盘输入两个数,第一个是a,第二个是n的值,
scanf("%d %d",&a,&n);
printf("\n");
if (a!=0&&n!=0)
{
sum=a;
for(int i=1;i<n;i++)//累加
{
k*=10;
b+=a*k;
sum+=b+a;
}
}
else
{
printf("对不起您输入的数不符合要求,请重新输入!\n");
goto loop;//设置跳转,单输入的数中有一个是0则提示重新输入
}
printf("S(n)=%ld\n",sum);
return 0;
}
输出结果:
3.输出所有水仙花数
源代码:
#include <stdio.h>
#include <math.h>
int main()
{
int number,count=0,i,unit,ten,hundred,k;
printf("三位数中是水仙花数的有:\n");
for(i=100;i<1000;i++)
{
number=i;
unit=number%10;//个位
ten=(number/10)%10;//百位
hundred=number/100;//千位
k=pow(unit,3)+pow(ten,3)+pow(hundred,3);//调用函数,float pow(float x ,float y)表示x的y次幂,这边进行了一次强制格式转换,float转换成int,函数在编译时会提示可能会有数据丢失,但是没有关系,这个程序的最后结果是int;
if(k==number)
{
printf("%8d",number);//规定输出格式为8位数,如果不够用空格补齐
count++;
if(count%2==0)//每输出两个水仙花数就换行
printf("\n");
}
}
return 0;
}
在该函数中使用到了从来没有使用过的立方函数,这个也是math.h中的标准函数!!
输出结果: