明解C语言(入门篇)第十章

1、练习10-1

#include<stdio.h>

void adjust_point(int *n){
	if(*n<0){
		*n=0;
	}
	else if(*n>100){
		*n=100;
	}
}

int main(void)
{
    int i;
    printf("请输入一个负数或大于100的数:");	scanf("%d",&i);
	adjust_point(&i);
	printf("修改后的数为%d",i); 
    return 0;
}


2、练习10-2

#include<stdio.h>

void decrement_date(int *y,int *m,int *d){//前一天 
	if(*y%4==0){
		if(*m==1&&*d==1){
			*m=12;
			*d=31;			
		}
		else if(*m==2&&*d==1){
			*m=1;
			*d=31;
		}
		else if(*m==3&&*d==1){
			*m=2;
			*d=29;
		}
		else if(*m==4&&*d==1){
			*m=3;
			*d=31;
		}
		else if(*m==5&&*d==1){
			*m=4;
			*d=30;
		}
		else if(*m==6&&*d==1){
			*m=5;
			*d=31;
		}
		else if(*m==7&&*d==1){
			*m=6;
			*d=30;
		}
		else if(*m==8&&*d==1){
			*m=7;
			*d=31;
		}
		else if(*m==9&&*d==1){
			*m=8;
			*d=31;
		}
		else if(*m==10&&*d==1){
			*m=9;
			*d=30;
		}
		else if(*m==11&&*d==1){
			*m=10;
			*d=31;
		}
		else if(*m==12&&*d==1){
			*m=11;
			*d=30;
		}		
		else{
			--*d;
		}
	}
	else{
		if(*m==1&&*d==1){
			*m=12;
			*d=31;			
		}
		else if(*m==2&&*d==1){
			*m=1;
			*d=31;
		}
		else if(*m==3&&*d==1){
			*m=2;
			*d=28;
		}
		else if(*m==4&&*d==1){
			*m=3;
			*d=31;
		}
		else if(*m==5&&*d==1){
			*m=4;
			*d=30;
		}
		else if(*m==6&&*d==1){
			*m=5;
			*d=31;
		}
		else if(*m==7&&*d==1){
			*m=6;
			*d=30;
		}
		else if(*m==8&&*d==1){
			*m=7;
			*d=31;
		}
		else if(*m==9&&*d==1){
			*m=8;
			*d=31;
		}
		else if(*m==10&&*d==1){
			*m=9;
			*d=30;
		}
		else if(*m==11&&*d==1){
			*m=10;
			*d=31;
		}
		else if(*m==12&&*d==1){
			*m=11;
			*d=30;
		}		
		else{
			--*d;
		}
	} 
}

void increment_date(int *y,int *m,int *d){//后一天 
	if(*y%4==0){
		if(*m==1&&*d==31){
			*m=2;
			*d=1;			
		}
		else if(*m==2&&*d==29){
			*m=3;
			*d=1;
		}
		else if(*m==3&&*d==31){
			*m=4;
			*d=1;
		}
		else if(*m==4&&*d==30){
			*m=5;
			*d=1;
		}
		else if(*m==5&&*d==31){
			*m=6;
			*d=1;
		}
		else if(*m==6&&*d==30){
			*m=7;
			*d=1;
		}
		else if(*m==7&&*d==31){
			*m=8;
			*d=1;
		}
		else if(*m==8&&*d==31){
			*m=9;
			*d=1;
		}
		else if(*m==9&&*d==30){
			*m=10;
			*d=1;
		}
		else if(*m==10&&*d==31){
			*m=11;
			*d=1;
		}
		else if(*m==11&&*d==30){
			*m=12;
			*d=1;
		}
		else if(*m==12&&*d==31){
			*m=1;
			*d=1;
		}		
		else{
			++*d;
		}
	}
	else{
		if(*m==1&&*d==31){
			*m=2;
			*d=1;			
		}
		else if(*m==2&&*d==28){
			*m=3;
			*d=1;
		}
		else if(*m==3&&*d==31){
			*m=4;
			*d=1;
		}
		else if(*m==4&&*d==30){
			*m=5;
			*d=1;
		}
		else if(*m==5&&*d==31){
			*m=6;
			*d=1;
		}
		else if(*m==6&&*d==30){
			*m=7;
			*d=1;
		}
		else if(*m==7&&*d==31){
			*m=8;
			*d=1;
		}
		else if(*m==8&&*d==31){
			*m=9;
			*d=1;
		}
		else if(*m==9&&*d==30){
			*m=10;
			*d=1;
		}
		else if(*m==10&&*d==31){
			*m=11;
			*d=1;
		}
		else if(*m==11&&*d==30){
			*m=12;
			*d=1;
		}
		else if(*m==12&&*d==31){
			*m=1;
			*d=1;
		}		
		else{
			++*d;
		}
	}
}

int main(void)
{
    int i,j,k;
    printf("请输入年份:");		scanf("%d",&i);
    printf("请输入月份:");		scanf("%d",&j);
    printf("请输入日期:");		scanf("%d",&k);
    /*输入还可以这样写,但是不如上面易读
    printf("请输入的日期\n");
	scanf("%d",&i);
	getchar();	
	scanf("%d",&j);	
	getchar();
	scanf("%d",&k);		
    */
	printf("---------------\n");
	printf("输入的日期为%d年%d月%d日\n",i,j,k);			
	increment_date(&i,&j,&k);
	printf("它的后一天为%d年%d月%d日\n",i,j,k); 
	decrement_date(&i,&j,&k);
	decrement_date(&i,&j,&k);//因为函数increment_date已经将日期调后一天,这里面调用两次就是将日期调到前一天
	printf("它的前一天为%d年%d月%d日",i,j,k);	
    return 0;
}


3、练习10-3

#include<stdio.h>

void swap(int *px, int *py){
	int temp=*px;
	*px=*py;
	*py=temp;
} 


void sort3(int *n1,int *n2,int *n3){
	if(*n1>*n2){
		swap(n1,n2);
		if(*n1>*n3){
			swap(n1,n3);
			if(*n2>*n3){
				swap(n2,n3);	
			}
		}
		else{
			if(*n2>*n3){
				swap(n2,n3);	
			}
		}		
	}
	else{
		if(*n2>*n3){
			swap(n2,n3);
			if(*n1>*n2){
				swap(n1,n2);
			}	
		}
	}
}

int main(void)
{
    int i,j,k;
    while(1){						//加个循环为了方便验证
		printf("请输入第一个数");
		scanf("%d",&i);
		printf("请输入第二个数");
		scanf("%d",&j);
		printf("请输入第三个数");
		scanf("%d",&k);		
		sort3(&i,&j,&k);
		printf("三个整数按升序排列为%d,%d,%d\n",i,j,k);     	
	}
    return 0;
}

4、练习10-4

#include<stdio.h>

void set_idx(int *v, int n){
	int i;
	for(i=0;i<n;i++){
		v[i]=i;
	}
} 


int main(void)
{
    int v[10]={11,12,13,14,15,16,17,18,19,20};
    int n=10;
    int i;
    for(i=0;i<n;i++){
		printf("原始数组为v[%d]:%d\n",i,v[i]);  
	}
	printf("-------------------\n"); 
	set_idx(v,n);
	for(i=0;i<n;i++){
		printf("变更数组为v[%d]:%d\n",i,v[i]);  
	}
    return 0;
}

5、练习10-5
起始位置为a[2]的地址,n变为2,就相当于走两步,将数组中的a[2],a[3]变为99,其它的则无变化。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值