5 6 7 8 9 10 11 12 【法一:使用列指针完成,双重循环】 #include \main()
{int a[3][4],i,j,k=1; int *p;
p= a[0] ; /*或 &a[0][0]*/ for(i=0;i<3;i++) for(j=0;j<4;j++)
*(p+_____ i*4+j ____)=k++; for(i=0;i<3;i++)
{for(j=0;j<4;j++) printf(\ printf(\}
【法二:使用列指针完成,单循环】 #include \main()
{int a[3][4],i,j=1; int *p;
for(i=0;i<12;i++) a[i/4][i%4]=j++; p=a[0];
for(i=0;i<3;i++)
{for(j=0;j<4;j++) printf(\i*4+j)); printf(\}
【法三:使用行指针完成】 #include \main()
{ int a[3][4] ,i, j, k=1; int (*q)[4] ; q=a;
for(i=0;i<3;i++) for(j=0;j<4;j++)
*(*(_q+i_) + _j_)=k++; for(i=0;i<3;i++)
{for(j=0;j<4;j++) printf(\q[i][j]__); /* 或 a[i][j] 或*(*(q+i)+j) */ printf(\}
3.任意读入5个字符串,用选择法降序排列后输出,并将最大串和最小串连接后输出。例如,读入: I
love you very much
则 输 出: you very much love I
合并后的串:youI 【程序如下,请填空:】 #include
{char s[N][20]; //假设每个串的串长都小于20 char h[40]=\
char *p[N]; //借助指针数组,可以只交换指向串的指针,不交换串本身 int i,j,k;
for(i=0;i for(i=0;i //以下用选择法排序 for(i=0;i<=N-2;i++) {k=i; for(j=i+1;j<=N-1;j++) if(strcmp(p[j],p[k])>0)k=j; if(k!=i) {char *t; t=p[i]; p[i]=p[k]; p[k]=t;} } puts(\降序排列后:\ for(i=0;i strcat(strcat(h,p[0]),p[N-1]); printf(\合并后的串:%s\\n\} 4.任意读入两个正整数,调用子函数求得二者的最大公约数和最小公倍数。 #include main() {int x,y,gys,gbs; void GYS_GBS(int a,int b,int *gy,int *gb); do scanf(\ while(x<=0||y<=0); GYS_GBS(x, y, &gys, &gbs); printf(\和%d的最大公约数是%d,最小公倍数是%d\\n\} void GYS_GBS(int a,int b,int *gy,int *gb) {int c,r; c=a*b; r=a%b; while( r!=0 ) {a=b; b=r; r=a%b; } *gy=b; *gb=c/b; } 二、编程题 任意读入一个大偶数(≥4),可以拆分成两个素数之和。编程按“x=s1+s2”的格式输出所有的素数对。 【要求:素数判断由子函数完成。并且结果不能出现两个相同的素数对,例如:输入28,则输出结果为: 28=5+23 28=11+17 若输出结果中还有“28=17+11”就重复了!】 #include