实验结论
Part1: printf()和scanf() 以及数据类型区分
/*格式控制符*/ #include <stdio.h> int main() { int x=1234; float f=123.456; double m=123.456; char ch='a'; char a[]="Hello, world!"; // 定义一个数组a,数组中连续存放了字符串常量hello,world! int y=3, z=4; printf("%d %d\n", y, z); printf("y=%d, z=%d\n", y,z); printf("%8d,%2d\n", x,x); printf("%f, %8f, %8.1f, %0.2f, %.2e\n",f,f,f,f,f);//数据长度超过预留长度时,填充完整数据,数据格式转变时会产生精度损失(以下显示的001) printf("%lf\n",m); printf("%3c\n", ch); printf("%s\n%15s\n%10.5s\n%2.5s\n%.3s\n",a,a,a,a,a); return 0; }
/*修改并运行程序*/ #include <stdio.h> int main() { double x,y; char c1,c2,c3; int a1,a2,a3; scanf("%d%d%d",&a1,&a2,&a3); printf("%d,%d,%d\n",a1,a2,a3); scanf("%c%c%c",&c1,&c2,&c3); printf("%c%c%c\n",c1,c2,c3); scanf("%lf,%lf",&x,&y); printf("%lf,%lf\n",x,y); return 0; }
%d 按十进制整数输出 , %f 按浮点数输出 , %c 按字符输出, %e 按指数形式输出 , %s 按字符串输出
%5d 输出数据域宽为5 超出5则原样输出 , %lf double类型输出格式符, %.3f 四舍五入位数 , %6.2f 宽度6,精度2
Part2: putchar() getchar()
/*getchar() */ #include <stdio.h> int main() { char ch; ch = getchar(); // 用户从键盘输入字符,如果输入成功,输入的字符被赋值给ch putchar(ch); // 使用putchar()输出字符变量ch中存放的字符 printf("%c",ch); // 使用printf()和格式符%c输出单个字符 return 0; }
/*putchar()输出及字符不同表示*/ #include <stdio.h> int main() { char ch; ch = 'A'; putchar(ch); // 参数ch是字符型变量 putchar(ch+32); // 参数ch+32是字符型表达式 putchar('\x41'); // 参数是字符型常量,是用十六进制表示的转义字符 putchar('\n'); // 参数\n是字符型常量,是转义字符,表示换行 return 0; }
Part3: if语句
/* 单分支if语句使用示例 从键盘上输入两个整数分别给a和b 如果a>b,就交换,使得a里面存放小的数,b里面存放大的数 */ #include <stdio.h> int main() { int a,b; int t; // 用于交换a和b时,作为中间变量 printf("输入两个整数给a和b:\n"); scanf("%d%d",&a,&b); if(a>b) { t = a; a = b; b = t; } printf("a=%d, b=%d\n",a,b); return 0; }
/* 二分支if语句使用示例 从键盘上输入一个整数给n,判断n是奇数还是偶数 */ #include <stdio.h> int main() { printf("输入一个整数给n:\n"); scanf("%d",&n); if(n%2) printf("n是奇数.\n"); else printf("n是偶数.\n"); return 0; }
/* 多分支if语句示例 输入1,2,3...的不同整数,显示不同提示信息 */ #include <stdio.h> int main() { int level; printf("输入现在状态等级(1-5): "); scanf("%d",&level); if(level == 1) printf("high翻了:)\n"); else if(level == 2) printf("low爆了:(\n"); else printf("一言难尽,无法概括。。。\n"); return 0; }
只有一条语句时,可以省略{ }
Part4: switch语句
/* switch语句使用示例 输入1,2,3...的不同整数,显示不同提示信息 */ #include <stdio.h> int main() { int level; printf("输入现在状态等级(1-5): "); scanf("%d",&level); switch(level) { case 1: printf("high翻了:)\n"); break; case 2: printf("low爆了:(\n"); break; default: printf("一言难尽,无法概括。。。\n"); } return 0; }
删去case后的break时 break用作中断,删去直接运行到下一个break或default
Part5: 简单编程
/*A,B,C or D*/ #include<stdio.h> int main(){ int ch; printf("请输入你的答案(A,B,C or D):"); ch=getchar(); if(ch=='A') printf("corret"); else printf("wrong"); return 0; }
此条语句输出结果与下一条switch输出相似
/*A,B,C or D*/ #include<stdio.h> int main(){ int ch; printf("请输入你的答案(A,B,C or D):"); ch=getchar(); switch (ch){ case 'A':printf("corret");break; case 'B':printf("wrong");break;//可删 case 'C':printf("wrong");break;//可删 case 'D':printf("wrong");break; default :printf("请重新输入\n"); } return 0; }
Part 6
/*从大到小输出*/ #include<stdio.h> int main(void){ int a,b,c,t; while(1){ printf("请输入三个数:" ); scanf("%d%d%d",&a,&b,&c); if(a<b){ t=a; a=b; b=t; } if(a<c){ t=a; a=c; c=t; } if(b<c){ t=b; b=c; c=t; } printf("%8d%8d%8d\n",a,b,c); } }
/*求根公式*/ #include<stdio.h> #include<math.h> int main(void){ double a,b,c,delta,x,x1,x2,p,q; while(1){ printf("\n请输入系数a b c:"); scanf("%lf%lf%lf",&a,&b,&c); if(a==0){ //此处未考虑b为0的情况 x=-(c/b); printf("不是一元二次方程:"); printf("x=%.2lf\n",x); } else{ delta=b*b-4*a*c; if(delta==0){ printf("有两相等的实数根:"); x1=-b/(2*a); x2=x1; printf("x1=%.2lf x2=%.2lf\n",x1,x2); } else if(delta>0){ printf("有两不等实根:"); x1=-b/(2*a)+sqrt(delta)/(2*a); x2=-b/(2*a)-sqrt(delta)/(2*a); printf("x1=%.2lf x2=%.2lf",x1,x2); } else{ printf("有两复数根:"); p=-b/(2*a); q=sqrt(-delta)/(2*a); //书上这几行进行复数计算时会产生一些小问题,可以再对这里进行分支
printf("x1=%.2lf+%.2lfi\n",p,q); //或者在开头就进行正负号转变,不过也可以直接减减作加,加减作减简单处理。 printf("x2=%.2lf-%.2lfi\n",p,q); } } } }
以及这里是在室友提醒下新发现的有问题的数据输入组合,心累,情况过多。 1.#R 应该是分母为零时会输出的 ,而不作.2处理时为1.QNANO。
实验总结与体会
编码次数逐渐增加,编码条数也逐渐增多,一些小细节已经能够考虑到,分号和地址符虽然还是会忘记输入,但次数已经少了很多。在这次使用if 和switch进行编码的时候,不可避免地出现了一些问题,比如if 和swtich的使用格式,以及填充后方条件时产生的一些逻辑符号的错误。这些语句都较为简单基础,说不上难于理解,但在使用时我把大部分时间花在了思考如何写条件之上,我想我应该在编程的时候同时动动笔的话,编写速度会快很多。如果能另外去记忆理解一些知识的话我想对于我的帮助会更大些。老师在课堂上的进度是偏慢的,提前去接触掌握后边的知识是完全可以做到的。除此之外,就是去不断的练习,不断地试错,架构稳固的基础。今后当然也会遇到困难,但那些困难早已经被众多先行者跨过去了,我想,应该不差我一个。
ps.经过一些补充,愈发感觉电脑是一个只会算数的傻子。