问题7_1
函数 f u n fun fun 的功能是:进行数字字符转换,若形参 c h ch ch 中是数字字符 ′ 0 ′ '0' ′0′ ~ ′ 9 ′ '9' ′9′ ,则将 ′ 0 ′ '0' ′0′ 转换成 ′ 8 ′ '8' ′8′ , ′ 2 ′ '2' ′2′ 转换成 ′ 7 ′ '7' ′7′ ,···, ′ 9 ′ '9' ′9′ 转换成 ′ 0 ′ '0' ′0′ ;若是其他字符则保持不变,并将转换后的结果作为函数值返回。
代码7_1
#include<stdio.h>
char fun(char ch){
if(ch>='0' && ch<='9'){
return '9'-(ch-'0');
}
return ch;
}
void main(void){
char c1, c2;
printf("\n The result:\n");
c1 = '2';
c2 = fun(c1);
printf("c1 = %c c2 = %c\n", c1, c2);
c1 = '8';
c2 = fun(c1);
printf("c1 = %c c2 = %c\n", c1, c2);
c1 = 'a';
c2 = fun(c1);
printf("c1 = %c c2 = %c\n", c1, c2);
}
结果7_1
问题7_2
函数
f
u
n
fun
fun的功能是:将
p
p
p 所指字符串中的所有字符复制到
b
b
b 中,要求复制三个字符之后插入一个空格。
例如,若给
a
a
a 输入字符串
:
A
B
C
D
E
F
G
H
I
J
K
:ABCDEFGHIJK
:ABCDEFGHIJK,调用函数后,字符数组
b
b
b 输入字符串
:
A
B
C
D
E
F
G
H
I
J
K
:ABC \ DEF \ GHI \ JK
:ABC DEF GHI JK 。
代码7_2
#include<stdio.h>
void fun(char* p, char* b){
int i, k=0;
while(*p){
i = 1;
while(i<=3 && *p){
b[k] = *p;
k++; p++; i++;
}
if(*p){
b[k] = ' '; k++;
}
b[k] = '\0';
}
}
void main(void){
char a[80], b[80];
printf("Enter a string:");
gets(a);
printf("The original string:");
puts(a);
fun(a, b);
printf("\nThe string after insert space:");
puts(b);
printf("\n\n");
}
结果7_2
问题7_3
N
N
N 名学生的成绩在主函数中放入一个带头结点的链表结构中,
h
h
h 指向链表的头结点。请编写函数
f
u
n
fun
fun,其功能是:求出平均分,并由函数值返回。
例如,学生的成绩是
:
85.5
,
76
,
69.5
,
85
,
91
,
72
,
64.5
,
87.5
:85.5, 76, 69.5,85, 91, 72, 64.5, 87.5
:85.5,76,69.5,85,91,72,64.5,87.5,则他的平均分应该为
78.875
78.875
78.875。
代码7_3
#include<stdio.h>
#include<stdlib.h>
#define N 8
struct slist{
double s;
struct slist* next;
};
typedef struct slist STREC;
double fun(STREC* h){
double av = 0.0;
STREC* p=h->next; /* p直接指向“头结点”的下一个结点,即第一个成绩*/
while(p!=NULL){
av = av+p->s; /* 求总分数 */
p = p->next;
}
return av/N; /* 返回平均值 */
}
STREC* creat(double* s){ // 创建链表
STREC *h, *p, *q;
int i = 0;
h = p = (STREC*)malloc(sizeof(STREC));
p->s = 0;
while(i<N){
q = (STREC*)malloc(sizeof(STREC));
q->s = s[i];
i++;
p->next = q;
p = q;
}
p->next = 0;
return h;
}
outlist(STREC* h){
STREC* p;
p = h->next;
printf("head");
do{
printf("->%4.lf", p->s);
p = p->next; /* 输出各成绩 */
}while(p!=NULL);
printf("\n\n");
}
void main(void){
double s[N] = {85, 76, 69, 85, 91, 72, 64, 87}, ave;
STREC* h;
h = creat(s);
outlist(h);
ave = fun(h);
printf("ave = %6.3f\n", ave);
}