静态变量:
static 类型名 变量表
静态变量在函数运行中其存储单元会被保留,使上一次函数调用后的值依然保存着,可供本次调用使用。
#include<stdio.h>
double fact_s (int n);
int main()
{
int i,n;
printf("enter n: ");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("%3d!=%.0f\n",i,fact_s (i));
}
return 0;
}
double fact_s(int n)
{
static double f =1; //定义静态变量,使其的值在函数调用后还存在
f=f*n;
return f;
}
字符型数据的输入输出:
输入时需注意空格也属于字符型数据
C语言中,字符型数据的在内存中用一个字节存储它的ASCLL码,所以它既可以按字符形式输出,也可以按整数形式输出。按整形数据输出时,可以调用函数printf()(格式控制说明选用%d,%o,%x等)
类型转换:
1.自动类型转换:遵循数据类型自动转换规则
在赋值运算时,赋值号两边的数据类型最好相同,至少右侧数据类型比左侧的类型级别低,或者右侧数据的值在左侧变量的取值范围内,否则会导致运算精度降低
2.强制类型转换;
(类型名) 表达式
数组代码练习:
姓前名后
#include<stdio.h>
int main()
{
int i,j,ch;
char a[1000000];//定义一个数组,存放输入的名字字符
for(i=0;;i++)
{
scanf("%c",&a[i]);//循环输入名字
if(a[i]=='.')
{
break;//当输入.时跳出循环
}
}
for(i=0,ch=0;;i++)
{
if(a[i]==' ')
{
continue;//循环至跳过名,到性的大字母
}
else if(a[i]>='A'&&a[i]<='Z'&&ch<2)
{
ch++;
if(ch==2)
{
i=i-1;
}
continue;//到此跳出第一次循环,进入下一次循环,循环完第二遍时i=1,ch=2;
}
else if(ch==2&&a[i]>='A'&&a[i]<='Z')//输出性
{
for(j=i;;j++)
{
if(a[j]==' '||a[j]=='.')
{
printf(", ");//输出逗号
ch++;
break;//跳出循环
}
else
{
printf("%c",a[j]);//输出性
}
}
break;
}
else if(ch==3)
{
break;//跳出整体循环
}
}
for(j=0;;j++)
{
if((a[j]<65||a[j]>90)&&(a[j]<97||a[j]>122))//ASCLL码表示的字母 ,表示当第一个不是字母时
{
continue;
}
else
{
printf("%c.\n",a[j]);//输出名的首字母
break;//退出循环
}
}
return 0;
}
斐波那契数列
#include<stdio.h>
#define MAXN 46
int main()
{
int i,n;
int fib[MAXN]={1,1};
printf("please enter n: ");
scanf("%d",&n);
if(n>=1&&n<=46)
{
for(i=2;i<n;i++)
{
fib[i]=fib[i-1]+fib[i-2];
}
for(i=0;i<n;i++)
{
printf("%6d",fib[i]);
if((i+1)%5==0)
{
printf("\n");
}
}
if(n%5!=0)
{
printf("\n");
}
}
else
{
printf("your number n is wrong");
}
return 0;
}
查找最小元素;
//寻找数组中的最小值,且将其与第一个元素替换
#include<stdio.h>
#define MAXN 10
int main(void)
{
int i,index,n;
int a[MAXN];
int temp;
printf("please enter n: ");
scanf("%d",&n);
printf("enter %d number",n);
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
index=0;
for(i=1;i<n;i++)
{
if(a[index]>a[i])
{
index=i;
}
}
printf("the smallst number is %d ,the %d\n",a[index],index);
temp=a[index];
a[index]=a[0];
a[0]=a[index];
for(i=0;i<n;i++)
{
printf("%4d",a[i]);
if((i+1)%5==0)
{
printf("\n");//每五个元素便换行
}
}
return 0;
}
选择排序和二分法查找
//选择排序
#include<stdio.h>
#define MAXN 10
int main(void)
{
int i,index,k,n,temp;
int a [MAXN];
int low,high,x,mid;
printf("please enter n: ");
scanf("%d",&n);
printf("enter %d number",n);
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(k=0;k<n-1;k++)//只需要n-1次
{
index=k;
for(i=k+1;i<n;i++)
{
if(a[i]<a[index])
{
index=i;
}
}
temp=a[index];
a[index]=a[k];
a[k]=temp;
}
printf("after sortrd : ");
for(i=0;i<n;i++)
{
printf("%3d",a[i]);
}
printf("\n");
low =0;
high=n-1;
printf("please enter number that you will find");
scanf("%d",&x);
while(low <= high)//要加等号才可以查到等号两端
{
mid=(low + high)/2;
if(x==a[mid])
{
break;
}
else if(x<a[mid])
{
high=mid-1;
}
else
{
low=mid+1;
}
}
if(low <=high)
{
printf("is the %d",mid);
}
else
{
printf("no found");
}
return 0;
}