通过键盘输入若干整数(个数少于50),其值在0~4的范围,用-1作为输入结束的标志,统计每个数字的个数并输出。
#include <stdio.h>
main()
{
int i, n, a = 0, b = 0, c = 0, d = 0, e = 0;
for (i = 0; i < 50; i++)
{
scanf("%d", &n);
if (n >= 0 && n <= 4)
{
switch (n)
{
case 1: a++; break;
case 2: b++; break;
case 3: c++; break;
case 4: d++; break;
case 0: e++; break;
}
}
else if (n == -1)
break;
else
printf("请输入0-4以内的数字\n");
continue;
}
printf("数字1出现%d次\n", a);
printf("数字2出现%d次\n", b);
printf("数字3出现%d次\n", c);
printf("数字4出现%d次\n", d);
printf("数字0出现%d次\n", e);
}
输出2~100之间的质数,求质数通过函数实现
#include <stdio.h>
int main()
{
int i, n, j;
for(i=2;i<=100;i++){
for(j=2;j<i;j++){
if(i%j==0)break;
}
if(j==i)printf("%d\t",i);
}
}
通过函数求1!+2!+…+k!的和。
#include <stdio.h>
fun(int k);
fun(int k)
{
int i;
long n = 1;
for (i = 1; i <= k; i++)
{
n *= i;
}
return n;
}
void main()
{
int n, i;
long s=0;
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
s += fun(i);
}
printf("%ld", s);
}
通过键盘输入任意一此字符,统计字母、数字及其他字符的个数,当通过键盘输入“$”时结束。
#include <stdio.h>
int main()
{
char ch;
int b = 0, c = 0, d = 0, k = 0;
while ((ch = getchar()) != '$')
{
if (ch >= '0' && ch <= '9')
b++;
else if (ch >= 'a' && ch <= 'z')
c++;
else if (ch >= 'A' && ch <= 'Z')
c++;
else
d++;
}
printf("数字%d\t字母%d\t其他%d", b, c, d);
}
从键盘上输入一个字符串,判断输入的字符串是否为回文字符串,如输入的字符串为“ABCBA”输出“YES”;输入的字符串为“ABCB”输出“NO”。
#include <stdio.h>
#include <string.h>
main()
{
char a[20];
int n,i, j;
gets(a);
n=strlen(a);
for(i=0,j=n-1;i<=j;i++,j--){
if(a[i]!=a[j]){
break;
}else continue;
}
if(i<j){
printf("no");
}else printf("yes");
}
有n个学生的信息(包括学号、姓名、成绩),要求按照成绩的高低顺序输出各学生的信息。
#include <stdio.h>
struct student
{
int xuehao;
char name;
float chengji;
};
int main()
{
int i, n, j;
struct student s[100];
printf("请输入学生个数");
scanf("%d%*c", &n);
for (i = 0; i < n; i++)
{
s[i].xuehao = i + 1;
printf("请输入学号为%d学生姓名:", i + 1);
scanf("%s", &s[i].name);
printf("请输入学号为%d学生的成绩:", i + 1);
scanf("%f", &s[i].chengji);
}
struct student temp;
for (i = 0; i < n; i++)
{
for (j = 0; j < n-i-1; j++)
{
if (s[j].chengji > s[j + 1].chengji)
{
temp = s[j];
s[j] = s[j + 1];
s[j + 1] = temp;
}
}
}
for (i = 0; i < n; i++)
{
printf("学号:%d\t姓名:%c\t成绩:%.2f\n", s[i].xuehao, s[i].name, s[i].chengji);
}
}
输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。最后输出这10个整数。
#include <stdio.h>
main()
{
int a[10], i, max, min, n = 0, m = 0;
for (i = 0; i < 10; i++)
{
printf("请输入第%d个数",i+1);
scanf("%d", &a[i]);
}
max = min = a[0];
for (i = 0; i < 10; i++)
{
if (max < a[i])
{
max = a[i];
n = i;
}
if (min > a[i])
{
min = a[i];
m = i;
}
}
a[9] = a[n];
a[n] = max;
if (a[0] == max && a[9] == min)
;
else
{
a[0] = a[m];
a[m] = min;
}
for (i = 0; i < 10; i++)
{
printf("%d ", a[i]);
}
}
编写程序,找出1~99之间的全部同构数。同构数是这样一组数:它出现在其平方数的右边。例如:5是25右边的数,25是625右边的数,5和25都是同构数。
#include <stdio.h>
main(){
int i,n;
for(i=1;i<100;i++){
if((i*i%10==i)||(i*i%100==i)){
printf("%d\t",i);
}
}
}
编写函数:void cpy(char *dest,char *src),实现字符串的拷贝。
#include <stdio.h>
void cpy(char *dest, char *src);
void cpy(char *dest, char *src)
{
while (*dest != '\0')
{
dest++;
}
dest--;
while (*src != '\0')
{
*dest++ = *src++;
}
}
main()
{
char a[100] = "afsdads", b[100] = "asdf";
cpy(a, b);
puts(a);
}
输入多个字符串,输出其中最短的第一个字符串。
#include <stdio.h>
#include <string.h>
main()
{
char a[100], b[100];
int n = 1;
printf("请输入字符串");
gets(b);
while(1){
printf("请输入字符串");
gets(a);
if(strlen(a)==0)
break;
if (strlen(a) <= strlen(b))
strcpy(b, a);
}
puts(b);
}
逆序输出:输入一个正整数,将该正整数逆序输出。
#include <stdio.h>
main(){
int i=0,j,x;
scanf("%d",&x);
while (x)
{
i=i*10+x%10;
x=x/10;
}
printf("%d",i);
}
中位数
计算有限个数的数据的中位数的方法是:把所有的同类数据按照大小的顺序排列。如果数据的个数是奇数,则中间那个数据就是这群数据的中位数;如果数据的个数是偶数,则中间那 2 个数据的算术平均值就是这群数据的中位数。现在给出 n 个正整数,求它们的中位数。
#include <stdio.h>
main()
{
int a[100], n, i, j, x;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
printf("请输入第%d个数", i + 1);
scanf("%d", &a[i]);
}
for (i = 0; i < n - 1; i++)
{
for (j = 0; j < n - i - 1; j++)
{
if (a[j] > a[j + 1])
{
x = a[j];
a[j] = a[j + 1];
a[j + 1] = x;
}
}
}
for (i = 0; i < n; i++)
{
printf("%d\t", a[i]);
}
printf("\n");
if (n % 2 == 1)
{
x = n / 2;
printf("%d", a[x]);
}
else
{
x = n / 2;
printf("%f", (a[x] + a[x - 1]) / 2.0);
}
}
判断 a[N][N]
是否关于主对角线对称,若对称输出 1,否则输出 0。
#include <stdio.h>
#define N 3
main(){
int a[N][N]={1,4,5,4,2,6,5,6,3};
int i,j,k=1;
for(i=0;i<N;i++){
for(j=0;j<i;j++){
if(a[i][j]!=a[j][i]){
k=0;
}
}
}
printf("%d",k);
}
编写函数:void cat(char *dest,char *src),实现字符串的追加。
#include <stdio.h>
main()
{
char a[20] = "asdfasd", b[20] = "132465";
cat(a, b);
puts(a);
}
void cat(char *dest, char *src)
{
while (*dest != '\0')
{
dest++;
}
dest--;
while (*src != '\0')
{
*dest++ = *src++;
}
}
有一个分数序列:2/1,3/2,5/3,8/5,13/8,……编程求这个序列的前20项之和。
#include <stdio.h>
void main(){
int i,t,n=20;
float a=2,b=1,s=0;
for(i=1;i<=n;i++)
{
s=s+a/b;
t=a;
a=a+b;
b=t;
}
printf("sum=%6.2f",s);
}
#include <stdio.h>
main()
{
int i;
float a = 0, b = 0, s = 0;
for (i = 1; i <= 20; i++){
a=fun(i+1);
b=fun(i);
s+=a*1.0/b;
// printf("%.1f\t%.1f\t%f\n",a,b,s);
}
printf("%f",s);
}
int fun(int x);
int fun(int x){
if(x==0||x==1)return 1;
else return fun(x-2)+fun(x-1);
}
将一个有5个元素的数组中的值(整数)按逆序重新存放。
例: 原来顺序为:8、6、5、4、1,要求改为1、4、5、6、8
#include <stdio.h>
main()
{
int i, a[5];
for (i = 0; i < 5; i++)
{
scanf("%d", &a[i]);
}
for (i = 0; i < 2; i++)
{
int t;
t = a[i];
a[i] = a[5 - i - 1];
a[5 - i - 1] = t;
}
for (i = 0; i < 5; i++)
{
printf("%d", a[i]);
}
}
从键盘上输入一个23的矩阵,将其转秩后形成32的矩阵输出。
#include <stdio.h>
main()
{
int i, j, a[2][3], b[3][2];
for (i = 0; i < 2; i++)
{
for (j = 0; j < 3; j++)
{
printf("请输入第%d行第%d列的数字", i + 1, j + 1);
scanf("%d", &a[i][j]);
b[j][i] = a[i][j];
}
}
for (i = 0; i < 3; i++)
{
for (j = 0; j < 2; j++)
{
printf("%d\t", b[i][j]);
}
printf("\n");
}
}
求200以内(不包含200)能被7或11整除的所有奇数的个数,并求出所有偶数的和,并输出符合要求的奇数的个数和偶数的和。
#include <stdio.h>
main()
{
int i, sum1 = 0, sum2 = 0;
for (i = 1; i < 200; i++)
{
if (i % 11 == 0 || i % 7 == 0)
if (i % 2 == 0)
sum2 += i;
else
sum1++;
}
printf("符合要求的奇数个数为%d\t 偶数和为%d", sum1, sum2);
}
求数列中n的个数{1,12,123,1234…..123456789}的累和,1<=n<=9, 例如n=3, 就是求1,12,123的和。
#include <stdio.h>
main(){
int i;
int sum=0,k=0,n;
printf("请输入一个大于等于1小于等于9的数字");
scanf("%d",&n);
if(n>9||n<1)printf("输入的数不和规则");
for(i=1;i<=n;i++){
k=k*10+i;
sum+=k;
}
printf("%d",sum);
}
#include "stdio.h"
void main()
{
int i,n,s=0,t=0;
scanf("%d",&n);
for(i=1;i<=n;i++){
t=t+i;
s=s+i;
t=t*10;
}
printf("和是%d",s);
}
#include<stdio.h>
main(){
int n=0,i=1,m=0,sun=0;
printf("请输入一个数");
scanf("%d",&n);
while(i<=n){
m=m*10+i;
sun+=m;
i++;
}
printf("%d",sun);
}
杨辉三角
#include <stdio.h>
int fun(int i, int j);
main()
{
int i, j;
for (i = 1; i <= 10; i++)
{
for (j = 1; j <= i; j++)
{
printf("%d\t", fun(i, j));
}
printf("\n");
}
}
int fun(int i, int j)
{
if ( j == 1 || j == i)
return 1;
else
return fun(i - 1, j - 1) + fun(i - 1, j);
}
字母金字塔
#include <stdio.h>
main()
{
int i, j;
char x;
for (i = 1; i <= 11; i++)
{
x = 'A';
for (int c = 1; c <= 11 - i; c++)
printf(" ");
for (j = 1; j <= 2 * i - 1; j++)
{
if (j < i)
printf("%c ", x++);
else
printf("%c ", x--);
}
printf("\n");
}
}
九九乘法表
#include <stdio.h>
main()
{
int i, j;
for (i = 1; i <= 9; i++)
{
for (j = 1; j <= i; j++)
{
printf("%d*%d=%d\t",j,i,i*j);
}
printf("\n");
}
}
输入一个十进制整数,转换成对应的二进制并输出。
#include "stdio.h"
void main(){
int m, n, k,i;//定义变量
int a[16] = { 0 };
printf("请输入一个的数字:\n");
scanf("%d", &n);
printf("十进制数%d转换为二进制数是:\n", n);
for(i = 0; i < 15; ++i) { //for循环从0-14,最高位为符号位,本例始终为0
m = n % 2; //取2的余数
k = n / 2; //取被2整除的结果
n = k;
a[i] = m; //将余数存入数组a数组中
}
for (i = 15; i >=0 ; i--) { //for循环将数组中的16个元素从后往前输出
printf("%d", a[i]);
if (i % 4 == 0) { //每输出4个元素,输出一个空格
printf(" ");
}
}
}
#include <stdio.h>
main()
{
int n, i, j = 0, a[100];
scanf("%d", &n);
for (i = 0; n > 0; i++)
{
a[i] = n % 2;
n = n / 2;
j++;
}
for (i = j - 1; i >= 0; i--)
{
printf("%d", a[i]);
}
}
模拟用户登录,假设正确用户名为zhangsan,密码是123456,用户名和密码均正确时登录成功,用户名或密码有误时显示哪个有误,只有三次重新输入机会,三次后账号被锁定。
#include <stdio.h>
#include <string.h>
main()
{
int i, j, n = 0, *p, *q, x = 1;
char yonghuming[20] = "zhangsan",mima[20] = "123456",a[20],s[20];
for (j = 0; j < 3; j++)
{
printf("请输入用户名");
gets(s);
printf("请输入密码");
gets(a);
if(strcmp(yonghuming,s)!=0){
printf("用户名错误\n");
n++;
}else if((strcmp(mima,a)!=0)){
printf("密码错误\n");
n++;
}else break;
}
if (n < 3)
printf("登录成功");
else
printf("账户被锁定");
}
编写函数fun,函数的功能是:求一个给定字符串中的字母的个数。(使用for循环实现)。
#include <stdio.h>
#include <string.h>
int fun(char s[100]);
main()
{
int i;
char s[100] = "aasfdasf132asdf312" ;
i = fun(s);
printf("%d", i);
}
fun(char s[100])
{
int n = 0, i;
for (int i = 0; i < strlen(s); i++)
{
if ((s[i] >= 'a' && s[i] <= 'z') || (s[i] >= 'A' && s[i <= 'Z']))
n++;
}
return n;
}
求年龄:有5个人坐在一起,问第 5 个人多少岁,他说比第 4 个人大 2 岁。问 第 4 个人多少岁,他说比第 3 个人大 2 岁。问第 3 个人多少岁,他说比第 2 个人大 2 岁。问第 2 个人多少岁,他说比第 1 个人大 2 岁。最后问第 1 个人,他说是10岁。请问第5个人多大?
#include <stdio.h>
main()
{
printf("%d", age(5));
}
int age(int n){
if(n==1) return 10;
return age(n-1)+2;
}
利用海伦公式求三角形面积,三边长a,b,c由键盘输入。若输入的三边长不能构成三角形,输出相应提示信息。
海伦公式如下:其中s=(a+b+c)/2。三角形面积= 根号下s*(s-a)*(s-b)*(s-c)
#include <stdio.h>
#include<math.h>
main(){
float a,b,c,s,x;
scanf("%f %f %f",&a,&b,&c);
if((a+b>c)&&(a+c>b)&&(b+c>a)){
s=(a+b+c)/2;
x=sqrt(s*(s-a)*(s-b)*(s-c));
printf("三角形面积为:%.3f",x);
}else printf("不能构成三角形");
}
已知abc+cba=1333,其中a、b、c均为一位数,例如:617+716=1333, 518+815=1333,试编程求出符合这一规律的a、b、c,并输出结果
#include <stdio.h>
main()
{
int i, j, k;
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++)
{
for (k = 0; k < 10; k++)
{
if (i * 100 + j * 10 + k > 100)
{
if ((i * 100 + j * 10 + k) + (k * 100 + j * 10 + i) == 1333)
{
printf("a=%d\tb=%d\tc=%d\n", i, j, k);
}
}
}
}
}
}
用指针方法编写一个程序,输入3个整数,将它们按由小到大的顺序输出
//交换有问题
#include <stdio.h>
void swap(int *pa,int *pb)
{
int temp;
temp = *pa;
*pa = *pb;
*pb = temp;
}
void main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(a>b)
swap(&a,&b);
if(b>c)
swap(&b,&c);
if(a>c)
swap(&a,&c);
printf("%d,%d,%d",a,b,c);
}
有3个候选人,每个选民只能投票选一人,要求编一个统计选票的程序,先后输入被选人的名字,最后输出各人得票结果。
#include "stdio.h"
#include "string.h"
struct Person
{ char name[20];
int count;
}leader[3]={"Li",0,"Zhang",0,"Sun",0};
void main()
{
int i,j; char leader_name[20];
for (i=1;i<=10;i++)
{
scanf("%s",leader_name);
for(j=0;j<3;j++)
if(strcmp(leader_name,leader[j].name)==0)
leader[j].count++;
}
for(i=0;i<3;i++)
printf("%5s:%d\n",leader[i].name,leader[i].count);
}
完美数
完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。如果一个数恰好等于它的因子之和,则称该数为“完全数”。输出1000以内的完数。
#include <stdio.h>
int FindNum(int n);
int main()
{
int sum = 0;
int i;
for (i = 1; i <= 1000; i++)
{
if (FindNum(i))
{
printf("%d,", i);
printf("\n");
}
}
return 0;
}
int FindNum(int n)
{
int sum = 0,i;
if (n == 1)
return 1;
for (i = 1; i < n; i++)
{
if (n % i == 0)
sum += i;
}
if (sum == n)
return n;
return 0;
}
GitHub Discussions