指针知识复习
基础1
输入年和天数,输出对应的年月日
样例输入
2000 61
样例输出
2000-3-1
#include<stdio.h>
void GetData(int *year,int *data)
{//该函数读入年份和天数,并通过形参指针将结果写入主函数
scanf("%d%d",year,data);
}
void Count(int year,int data,int *month,int *day)
{//该函数计算第几月份和第几天
int num[2][13]{{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}};
int find = 0;
int i;
if(year%4 == 0&&year%100!=0||year%400== 0)
find = 1;
for(i = 1;data-num[find][i]>= 0;i++)
data -= num[find][i];
*month = i;
*day = data;
}
void PrintData(int year,int month,int day)
{//该函数输出年月日
printf("%d-%d-%d\n",year,month,day);
}
int main()
{
int year,data,month,day;
GetData(&year,&data);
Count(year,data,&month,&day);
PrintData(year,month,day);
return 0;
}
基础2
实数的截断取整,去掉小数的前导0,只取整数部分,否则输出0
#include<stdio.h>
int main()
{
char str[100];
gets(str);
char *p = str;
char *q = NULL;
while(*p == '0')
p ++;
if(*p == '\0'||*p == '.')
p--;
while(*p!='.')
{
printf("%c",*p);
p++;
if(p==NULL||*p =='\0')
break;
}
printf("\n");
return 0;
}
基础3
将十进制数转换为r进制
#include<stdio.h>
#include<string.h>
void DTor(int n,int r,char *str)
{
char p[] ="0123456789abcdef";
int k = 0,i,d;
while(n)
{
d = n%r;
str[k] = p[d];
k++;
n = n/r;
}
for(i = k-1; i >= 0; i--)
printf("%c",str[i]);
printf("\n");
}
int main()
{
int n;
int r;
char str[100];
scanf("%d%d",&n,&r);
DTor(n,r,str);
return 0;
}
基础4
输出字符串的最后三个字符
#include<stdio.h>
#include<string.h>
int main()
{
char str[100];
char *p;
gets(str);
int l = strlen(str);
p = str+l-3;
puts(p);
return 0;
}
基础5
账单处理,输入一个整数n(n<100),再输入n行账单信息,每一行由事物的名字name和对应的花费c组成,长度不超过200,中间会有一个或多个空格,而每一行的开头和结尾没有空格。
输出总的花费,小数点后保留一位数字
输入样例
3
apple 2.3
BUY clothes for girl friend 260.5
Go to cinema 30
输出样例
292.8
#include<stdio.h>
void Count(int n)
{
int i;
char *j;
char str[100];
double d,sum = 0.0;
for( i = 1; i <= n; i++)
{
gets(str);
for(j =str;j!=NULL;j++)
{
if(*j >= '0'&&*j<= '9')
break;
}
sscanf(j,"%lf",&d);
sum += d;
}
printf("%.1lf\n",sum);
}
int main()
{
int n;
scanf("%d",&n);
getchar();
Count(n);
return 0;
}
基础6
动态申请一个一维数组。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n,i;
int *p;
scanf("%d",&n);
p = (int*)malloc(n*sizeof(int));
for( i =1; i <= n; i ++)
scanf("%d",p+i);
for( i = 1; i <= n; i ++)
printf("%d ",*(p+i));
printf("\n");
return 0;
}