c语言--部分循环摘录
1.九九乘法表
#include <stdio.h> int main(int argc,const char *argv[]) { //外层循环--有多少行 for (int i=1; i<=9; i++) { //内层循环--每一行打印的具体条目 for (int j=1; j<=i; j++) { printf("%d*%d=%d ", j, i, i*j); } printf("\n"); } return 0; }
2.字母金字塔
//输入:F //\ //输出: // F // EFE // DEFED // CDEFEDC // BCDEFEDCB //ABCDEFEDCBA
/*
分析:
F
EF E DEF ED CDEF EDC BCDEF EDCB ABCDEF EDCBA
*/ int main(int argc,const char *argv[]) { char ch; scanf("%c", &ch);
//外层循环--打印多少行 for (int i=0; i<ch-'A'+1; i++) {
//打印空格--注意空格数量与 i 的关系 for (int j=0; j<ch-'A'-i; j++) { printf(" "); }
//打印左半部分字符 for (int j=i; j>=0; j--) { printf("%c", ch-j); }
//打印有半部分字符 for (int j=0; j<i; j++) { printf("%c", ch-1-j); } printf("\n"); } return 0; }
// 输入:F // 输出: // FEDCBA // EDCBAB // DCBABC // CBABCD // BABCDE // ABCDEF
/*
分析:同理上
*/ char ch; scanf("%c",&ch); for (int i=0; i<ch-'A'+1; i++) { for (int j=ch-'A'-i; j>=0; j--) { printf("%c",'A'+j); } for (int j=0; j<i; j++) { printf("%c",'A'+j+1); } printf("\n"); }
//输入:F //\ //输出: // // A // ABA // ABCBA // ABCDCBA // ABCDEDCBA //ABCDEFEDCBA int main(int argc,const char *argv[]) { char ch; scanf("%c", &ch); for (int i=0; i<ch-'A'+1; i++) { for (int j=0; j<ch-'A'-i; j++) { printf(" "); } for (int j=0; j<=i; j++) { printf("%c", 'A'+j); } for (int j=i; j>0; j--) { printf("%c",'A'+j-1); } printf("\n"); } return 0; }
//输入:F // //输出: // //FEDCBA // EDCBAB // DCBABC // CBABCD // BABCDE // ABCDEF int main(int argc,const char *argv[]) { char ch; scanf("%c", &ch); for (int i=0; i<ch-'A'+1; i++) { for (int j=i; j>0; j--) { printf(" "); } for (int j= ch-'A'-i;j>=0; j--) { printf("%c", 'A'+j); } for (int j=0; j<i; j++) { printf("%c", 'A'+1+j); } printf("\n"); } return 0; }
3.(循环倒置)
eg.给定一个 5 位的整数,将该数按照 10 进制位逆置,例如给定 12345 变成 54321
int m; scanf("%d",&m); int n=0; while (m) {
//取出最后一位数并且向高位移动 n=n*10 + m%10;
//除去最后一位 m=m/10; } printf("%d\n",n); return 0;
4.(循环得到各位数字)
eg.将某个 8 位的整数所有位的数值加在一起并输出
int m; scanf("%d",&m); int n=0; int sum=0; while (m) {
//依次取出每一位 n=m%10; // printf("%d",n); sum=sum+n;
//去除最后一位 m=m/10; } printf("%d\n",sum);
5.(循环求解"完数")
eg.找到1000以内的所有”完数”,所谓完数是指一个数是其所有因子之和 如: 6 = 1+2+3;
for(int i = 1; i <= 1000; i++ ) { int sum = 0; for ( int j = 1; j < i; j++) {
//找到符合的数字,添加 if( i % j == 0 ) sum = sum + j; }
//满足条件 if( i == sum ) printf( "%d\n",i); }
6.最大公约数&最小公倍数
//最大公约数,最小公倍数 //最小公倍数=两整数的乘积÷最大公约数 //辗转相除法 // ① a%b得余数c // // ② 若c=0,则b即为两数的最大公约数 // // ③ 若c≠0,则a=b,b=c,再回去执行① int m,n; int a,b,c; scanf("%d%d",&a,&b); m=a; n=b; //go while (b!=0) { c=a%b; a=b; b=c;//余数赋值 } printf("最大公约数%d\n",a); printf("最小公倍数%d\n",m*n/a);
eg.输入两个分数,输出两分数之和(要求约分)
int a,b; int m,n; scanf("%d/%d",&a,&b); scanf("%d/%d",&m,&n); int x,y; x=a*n+m*b; y=b*n; //公约数 int i,j,k; i=x; j=y; while (j!=0) { k=i%j; i=j; j=k; } printf("\n公约数%d\n",i); printf("%d/%d\n",x/i,y/i);