一、选择题
1~4 B C A D
5~8 C B A B
二、填空题
1、a 10 &maxskub &minsub *maxsub=i *minsub=i
2、i<*n-1 j<=i a[j+1] x
3、s p++ &s[n-1] p
4、q=p p>&str[0] *p=*(p-1)
5、cnt==3 k++ cnt=0
三、程序设计题
第1题
#include//习题8.1 拆分实数的整数与小数部分 void splitfloat(float x,int *intpart,float *fracpart) { *intpart=(int)x;//强制转换为整型 *fracpart=x-*intpart;//直接减去整数部分可得小数部分 } main(void) { float x,fracpart;//x=123.456,小数部分会输出为0.456001 int intpart;//x=345.89,小数部分为0.890015 printf("Enter x:"); scanf("%f",&x); splitfloat(x,&intpart,&fracpart); printf("整数部分:%dn小数部分:%lf",intpart,fracpart); return 0; }
第2题
#include//习题8.2 数组中查找指定元素 int search(int list[],int n,int x) { int i,flag=0,k; for(i=0;i 第3题
#include//习题8.3 循环后移 main() { int n,m,i,a[10],j,b[10]; printf("Enter n:"); scanf("%d",&n); printf("Enter m:"); scanf("%d",&m); printf("Enter %d numbers:",n); for(i=0;i 第4题
#include//习题60.4 #define N 20 main() { int n,i,m,k=1,j,p=0; int a[N]; printf("Enter n:"); scanf("%d",&n); printf("Enter m:"); scanf("%d",&m); for(i=0;i 第5题
#include//习题8.5 使用函数实现字符串复制 #include #define N 80 void strmcpy(char *s,char *t,int m)//题目要求从字符串中第m个字符开始复制,即m=下标+1 { // t=t+m;//指针指向下标为m的字符,从下标为m的字符开始复制 t=t+m-1;//t指向第m个字符 strcpy(s,t); *s=*s; } int main(void) { int m,i; char t[N],s[N]; gets(t); printf("Enter m(m>=1):"); scanf("%d",&m); strmcpy(s,t,m); printf("复制后的字符串为:");//原字符复制,m=1 puts(s); return 0; } 第6题
#include//习题8.6 删除字符 #include void delchar(char s[],char c) { int i,j=0; for(i=0;s[i]!=' ';i++)//遍历字符串 { if(s[i]!=c){//比较 s[j]=s[i];//不同则放在以j为下标的s数组中 ,直接改变了字符数组s。也可以放在字符数组t中,直接在自定义函数中输出 j++;//每放一个,下标加一 } } s[j]=' ';//加上字符串结束标志 } main() { char ch,s[80],t[80]; int i; gets(s); ch=getchar(); delchar(s,ch); printf("删除后:n"); puts(s); } 第7题
#include//习题8.7 #include int main(void) { char s[5][80],t[10];//定义二维数组,中间变量 int i,j,k; printf("输入5个字符串:"); for(i=0;i<5;i++) { scanf("%s",s[i]);//输入二维字符数组 ,或者用gets(s[i]);,需每行输入一个 } for(i=0;i<4;i++) { for(j=0;j<5-i;j++) { if(strcmp(s[j],s[j+1])>0)//比较,后面小于前面(>0),后面换到前面 { strcpy(t,s[j+1]); strcpy(s[j+1],s[j]);//交换 strcpy(s[j],t); } } } for(i=0;i<4;i++) { k=i; for(j=i+1;j<5;j++) { if(strcmp(s[j],s[k])<0)//比较,后面小于前面(>0),后面换到前面 { k=j;//s[j]小,则赋值 } } if(k!=i) { strcpy(t,s[k]); strcpy(s[k],s[i]);//交换 strcpy(s[i],t); } } printf("从小到大排序后:n"); for(i=0;i<5;i++) { puts(s[i]);//输出交换好的数组 } return 0; } 第8题
#include//习题8.8 判断回文 #include #define N 80 main() { int i,k,lenth; char s[N]; printf("输入一个字符串:"); scanf("%s",s); lenth=strlen(s); i=0; k=lenth-1; while(i =k) { printf("%s是回文。",s); } else { printf("%s不是回文。",s); } //两个不能同时用 { char ch,s[80],*p,*q; int i,j,n; printf("输入一个字符串:"); gets(s); p=s;//指向s ,空格也算字符,也归在字符串里 while(*p==' ') { p++;//计算S前的空格 } n=strlen(s);//有效长度,不包括' ' q=&s[n-1];//指向数组最后一个字符 while(*q==' ') { q--;//计算回车键前有多少个空格需消除 } while(p 第9题
#include//习题8.9 int main(void) { int A_count,a_count,blank,digit,other; char ch; A_count=a_count=blank=digit=other=0; while((ch=getchar())!='n'){ if(ch>='A'&&ch<='Z'){ A_count++; } else if(ch>='a'&&ch<='z'){ a_count++; } else if(ch==' '){ blank++; } else if(ch>='0'&&ch<='9'){ digit++; } else other++; } printf("A_count=%d,a_count=%d,blank=%d,digit=%d,other=%d",A_count,a_count,blank,digit,other); return 0; }



