C语言-课后练习

if语句运用

1.编写一个关于判断闰年平年的小程序

#include <stdio.h>
void main(){
	int a;
	printf("Please a yaes: ");
	scanf("%d",&a);
	if(a%100==0){
		if(a%400==0){
			printf("闰年\n");
		}else{
			printf("平年\n");
		}
	}else{
		if(a%4==0){
			printf("闰年\n");
		}else{
			printf("平年\n");
		}
	}
}

switch语句

2.编写运输公司运费计算程序

#include <stdio.h>
void main(){
	int a;
	double s,w,p,d;
	printf("请输入路程,重量,每公里没吨基本运费: ");
	scanf("%lf%lf%lf",&s,&w,&p);
	if(s<250){
		a = 0;
	}else if(s>=250&&s<500){
		a = 1;
	}else if(s>=500&&s<1000){
		a = 2;
	}else if(s>=1000&&s<2000){
		a = 3;
	}else if(s>=2000&&s<3000){
		a = 4;
	}else{
		a = 5;
	}
	switch(a){
		case 0:
			d = 0;
			printf("需要运费%5.2lf\n",s*w*p*(1-d));break;
		case 1:
			d = 0.02;
			printf("需要运费%5.2lf\n",s*w*p*(1-d));break;
		case 2:
			d = 0.05;
			printf("需要运费%5.2lf\n",s*w*p*(1-d));break;
		case 3:
			d = 0.08;
			printf("需要运费%5.2lf\n",s*w*p*(1-d));break;
		case 4:
			d = 0.10;
			printf("需要运费%5.2lf\n",s*w*p*(1-d));break;
		case 5:
			d = 0.15;
			printf("需要运费%5.2lf\n",s*w*p*(1-d));
	}
}

3.计算一个日期为该年的第几天(无循环)

#include <stdio.h>

void main(){
	int Y,M,D,Feb,big=31,small=30;
	printf("Please input date: ");
	scanf("%d%d%d",&Y,&M,&D);
	if(Y%100==0){
		if(Y%400==0){
			Feb =29;
		}else{
			Feb = 28;
		}
	}else{
		if(Y%4==0){
			Feb =29;
		}else{
			Feb = 28;
		}
	}
	switch(M){
		case 1:printf("这是%d年的第%d天\n",M,D);break;
		case 2:printf("这是%d年的第%d天\n",M,big*1+D);break;
		case 3:printf("这是%d年的第%d天\n",M,big*1+Feb+D);break;
		case 4:printf("这是%d年的第%d天\n",M,big*2+Feb+D);break;
		case 5:printf("这是%d年的第%d天\n",M,big*2+Feb+small*1+D);break;
		case 6:printf("这是%d年的第%d天\n",M,big*3+Feb+small*1+D);break;
		case 7:printf("这是%d年的第%d天\n",M,big*3+Feb+small*2+D);break;
		case 8:printf("这是%d年的第%d天\n",M,big*4+Feb+small*2+D);break;
		case 9:printf("这是%d年的第%d天\n",M,big*5+Feb+small*2+D);break;
		case 10:printf("这是%d年的第%d天\n",M,big*5+Feb+small*3+D);break;
		case 11:printf("这是%d年的第%d天\n",M,big*6+Feb+small*3+D);break;
		case 12:printf("这是%d年的第%d天\n",M,big*6+Feb+small*4+D);
	}
}

for循环与break

4.判断一个自然数是否为素数

#include <stdio.h>

void main(){
	int n,m,i;
	printf("请输入一个2以上的自然数: ");
	scanf("%d",&n);
	for(i=2;i<n;i++){
		if(n%i==0){
			m=0;
			break;
		}else{
			m=1;	
		}
		
	}
	if(m==0){
		printf("%d不是素数\n",n);
	}else{
		printf("%d是素数\n",n);
		}
}

5.计算斐波那契数列前20项

#include <stdio.h>

void main(){
	int i,a[20]={1,1};
	for(i=0;i<20;i++){
		a[i+2]=a[i+1]+a[i];
	}
	for(i=0;i<20;i++){
		if(0==i%4){
			printf("\n");
		}
		printf("%8d",a[i]);
	}
	
	printf("\n");
}

6.数组冒泡排序

#include <stdio.h>

void main(){
	int i,j,t,a[10];
	printf("please input 10 numbers:\n");
	for(i=0;i<10;i++){/*给数组a动态赋值*/
		scanf("%d",&a[i]);
	}
	for(j=0;j<9;j++){/*确定要比较趟数,要比较9躺*/
		for(i=0;i<10-j;i++){/*确定每趟比较次数,第1趟比较10-1此,第j躺就是10-j次*/
			if(a[i]>a[i+1]){
				t = a[i]; a[i]=a[i+1]; a[i+1]=t; /*相邻的两个数值互换*/	
			}
		}
	}
	printf("print sorted numbers:\n");
	for(i=0;i<10;i++){
		printf("%d ",a[i]);
	}
	printf("\n");
}

7.二维数组打印九宫格,十字架

#include <stdio.h>

void main(){
	int a[3][3];
	int i,j;
	printf("Please input 10 numbers: \n");
	for(i=0;i<3;i++){
		for(j=0;j<3;j++){
			scanf("%d",&a[i][j]);
		}
	}
	printf("++++++++++++++Print nine squares+++++++++++++++\n");
	for(i=0;i<3;i++){
		for(j=0;j<3;j++){
			printf("%5d",a[i][j]);
		}
		printf("\n");
	}
	printf("++++++++++++++++Print the cross++++++++++++++++\n");
	for(i=0;i<3;i++){
		for(j=0;j<3;j++){
			if(i==1||j==1){
				printf("%5d",a[i][j]);
			}else{
				printf("%5c",' ');
			}
		}
		printf("\n");
	}
		printf("\n");
}

8.利用二分法寻找有序数列的某一项

#include <stdio.h>

void main(){
	int a[10]={-1,0,5,25,46,59,80,100,120,300};
	int n,low,mid,high,found;
	low = 0;
	high = 10-1;
	found = 0;
	printf("Input a number to be seached: ");
	scanf("%d",&n);
	/*以上为程序预处理*/
	while(low<=high)
	{
		mid=(low+high)/2;
		if(n==a[mid]){
			found = 1; break;   /**表示已经找到结束循环**/
		}else if(n>a[mid])
		{
			low = mid+1;
		}else
		{
			high = mid-1;
		}
	}
	if(found == 1){
		printf("The index of %d is %d\n",n,mid);
	}else
	{
		printf("There is not found %n!\n",n);
	}
}

9.实现2^4=16 pow函数

#include <stdio.h>

void main(){
    double pow(double x,double y);
    double a,b, z;
    printf("Please input 2 numbers: ");
    scanf("%lf%lf",&a,&b);
    z = pow(a,b);
    printf("%lf\n",z);

}



double pow(double x,double y){
    
    double i, result=1;
    if(y>=0)
    {
        for(i=1;i<=y;i++)
        {
            result = result*x;
        }
    }
    if(y<0){    /*当指数为负数时,如2^-2   可以到写成 1/2^2*/
        for(i=1;i<=-y;i++)
        {
            result = result*(1/x);
        }
    }
    if(x==0)
    {
        result=0;
    }
    return result;
}

10.函数嵌套调用(2平方的阶乘 到 3平方阶乘的和)

#include <stdio.h>

long square(int s);        //实现平方
long factorial(int f);     //实现阶乘

void main()
{
    long n,m,sum=0;
    long max;
    printf("Please input 1 number: ");
    scanf("%ld",&max);
    for(n=2;n<=max;n++)
    {
        m = square(n);
        sum +=m;
    }
    /**
    sum = square(2);
    sum = square(2)+square(3)+square(4);**/
    printf("2平方的阶乘 到 %ld平方阶乘的和:%ld\n",max,sum);
}
long square(int s)
{
    long k,result;
    long factorial(int);
    
    k = s*s;
    result = factorial(k);
    return result;
}
long factorial(int f)
{
    long i,result=1;
    for(i=1;i<=f;i++){
        result*=i;
    }
    return result;
}

汇编裸函数编写

#include <stdio.h>

/*
int plus(int x,int y,int z)
{
	int a=12
	int b=3;
	int c=4;
	return x+y+z+a+b+c;
}
*/
//编辑裸函数

int __declspec(naked) function(int x,int y,int z)
{
	
	__asm 
	{
		//保存原来栈底
		push ebp
		//提升栈底
		mov ebp,esp
		sub esp,0x40
		//保存现场
		push edi
		push esi
		push ebx
		//填充缓冲区  int 3 相当于中断
		mov eax,0xCCCCCCCC
		mov ecx,0x10
		lea edi,dword ptr ds:[ebp-0x40]
		rep stosd 
		//实现函数功能
		//局部变量:ebp-4开始的  参数:ebp+8 开始的  ebp+4表示eip	ebp表示原来的栈底(调用前的ebp)
		mov dword ptr ds:[ebp-0x4],2
		mov dword ptr ds:[ebp-0x8],3
		mov dword ptr ds:[ebp-0xc],4

		mov eax,dword ptr ds:[ebp+0x8]
		add eax,dword ptr ds:[ebp+0xc]
		add eax,dword ptr ds:[ebp+0x10]
		add eax,dword ptr ds:[ebp-0x4]
		add eax,dword ptr ds:[ebp-0x8]
		add eax,dword ptr ds:[ebp-0xc]
	
		//恢复现场
		pop ebx
		pop esi
		pop edi

		//恢复堆栈
		mov esp,ebp
		pop ebp

		ret
	}
}

void main()
{
	function(1,2,3);	
}

	// An highlighted block
	var foo = 'bar';
	echo 'hello';
	```
如有错误还望请大神指点。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值