6-1 计算两数的和与差
本题要求实现一个计算输入的两数的和与差的简单函数。
void sum_diff( float op1, float op2, float *psum, float *pdiff );
其中op1
和op2
是输入的两个实数,*psum
和*pdiff
是计算得出的和与差。
#include
4 6
The sum is 10.00
The diff is -2.00
void sum_diff( float op1, float op2, float *psum, float *pdiff ){
*psum=op1+op2;*pdiff=op1-op2;
}
6-2 移动字母
本题要求编写函数,将输入字符串的前3个字符移到最后。
void Shift( char s[] );
其中char s[]
是用户传入的字符串,题目保证其长度不小于3;函数Shift
须将按照要求变换后的字符串仍然存在s[]
里。
#include
abcdef
defabc
void Shift( char s[] ){
char a=s[0],b=s[1],c=s[2];int j=0;
for(int i=3;s[i]!='\0';i++)
s[j++]=s[i];
s[j++]=a;s[j++]=b;s[j++]=c;
}
6-3 拆分实数的整数与小数部分
本题要求实现一个拆分实数的整数与小数部分的简单函数。
void splitfloat( float x, int *intpart, float *fracpart );
其中x
是被拆分的实数(0≤x
<10000),*intpart
和*fracpart
分别是将实数x拆分出来的整数部分与小数部分。
#include
2.718
The integer part is 2
The fractional part is 0.718
void splitfloat( float x, int *intpart, float *fracpart ){
*intpart=x;*fracpart=x-*intpart;
}
6-4 使用函数实现字符串部分复制
本题要求编写函数,将输入字符串t中从第m个字符开始的全部字符复制到字符串s中。
void strmcpy( char *t, int m, char *s );
函数strmcpy
将输入字符串char *t
中从第m
个字符开始的全部字符复制到字符串char *s
中。若m
超过输入字符串的长度,则结果字符串应为空串。
#include
7
happy new year
new year
void strmcpy( char *t, int m, char *s ){
t=t+m-1;
while(*t!='\0')
{
*s=*t;
s++;
t++;
}
*s='\0';
}
6-7 利用指针找最大值
本题要求实现一个简单函数,找出两个数中的最大值。
void findmax( int *px, int *py, int *pmax );
其中px
和py
是用户传入的两个整数的指针。函数findmax
应找出两个指针所指向的整数中的最大值,存放在pmax
指向的位置。
#include
3 5
5
void findmax( int *px, int *py, int *pmax ){
if(*px>*py)*pmax=*px;
else *pmax=*py;
}
6-9 两整数排序(升序)
请编写函数,对两个整数按升序排序。
void IntSortAsc(int *x, int *y);
说明:参数 x 和 y 为指示两个整型变量的指针,函数值对这两个变量进行排序,使 x 和 y 所指变量的值按由小到大的顺序排列。
#include
27 -15
-15 27
要求:调用前面作业中的 IntSwap 函数交换两个整数的值。
void IntSortAsc(int *x, int *y){
if(*x>*y)IntSwap(x,y);
}
6-10 交换实数
请编写函数,交换两个实数的值。
void RealSwap(double *x, double *y);
说明:参数 x 和 y 为指向两个实型变量的指针,函数交换两个指针所指的实型变量的值。
#include
3.6 4.9
4.9 3.6
相关习题:实数零的校正;判断相等、不等、大于、小于、大于等于、小于等于;舍入、截断等。
void RealSwap(double *x, double *y){
double t;
t=*x;
*x=*y;
*y=t;
}
6-11 求一组数中的平均值及最大值
本题要求实现一个函数,求一组数的平均值、最大值。
float Fun( int *p, int n,int *max);
其中 p、n、max 都是用户传入的参数。函数求数组中n个元素的平均值、最大值。最大值通过max带回,函数返回平均值 。
#include
在这里给出一组输入。例如:
45 60 78 90 55
在这里给出相应的输出。例如:
max=90,average=65.60
float Fun( int *p, int n,int *max){
double s=0;
*max=0;
for(int i=0;i*max)*max=p[i];
s+=p[i];
}
s/=n;
return s;
}
6-12 指针做参数: 求两数的和、积、平均值。
本题求两整数的和、积、平均值。要求用原型是 void fun(int x, int y, int *p, int *q,float *s) 的函数来实现。
void fun(int x, int y, int *p, int *q,float *s) ;
其中x和y是需要计算的两个数,p、 q、s指向的变量保存计算结果。
在这里给出函数被调用进行测试的例子。例如: #include
31 2
33,62,16.5
void fun(int x, int y, int *p, int *q,float *s) {
*p=x+y;*q=x*y;*s=(x+y)*1.0/2;
}
6-10 求一组数最小值及其位置
本题要求实现一个函数,求一组数最小值及其第一次出现的位置。
int Min(int *p, int n,int *pos );
其中 p、n、pos 都是用户传入的参数。函数求数组中n个元素的最小值及其第一次出现的位置。位置通过 pos带回,函数返回最小值 。
#include
在这里给出一组输入。例如:
90 60 78 40 55
在这里给出相应的输出。例如:
min=40,min_pos=3
int Min(int *p, int n,int *pos ){
int x=p[0];*pos=0;
for(int i=0;i
6-11 用指针将数组中的元素逆序存放
用指针将数组中的元素逆序存放。
void inv(int *x,int n);
其中 x
和 n
是用户传入的参数。函数将指针 x
所指数组中的n
个元素逆序存放。
#include
The original array:
3 7 9 11 0 6 7 5 4 2
The array has been inverted:
2 4 5 7 6 0 11 9 7 3
void inv(int *x,int n){
int i=0,j=n-1;
while(i<=j){
int t=x[i];
x[i]=x[j];
x[j]=t;
i++;j--;
}
}
6-12 求两数平方根之和
函数fun的功能是:求两数平方根之和,作为函数值返回。例如:输入12和20,输出结果是:y = 7.936238。
double fun (double *a, double *b);
其中 a
和 b
是用户传入的参数。函数求 a
指针和 b
指针所指的两个数的平方根之和,并返回和。
#include
12 20
y=7.94
double fun (double *a, double *b){
return sqrt(*a)+sqrt(*b);
}
6-13 将字符串中数字字符替换成#
函数fun的功能是将字符串中每一个数字字符都替换成一个#字符。
void fun(char *s);
其中 s
是用户传入的参数。函数将指针 s
所指的字符串中每一个数字字符都替换成一个#字符。
#include
A1B23CD
the result: A#B##CD
void fun(char *s){
for(int i=0;s[i]!='\0';i++){
if(s[i]>='0'&&s[i]<='9')s[i]='#';
}
}
6-14 判断回文
如果一串字符从左至右读和从右至左读相同,那么这串字符就是回文(Palindrome)。例如,ABCBA是回文,而ABCD则不是。本题要求编写一个判断字符串是否为回文的函数,并且通过函数参数获取字符串的中间字符(如果中间是两个字符,则获取靠左的那一个,例如字符串是ABCDEF,则中间字符是C)。题目保证输入的字符串长度在1至2000之间且不含空格、换行等分隔符。
int isPalindrome(const char* str, char* pch);
其中 str
和 pch
都是用户传入的参数。 str
是字符串的首地址; pch
是传入的要存放字符串中间字符的变量的地址。如果字符串是回文,函数须返1,否则返回0。
/* 测试程序仅为示例,实际的测试程序可能不同 */ #include
ABCDACBC
不是回文!中间字符是D
int isPalindrome(const char* str, char* pch){
int n,i,j;
n=strlen(str);i=0;j=n-1;
if(n==1){*pch=str[0];return 1;}
else{
if(n%2==0)*pch=str[n/2-1];
else *pch=str[n/2];
while(1){
if(str[i++]!=str[j--])return 0;
if(j>i)return 1;
}
}
}
6-15 查找星期
本题要求实现函数,可以根据下表查找到星期,返回对应的序号。
序号 | 星期 |
---|---|
0 | Sunday |
1 | Monday |
2 | Tuesday |
3 | Wednesday |
4 | Thursday |
5 | Friday |
6 | Saturday |
int getindex( char *s );
函数getindex
应返回字符串s
序号。如果传入的参数s
不是一个代表星期的字符串,则返回-1。
#include
Tuesday
2
today
wrong input!
int getindex( char *s ){
char *a[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
int i;
for(i=0;i<7;i++){
if(strcmp(s,a[i])==0){
return i;
}
}
return -1;
}
6-16 删除字符串中数字字符
删除一个字符串中的所有数字字符。
void delnum(char *s);
其中 s
是用户传入的参数。 函数的功能是删除指针 s
所指的字符串中的所有数字字符。
#include "stdio.h" void delnum(char *s); int main () { char item[80]; gets(item); delnum(item); printf("%s\n",item); return 0; } /* 请在这里填写答案 */
a0bc+d496df
abc+ddf
void delnum(char *s){
int j=0;
for(int i=0;s[i]!='\0';i++){
if(s[i]>'9'||s[i]<'0')s[j++]=s[i];
}s[j]='\0';
}
6-17 在数组中查找指定元素
本题要求实现一个在数组中查找指定元素的简单函数。
int search( int list[], int n, int x );
其中list[]
是用户传入的数组;n
(≥0)是list[]
中元素的个数;x
是待查找的元素。如果找到
则函数search
返回相应元素的最小下标(下标从0开始),否则返回−1。
#include
5
1 2 2 5 4
2
index = 1
5
1 2 2 5 4
0
Not found
int search( int list[], int n, int x ){
int y=-1;
for(int i=0;i
6-18 求n×n方阵四边元素之和
给定一个n×n的方阵(1⩽n⩽10),本题要求计算该方阵四个边上元素之和。
编写函数按照题意计算元素之和。
int sumMatrix(int (*a)[N],int n);
指针a
指向了一个10×10的方阵,n
为a指向的矩阵的阶数
#include
在第一行给出方阵的阶数n,随后给出n行数,每行n个数,表示方阵中的元素。
输出求和结果
10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
198
int sumMatrix(int (*a)[N],int n){
int s=0;
for(int i=0;i
6-19 填充矩阵
编写程序填充方阵。其规则是一个n×n方阵,副对角线填1,右下三角填2,左上三角填3。通过行指针实现
void tian(int (*p)[n]) ;
其中 p
是用户传入的参数。 函数通过行指针 p
填充方阵,其规则是一个n×n方阵,副对角线填1,右下三角填2,左上三角填3。
#include
3 3 3 1
3 3 1 2
3 1 2 2
1 2 2 2
void tian(int (*p)[n]){
for(int i=0;in-1)p[i][j]=2;
else p[i][j]=3;
}
}
}
6-20 冒泡排序
输入n(1<=n<=10)个整数,将它们从小到大排序后输出,要求编写函数bubble()实现冒泡排序算法。
void bubble (int a[ ], int n);
其中 a为数组,n为数据个数。
#include
8
7 3 66 3 -5 22 -77 2
-77 -5 2 3 3 7 22 66
void bubble (int a[ ], int n){
for(int i=0;ia[j+1]){
int t=a[j+1];
a[j+1]=a[j];
a[j]=t;
}
}
}
}
6-21 指向二维数组的指针
本题要求实现:找出任意的一个m×n矩阵每一行上的最大值并按样例格式要求显示。其中:m、n满足(2<=m<=20、2<=n<=20)及矩阵元素从键盘输入。
void max_row(int (*arr)[20], int m, int n);
max_row函数输出矩阵各行的最大值,其中m,n为欲处理矩阵的行、列值,
#include
在这里给出一组输入。例如:
5 6
31 42 36 74 235 88
144 32 57 37 43 47
97 51 257 7 445 459
33 65 44 3 425 43
68 342 82 789 123 213
The max in line 1 is:235
The max in line 2 is:144
The max in line 3 is:459
The max in line 4 is:425
The max in line 5 is:789
void max_row(int (*arr)[20], int m, int n){
for(int i=0;imax)max=arr[i][j];
}
printf("The max in line %d is:%d\n",i+1,max);
}
}