c语言经典习题6答案.docx

上传人:b****5 文档编号:7281516 上传时间:2023-01-22 格式:DOCX 页数:17 大小:18.33KB
下载 相关 举报
c语言经典习题6答案.docx_第1页
第1页 / 共17页
c语言经典习题6答案.docx_第2页
第2页 / 共17页
c语言经典习题6答案.docx_第3页
第3页 / 共17页
c语言经典习题6答案.docx_第4页
第4页 / 共17页
c语言经典习题6答案.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

c语言经典习题6答案.docx

《c语言经典习题6答案.docx》由会员分享,可在线阅读,更多相关《c语言经典习题6答案.docx(17页珍藏版)》请在冰豆网上搜索。

c语言经典习题6答案.docx

c语言经典习题6答案

CLanguageExercise–Chapter6

 

题目:

了解如何从命令行获取参数。

从命令行获取参数后,按照相反的次序打印出来。

exam45

了解利用指针处理字符串,实现strlen(char*s)函数,计算一个字符串中的字符个数。

exam46

了解利用指针处理字符串,实现strcpy(char*s1,char*s2,intn)函数,把s2中的前n个字符拷贝到s1中。

exam47

了解指针数组。

用程序对China,America,Japan,Russa,Franch这5个字符串进行从小到大排序。

exam48

了解函数指针。

把第三章实践课的计算器软件中操作符所对应的函数,用函数指针来引用。

exam49

了解函数指针。

实现2个函数,calcA(chara,charb),calcB(inta,intb,intc)通过命令行获取第一个参数,如果是0,调用calcA对命令行输入的第二个字符和第三个字符进行求和,如果是0,调用calcB对命令行输入的第二个整数、第三个整数和第四个整数进行求和。

exam50

了解函数指针作为函数参数。

把指向函数的指针作为参数传递给一个函数,函数a设置一个全局变量k=100,函数b有2个参数,一个是指向函数的指针,一个intcounter,函数b返回把k+counter的值。

exam51

了解函数指针作为数组元素。

从标准输入接收0-5中的一个数字,不同的数字调用不同的函数,每个函数都打印出当前的数字值和总共输入数字的次数。

exam52

/*----------------exam45---------------*/

#include

intmain(intargc,char**argv)

{

inti;

for(i=0;i

printf("Argument%dis%s.\n",i,argv[i]);

intj=0,n=0;

charb[80];

while(argv[1][j]!

='\0')

{

n++;

j++;

}

for(j=0;j

b[n-1-j]=argv[1][j];

b[n]='\0';

printf("Argumentis%s.\n",b);

return0;

}

/*--------------------exam50------------------*/

#include"stdio.h"

intcalcA(chara,charb){intz=(a+b);return(z);}

intcalcB(inta,intb,intc){return(a+b+c);}

intmain(intargc,char**argv)

{

inti,j=0,k1=0,k2=0,n=0;

charc[100],b[2];

inta[3];intv[80]={0};

int(*p)(chara,charb);

int(*q)(inta,intb,intc);

p=calcA;

q=calcB;

for(i=0;i

printf("Argument%dis%s.\n",i,argv[i]);

for(i=1;i

while(argv[i][j]!

='\0')

{

v[i]++;

j++;

}

for(i=1;i

for(j=0;j<=v[i];j++)

c[n++]=argv[i][j];

for(j=1;j

{

if(c[j]>='0'&&c[j]<='9')

{

if(k1<=2)

a[k1++]=c[j]-'0';

}

elseif(c[j]>='a'&&c[j]<='z')

{

if(k2<=1)

b[k2++]=c[j];

}

else{}

}

for(i=0;i<3;i++)

printf("a[%d]is%4d\t",i,a[i]);

printf("\n");

for(i=0;i<2;i++)

printf("b[%d]is%c\t",i,b[i]);

printf("\n");

if(c[0]=='0')printf("%d\n",(*p)(b[0],b[1]));

elseprintf("%d\n",(*q)(a[0],a[1],a[2]));

return0;

}

/*------------头文件1.h--------------*/

voidexam38();

voidexam40();

voidexam41();

voidexam42();

voidexam43();

voidexam44();

voidpaixu(inta[10]);//排序函数

char*cmp(chara[80],charb[80]);//比较函数

char*cat(chara[80],charb[80]);//连接函数

voidexam46();

intStrlen(char*s);

char*Strcpy(char*s1,char*s2,intn);

voidexam47();

voidexam48();

voidexam52();

voidsta1(int*a);

voidsta2(int*a);

voidsta3(int*a);

voidsta4(int*a);

voidsta5(int*a);

intdefine_();

intb(intdefine_(),intcounter);

voidexam51();

voidadd();

voidsub();

voidmul();

voiddiv();

voidmod();

voidexam50();

 

#include"stdio.h"

#include"string.h"

#include"windows.h"

#include"conio.h"

#include"math.h"

#include"1.h"

/*--------------------------------*/

voidexam38()

{

inti=32;

int*p;

printf("%d\t%d\n",&i,&p);

p=&i;

printf("%d\n",p);

printf("%d\t%d\n",i,*p);

*p=100;

printf("%d\t%d\n",i,*p);

}

/*--------------------------------*/

voidpaixu(inta[10])

{

inttemp;

for(inti=0;i<9;i++)

for(intj=0;j<9-i;j++)

if(a[j]

{

temp=a[j];

a[j]=a[j+1];

a[j+1]=temp;

}

}

voidexam40()

{

inta[10]={5,6,4,7,8,9,3,1,2,10};

paixu(a);

ints=4;

int*p;

p=a+s;

for(s=4;s<10;s++,p++)

printf("%4d",*p);

printf("\n");

}

/*----------------------------*/

voidexam41()

{

floata=1,*p;

p=&a;

printf("%d\t",p);

char*c;

c=(char*)1244968;

shortint*i;

i=(shortint*)1244968;

printf("%d\t%d\t\n",c,i);

printf("%c\n",*c);

printf("%d\n",*i);

}

/*---------------------------*/

char*cmp(chara[80],charb[80])

{

char*p;

if(strcmp(a,b)<0)

{

p=a;

}

else

{

p=b;

}

returnp;

}

voidexam42()

{

chara[80]={"gem"},b[80]={"welcome"};

char*q;

q=cmp(a,b);

puts(q);

}

/*------------------------------*/

char*cat(chara[80],charb[80])

{

strcat(a,b);

returna;

}

voidexam43()

{

chara[80]={"gem"},b[80]={"welcome"};

char*q;

q=cat(a,b);

puts(q);

}

/*-------------------------*/

voidexam44()

{

inti=65;

int*p;

int**q;

p=&i;

q=&p;

printf("数据i的地址:

%d\t指针p所指向的地址:

%d\tq指向指针p的地址%d\n",i,p,q);

i+=1;

printf("%d\t%d\t%d\n",i,*p,**q);

(*p)+=1;

printf("%d\t%d\t%d\n",i,*p,**q);

(**q)+=1;

printf("%d\t%d\t%d\n",i,*p,**q);

}

/*-----------------------------*/

intStrlen(char*s)

{intn=0;

while(*s!

='\0')

{

n++;

s++;

}

returnn;

}

voidexam46()

{

chara[80];

inti;

gets(a);

i=Strlen(a);

printf("%d\n",i);

}

/*----------------------------*/

char*Strcpy(char*s1,char*s2,intn)

{

char*p;

for(intk=0;k

{

s1[k]=*s2;

s2++;

}

s1[k]='\0';

p=s1;

returnp;

}

voidexam47()

{

char*q;

chara[80],b[80];

gets(a);

gets(b);

intn;

printf("请确认将前几个字符拷贝到a中:

\n");

scanf("%d",&n);

q=Strcpy(a,b,n);

puts(q);

}

/*--------------------------------*/

voidexam48()

{

char*a[5]={"China","America","Japan","Russa","Franch"};

inti,j;

char*t;

for(i=0;i<4;i++)

for(j=i+1;j<5;j++)

if(strcmp(a[i],a[j])>0)

{

t=a[i];

a[i]=a[j];

a[j]=t;

}

for(i=0;i<5;i++)

puts(a[i]);

}

/*--------------------------------*/

voidsta1(int*a)

{intn=0;

for(inti=0;i<10;i++)

if(*(a+i)==1)n++;

printf("当前数字1总共出现%4d次\n",n);

}

voidsta2(int*a)

{intn=0;

for(inti=0;i<10;i++)

if(*(a+i)==2)n++;

printf("当前数字2总共出现%4d次\n",n);

}

voidsta3(int*a)

{intn=0;

for(inti=0;i<10;i++)

if(*(a+i)==3)n++;

printf("当前数字3总共出现%4d次\n",n);

}

voidsta4(int*a)

{intn=0;

for(inti=0;i<10;i++)

if(*(a+i)==4)n++;

printf("当前数字4总共出现%4d次\n",n);

}

voidsta5(int*a)

{intn=0;

for(inti=0;i<10;i++)

if(*(a+i)==5)n++;

printf("当前数字5总共出现%4d次\n",n);

}

voidexam52()

{

void(*sta[5])(int*a);

sta[0]=sta1;

sta[1]=sta2;

sta[2]=sta3;

sta[3]=sta4;

sta[4]=sta5;

intb[10];

printf("请输入整型数组中的元素:

\n");

for(inti=0;i<10;i++)

scanf("%d",&b[i]);

printf("请确认您要统计的元素:

\n");

fflush(stdin);

intj;

scanf("%d",&j);

switch(j)

{

case1:

sta[0](b);break;

case2:

sta[1](b);break;

case3:

sta[2](b);break;

case4:

sta[3](b);break;

case5:

sta[4](b);break;

default:

printf("error!

\n");break;

}

}

/*-----------------

voidexam8()

{

chara[5][80]={"China","America","Japan","Russa","Franch"};

inti,j;

chart[80];

for(i=0;i<4;i++)

for(j=i+1;j<5;j++)

if(strcmp(a[i],a[j])>0)

{

strcpy(t,a[i]);

strcpy(a[i],a[j]);

strcpy(a[j],t);

}

for(i=0;i<5;i++)

puts(a[i]);

}*/

/*----------*/

intdefine_()

{

externintk;

k=100;

returnk;

}

intb(intdefine_(),intcounter)

{intz;

z=define_();

return(z+counter);

}

voidexam51()

{

intc;

int(*p)();

p=define_;

printf("请输入一个数:

\n");

scanf("%d",&c);

printf("%d\n",b(*p,c));

}

voidadd()

{floati,j;printf("\n\t你要做的是加法,请出入操作数例如:

23!

\n\n");

scanf("%f%f",&i,&j);

if(i>0&&j>0&&(i+j)<0){printf("\n\t输入的数超标了!

\n\n");}

elseprintf("\n\t%5.1f+%5.1f=%5.1f!

\n",i,j,i+j);

}

voidsub()

{floati,j;printf("\n\t你要做的是减法,请出入操作数例如:

23!

\n\n");

scanf("%f%f",&i,&j);

printf("\n\t%5.1f-%5.1f=%5.1f!

\n",i,j,i-j);

}

voidmul()

{floati,j;printf("\n\t你要做的是乘法,请出入操作数例如:

23!

\n\n");

scanf("%f%f",&i,&j);

if(i>0&&j>0&&(i*j)<0){printf("\n\t输入的数超标了!

\n\n");}

elseprintf("\n\t%5.1f*%5.1f=%5.1f!

\n",i,j,i*j);

}

voiddiv()

{floati,j;printf("\n\t你要做的是除法,请出入操作数例如:

23!

\n\n");

scanf("%f%f",&i,&j);

if(fabs(j)<0.000001)

{printf("\n\t你要做的是除法,除数不能为0!

\n\n");}

elseprintf("\n\t%5.1f/%5.1f=%5.1f!

\n",i,j,i/j);

}

voidmod()

{floati,j;

loop:

printf("\n\t你要做的是求余,请出入操作数例如:

23!

\n\n");

scanf("%f%f",&i,&j);fflush(stdin);

if((fabs(i)-(int)i>0.000001)||(fabs(j)-(int)j>0.000001))

{printf("\n\t你要做的是求余,因为有小数部分,将强制转换(将四舍五入)!

\n\n");

printf("\n\t确认请按任意键,返回请输入'$'!

\n\n");

charg;

g=getchar();

fflush(stdin);

if(g=='$')gotoloop;}

if(fabs(i)-(int)i>0.5)i++;if(fabs(j)-(int)j>0.000001)j++;

printf("\n\t%d%%%d=%d!

\n",(int)i,(int)j,((int)i)%((int)j));

}

voidexam50()

{

system("color1a");

printf("\n\n\t\t阳哥计算器");

printf("\n\t\t*********\n");

printf("\t\t*123*\n");

printf("\t\t*456*\n");

printf("\t\t*789*\n");

printf("\t\t*0+-*\n");

printf("\t\t**/%%*\n");

printf("\t\t*********\n\n\n");

chara;

floati,j;

intff=1;

while(ff){

printf("\n\t请出入操作符:

+-*/%%!

\n\n");

a=getchar();

getchar();

switch(a)

{case'+':

add();break;

case'-':

sub();break;

case'*':

mul();break;

case'/':

div();break;

case'%':

mod();break;

default:

printf("error!

\n请正确的出入操作符:

+-*/%%!

\n");

}

fflush(stdin);

printf("\n退出程序请输入'#',继续请输入任意键!

");

a=getchar();

fflush(stdin);

if(a=='#')ff=0;

}

}

/*-------主函数----------*/

#include"stdio.h"

#include"1.h"

intk;

voidmain()

{

//exam38();

//exam40();

//exam41();

//exam42();

//exam43();

//exam44();

//exam46();

//exam47();

//exam48();

//exam52();

exam51();

//exam50();

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1