实验内容: 1.运行程序 #include <stdio.h> void main( ) { int x,y; printf(“Enter two integers:x,y”); scanf(“%d,%d”,&x,&y); printf(“%4d%4d%4d\n”,x>y,x==y,x<y); } 要求: (1)输入并调试上述源程序。 (2)对源程序进行编译、连接。 (3)运行源程序并存盘,文件名按规定定义。 (4)写出程序的运行结果。 (5)按给定的测试数据,运行程序,并将结果填入表3-1中。 程序: #include <stdio.h> int main() { system("color f3"); int x, y; printf("Enter two integers:x,y"); scanf_s("%d,%d", &x, &y); printf("%4d%4d%4d\n", x > y, x == y, x < y); } |
2.运行程序 #include <stdio.h> void main( ) { char ch; printf("Enter a character:"); ch=getchar(); if(ch>='a'&&ch<='z') printf("\n\n"); Else printf("\nThis is not a lowercase\n"); } 要求: (1)输入并调试上述源程序。 (2)对源程序进行编译、连接。 (3)运行源程序并存盘,文件名规定定义。 (4)写出程序运行结果,填入表3-2。 程序: #include <stdio.h> void main() { system("color f3"); char ch; printf("Enter a character:"); ch = getchar(); if (ch >= 'a' && ch <= 'z') printf("\nThis is a lowercase\n"); else printf("\nThis is not a lowercase\n"); } |
![]() 3. 运行程序 程序功能是求一元二次方程ax2+bx+c=0的根,完成下列要求。 #include <stdio.h> #include <math.h> void main( ) { float a,b,c,d,x1,x2; scanf("%f,%f,%f",&a,&b,&c); d=b*b-4.0*a*c; if(fabs(d)<1.0e-6) { x1=x2=-b/(2.0*a); printf("\nx1=x2=%f",x1); } else { if(d>0) { printf("\nx1=%f",(-b+sqrt(d))/(2.0*a)); printf("\nx2=%f",(-b-sqrt(d))/(2.0*a)); } else { printf("\nx1=%f+i%f",-b/(2.0*a),sqrt(-d)/(2.0*a)); printf("\nx2=%f+i%f",-b/(2.0*a),sqrt(-d)/(2.0*a)); } } } 要求: (1)输入并调试上述源程序。 (2)对源程序进行编译、连接。 (3)运行源程序并存盘。 (4)写出程序运行结果(输入数据分别求出该方程的3种根,即相等实根、不等实根和共轭复根),填入表3-3。 程序: #include <stdio.h> int main() { system("color f3"); float a, b, c, d, x1, x2; scanf_s("%f,%f,%f", &a, &b, &c); d = b * b - 4.0 * a * c; if (fabs(d) < 1.0e-6) { x1 = x2 = -b / (2.0 * a); printf("\nx1=x2=%f", x1); } else { if (d > 0) { printf("\nx1=%f", (-b + sqrt(d)) / (2.0 * a)); printf("\nx2=%f", (-b - sqrt(d)) / (2.0 * a)); } else { printf("\nx1=%f+i%f", -b / (2.0 * a), sqrt(-d) / (2.0 * a)); printf("\nx2=%f+i%f", -b / (2.0 * a), sqrt(-d) / (2.0 * a)); } } }
4.程序填空 从健盘输入5种算术运算符,+、-、*、/、%,再输入两个整数,对其进行对应的算术运算并输出结果,如果输入的字符不是算术运算符,则输出字符串“Input error!”,提示出错。 #include <stdio.h> void main( ) { char op; int a,b; op=getchar(); scanf("%d,%d",&a,&b); switch(op) { case '+':printf("a%cb=%d",op,a+b); break; case '-':printf("a%cb=%d",op,a-b); break; case '*': break; case '/':printf("a%cb=%d",op,a/b); break; case '%':printf("a%cb=%d",op,a%b); break; default: } 要求: (1)根据要求在上述源程序的横线上填入适当内容,并输入调试。 (2)对源程序进行编译连接、运行,写出程序运行结果(要求输入5组数据,分别对应+、-、*、/、%)。填入表3-4,并对结果进行分析,理解switch case结构的语法形式和应用场合。 程序: #include <stdio.h> int main() { system("color f3"); char op; int a, b; op = getchar(); scanf_s("%d,%d", &a, &b); switch (op) { case'+':printf("a%cb=%d", op, a + b); break; case'-':printf("a%cb=%d", op, a - b); break; case'*':printf("a%cb=%d", op, a * b); break; case'/':printf("a%cb=%d", op, a / b); break; case'%':printf("a%cb=%d", op, a % b); break; default:printf("input error!\n"); } } 5.有一分段函数: 编写程序,输入x值,输出y值 程序: #include <stdio.h> int main() { int x, y; printf("请输入x的值"); scanf_s("%d,", &x); if (x < 0)//使用多个if对x的范围进行判断 { y = 4 * x + 5; } if (x >= 0 && x < 10)//&&是且的意思 { y = x * x - 2 * x + 5; } if (x >= 10) { y = x * x * x - 6 * x; } printf("y的值是%d\n", y); return 0; } 6.编写程序 从健盘输入年份,判断该年份是否为闰年。判断闰年的条件是:能被4整除但不能被100整除,或能被400整除。 程序: #include <stdio.h> int main() { system("color f3"); int year, a; printf("请输人年份:\n"); scanf_s("%d", &year); if (year % 400 == 0) a = 1; else { if (year % 4 == 0 && year % 100 != 0)//"!=":不等于 a = 1; else a = 0; } if (a == 1) { printf("%d 此年是闰年\n", year); } else { printf("%d 此年非闰年\n", year); } } 7.编写程序 已经一包海鲜单价为46.5元,如果购买100~300包,则按95%优惠;如果购买300~500包,则按85%优惠;如果购买501~1000包,则按80%优惠;如果购买10000包以上,则按70%优惠。试编写一个计算顾客购买x包海鲜所需金额且打印购买数量、单价和总金额的程序。 程序: #include <stdio.h> int main(void) { system("color f3"); double a = 46.5, c = 0;//a为单价 b为数量 c为总金额 int b = 0; printf("输入你想要购买的数量\n"); scanf_s("%d", &b); if (b < 0) { printf("check your input!(num>=0)\n"); return 0; } if (b < 100) c = b *a; if (b >= 100 && b <= 300) c = b * a * 0.95; if (b > 300 && b <= 500) c = b * a * 0.85; if (b > 500 && b <= 1000) c = b * a * 0.8; if (b > 1000) c = b *a * 0.7; printf("数量:%d 单价:%lf 总金额:%lf", b, a,c); return 0; } 8.编写程序 输入10个整数。统计其中正数、负数的个数,并求正数及负数的累加和。 程序: #include <stdio.h> int main() { system("color f3"); int i, n, count = 0, s = 0; for (i = 0; i < 10; i++) { printf("请输入第%d个数:", i + 1); scanf_s("%d", &n); if (n >= 0) count++; s += n; } printf("正数的个数为:%d\n", count); printf("负数的个数为:%d\n", 10 - count); printf("sum=%d\n", s); 9.编写程序 要求36人一次搬36块砖,男搬4,女搬2,两个小孩抬一块,要求一次搬完。问:男、女、小孩各多少人? 程序: #include <stdio.h> void main(void) { int i, j, k; for (i = 1; i < 9; i++) { for (j = 1; j < 18; j++) { k = 36 - i - j; if (k % 2 == 0) { if (4 * i + 2 * j + k / 2 == 36) printf("%d,%d,%d", i, j, k); } } } } 10.编写程序 有4个圆塔,圆心分别为(2,2) (-2,2) (2,-2) (-2,-2) ,圆半径为1。这4个塔的高度为10m,塔以外无建筑物。今输入任一点的坐标,求该点的建筑高度(塔外的高度为零)。 算法提示: 输入某点坐标(x,y),求出(x,y)到各塔心的距离,判断输入点是否在塔外。 程序: #include <stdio.h> int main() { int r = 1; printf("请输入任意一点的坐标:"); int a, b; int x, y; float c; scanf_s("%d %d", &a, &b); x = fabs(a); y = fabs(b);//先将a和b的坐标取绝对值 c = sqrt((x - 2) * (x - 2) + (y - 2) * (y - x));//c是点到圆心的距离 if (c > r) printf("0");//求点到圆心的距离大于半径,高度为0 else printf("10");//求点到圆心的距离小于半径,高度为10 return 0; } |
程序测试及运行结果:
5.
6.
7.
8.
9.
10.
结果分析与讨论:
- 比较if语句和switch语句的不同点。
答:
(1)if语句的判断条件大部分都是bool类型,switch语句是用(类似)枚举的方式来标识各个分支的
(2)switch 更适合用于多分支情况,就是有很多种情况需要判断处理,判断条件 类型单一,只有一个入口,在分支执行完后(如果没有 break 跳出),不加 判断地执行下去;而 if—elseif—else 多分枝主要适用于分支较少的分支结构, 判断类型不是单一,只要一个分支被执行后,后边的分支不再执行。
(3)switch 为等值判断(不允许比如>= <=),而 if 为等值和区间都可以,if 的 使用范围大。
2.在分支结构编写程序过程中,要注意哪些问题?
答:
- 基本的命题表达式化。
- 分段函数程序中在分支中只执行分段函数的赋值,分支结束后再输出分段函数的结果。
- 语句用于根据条件选择执行语句,else 不能独立存在且总是跟它最近的 if 相匹配。
- switch 语句对应单个条件多个分支的情形,case 语句分支必须要有 break,否则会导致分支重叠,default 语句必须要加上。