C语言复习5

本文介绍了C语言中的静态变量特性,展示了如何在函数中保留变量值。同时,讲解了字符型数据的输入输出规则,并通过实例演示了类型转换、数组操作以及斐波那契数列的生成。此外,还涵盖了查找数组最小值和使用选择排序及二分法查找的方法,深入理解C语言的基本操作和算法应用。
摘要由CSDN通过智能技术生成

静态变量:

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;
 } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值