一、输入一个数,输出一个反序数:
分析:要得到一个数的反序的数,例如输入123输出321,刚开始有可能会想到,直接把这个数取余,然后再去整,最后循环输出余数,虽然这样能得到一样的结果,但最终是输出若干个数,并不是一个数,所以此方法不通。如果要是一个数,那就得把取的那个余数乘10加上当前余数,最后输出
大致是:j=j*10+i%10;
i/=10;
最后所写成的代码如下:
#include <stdio.h>
int main()
{
int i,j=0;
printf("Enter a number:");
scanf("%d",&i);
while(i>0)
{
j=j*10+i%10;
i/=10;
}
printf("The number is: %d\n",j);
return 0;
}
二、编写一个乘法表,呈倒三角形具体如下:
i*j 1 2 3 4 5 6 7 8 9
--------------------------------------
1| 1 2 3 4 5 6 7 8 9
2| 4 6 8 10 12 14 16 18
3| 912 15 18 21 24 27
4| 16 20 24 28 32 36
5| 25 30 35 40 45
6| 36 42 48 54
7| 49 56 63
8| 64 72
9| 81
分析:看到这个图我们可以发现大致分4个部分:1.上半表格2.左边表格3.空格4.数字 首先要对齐,就得保证每个输出所占的字节要一样。代码如下:
#include <stdio.h>
int main()
{
printf("i*j");
int i,j;
for(j=1;j<=9;j++)
printf("%3d",j);
printf("\n");
for(j=1;j<=10;j++)
printf("---");
printf("\n");
for(i=1;i<=9;i++)
{
printf("%2d|",i);
for(j=1;j<=9;j++)
{
if(j<i)
printf(" "); 这一段也可以用个另外的for循环来实现,但我感觉没这个必要
else
printf("%3d",i*j);
}
printf("\n");
}
return 0;
}
三、输入一串字符,要求输出这串字符中的数字最多的那段的位置以及这段数字的个数
分析:输入一段字符用数组保存,然后逐一检查,是否是数字,如果是数字,则记录下位置,并记录数字个数,若不是数字,则继续下一步
#include <stdio.h>
int main()
{
int i=0,location=0,locationmax=0,lengthmax=0,length=0,b=0;
char a[100];
printf("input a length:\n");
scanf("%s",a);
while(a[i]!='\0')
{
if(a[i]>='0'&&a[i]<='9')
{
if(b==0)
{
lo=i+1;
b=1;
}
length++;
}
else
{
if(length>lengthmax)
{
lengthmax=l;
locationmax=location;
}
b=0;
length=0;
}
i++;
}
if(length>lengthmax)
{
lengthmax=length;
locationmax=location;
}
printf("the max location is %d,max length a=%d\n",locationmax,lengthmax);
return 0;
}