1. 练习:输入一个数,得到数的长度(位数)。
#include <stdio.h> int main() { int a; int count=0; printf("请输入一个数:"); scanf("%d", &a); for (;;) { a/=10; if (a!=0) { count++; } else break; } printf("%d\n", count); }
2. 将a中n个整数按相反方向存放。(这类算法需要线下手动设计)。
#include <stdio.h> void inv(int *x, int y) { int temp,i,j; int m=(y-1)/2; //取数组中间的部分 for (i=0;i<=m;i++) { j=y-1-i; //获取i相对应的最右边的下标 temp=x[i]; x[i]=x[j]; x[j]=temp; } return; } int main() { //把数组a中n个整数按倒序排列。 int a[] = {1,23,33,44,55,66}; inv(a,6); for (int i=0;i<6;i++) printf("%d, ", a[i]); printf("\n"); }
3. 用选择法对10个整数按由大到小顺序排列。
4.将字符串a复制为字符串b。最关键的地方是for循环中第二个起判断的第二个表达式用 *(a+i)!='\0'
#include <stdio.h> int main() { char a[] = "I am a boy", b[20]; for (int i=0;*(a+i)!='\0';i++) { b[i]=*(a+i); } for (int i=0;*(b+i)!=0;i++) { printf("%c", b[i]); } }
第二种方法:
char a[]={"I am here"}, c[20],*p,*q; p=a; q=c; while ((*q=*p)!='\0') { p++; q++; } printf("%s\n", c);
第三种方法:
char a[]={"I am here"}, c[20],*p,*q; p=a; q=c; while ((*q=*p++)!='\0') q++; printf("%s\n", c);
第四中方法:
char a[]={"I am here"}, c[20],*p,*q; p=a; q=c; while (*p!='\0') { *q++=*p++; *q='\0'; }
5. 求a+aa+aaa+aaaa+aa...a
int main() { //求s=a+aa+aaa+aaaa+aa...a int createNum(int,int); int a,c,sum=0; printf("请输入值和次数:"); scanf("%d%d", &a,&c); for (int i=1;i<=c;i++) { sum+=createNum(a, i); } printf("%d\n", sum); return 0; } int createNum(int a, int c) { int ten=1,sum=1; for (int i=1;i<c;i++) { ten*=10; sum+=ten; } return sum*a; }
6. 一个数如果恰好等于它的因子之和,这个数就称为”完数“。例如 6=1+2+3。编程找出1000以内的所有完数。
7. 有n个整数,使其前面各数顺序向后移m个位置,最后m个数编程最前面的m个数。
8.打印出如下的格式:{列计算公式:(2*i-1)}
* *** ***** *******
for (int i=1;i<5;i++) { for (int j=0;j<2*i-1;j++) { printf("*"); } printf("\n"); }
9.用while打印99乘法表
//while 写一个99乘法表 int i=1; while (i<=9) { int j=1; while (j<=i) { printf("%d x %d = %d ",j,i,i*j); j++; } printf("\n"); i++; }
10. 输入一个数,判断1出现的次数。
int count = 0; int n; printf("n = "); scanf("%d", &n); for (int i=1;i<=n;i++) { int num=i; while(num) { if (num%10==1) { count++; } count/=10; } }