admin管理员组

文章数量:1794759

明解C语言入门篇

明解C语言入门篇

前言

本文为业余学习《明解C语言入门篇》的记录,包含代码清单和练习题。 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语言 第2章 运算和数据类型 第3章 分支结构程序 第4章 程序的循环控制 第5章 数组 第6章 函数 第7章 基本数据类型 第8章 动手编写各种程序吧 第9章 字符串的基本知识 第10章 指针 第11章 字符串和指针 第12章 结构体 第13章 文件处理 +++++++++++++++++++++++++++++++

第4章、程序的循环控制 4-1 do语句 代码清单 4-1 //输入的整数是奇数还是偶数呢(按照自己的意愿进行循环操作) #include <stdio.h> int main() { int retry; do { int no; printf("请输入一个整数:"); scanf("%d",&no); switch (no % 2) { case 0 : puts("该整数是偶数。"); break; default : puts("该整数是奇数。"); } printf("还想再来一次吗?【Yes…0 / No …9】:"); scanf("%d",&retry); } while (retry==0); return 0; } 代码清单 4-2 //根据读取的整数值显示所出的拳(只接收0、1、2) #include <stdio.h> int main() { int hand; do { printf("请选择出什么拳【0…石头/1…剪刀/2…布】"); scanf("%d",&hand); } while (! (!(hand < 0) && !(hand > 2))); printf("你选择了"); switch (hand) { case 0 : printf("石头。\\n"); break; case 1 : printf("剪刀。\\n"); break; case 2 : printf("布。\\n"); break; } return 0; } 代码清单 4-3 //不停地输入整数,显示其和及平均值 #include <stdio.h> int main() { int sum=0; int cnt=0; int retry; do { int no; printf("请输入一个整数:"); scanf("%d",&no); sum+=no; cnt+=1; printf("是否继续?【Yes…0/No…9】"); scanf("%d",&retry); }while (retry == 0); printf("它们的和是%d,平均值是%.2f。\\n",sum,(double)sum/cnt); return 0; } 练习 4-1 //判断整数值的符号,可将输入的过程循环任意次 #include <stdio.h> int main() { int retry; do { int no; printf("请输入一个整数:"); scanf("%d",&no); if (no==0) puts("该整数为0。"); else if (no>0) puts("该整数为正整数。"); else puts("该整数为负整数。"); printf("继续?【Yes…0/No…9】"); scanf("%d",&retry); }while (retry==0); return 0; } 练习 4-2 /*---输入两个数,计算出它们之间所有的整数的和---*/ #include <stdio.h> int main(void) { int a, b, sum=0, min, max; puts("请输入两个整数。"); printf("整数a:"); scanf("%d",&a); printf("整数b:"); scanf("%d",&b); (a>b)?(max = a)&&(min = b):(min = a)&&(max = b); do { sum+=min; } while(min++ != max); (a>b)?(max = a)&&(min = b):(min = a)&&(max = b); printf("大于等于%d小于等于%d的所有整数的和是%d。\\n",min,max,sum); return 0; } 代码清单 4-3 //不停地输入整数,显示其和及平均值 #include <stdio.h> int main() { int sum=0; int cnt=0; int retry; do { int no; printf("请输入一个整数:"); scanf("%d",&no); sum+=no; cnt+=1; printf("是否继续?【Yes…0/No…9】"); scanf("%d",&retry); }while (retry == 0); printf("它们的和是%d,平均值是%.2f。\\n",sum,(double)sum/cnt); return 0; } 代码清单 4-4 //不停地输入整数,显示其和及平均值(其2)。※使用复合赋值运算符及后置递增运算符 #include <stdio.h> int main() { int sum=0; int cnt=0; int retry; do{ int t; printf("请输入一个整数:"); scanf("%d",&t); sum+=t; cnt++; printf("是否继续?【Yes…0/No…9】:"); scanf("%d",&retry); }while (retry==0); printf("它们的和为%d,平均值为%.2f。\\n",sum,(double)sum/cnt); return 0; } 4-2 while语句 代码清单 4-5 //从输入的整数开始倒数到0 #include <stdio.h> int main() { int n; printf("请输入一个整数:"); scanf("%d",&n); while (n>=0) { printf("%d ",n); n--; } puts(""); return 0; } 练习 4-3 #include<stdio.h> int main(void) { int n; printf("请输入一个正整数: "); scanf("%d", &n); if (n>=0) { while (n >= 0) { printf("%d ", n); n--; } puts(""); } return 0; } 代码清单 4-6 //从输入的整数开始倒数到0(其2) #include <stdio.h> int main() { int n; printf("请输入一个整数:"); scanf("%d",&n); while (n>=0) { printf("%d ",n--); } puts(""); return 0; } 练习 4-4 //修改代码清单4-6,使其递减到1而不是0,同时输入的值小于0时,不进行换行(等于0时还是要换行,但不显示0) #include <stdio.h> int main() { int n; printf("请输入一个正整数:"); scanf("%d",&n); if (n>=0) { while (n>=1) { printf("%d ",n--); } puts(""); } return 0; } 代码清单 4-7 // 递增显示从0到输入的正整数为止的各个整数 #include <stdio.h> int main() { int i=0,n; printf("请输入一个正整数:"); scanf("%d",&n); while (i<=n) { printf("%d ",i++); } puts(""); return 0; } 练习 4-5 //修改代码清单4-7,从1开始递增,输入的值小于0的时候不换行(等于0时还会换行,但不显示0) #include <stdio.h> int main() { int i=1,n; printf("请输入一个正整数:"); scanf("%d",&n); if (n>=0) { while (i<=n) { printf("%d ",i++); } puts(""); } return 0; } 练习 4-6 //编写一段程序,按照升序显示出小于输入值的所有正偶数 #include <stdio.h> int main() { int n,i=0; printf("请输入一个正整数:"); scanf("%d",&n); while (i<=n) { if (i>0 && i%2==0) //0是整数,但不是正整数 { printf("%d ",i); } i++; } puts(""); return 0; } 练习 4-7 //显示出小于输入的整数的所有2的乘方(只能小于,不能大于或等于) #include <stdio.h> int main() { int n2=1,n; //n2是2的乘方,初始值不能是0,否则会一直输出0。 printf("请输入一个整数:"); scanf("%d",&n); while (n2*2<n) //因循环体里面直接输出n2=n2*2,为防止最后一次n2*2>n也输出结果,故在while里面提前判断。 { printf("%d\\n",n2*=2); } return 0; }

此题有点绕,试验结果如下图:

代码清单 4-8 //输入一个整数,连续显示出该整数个* #include <stdio.h> int main() { int n; printf("请输入一个整数:"); scanf("%d",&n); while (n-- > 0) { putchar('*'); //输出单个字符,用单引号。输出字符串要用printf("...")或puts("...")函数,用双引号。 } putchar('\\n'); return 0; } 练习 4-8 //改写代码清单4-8的程序,当输入的值小于1时不输出换行符。 #include <stdio.h> int main() { int n; printf("请输入一个整数:"); scanf("%d",&n); if (n>=1) { while (n-- > 0) { putchar('*'); } putchar('\\n'); } return 0; } 练习 4-9 //交替显示+和-,总个数等于输入的整数值,输入0以下的整数时,什么也不显示 #include <stdio.h> int main() { int n; int i=0; printf("要输入几个符号:"); scanf("%d",&n); while (i<n) { ++i; switch (i%2) { case 1 : putchar('+'); break; default: putchar('-'); break; } } putchar('\\n'); return 0; } 练习 4-10 //连续显示*,总个数等于所输入的整数值。当输入0以下整数时,什么也不显示 #include <stdio.h> int main() { int n; printf("正整数:"); scanf("%d",&n); while (n>0) { --n; puts("*"); } return 0; } 代码清单 4-10 //逆向显示正整数 #include <stdio.h> int main() { int n; do { printf("请输入一个正整数:"); scanf("%d",&n); if (n<=0) { printf("请不要输入非正整数。\\n"); } }while (n<=0); while (n>0) { printf("%d",n%10); n/=10; } puts("。"); return 0; } 练习 4-11 //练习4-11,对代码清单4-10的程序进行修改,使其显示结果的同时显示输入的整数值 #include <stdio.h> int main() { int n; do { printf("请输入一个正整数:"); scanf("%d",&n); if (n<=0) { puts("请不要输入非正整数。"); } }while (n<=0); printf("%d逆向显示的结果是",n); while (n>0) { printf("%d",n%10); n/=10; } puts("。"); return 0; } 练习 4-12 //练习4-12,读取一个正整数,显示其位数 #include <stdio.h> int main() { int n; int digit=0; do { printf("请输入一个正整数:"); scanf("%d",&n); if (n<=0) { puts("请不要输入非正整数。"); } }while (n<=0); printf("%d的位数是",n); //或者再增加一个变量 int temp; temp=n; while (n>0) { n/=10; digit+=1; } printf("%d。\\n",digit); return 0; } 4-3 for语句 代码清单 4-11 //递增显示从1到输入的正整数为止的各个整数(使用for语句) #include <stdio.h> int main() { int n; int i; printf("请输入一个正整数:"); scanf("%d",&n); for (i=1;i<=n;i++) { printf("%-d ",i); if (i%30==0) //每输出30个整数就换行 { putchar('\\n'); } } putchar('\\n'); return 0; } 代码清单 4-12 //输入一个整数,连续显示出该整数个*(使用for语句) #include <stdio.h> int main() { int n; int i; printf("请输入一个正整数:"); scanf("%d",&n); for (i=1;i<=n;i++) { printf("*"); } putchar('\\n'); } 代码清单 4-13 //输入规定个数个整数并显示出它们的合计值和平均值(使用for语句) #include <stdio.h> int main() { int i=0; int sum=0; int temp; int num; printf("要输入几个整数:"); scanf("%d",&num); for (i=0;i<num;i++) { printf("No.%d : ",i+1); scanf("%d",&temp); sum+=temp; } printf("它们的合计值是%d,平均值是%.2f。\\n",sum,(double)sum/num); return 0; } 练习 4-13 //练习4-13,求1到n的和。n的值从键盘输入。 #include <stdio.h> int main() { int n; int sum=0; int i; printf("请输入整数:"); scanf("%d",&n); for (i=1;i<=n;i++) { sum+=i; } printf("1到%d的和是%d。\\n",n,sum); return 0; } 练习 4-14 //练习4-14,根据输入的整数,循环显示1234567890,显示的位数和输入的整数值相同 #include<stdio.h> int main() { int n; int i; printf("请输入要显示的位数:"); scanf("%d", &n); for (i = 1; i <= n; i++) { printf("%d", i%10); } putchar('\\n'); return 0; } 练习 4-15 //根据输入的身高范围和间隔,显示身高和标准体重对照表。 #include <stdio.h> int main() { int Height_start,Height_end,Height_interval; printf("开始数值(cm):"); scanf("%d",&Height_start); printf("结束数值(cm):"); scanf("%d",&Height_end); printf("间隔数值(cm):"); scanf("%d",&Height_interval); for (;Height_start<=Height_end;Height_start+=Height_interval) { printf("%dcm %.2fkg\\n",Height_start,(Height_start-100)*0.9); } return 0; } 代码清单 4-14 //显示输入的整数值以下的偶数 #include <stdio.h> int main() { int n; int i; printf("请输入一个整数:"); scanf("%d",&n); for (i=2;i<=n;i+=2) { printf("%d ",i); } putchar('\\n'); return 0; } 代码清单 4-15 //显示输入的整数值的所有约数 #include <stdio.h> int main() { int n; int i; printf("请输入一个整数:"); scanf("%d",&n); for (i=1;i<=n;i++) { if (n%i==0) { printf("%d ",i); } } putchar('\\n'); return 0; } 练习 4-16 // 输入一个整数值,显示该数以下的所有奇数 #include <stdio.h> int main() { int n; int i; printf("请输入一个整数:"); scanf("%d",& n); for (i=1;i<=n;i++) { if (i%2==1) { printf("%d ",i); } } putchar('\\n'); return 0; } 练习 4-17 //显示1到n的整数值的二次方 #include <stdio.h> int main() { int n; int i=1; printf("请输入一个整数:"); scanf("%d",&n); while (i<=n) { printf("%d的二次方是%d\\n",i++,i*i); } return 0; } 练习 4-18 //输入一个整数值,显示该整数值个‘*’。每显示5个就进行换行 #include <stdio.h> int main() { int n; int i; printf("请输入一个整数:"); scanf("%d",&n); for (i=1;i<=n;i++) { putchar('*'); if (i%5==0) { putchar('\\n'); } } putchar('\\n'); return 0; } 练习 4-19 //对代码清单4-15进行修改,在显示所输入的整数值的所有约数之后,显示约数的个数 #include <stdio.h> int main() { int n; int i; int num=0; printf("请输入一个整数:"); scanf("%d",&n); for (i=1;i<=n;i++) { if (n%i==0) { printf("%d\\n",i); num+=1; } } printf("约数有%d个。\\n",num); return 0; } 4-4 多重循环 代码清单 4-16 //显示九九乘法表 #include <stdio.h> int main() { int i,j; for (i=1;i<=9;i++) { for (j=1;j<=9;j++) { printf("%d * %d = %-2d ",i,j,i*j); } putchar('\\n'); } return 0; } break语句跳出循环 //break语句跳出循环 #include <stdio.h> int main() { int i,j; for (i=1;i<=9;i++) { for (j=1;j<=9;j++) { int product=i*j; if (product>40) { break; } printf("%2d *%2d = %-3d",i,j,product); } putchar('\\n'); } return 0; } 代码清单 4-17 //画一个长方形 #include <stdio.h> int main() { int i,j; int height,width; puts("让我们来画一个长方形。"); printf("高:"); scanf("%d",&height); printf("宽:"); scanf("%d",&width); for (i=1;i<=height;i++) { for (j=1;j<=width;j++) { putchar('*'); } putchar('\\n'); } return 0; } 代码清单 4-18 //显示直角在左下方的等腰直角三角形 #include <stdio.h> int main() { int i,j,length; puts("生成直角在左下方的等腰直角三角形。"); printf("短边:"); scanf("%d",&length); for (i=1;i<=length;i++) { for (j=1;j<=i;j++) { putchar('*'); } putchar('\\n'); } return 0; } 代码清单 4-19 //显示直角在右下方的等腰直角三角形 #include <stdio.h> int main() { int i,j,length; puts("生成直角在右下方的等腰直角三角形。"); printf("短边:"); scanf("%d",&length); for (i=1;i<=length;i++) { for (j=1;j<=length-i;j++) putchar(' '); for (j=1;j<=i;j++) putchar('*'); putchar('\\n'); } return 0; } 代码清单 4-20 //输入一个整数,显示该整数个*(循环次数可任意指定) #include <stdio.h> int main() { int retry; do { int i; int n; do { printf("想显示几个*:"); scanf("%d",&n); if (n<=0) { puts("请不要输入非正整数。"); } }while (n<=0); for (i=1;i<=n;i++) { putchar('*'); } putchar('\\n'); printf("再来一次?【Yes…0/No…9】:"); scanf("%d",&retry); }while (retry==0); return 0; } 练习 4-20 //练习4-20,为九九乘法表增加横纵标题 #include <stdio.h> int main() { int i,j; /*画横标题*/ printf(" |"); for (i=1;i<=9;i++) { printf("%3d",i); } putchar('\\n'); /*画分隔线*/ for (i=1;i<=31;i++) { putchar('-'); } putchar('\\n'); /*画纵标题及写乘法表*/ for (i=1;i<=9;i++) { /*画纵标题*/ printf("%-d |",i); /*写九九乘法表*/ for (j=1;j<=9;j++) { printf("%3d",i*j); } putchar('\\n'); } return 0; } 练习 4-21 //显示以所输入整数为边长的正方形 #include <stdio.h> int main() { int i,j; int n; printf("生成一个正方形\\n正方形有几层:"); scanf("%d",&n); for (i=1;i<=n;i++) { for (j=1;j<=n;j++) { putchar('*'); } putchar('\\n'); } return 0; } 练习 4-22 //显示出一个横向较长的长方形 /*读取两个边的边长,以较小的数作为行数,以较大的数作为列数*/ #include <stdio.h> int main() { int n1,n2; int i,j; puts("让我们来画一个长方形。"); printf("一边:"); scanf("%d",&n1); printf("另一边:"); scanf("%d",&n2); for (i=1;i<=(n1>n2?n2:n1);i++) { for (j=1;j<=(n1>n2?n1:n2);j++) { putchar('*'); } putchar('\\n'); } return 0; } 练习 4-23(直角在左上方的等腰直角三角形) //显示出直角在左上方的等腰直角三角形 #include <stdio.h> int main() { int n; int i,j; printf("边长:"); scanf("%d",&n); for (i=0;i<n;i++) { for (j=0;j<n-i;j++) { putchar('*'); } putchar('\\n'); } return 0; } 练习 4-23(直角在右上方的等腰直角三角形) //显示出直角在右上方的等腰直角三角形 #include <stdio.h> int main() { int n; int i,j; printf("边长:"); scanf("%d",&n); for (i=1;i<=n;i++) { for (j=1;j<=i-1;j++) { putchar(' '); } for (j=1;j<=n-i+1;j++) { putchar('*'); } putchar('\\n'); } return 0; } 练习 4-24 //显示输入整数层的金字塔形状 #include <stdio.h> int main() { int n; int i,j,k; puts("让我们来画一个金字塔。"); printf("金字塔有几层:"); scanf("%d",&n); for (i=1;i<=n;i++) { for (j=1;j<=n-i;j++) { putchar(' '); } for (k=1;k<=i*2-1;k++) { putchar('*'); } putchar('\\n'); } return 0; } 练习 4-25 //显示输入整数层的向下的金字塔形状。 #include <stdio.h> int main() { int n; int i,j,k; puts("让我们来画一个向下的金字塔。"); printf("金字塔有几层:"); scanf("%d",&n); for (i=1;i<=n;i++) { for (j=1;j<=i-1;j++) { putchar(' '); } for (k=1;k<=(n-i)*2+1;k++) { printf("%d",i%10); } putchar('\\n'); } return 0; } 专题4-1 continue语句 #include <stdio.h> int main() { int i,j; for (i=1;i<=9;i++) { for (j=1;j<=9;j++) { int product=i*j; if (product % 10 == 4 || product / 10 == 4) { printf(" "); //两个空格 continue; } printf("%3d",product); } putchar('\\n'); } return 0; } 4-5 程序的组成元素和格式 代码清单 4-21 /* 显示九九乘法表 */ #include <stdio.h> int main() {int i, j ; for(i= 1;i<=9; i ++) { for (j=1;j <=9;j ++) printf("%3d", i * j);putchar('\\n'); /*换行*/ } return 0; } 总结 summary #include <stdio.h> int main() { int i, j; int x, y, z; do { printf(" 0~100的整数值:"); scanf("%d",&x); }while (x<0 || x>100); y=x; z=x; while (y>=0) { printf("%d %d\\n", y--, ++z); } printf("宽和高为整数面积为%d" "的长方形的边长是:\\n", x); for (i=1; i<x; i++) { if (i*i>x) break; if (x%i != 0) continue; printf("%d * %d\\n", i, x/i); } puts("5行7列的星号"); for (i=1; i<=5; i++) { for (j=1; j<=7; j++) { putchar('*'); } putchar('\\n'); } return 0; }

本文标签: 语言入门篇明解