1.num用来统计单词个数*/ char c; printf(\"please input a string :\\n\"); while ((c=getchar())!='\\n') if (c==' ') word=0; else if (word==0) {word=1; num++;} printf(\"There are %d words in the line\\n\} 8.#include \"stdio.h\" main() {int i,j,uppn,lown,dign,span,othn; /*uppn,lown,dign,span,othn分别存放英文大写字母、小写字母、数字、空格和其他字符的个数*/ char text[3][80]; uppn=lown=dign=span=othn=0; for(i=0;i<3;i++) {gets(text[i]); for(j=0;j<80&&text[i][j]!='\\0';j++) {if(text[i][j]>='A'&&text[i][j]<='Z') uppn++; * *else if(text[i][j]>='a'&&text[i][j]<='z') lown++; else if(text[i][j]>='0'&&text[i][j]<='9') dign++; else if(text[i][j]==' ') span++; else othn++; } } for(i=0;i<3;i++) printf(\"%s\\n\printf(\"uppn=%d\\n\printf(\"lown=%d\\n\printf(\"dign=%d\\n\printf(\"span=%d\\n\printf(\"othn=%d\\n\} 9.#include \"stdio.h\" main() {int i,j; char str1[20],str2[20]; * *
printf(\"input two strings:\\n\"); gets(str1); gets(str2); j=strlen(str1); /*求字符串1的长度*/ for (i=0;str2[i]!='\\0';i++,j++) /*字符串合并*/ str1[j]=str2[i]; str1[j]='\\0'; /*加上字符串结束标志*/ puts(str1); } 10.#include \"stdio.h\" main() {int i,n; char str1[20],str2[20]; printf(\"input two strings:(no more than 20 characters)\\n\"); gets(str1); gets(str2); n=strlen(str1)} 第六章 函数与编译预处理 一、单项选择题 1. C 2. B 3. B 4. B 5. A 6. B 7.A 8.C 9.D 10. A 二、写出下列程序的运行结果 1.9 2.4,B 8,B 3.-4.000000 4.a=6,b=5 5.48 三、编程题 1.main() { int prime(int n); int n; printf(\"input n(n>0):\\n\"); scanf(\"%d\if (prime(n)) printf(\"%d is a sushu\\n\else printf(\"%d is not a sushu\\n\} * *int prime(int n) {int flag=1,i; for (i=2;i<=n/2&&flag==1;i++) if (n%i==0) flag=0; return(flag); } 2. #define N 3 convert(int array[3][3]) { int i,j,t; for (i=0;ifor (j=0;j #include main() {char str[100]; printf(\"input a string:\\n\") ; gets(str); * *inverse(str); printf(\"the reversed string is:%s\\n\} inverse(char str[]) { char t; int i,j; for (i=0,j=strlen(str)-1;i concat(char str1[],char str2[]) { int i=0,j; while (str1[i]!='\\0') i++; for (j=0;str2[j]!='\\0';i++,j++) str1[i]=str2[j]; str1[i]='\\0'; * *} main() { char str1[100],str2[100]; gets(str1);gets(str2); concat(str1,str2); puts(str1); } 5. main() {char str[80]; printf(\"input a string (4 ge shu zi zi fu):\\n\"); scanf(\"%s\insert(str); printf(\"result is:\\n%s\\n\} insert(char str[]) { int i; for (i=strlen(str);i>0;i--) { str[2*i]=str[i]; str[2*i-1]=' '; * *
} } 6. #include \"stdio.h\" int i,ndight,nwhite,nletter,nother; count(char str[]) { ndight=nwhite=nletter=nother=0; for (i=0;str[i]!='\\0';i++) if (str[i]>='0'&&str[i]<='9') ndight++; else ((str[i]>='A'&&str[i]<='Z')||(str[i]>='a'&&str[i]<='z')) nletter++; else if (str[i]==' ') nwhite++; else nother++; } main() { char text[80]; printf(\"input a string:\\n\"); gets(text); if * *
count(text); printf(\"ndight=%d,nletter=%d,nwhite=%d,nother=%d\\n\} 7. #define N 10 #include sort(char str[]) {int i,j; char t; for (i=1;istr[j+1]) {t=str[j];str[j]=str[j+1] ;str[j+1]=t;} } main() { char str[N]; int i ; printf(\"Input 10 ge zi fu:\\n\"); gets(str); sort(str); printf(\"The sorted result:\\n\") ; * *for(i=0;i #include #define N 10 void input_e(int num[],char name[N][8]) {int i; for (i=0;ichar temp2[8]; for (i=0;ibott=N-1; if ((nnum[N-1])) find=-1; while ((find==0)&&(top<=bott)) {mid=(bott+top)/2; if (n==num[mid]) {find=1; printf(\"%d name is:%s\\n\else if (n{printf(\"please input chazhao de gonghao:\"); /*输入查找的工号*/ scanf(\"%d\search(number,num,name); printf(\"continue Y/N?\"); /*是否继续查找*/ getchar(); c=getchar(); if (c=='N'||c=='n') flag=0; } } 9. #include \"stdio.h\" #define MAX 10 main() { char str[MAX]; char c; int i; i=0; printf(\"input number(16 jinzhi): \"); /*输入一个十六进制的数*/ while((c=getchar())!='\\n'&&i{ str[i]=c; i++; } str[i]='\\0'; printf(\"result is :%d\\n\} int htod(char s[]) { int i,n; n=0; for(i=0;s[i]!='\\0';i++) {if (s[i]>='0'&&s[i]<='9') n=n*16+s[i]-'0'; if (s[i]>='a'&&s[i]<='f') n=n*16+s[i]-'a'+10; if (s[i]>='A'&&s[i]<='F') n=n*16+s[i]-'A'+10; } return(n); } 10. #define SWAP(a,b) t=a;a=b;b=t main() * *{ int a,b,t; printf(\"input a,b:\") ; scanf(\"%d,%d\SWAP(a,b); printf(\"result:a=%d,b=%d\\n\} 11. #define SURPLUS(a,b) ((a)%(b)) main() { int a,b; printf(\"input a,b:\"); scanf(\"%d,%d\printf(\"result is: %d\\n\} 12. main() { int a,b,c; printf(\"input a,b,c:\"); scanf(\"%d,%d,%d\printf(\"max=%d\\n\} * *
int max(int x,int y,int z) { int t; t=(x>y ? x : y); return(t>z?t:z); } #define MAX(x,y) ((x)>(y)?(x):(y)) main() { int a,b,c; printf(\"input a,b,c:\"); scanf(\"%d,%d,%d\printf(\"max=%d\\n\} 13. #include \"stdio.h\" #define CHANGE 1 #define MAX 80 main() { char str[MAX]; int i; printf(\"input a string:\\n\"); * *
gets(str); #if (CHANGE) { for (i=0;str[i]!='\\0';i++) if (str[i]>='a'&&str[i]<'z'||str[i]>='A'&&str[i]<'Z') str[i]=str[i]+1; else if (str[i]=='z'||str[i]=='Z') str[i]=str[i]-25; } #endif printf(\"%s\\n\} 第七章 指针 一、选择题 1)A 2)D 3)D 4)C 5)B 6)B 7)B 8)C 9)B 10)C 11)A 12)A 13)A 14)C 15)B 16)A 17)C 18)B 19)D 20)B 二、阅读下面程序,写出程序运行结果 1)abcdeedcba 2)1113151719 3)(TurboC中是11,9 7,11 ) (VisualC是9,9 7,11) 4)3 6 5)6385 * *
三、编程题 1、main( ) { int a[10],i,temp,*p=a; printf(\"Please input array a:\\n\"); for(i=0;i<10;i++) scanf(\"%d\printf(\"array a:\\n\"); for(i=0;i<10;i++) printf(\"%4d\for(i=0;i<5;i++) { temp=p[i]; p[i]=p[10-i-1]; p[10-i-1]=temp; } printf(\"\\n Now array a:\\n\"); for(i=0;i<10;i++) printf(\"%4d\} 2、main( ) { int a[3][3],*p,i,j; printf(\"please input matrix:\\n\"); for(i=0;i<3;i++) * *
for(j=0;j<3;j++) scanf(\"%d\p=&a[0][0]; move(p); printf(\"\\n Now matrix:\\n\"); for(i=0;i<3;i++) { for(j=0;j<3;j++) printf(\"%4d\printf(\"\\n\"); } } move(int *q) { int i,j,t; for(i=0;i<3;i++) for(j=i;j<3;j++) { t=*(q+3*i+j); *(q+3*i+j)=*(q+3*j+i); *(q+3*j+i)=t; } } 3、#include #include * *#include #include main( ) { int binary(); void insert(); char *temp,*ptr1[6]={\"BASIC\\int i; ptr1[5]=malloc(20); printf(\"\\n\"); printf(\"original string:\\n\"); for(i=0;i<5;i++) printf(\"%s\\n\printf(\"input search string:\\n\"); temp=malloc(20); gets(temp); i=binary(ptr1,temp,5); printf(\"i=%d\\n\insert(ptr1,temp,5,i); printf(\"output strings:\\n\"); * *for(i=0;i<6;i++) printf(\"%s\\n\} int binary(char *ptr[],char *str,int n) {int hig,low,mid; low=0; hig=n-1; if(strcmp(str,ptr[0])<0) return(0); if(strcmp(str,ptr[hig])>0) return(n); while(low<=hig) { mid=(low+hig)/2; if(strcmp(str,ptr[mid])<0) hig=mid-1; else if(strcmp(str,ptr[mid])>0) low=mid+1; else return(mid); } return(low); } void insert(char *ptr[],char *str,int n,int i) { * *
int j; for(j=n;j>i;j--) strcpy(ptr[j],ptr[j-1]); strcpy(ptr[i],str); } 4、main( ) { int i; char *p[6],str[6][20]; for(i=0;i<6;i++) p[i]=str[i]; printf(\"Input 6 strings:\\n\"); for(i=0;i<6;i++) scanf(\"%s\sort(p); printf(\"Now the strings:\\n\"); for(i=0;i<6;i++) printf(\"%s\\n\} sort(char *q[ ]) { int i,j; char *t; for(i=0;i<5;i++) * *
for(j=0;j<5-i;j++) if(strcmp(*(q+j),*(q+j+1))>0) { t=*(q+j); *(q+j)=*(q+j+1); *(q+j+1)=t; } } 5、main( ) { int m; char str1[20],str2[20],*p1,*p2; printf(\"please input two strings:\\n\"); scanf(\"%s\scanf(\"%s\p1=str1; p2=str2; m=stringcmp(p1,p2); printf(\"result is %d:\\n\} stringcmp(char *p1,char *p2) { int i=0; while(*(p1+i)==*(p2+i)) if(*(p1+(i++))=='\\0') return(0); * *
return((*p1+i)-*(p2+i)); } 6、main( ) { char str1[30],str2[30],str3[100]; int i=0,j=0,k=0; printf(\"please input two strings:\\n\"); scanf(\"%s\scanf(\"%s\while(str1[i]!='\\0' && str2[j]!='\\0') { str3[k++]=str1[i++]; str3[k++]=str2[j++]; } while(str1[i]!='\\0') str3[k++]=str1[i++]; while(str2[j]!='\\0') str3[k++]=str2[j++]; str3[k]='\\0'; printf(\"\\n%s\\n\} 第八章 结构体 一、选择题 1、C 2、B 3、C 4、D 5、* *
B 6、A 7、D 8、C 9、C 10、B 二、填空题 1、34 2、0 3、51 4、10,x 5、364041 三、编程题 1、 struct complex { float x; /*实部*/ float y; /*虚部*/ } main() { struct complex c1={5,3},c2={2,6}; float t1,t2; t1=c1.x*c2.x - c1.y*c2.y; t2=c1.x*2.y + c1.y*c2.x; printf(“The two complexs product is:”); printf(“%.2f%+.2f i\\n”,t1,t2); } * *
2. struct student { char name[10]; /*姓名*/ int number; /*学号*/ float x; /*成绩*/ float y; /*成绩*/ } main( ) { struct student s[45]; int i; void max(); void average(); void sort(); for (i=0;i<45;i++) scanf(“%s%d%f%d”,s[i].name,&s[i].number,&s[i].x,&s[i].y); /*输入学生的姓名、学号、两门课程成绩*/ max(s,45); average(s,45); sort(s,45); } * *
void max(struct student *a,int n) { float temp; char na[10]; int i ,num; temp=a[0].x+a[0].y; for (i=1;i{ s1+=b[i].x; s2+=b[i].y; } aver1=s1/45; aver2=s2/45; for(i=0;i<45;i++) if(b[i].xk=j; if(k!=i) { temp=c[i]; c[i]=c[k]; c[k]=temp; } for(i=0;ip1=( Part * ) malloc (sizeof(struct Ljian)); /*创建第一个结点*/ scanf(“%d%d”,&p1->pname,&p1->wnum); p1->next=NULL; while(n<=10) /*将结点加入链表*/ { if(n==1) head=p1; /*是第一个结点,作表头*/ else p2->next=p1; /*不是第一个结点,作表尾*/ p2=p1; p1=( Part *) malloc(sizeof(struct Ljian)); /*开辟下一个结点*/ scanf(“%d%d”,&p1->pname,&p1->wnum); p1->next=NULL; n++; } } 4. #include #include #include * *#define LEN sizeof(struct student) typedef struct student { long num; /*学号*/ float score; /*成绩*/ struct student *next; } STU; /*用户自定义学生结构体类型*/ STU *Create ( ) /*创建链表* / { int n=0; STU *p1,*p2,*head; head=NULL; p1=(STU *)malloc(LEN); /*创建第一个结点*/ scanf(\"%ld,%f\p1->next=NULL; while(p1->num!=0) /*将结点加入链表*/ { ++n; if(n==1) /*是第一个结点,作表头*/ head=p1; else /*不是第一个结点,作表尾*/ p2->next=p1; p2=p1; * *
p1=(STU *)malloc(LEN); /*开辟下一个结点*/ scanf(\"%ld,%f\p1->next=NULL; } free(p1); /*释放最后一个结点所占的内存*/ return (head); /*返回链表的头指针*/ } void print(STU *head) /*输出链表* / { STU *p; p=head; do { printf(\"%ld\%5.1f\\n\p=p->next; }while(p!=NULL); } STU *merge(STU *p1,STU *p2) /*合并链表* / { STU *p,*head , *s1,*s2; * *
s1=p1; s2=p2; while(s1->next!=NULL) s1=s1->next;/*将指针s1指向链表1的最后一个节点*/ while(s2->next!=NULL) s2=s2->next;/*将指针s2指向链表2的最后一个节点*/ if(s1->numnum) { s1->next=p2; head=p1; }/*因为两个链表都是按学号升序排列,如果链表1的最后一个节点中的学号小于链表2的第一个节点中的学号,则直接将链表2插入到链表1的后面*/ else if(s2->numnum) { s2->next=p1; head=p2; }/*如果链表2的最后一个节点中的学号小于链表1的第一个节点中的学号,则直接将链表1插入到链表2的后面*/ else * *{ if(p1->numnum) /*确定两个链表的顺序* / { head=p=p1;p1=p1->next;} else { head=p=p2;p2=p2->next;} while(p1!=NULL && p2!=NULL) if(p1->numnum) { p->next=p1; p=p1; p1=p1->next; } else { p->next=p2; p=p2; p2=p2->next; } if(p1!=NULL) p->next=p1;/*如果链表2的节点插入完,则将链表1* *直接插到后面*/ else p->next=p2; /*如果链表1的节点插入完,则将链表2直接插到后面*/ } return head; } ***注:红字部分仅仅是对程序的改进,删掉也不影响程序的功能和运行**** void main() { STU *listA,* listB,*head; printf(\"Please input first link listA information:\\n\"); listA =Create ( ); print(listA); printf(\"\\nPlease information:\\n\"); listB =Create ( ) ; print(listB); printf(\"\\nThe merged link is:\\n\"); head=merge(listA, listB); print(head); input second link listB * *
getch( ); /*为便于观察结果,等待键入任意键*/ }