以下是自己学习C语言时巩固所学编写的一部分程序,再接再厉!
九九乘法表
#include <stdio.h>
void main()
{
int i,j;
for(i = 1; i <= 9; i++)//控制行
{
for(j = 1; j <= i; j++)//控制列
{
printf("%d*%d=%-3d",j,i,i*j);
}
puts("");//puts输出自动换行
}
}
三位数分别取出个十百位
#include <stdio.h>
void main()
{
int n;
scanf("%d",&n);
int ge,shi,bai;//分别存个位,十位,百位
ge = n%10;
shi = n/10%10;
bai = n/100%10;
printf("输入:%d\n个位:%d\n十位:%d\n百位:%d\n",n,ge,shi,bai);
}
判断闰年
#include <stdio.h>
void main()
{
int year;
scanf("%d",&year);
if(year % 4 == 0)
{
//能被4整除,且能被400整除
if(year % 400 == 0)
{
printf("Yes!\n");
}
//能被4整除,且不能被100整除
else if(year % 100 != 0)
{
printf("Yes!\n");
}
else
{
printf("No!\n");
}
}
else
{
printf("No!\n");
}
}
十进制数转二进制数中1的个数
#include <stdio.h>
void main()
{
int n, count = 0;
scanf("%d",&n);
/* 方法一
while(n)
{
n = n & (n-1);
count++;
}
*/
/* 方法二
while(n)
{
n = n/2;
count++;
}
*/
/* 方法三 */
int i = 0;
while(i < 31)//int型数据占4字节,32bit,最高位为符号位
{
if((n & (1 << i)) != 0)
{
count++;
}
i++;
}
printf("二进制1的个数为:%d\n",count);
}
范围内的素数
#include <stdio.h>
void main()
{
int i,j,count = 0;
/* 设范围为 101 -- 500 之间*/
for(i = 101; i <= 500; i++)//遍历范围内所有数
{
for(j = 2; j < i; j++)//遍历除了1和本身以外的
{
if(i%j == 0) break;//有因数不是素数,退出循环
}
if(i == j) count++;//i==j表示j遍历完没发现因数,即i是素数
}
printf("101-500之间素数个数:%d\n",count);
}
阶乘(非递归)
#include <stdio.h>
void main()
{
int n;
scanf("%d",&n);
int ret = 1;
while(n)//n不等于0
{
ret = ret * n;
n--;
}
printf("结果为:%d\n",ret);
}
水仙花数
#include <stdio.h>
void main()
{
int ge,shi,bai;//存放个位,十位,百位
int i;
for(i = 100; i <= 999; i++)//i从最小的三位数遍历到最大的三位数
{
/* 先计算个、十、百位*/
ge = i%10;
shi = i/10%10;
bai = i/100%10;
/* 判断是否是水仙花数 */
if((ge*ge*ge)+(shi*shi*shi)+(bai*bai*bai) == i)
{
printf("%d ",i);
}
}
puts("");
}
用*打印菱形
#include <stdio.h>
#include <math.h>
void main()
{
int n = 5;//层数
int i,j,k;
for(i = -(n/2); i <= n/2; i++)//控制打印层数
{
for(k = 0; k < abs(i); k++)//控制打印空格数
{
printf(" ");
}
for(j = 0; j < n-2*abs(i); j++)//控制打印*数
{
printf("*");
}
puts("");//打印完一行换行
}
}
数组逆序
#include <stdio.h>
void main()
{
int arr[10];
int i,j;
//循环一次读如10个数据,空格隔开
for(i = 0; i < 10; i++)
{
scanf("%d",&arr[i]);
}
//逆序前
printf("Before reverse:");
for(i = 0; i < 10; i++)
printf("%2d ",arr[i]);
puts("");
/* 逆序 */
i = 0;
j = 9;
int tmp;//中间变量,用于暂时保存数据
while(i < j)
{
tmp = arr[j];
arr[j] = arr[i];
arr[i] = tmp;
i++;
j--;
}
//逆序后
printf("After reverse:");
for(i = 0; i < 10; i++)
printf("%2d ",arr[i]);
puts("");
}
判断回文
#include <string.h>
#include <stdio.h>
void main()
{
char buf[32] = {0};
scanf("%s",buf);
int l = 0;//指向字符串最左边字符
int r = strlen(buf) - 1;//指向字符串最右边字符
while(l < r)
{
if(buf[l] != buf[r])//不相等,打印,结束程序
{
printf("No!\n");
return;
}
l++;
r--;
}
printf("Yes!\n");//循环结束未发现不相等,则是回文
}
字符串排序
#include <string.h>
#include <stdio.h>
void main()
{
char buf[32] = {0};
//从键盘读取最多31个字符存入buf中
fgets(buf,32,stdin);
//将最后读入的字符'\n'变为'\0'
buf[strlen(buf)-1] = '\0';
int n = strlen(buf);
int i,j;
char tmp;
//原字符串
printf("Before: %s\n",buf);
/* 冒泡排序 */
for(i = 0; i < n-1; i++)//趟数
{
for(j = 0; j < n-i-1; j++)//每一趟比较次数
{
if(buf[j] > buf[j+1])
{
tmp = buf[j];
buf[j] = buf[j+1];
buf[j+1] = tmp;
}
}
}
//排序后
printf("After : %s\n",buf);
}
删除字符串中的空格
#include <string.h>
#include <stdio.h>
void main()
{
char buf[32] = {0};
fgets(buf,32,stdin);
buf[strlen(buf)-1] = '\0';
int i,j;
i = j =0;
while(buf[j] != '\0')
{
while(buf[j] == ' ')//若有连续的空格
{
j++;
}
buf[i] = buf[j];
i++;
j++;
}
buf[i] = '\0';//后面的数据已经通过j赋值完毕,所以'\0'结束该字符串
printf("After Delete: %s\n",buf);
}