|
阅读:3553回复:0
c 语言练习2
//第一题
//1.在正整数中找出最小的且被3、5、7、9除后余数分别为1、3、5、7的数, //将该数以格式“%d”写到文件f3.dat中。 int main() { int i; FILE *fp = fopen("f3.dat","w"); // 打开文件,且可写 if(fp ==NULL){ printf("File Open Error.\n"); exit(1); // 1 是什么意思 } // int 类型,能取的最大整数32767 for(i=0;i<32767;i++){ if( i % 3 == 1 && i % 5 == 3 && i % 7 == 5 && i % 9 == 7){ printf("%d\n",i); fprintf(fp,"%d ",i); // 将数字写入文件 break; } } fclose(fp); return 0; } //2.编写函数ltrim(),用来删除字符串中的前导空格,中间和尾部的空格不删除。 //例如:字符串为"A BC DEF ",删除后的结果是"A BC DEF"。要求函数形参采用指针变量。 int main(){ void ltrim(char *a); char s[100]; //必须指定数组的长度 printf("请输入一个前面带空格的字符串"); gets(s); ltrim(s); printf("删除空格后的字符串"); puts(s); return 0; } // 不需要function 关键字 // 必须写出函数的返回值 ,参数必须写出类型 void ltrim(char *a){ char *p; int i = 0; p = a ; // 将p指向a的首字母 while(*p==' ')p++; // 重点:跳过字符串将的空格 while(*p){ //当p不是结束符时,p指向的字符放到a中 a = *p; //*p : 获取指p对应的字符 p++; //p指针+1 i++; // a数组的下标+1 } a = '\0'; //添加字符串结束符 } //3.编写程序,输入三角形的3条边长,求其面积。 //注意:三角形的任意两边之和必须大于第3边, //对于不合理的边长输入,要求给出错误提示。 // 海伦公式 // p = (a+b+c) /2 ; // s = sqrt(p*(p-a)*(p-b)*(p-c)); int main(){ float a,b,c,p,s; // printf("请输入三角形的三条边a、b、c\n"); scanf("%f%f%f",&a,&b,&c); if(a+b>c && a+c>b && b+c>a){ p = (a+b+c) /2 ; s = sqrt(p*(p-a)*(p-b)*(p-c)); printf("三角形的面积为%.2f\n",s); } else{ printf("a、b、c不能构成三角形\n"); } return 0; } //4. 打印直角三角形 int main(){ int i,j; //定义变量 for(i=1;i<=5;i++){ //打印行 // 打印内容 // 1. 打印空格 for(j=1;j<=5-i;j++){ putchar(' '); } for(j=1;j<=i;j++){ putchar('*'); } putchar('\n'); } return 0; } //5. //编写程序,将任意一个十进制数转换成二进制数, //并将每位二进制数按从高位到低位的顺序存放到数组中, //然后输出。 int main(){ int num,i=0,j,a[20]; // num用户输入,i索引,a数组,用于输出 printf("请输入一个十进制数"); scanf("%d",&num); while(num!=0){ a[i++]=num%2; num = num /2; } for(j=i-1;j>=0;j--){ printf("%4d",a[j]); } printf("\n"); return 0; } //二、改错题 // 6. int main(){ float r,s; r = 5.0; s = 3.14159 * r * r; printf(" %f\n",s); return 0; } //7. #include <stdlib.h> #include <stdio.h> #include <string.h> int main(){ FILE *fp; //1. FIlE 全大写 char str[100]; // char 小写 int i = 0; //小写 if((fp=fopen("test","w"))==NULL){ printf("can not open the file \n"); exit(0); } printf("input a string,Please end with an exclamation point \n"); gets(str); while(str!='!'){ // 修改1 if(str>'a' && str<'z'){ str=str-32;// 修改2 } fputc(str,fp); i++; } fclose(fp); fp = fopen("test","r"); fgets(str,strlen(str)+1,fp); printf("%s\n",str); fclose(fp); return 0; } //三、简答题 // 8. 用宏求闰年 #define LEAP(year) ((year%4==0 && year%100!=0) ||(year%400==0)) int main(){ int year ; printf("please input a year:"); scanf("%d",&year); if(LEAP(year)) printf("%d is Leap-Year.\n",year); else printf("%d is not Leap-Year.\n",year); return 0; } // 9. #include <stdlib.h> int main(){ float score; printf("请输入一个百分制成绩:"); scanf("%f",&score); if(score<0 || score>100){ printf("请输入正解的成绩"); }else{ switch((int)(score/10)) { case 10: case 9: printf("A"); break; case 8: printf("B"); break; case 7: printf("C"); break; case 6: printf("D"); break; case 5: case 4: case 3: case 2: case 1: case 0: printf("E"); break; } } return 0; } // 10、 //有一圆心在原点,半径为10的圆。编写一个程序将圆内所有的整点 //(即点的纵横坐标都为整数的点)的坐标输出。 // 标准答案: #include <stdlib.h> #include <stdio.h> int main(){ int x,y,r,num=1; for(r=0;r<=9;r++){ for(x=-r;x<=r;x++){ for(y=-r;y<=r;y++){ if(x*x+y*y==r*r){ printf("(%2d,%2d) ",x,y); if(num++%8==0){ printf("\n"); } } } } } return 0; } // 自己的答案 // 11、 #include <stdlib.h> #include <stdio.h> int main(){ char x[10]={'d','o','u','b','l','e','y','o','n','g'}; int i,j; char *pt, temp; //输出最开始的值 pt = x; printf("排序前:\n"); for(i=0;i<10;i++){ printf("%-4c",x); } // 从小到大排列 for(i=0;i<9;i++){ for(j=i+1;j<10;j++){ if(pt[j]<pt){ //交换 temp = pt[j]; pt[j] = pt; pt = temp; } } } printf("排序后:\n"); for(i=0;i<10;i++){ printf("%-4c",pt); } printf("\n"); return 0; } // 12 // 注:使用了scanf,引入stdio.h库,不然有警告 #include <stdlib.h> #include <stdio.h> #define MOD(a,b) (a%b) int main(){ int n1,n2; printf("请输入两个整数:\n"); scanf("%d,%d",&n1,&n2); printf("两个数的余数为:%d",MOD(n1,n2)); return 0; } |
|
|