if(*p != 0) count++; if(count == m) {
no++;
printf(\*p = 0; count = 0; } p++;
if(p == num + n)
p = num; }
p = num;
while(*p == 0)
p++;
printf(\
}
5. 输入一个字符串,将该字符串中从第m 个字符开始的全部字符复制成另一个字符串。m由用户输入,值小于字符串的长度。要求编写一个函数mcopy(char *s, char *t, int m)来完成。 解答:
#include
char s[80], t[80]; int m;
void strmcpy(char *s,char *t, int m); gets(t);
scanf(\getchar();
if(strlen(t) < m)
printf(\else{
strmcpy(s, t, m); puts(s); }
}
void strmcpy(char *s, char *t, int m) {
t = t + m - 1; while(*t != '\\0') {
*s = *t; s++;
t++; }
*s = '\\0';
}
6. 输入一个字符串,再输入一个字符ch,将字符串中所有的ch 字符删除后输出该字符串。要求定义和调用函数delchar(s,c),该函数将字符串s 中出现的所有c 字符删除。 解答:
#include
char c;
char str[80];
void delchar(char *str, char c); gets(str);
scanf(\getchar(); delchar(str, c); printf(\puts(str); }
void delchar(char *str, char c) {
int i, j; i = j = 0;
while(str[i] != '\\0') {
if(str[i] != c) {
str[j] = str[i]; j++; } i++; }
str[j] = '\\0'; }
7. 输入5 个字符串,按由小到大的顺序输出。 解答:
#include
int i, j, index;
char sx[5][80], stemp[80]; for(i=0;i<5;i++)
scanf(\for(i=1; i<4; i++) {
index=i;
for(j=i+1;j<5;j++)
if (strcmp(sx[j],sx[index])<0)
index=j;
strcpy(stemp,sx[i]); strcpy(sx[i],sx[index]); strcpy(sx[index],stemp); }
printf(\for (i=0;i<5;i++)
puts(sx[i]); return 0;
}
8. 编程判断输入的一串字符是否为“回文”。所谓“回文”是指顺读和倒读都一样的字符串。如“XYZYX”和“xyzzyx”都是。 解答:
#include
char s[80];
int mirror(char *p); gets(s);
if(mirror(s) != 0)
printf(\else
printf(\
}
int mirror(char *p) {
char *q; q = p;
while(*q != '\\0')
q++; q--;
while(p < q) {
if(*p != *q)
return 0; p++; q--; }
return 1;
}
9. 输入一行文字,统计其中的大写字母、小写字母、空格、数字以及其他字符各有多少? 解答:
#include
char s[80]; char *p;
int blank, digit, lower, other, upper; gets(s);
upper = lower = blank = digit = other = 0; for(p = s; *p != '\\0'; p++)
if(*p >= 'A' && *p <= 'Z')
upper++;
else if(*p >= 'a' && *p <= 'z')
lower++;
else if(*p >= '0' && *p <= '9')
digit++; else if(*p == ' ')
blank++; else
other++;
printf(\other); }
10. 编写函数strcomp(s1, s2),实现两个字符串的比较,返回值分别为1、0、-1表示s1>s2, s1=s2,s1 int strcomp(char *s1,char *s2) { for (;*s1!=?\\0?;s1++,s2++) if (*s1!=*s2) break; if (*s1-*s2>0) return 1; else if (*s1-*s2<0) return -1; else return 0; } **11. 输入学生人数后输入每个学生的成绩,最后输出学生的平均成绩、最高成绩和最低成绩。要求使用动态内存分配来实现。 解答: # include int n, i; float *p, sum, max, min, avg; printf(\ scanf(\ /*为数组p 动态分配n 个浮点数float 类型大小的空间 */ if ((p=(float *)calloc(n, sizeof(float))) == NULL) { printf(\exit(1); } sum=0.0; max=-1; /*初始化 */ min=1000; printf(\提示输入n 个整数 */ for (i = 0; i < n; i++) { scanf(\sum=sum+*(p+i); if (min>*(p+i)) min=*(p+i); if (max<*(p+i)) max=*(p+i); } avg=sum/n; printf(\free(p); /* 释放动态分配的空间 */ return 0; } 3 实验指导教材参考答案 一、调试示例 利用指针指向2 个整型变量,并通过指针运算找出两个数中的最大值,输出到屏幕上。 (源程序error08_1.cpp) 源程序(有错误的程序) #include int max, x, y, *pmax, *px, *py; scanf(\ *px = &x; /* 分别对px、py 和pmax 三个指针进行赋值*/ 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库C语言程序设计及实验指导练习及习题参考答案(8--10)(3)在线全文阅读。
相关推荐: