
题目:
| 了解如何从命令行获取参数。从命令行获取参数后,按照相反的次序打印出来。 | exam45 |
| 了解利用指针处理字符串,实现strlen(char *s)函数,计算一个字符串中的字符个数。 | exam46 |
| 了解利用指针处理字符串,实现strcpy(char *s1, char *s2, int n)函数,把s2中的前n个字符拷贝到s1中。 | exam47 |
| 了解指针数组。用程序对China, America, Japan, Russa, Franch这5个字符串进行从小到大排序。 | exam48 |
| 了解函数指针。把第三章实践课的计算器软件中操作符所对应的函数,用函数指针来引用。 | exam49 |
| 了解函数指针。实现2个函数,calcA(char a, char b), calcB(int a, int b, int c)通过命令行获取第一个参数,如果是0,调用calcA对命令行输入的第二个字符和第三个字符进行求和,如果是0,调用calcB对命令行输入的第二个整数、第三个整数和第四个整数进行求和。 | exam50 |
| 了解函数指针作为函数参数。把指向函数的指针作为参数传递给一个函数,函数a设置一个全局变量k=100,函数b有2个参数,一个是指向函数的指针,一个int counter,函数b返回把k+counter的值。 | exam51 |
| 了解函数指针作为数组元素。从标准输入接收0-5中的一个数字,不同的数字调用不同的函数,每个函数都打印出当前的数字值和总共输入数字的次数。 | exam52 |
/*----------------exam45---------------*/
#include int main(int argc, char ** argv) { int i; for (i=0; i int j=0,n=0; char b[80]; while(argv[1][j]!='\\0') { n++; j++; } for(j=0;j b[n]='\\0'; printf("Argument is %s.\\n", b); return 0; } /*--------------------exam50------------------*/ #include "stdio.h" int calcA(char a,char b) {int z=(a+b);return(z);} int calcB(int a,int b,int c) {return(a+b+c);} int main(int argc, char ** argv) { int i,j=0,k1=0,k2=0,n=0; char c[100],b[2]; int a[3]; int v[80]={0}; int (*p)(char a,char b); int(*q)(int a,int b,int c); p=calcA; q=calcB; for (i=0; i for(i=1;i { v[i]++; j++; } for(i=1;i c[n++]=argv[i][j]; for(j=1;j if( c[j]>='0' && c[j]<='9') { if(k1<=2) a[k1++] = c[j]-'0'; } else if( 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\",i,a[i]); printf("\\n"); for(i=0;i<2;i++) printf("b[ %d ] is %c\",i,b[i]); printf("\\n"); if(c[0]=='0') printf("%d\\n",(*p)(b[0],b[1])); else printf("%d\\n",(*q)(a[0],a[1],a[2])); return 0; } /*------------头文件1.h--------------*/ void exam38(); void exam40(); void exam41(); void exam42(); void exam43(); void exam44(); void paixu(int a[10]);//排序函数 char *cmp(char a[80],char b[80]);//比较函数 char *cat(char a[80],char b[80]);//连接函数 void exam46(); int Strlen(char *s); char *Strcpy(char *s1, char *s2, int n); void exam47(); void exam48(); void exam52(); void sta1(int *a); void sta2(int *a); void sta3(int *a); void sta4(int *a); void sta5(int *a); int define_(); int b(int define_(),int counter); void exam51(); void add(); void sub(); void mul(); void div(); void mod(); void exam50(); #include"stdio.h" #include"string.h" #include"windows.h" #include"conio.h" #include"math.h" #include"1.h" /*--------------------------------*/ void exam38() { int i=32; int *p; printf("%d\%d\\n",&i,&p); p=&i; printf("%d\\n",p); printf("%d\%d\\n",i,*p); *p=100; printf("%d\%d\\n",i,*p); } /*--------------------------------*/ void paixu(int a[10]) { int temp; for(int i=0;i<9;i++) for(int j=0;j<9-i;j++) if(a[j] < a[j+1]) { temp = a[j] ; a[j] = a[j+1]; a[j+1] = temp; } } void exam40() { int a[10]={5,6,4,7,8,9,3,1,2,10}; paixu(a); int s=4; int *p; p=a+s; for(s=4;s<10;s++,p++) printf("%4d",*p); printf("\\n"); } /*----------------------------*/ void exam41() { float a=1,*p; p=&a; printf("%d\",p); char *c; c=(char *)1244968; short int *i; i=(short int *)1244968; printf("%d\%d\\\n",c,i); printf("%c\\n",*c); printf("%d\\n",*i); } /*---------------------------*/ char *cmp(char a[80],char b[80]) { char *p; if(strcmp(a,b)<0) { p=a; } else { p=b; } return p; } void exam42() { char a[80]={"gem "},b[80]={"welcome"}; char *q; q=cmp(a,b); puts(q); } /*------------------------------*/ char *cat(char a[80],char b[80]) { strcat(a,b); return a; } void exam43() { char a[80]={"gem "},b[80]={"welcome"}; char *q; q=cat(a,b); puts(q); } /*-------------------------*/ void exam44() { int i=65; int *p; int **q; p=&i; q=&p; printf("数据i的地址:%d \ 指针p所指向的地址:%d \ q指向指针p的地址 %d \\n",i,p,q); i+=1; printf("%d \ %d \ %d \\n",i,*p,**q); (*p)+=1; printf("%d \ %d \ %d \\n",i,*p,**q); (**q)+=1; printf("%d \ %d \ %d \\n",i,*p,**q); } /*-----------------------------*/ int Strlen(char *s) { int n=0; while(*s != '\\0') { n++; s++; } return n; } void exam46() { char a[80]; int i; gets(a); i=Strlen(a); printf("%d\\n",i); } /*----------------------------*/ char *Strcpy(char *s1, char *s2, int n) { char *p; for(int k=0;k s1[k] = *s2; s2++; } s1[k]='\\0'; p=s1; return p; } void exam47() { char *q; char a[80],b[80]; gets(a); gets(b); int n; printf("请确认将前几个字符拷贝到a中:\\n"); scanf("%d",&n); q=Strcpy(a,b,n); puts(q); } /*--------------------------------*/ void exam48() { char *a[5]={"China int i,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]); } /*--------------------------------*/ void sta1(int *a) { int n=0; for(int i=0;i<10;i++) if(*(a+i)==1) n++; printf("当前数字 1 总共出现 %4d 次\\n",n); } void sta2(int *a) { int n=0; for(int i=0;i<10;i++) if(*(a+i)==2) n++; printf("当前数字 2 总共出现 %4d 次\\n",n); } void sta3(int *a) { int n=0; for(int i=0;i<10;i++) if(*(a+i)==3) n++; printf("当前数字 3 总共出现 %4d 次\\n",n); } void sta4(int *a) { int n=0; for(int i=0;i<10;i++) if(*(a+i)==4) n++; printf("当前数字 4 总共出现 %4d 次\\n",n); } void sta5(int *a) { int n=0; for(int i=0;i<10;i++) if(*(a+i)==5) n++; printf("当前数字 5 总共出现 %4d 次\\n",n); } void exam52() { void (*sta[5])(int *a); sta[0]=sta1; sta[1]=sta2; sta[2]=sta3; sta[3]=sta4; sta[4]=sta5; int b[10]; printf("请输入整型数组中的元素:\\n"); for(int i=0;i<10;i++) scanf("%d",&b[i]); printf("请确认您要统计的元素:\\n"); fflush(stdin); int j; scanf("%d",&j); switch(j) { case 1:sta[0](b);break; case 2:sta[1](b);break; case 3:sta[2](b);break; case 4:sta[3](b);break; case 5:sta[4](b);break; default:printf("error!\\n");break; } } /*----------------- void exam8() { char a[5][80]={"China int i,j; char t[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]); }*/ /*----------*/ int define_() { extern int k; k=100; return k; } int b(int define_(),int counter) { int z; z=define_(); return (z+counter); } void exam51() { int c; int (*p)(); p=define_; printf("请输入一个数:\\n"); scanf("%d",&c); printf("%d\\n",b(*p,c)); } void add() {float i,j; printf("\\n\你要做的是加法,请出入操作数例如:2 3!\\n\\n"); scanf("%f %f",&i,&j); if( i>0 && j>0 &&(i+j)<0) {printf("\\n\输入的数超标了 !\\n\\n");} else printf("\\n\%5.1f + %5.1f = %5.1f!\\n",i,j,i+j); } void sub() {float i,j; printf("\\n\你要做的是减法,请出入操作数例如:2 3!\\n\\n"); scanf("%f %f",&i,&j); printf("\\n\%5.1f - %5.1f = %5.1f!\\n",i,j,i-j); } void mul() {float i,j; printf("\\n\你要做的是乘法,请出入操作数例如:2 3!\\n\\n"); scanf("%f %f",&i,&j); if( i>0 && j>0 &&(i*j)<0) {printf("\\n\输入的数超标了 !\\n\\n");} else printf("\\n\%5.1f * %5.1f = %5.1f!\\n",i,j,i*j); } void div() {float i,j; printf("\\n\你要做的是除法,请出入操作数例如:2 3!\\n\\n"); scanf("%f %f",&i,&j); if(fabs(j)<0.000001) {printf("\\n\你要做的是除法,除数不能为0!\\n\\n");} else printf("\\n\%5.1f / %5.1f = %5.1f!\\n",i,j,i/j); } void mod() {float i,j; loop:printf("\\n\你要做的是求余,请出入操作数例如:2 3!\\n\\n"); scanf("%f %f",&i,&j);fflush(stdin); if((fabs(i)-(int) i>0.000001)||(fabs(j)-(int) j>0.000001)) {printf("\\n\你要做的是求余,因为有小数部分,将强制转换(将四舍五入)!\\n\\n"); printf("\\n\确认请按任意键,返回请输入'$'!\\n\\n"); char g; g=getchar(); fflush(stdin); if(g=='$') goto loop;} if(fabs(i)-(int) i>0.5) i++;if(fabs(j)-(int) j>0.000001) j++; printf("\\n\%d %% %d = %d!\\n",(int )i,(int )j,((int) i)%((int) j)); } void exam50() { system("color 1a"); printf("\\n\\n\\阳哥计算器"); printf("\\n\\*********\\n"); printf("\\* 1 2 3 *\\n"); printf("\\* 4 5 6 *\\n"); printf("\\* 7 8 9 *\\n"); printf("\\* 0 + - *\\n"); printf("\\* * / %% *\\n"); printf("\\*********\\n\\n\\n"); char a; float i,j; int ff=1; while(ff){ printf("\\n\请出入操作符:+ - * / %% !\\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" int k; void main() { // exam38(); // exam40(); // exam41(); // exam42(); // exam43(); // exam44(); // exam46(); // exam47(); // exam48(); // exam52(); exam51(); // exam50(); }
