C语言经典例题100(87~100)
八十七、回答结果(结构体变量传递)
输出依然为3,a。函数f传递的是变量a的一个副本复制。
#include "stdio.h" struct student { int x; char c; } a; main() {a.x=3; a.c='a'; f(a); printf("%d,%c",a.x,a.c); } f(struct student b) { b.x=20; b.c='y'; }
八十九、某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
#include<stdio.h> //先设计一个判断数字是否为4位的函数 int Judge_Num(unsigned int a) { int n=a/1000; if((n>=1)&&(n<=9)) return 1; else return 0; } //编码函数 unsigned int Code_Num(unsigned int a) { unsigned int b[4],m=a; int i; for(i=0;i<4;i++) { b[i]=m%10; b[i]=(b[i]+5)%10; m=(m-m%10)/10; } return b[3]+b[2]*10+b[1]*100+b[0]*1000; } int main() { unsigned x,y; unsigned int Code_Num(unsigned int a); printf("请输入一个四位数\n"); scanf("%d",&x); if(Judge_Num(x)) { y=Code_Num(x); printf("原数为%d,加密后为%d。\n",x,y); } else { printf("原数为%d,位数不为4。\n",x); } getch(); return 0; }
九十、读结果。
54321
#include "stdio.h" #define M 5 main() {int a[M]={1,2,3,4,5}; int i,j,t; i=0;j=M-1; while(i<j) {t=*(a+i); *(a+i)=*(a+j); *(a+j)=t; i++;j--; } for(i=0;i<m;i++) printf("%d",*(a+i)); }
九十六、计算字符串中子串出现的次数。
#include<stdio.h> #include<string.h> int main() { char str[]="i a m xyz amtys 1280i a m!OPi a m**"; char str1[]="i a m "; int i,j,k; int len=strlen(str); int len1=strlen(str1); i=j=k=0; while(i<len) { if(str[i]!=str1[j]) { i++; continue; } else { for(j=0;j<len1;i++,j++) { if(str[i]==str1[j]) continue; else break; } if(j==len1) { j=0; k++; } } } printf("出现次数为%d.\n",k); getch(); return 0; }
九十七、从键盘输入一些字符,逐个把它们送到磁盘上去,直到输入一个#为止。
#include<stdio.h> #include<stdlib.h> int main() { char c; FILE *fp; fp=fopen("ex97.txt","wb"); if(fp==NULL) { printf("File Open Error!\n"); exit(1); } printf("please input a string ending by '#'.\n"); while((c=getchar())!='#') putc(c,fp); fclose(fp); return 0; }
九十八、从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件“test”中保存。输入的字符串以!结束。
#include<stdio.h> #include<stdlib.h> int main() { char str[1000]; FILE *fp; int i=0; printf("input a string.\n"); gets(str); while(str[i]!='\0') { if((str[i]>='A')&&(str[i]<='Z')) str[i]+=32; i++; } puts(str); fp=fopen("test.txt","w"); if(fp==NULL) printf("File Open Error!\n"); else { fputs(str,fp); fclose(fp); } getch(); return 0; }
九十九、有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列), 输出到一个新文件C中。
#include<stdio.h> #include<stdlib.h> #include<string.h> //字符串按字母顺序排列 void sort_char(char *s1) { int len=strlen(s1); int i,j; char c; for(i=0;i<len-1;i++) for(j=i+1;j<=len-1;j++) { if(s1[i]<s1[j]) { c=s1[j]; s1[j]=s1[i]; s1[i]=c; } } } int main() { char sa[200],sb[200]; FILE *fpa,*fpb,*fpc; int i=0; void sort_char(char *s1); fpa=fopen("a.txt","rb"); fpb=fopen("b.txt","rb"); fpc=fopen("c.txt","w"); if(fpa==NULL) { printf("File A Open Error!\n"); exit(1); } if(fpb==NULL) { printf("File B Open Error!\n"); exit(1); } if(fpc==NULL) { printf("File C Open Error!\n"); exit(1); } fgets(sa,200,fpa); fgets(sb,200,fpb); strcat(sa,sb); sort_char(sa); puts(sa); fputs(sa,fpc); getch(); return 0; }
一百、有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,把原有的数据和计算出的平均分数存放在磁盘文件"stud"中。
#include<stdio.h> #include<string.h> #include<stdlib.h> #define MAX_Size 5 struct student { int num; char name[20]; float score[3]; float ave; }stu[MAX_Size]; int main() { int i; FILE *fp; struct student s1; printf("请输入各学生的信息:\n"); for(i=0;i<MAX_Size;i++) { printf("请输入第%d个学生的学号:\n",i+1); scanf("%d",&stu[i].num); printf("请输入第%d个学生的姓名:\n",i+1); scanf("%s",stu[i].name); printf("请输入第%d个学生第1门课的成绩:\n",i+1); scanf("%f",&stu[i].score[0]); printf("请输入第%d个学生第2门课的成绩:\n",i+1); scanf("%f",&stu[i].score[1]); printf("请输入第%d个学生第3门课的成绩:\n",i+1); scanf("%f",&stu[i].score[2]); } for(i=0;i<MAX_Size;i++) { stu[i].ave=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3; } if((fp=fopen("stu.txt","w"))==NULL) { printf("file open error!\n"); exit (0); } else { for(i=0;i<MAX_Size;i++) { fwrite(&stu[i],sizeof(struct student),1,fp); } fclose(fp); } getch(); return 0; }