1. 用指针编程实现3X4的二维数组的元素读入以及求此二维数组的最大值及最大值下标 请用以下函数实现: void Input(int *p,int m, int n); /*数组元素读入函数*/ int FindMax(int *p, int m, int n, int *pRow, int *pCol); /*求最大值及下标函数*/ 若存在若干个相同最大元素,则按照第一次出现的最大值的下标输出。 ***输入提示信息:"Please input your data:\n" ***输入格式要求:无格式要求 ***输出格式要求:"The maximum is %d, which is in row %d, colum %d\n" 样例: Please input your data: **输入样例: 3 5 2 7 1 6 12 11 4 10 8 9 **输出样例: The maximum is 12, which is in row 1, colum 2
#include <stdio.h>
#define ROW 3
#define COLUMN 4
void Input(int (*p)[4], int m, int n); // (*p)[4]: 指针p指向包含4元素的数组
int FindMax(int (*p)[4], int m, int n, int *pRow, int *pCol);
int main (void)
{
int score[ROW][COLUMN];
int row = 0, col = 0;
int maxScore = 0;
printf("Please input your data:\n");
Input (score, ROW, COLUMN);
maxScore = FindMax (score, ROW, COLUMN, &row, &col);
printf ("The maximum is %d, which is in row %d, colum %d\n", maxScore, row, col);
return 0;
}
void
Input (int (*p)[4], int m, int n)
{
int i, j;
for (i = 0; i < m; i ++)
{
for (j = 0; j < n; j ++)
{
scanf ("%d", p[i] + j);
}
}
}
int
FindMax (int (*p)[4], int m, int n, int *pRow, int *pCol )
{
int i, j;
int max = *(p[0]); // p[0][0]
*pRow = 0;
*pCol = 0;
for (i = 0; i < m; i ++)
{
for (j = 0; j < n; j ++)
{
if (*(p[i] + j) > max) // p[i][j]
{
max = *(p[i] + j);
*pRow = i;
*pCol = j;
}
}
}
return max;
}
2.
输入3个数x,y,z,按从小到大顺序排序后输出。 要求:利用指针方法实现两数互换,函数原型为:void swap(int *p1,int *p2); 输入提示:printf("please input 3 number x,y,z"); 输出格式:printf("the sorted numbers are:%d,%d,%d\n", );
#include <stdio.h>
void swap (int *p1, int *p2);
int main (void)
{
int x, y, z;
printf("please input 3 number x,y,z");
scanf ("%d,%d,%d", &x, &y, &z);
while (1)
{
if (x > y)
{
swap (&x, &y);
}
if (y > z)
{
swap (&y, &z);
}
if (x < y && y < z)
{
break;
}
}
printf("the sorted numbers are:%d,%d,%d\n", x, y, z);
return 0;
}
void
swap (int *p1, int *p2)
{
int tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}
3.
输入一个整形数,然后按汉语的习惯,将其读出来并输出。如1052,读作:一千零五十二。 输入样例: 1052 输出样例: 一千零五十二
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const char chinese[10][4] = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
const char places[5][4] = {"十", "百", "千", "万", "亿"};
int iCount = 0;
int nlen;
void ChinaPrint (char *num);
int main (void)
{
char num[11];
gets (num);
nlen = strlen (num);
ChinaPrint (num);
return 0;
}
void
ChinaPrint (char *num)
{
int len = strlen (num);
if (len == 0)
{
return;
}
switch (num[0])
{
case '0':
if (num[1] != '0' && len > 1)
{
printf ("%s", chinese[0]);
}
break;
case '1':
if (len != 2 && len != 6)
{
printf ("%s", chinese[1]);
}
else if (*(num - 1) != '0)
{
printf ("%s", chinese[1]);
}
break;
case '2':
printf("%s", chinese[2]);
break;
case '3':
printf("%s", chinese[3]);
break;
case '4':
printf("%s", chinese[4]);
break;
case '5':
printf("%s", chinese[5]);
break;
case '6':
printf("%s", chinese[6]);
break;
case '7':
printf("%s", chinese[7]);
break;
case '8':
printf("%s", chinese[8]);
break;
case '9':
printf("%s", chinese[9]);
break;
default:
return;
}
switch (len)
{
case 9:
printf("%s", places[4]);
break;
case 8:
if (num[0] != '0')
printf("%s", places[2]);
break;
case 7:
if (num[0] != '0')
printf("%s", places[1]);
break;
case 6:
if (num[0] != '0')
printf("%s", places[0]);
break;
case 5:
break;
case 4:
if (num[0] != '0')
printf("%s", places[2]);
break;
case 3:
if (num[0] != '0')
printf("%s", places[1]);
break;
case 2:
if (num[0] != '0')
printf("%s", places[0]);
break;
case 1:
break;
default:
return;
}
iCount ++;
if(nlen - iCount == 5 && nlen > 4)
{
printf("%s", places[3]);
}
ChinaPrint (++ num);
}