#include <stdio.h>
int fun(int a[], int n)
{
int i,j=0;
for(i=1;i<n;i++)
{
if(a[i]!=a[j])
{
j++;
a[j]=a[i];
}
}
return j+1;
}
main()
{ int a[10],i,n=10;
for (i=0;i<10;i++)
scanf("%d",&a[i]);
printf("The original data :\n");
for(i=0; i<n; i++)printf("%3d",a[i]);
n=fun(a,n);
printf("\n\nThe data after deleted :\n");
for(i=0;i<n;i++)printf("%3d",a[i]); printf("\n\n");
}
2,解:源程序如下:
# define M sizeof (unsigned int)*8/*函數TRANS將無符號整數N轉換成D(2,8,16)進制表示的字符串S*/
int trans( unsigned n, int d, char s[])
{
static char digits[]="0123456789ABCDEF";/*16進制數字字符*/
char buf[M+1];
int j,i=M;
if (d<2||d>16)
{
s[0]='\0';/*不合理的進制,置S為空字符串*/
return 0;/*不合理的進制,函數返回0*/
}
buf[i]='\0';
do
{
buf[--i]=digits[n%d];/*得出最低位,將對應字符存入對應數組中*/
n/=d;
}while (n);
for (j=0;(s[j]=buf[i])!='\0';j++,i++)/*將工作數組中的字符串復制到S*/
s[j]=buf[i];/*其中控制條件可寫成S[J]=BUF[i]*/
return j;
}
main()
{
unsigned int num=0;
int scale[]={2,8,16};
char str[33];
int i;
clrscr();
puts("please input a number to num:");
scanf("%d",&num);
printf("the number you input is %d,\n the translation results are:\n",num);
for (i=0;i<sizeof(scale)/sizeof(scale[0]);i++)
{
if (trans(num,scale[i],str))
printf("%5d=%s(%d)\n",num,str,scale[i]);
else
printf("%5d=>(%d)error!\n",num,str,scale[i]);
}
printf("\n press any key to quit\n");
getch();
}
3,解:源程序如下:
(註意:本源碼中,函數GetWeekDay的返回值僅僅表示輸入參數是否“正確/有效”(例如前三個參數使用2001,2,29就是無效參數),能否得到預期的星期值;真正的星期值則是通過輸出變量返回給主調函數的。)
////////////////////////////////////////////
#include <time.h>
#include <stdio.h>
int GetWeekDay(int nYear,int nMon,int nDay, int *npWeekDay);
int main()
{
int nMyWeekDay;
int nResult;
nResult = GetWeekDay(2007,1,10,&nMyWeekDay);
return 0;
}
//輸入日期,返回星期的C語言函數
int GetWeekDay(int nYear,int nMon,int nDay, int *npWeekDay)
{
int nRetVal = 0;
time_t tMyDateTime;
struct tm tmMyDate,*tmpMyDate;
if((nYear<1900||nYear>=3000)
|| (nMon<1 || nMon>12)
|| (nDay<1||nDay>31) )
{
nRetVal = 1;
*npWeekDay = -1;
return nRetVal;
}
//memset(tmMyDate,0,sizeof(struct tm));
tmMyDate.tm_year = nYear-1900;
tmMyDate.tm_mon = nMon-1;
tmMyDate.tm_mday = nDay;
tmMyDate.tm_hour =16;
tmMyDate.tm_min =30;
tmMyDate.tm_sec =30;
tMyDateTime = mktime(&tmMyDate);
if(tMyDateTime<0)
{
nRetVal = 1;
*npWeekDay = -1;
return nRetVal;
}
tmpMyDate = localtime(&tMyDateTime);
*npWeekDay = tmpMyDate->tm_wday;
return nRetVal;
}