练习10-1
#include <stdio.h>
void adjust_point(int *x)
{
if(*x < 0){
*x = 0;
}
if(*x > 100){
*x = 100;
}
}
int main()
{
int x;
printf("请输入一个数:");
scanf("%d", &x);
adjust_point(&x);
printf("修改后的值是%d",x);
return 0;
}
练习10-2
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void increment_date(int* y, int* m, int* d)
{
//以31号为结束的月份
if (*m == 1 || *m == 3 || *m == 5 || *m == 7 || *m == 8 || *m == 10)
{
if (*d == 31)
{
*d = 1;
*m += 1;
}
else
{
*d += 1;
}
}
//12月份单独讨论
if ((*m == 12) && (*d == 31))
{
*y += 1;
*m = 1;
*d = 1;
}
if ((*m == 12) && (*d <= 31))
{
*d += 1;
}
//以30号为结束的月份
if (*m == 4 || *m == 6 || *m == 9 || *m == 11)
{
if (*d == 30)
{
*d = 1;
*m += 1;
}
else
{
*d += 1;
}
}
//2月份单独讨论
if (*m == 2)
{
if ((*y % 4 == 0) && (*y % 100 != 0))
{
if (*d == 29)
{
*d = 1;
*m += 1;
}
else
{
*d += 1;
}
}
else
{
if (*d == 28)
{
*d = 1;
*m += 1;
}
else
{
*d += 1;
}
}
}
}
void decrement_date(int* y, int* m, int* d)
{
//以1号为开始的月份,前推是30号
if (*m == 5 || *m == 7 || *m == 8 || *m == 10 || *m == 12)
{
if (*d == 1)
{
*d = 30;
*m -= 1;
}
else
{
*d -= 1;
}
}
//1.1单独讨论
if ((*m == 1) && (*d == 1))
{
*y -= 1;
*m = 12;
*d = 31;
}
if ((*m == 1) && (*d >= 1))
{
*d -= 1;
}
//以1号为开始的月份,前推是12.31号
if (*m == 2 || *m == 4 || *m == 6 || *m == 9 || *m == 11)
{
if (*d == 1)
{
*d = 31;
*m -= 1;
}
else
{
*d -= 1;
}
}
//3月份单独讨论,因为3.1号前是2.29还是2.28要根据闰年来判断
if (*m == 3)
{
if ((*y % 4 == 0) && (*y % 100 != 0))
{
if (*d == 1)
{
*d = 29;
*m -= 1;
}
else
{
*d -= 1;
}
}
else
{
if (*d == 1)
{
*d = 28;
*m -= 1;
}
else
{
*d -= 1;
}
}
}
}
int main(void)
{
int a, b, c;
printf("请输入年月日(用逗号隔开):\n");
scanf("%d,%d,%d", &a, &b, &c);
decrement_date(&a, &b, &c);
printf("该日期的前一天是:%d,%d,%d", a, b, c);
printf("\n");
increment_date(&a, &b, &c);//抵消decrement_date
increment_date(&a, &b, &c);
printf("该日期的后一天是:%d,%d,%d", a, b, c);
return 0;
}
练习10-3
#include <stdio.h>
void sort3(int *n1,int *n2,int *n3)
{
int a[3]= {*n1,*n2,*n3};
int i,j;
//冒泡排序法
for(i=0; i<2; i++)
{
for(j=2; j>i; j--)
{
if(a[j-1]>a[j])
{
int t=a[j];
a[j]=a[j-1];
a[j-1]=t;
}
}
}
printf("升序后:");
for(i=0; i<3; i++)
{
printf("%d,",a[i]);
}
}
//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);
// }
//}
int main(void)
{
int a,b,c;
printf("请输入三个整数,并且用逗号隔开:");
scanf("%d,%d,%d",&a,&b,&c);
sort3(&a,&b,&c);
return 0;
}
练习10-4
#include <stdio.h>
void set_idx(int *v,int n)
{
int i;
for(i=0; i<n; i++)
{
*(v+i)=i;
printf("*(v+%d)=%d",*(v+i),i);
printf("\n");
}
}
int main()
{
int a[]= {0};
int b;
printf("请输入一个整数:");
scanf("%d",&b);
set_idx(a,b);
return 0;
}
练习10-5
会报错
数组中元素会溢出,因为直接从v【2】开始赋值。
#include <stdio.h>
void ary_set(int v[], int n, int val)
{
int i;
for (i = 0; i < n; i++)
v[i] = val;
}
int main(void)
{
int i;
int a[] = { 1, 2, 3, 4, 5 };
ary_set(&a[2], 5, 99);
for (i = 0; i < 5; i++)
printf("a[%d] = %d\n", i, a[i]);
return 0;
}