经典c程序100例详解

news/2025/3/12 12:23:21/

文章目录

    • 前言
    • 001-010
      • 001 无重复数字的三位数
      • 002 发放奖金总数
      • 003 100和68的完全平方数
      • 004 判断这一天是这一年的第几天
      • 005 三个数由小到大输出
      • 006 用*号输出字母C的图案
      • 007 输出特殊图案
      • 008 输出9*9口诀
      • 009 输出国际象棋棋盘
      • 010 打印楼梯
    • 011-020
      • 011 兔子总数
      • 012 101-200之间有多少个素数
      • 013 水仙花数
      • 014 正整数分解质因数
      • 015 成绩分等
      • 016 最大公约数和最小公倍数
      • 017 统计字符个数
      • 018 a+aa+aaa+aaaa+aa...a
      • 019 完数
      • 020 自由落体
    • 021-030
      • 021 猴子吃桃问题
      • 022 三队赛手的名单
      • 023 打印(菱形)
      • 024 2/1,3/2,5/3,8/5,13/8,21/13...前20项和
      • 025 求1+2!+3!+...+20!的和
      • 026 递归方法求5!
      • 027 5个字符逆序输出
      • 028 第五个人多大岁数
      • 029 正整数是几位数
      • 030 回文数
    • 031-040
      • 031 根据字母来判断一下是星期几
      • 032 change color
      • 033 gotoxy()与clrscr()函数
      • 034 练习函数调用
      • 035 文本颜色设置
      • 036 求100之内的素数
      • 对10个数进行排序
      • 038 求一个3*3矩阵对角线元素之和
      • 039 数组插入数
      • 040 将一个数组逆序输出
    • 041-050
      • 041 static定义静态变量
      • 042 使用auto定义变量
      • 043 static的另一用法
      • 044 学习使用external的用法
      • 045 使用register定义变量
      • 046 宏#define命令练习(1)
      • 047 宏#define命令练习(2)
      • 048 宏#define命令练习(3)
      • 049 #if #ifdef和#ifndef的综合应用
      • 050 #include 的应用练习
    • 051-060
      • 051 学习使用按位与 &
      • 052 学习使用按位或 |
      • 053 学习使用按位异或 ^
      • 054 取一个整数a从右端开始的4~7位
      • 055 按位取反~
      • 056 circle画圆形
      • 057 学用line画直线
      • 058 学用rectangle画方形
      • 059 画图,综合例子(1)
    • 061-070
      • 061 打印出杨辉三角形
      • 062 学习putpixel画sin曲线
      • 063 画椭圆ellipse
      • 064 ellipse and rectangle 画图
      • 065 一个最优美的图案。
      • 066 输入3个数a,b,c,按大小顺序输出
      • 067 数组交换
      • 068 m个数变成最前面的n个数
      • 069 最后留下的是原来第几号的那位
      • 070 高度优化的strlen
    • 071-080
      • 071 输出5个学生的数据记录
      • 072 创建一个链表
      • 073 反向输出一个链表
      • 074 连接两个链表
      • 075 一道简单的题目
      • 076 函数指针
      • 077 填空练习(指向指针的指针)
      • 078 找到年龄最大的人
      • 079 字符串排序
      • 080 海滩上原来最少有多少个桃子
    • 081-090
      • 081 809*??=800*??+9*??+1
      • 082 八进制转换为十进制
      • 083 求0—7所能组成的奇数个数
      • 084 一个偶数总能表示为两个素数之和
      • 085 判断一个素数能被几个9整除
      • 086 两个字符串连接
      • 087 回答结果(结构体变量传递)
      • 088 读取7个数(1—50)的整数值
      • 089 电话传递数据加密
      • 090 专升本一题,读结果。
    • 091-100
      • 091 时间函数举例1
      • 092 时间函数举例2
      • 093 时间函数举例3
      • 094 时间函数举例4 猜数游戏
      • 095 家庭财务管理小程序
      • 096 计算字符串中子串出现的次数
      • 097 字符串输入文件直到#为止
      • 098 小写字母全部转换成大写字母输出到文件
      • 099 合并两个文件到一个新文件
      • 100 学生信息写入文件

前言

这是我在整理资料时发现的,网上虽然有,但大都不全,且代码有缺省。从csdn中c语言模块问答的问题来看,这里的很多问题都能映射过去。同时利用这次机会把笔记记录下来,温习一遍C语言,其实整个看下来也相当于把c语言的语法知识点也复习了一遍,笔记的话以后在手机上阅读思考也方便,不会的题也能查阅一下。
另外,部分代码我做了修改。

1.01^365 = 37.7834343329
0.99^365 = 0.0255179644523
积跬步以致千里,积怠堕以致深渊

以下代码测试均在vs2017上测试运行

001-010

001 无重复数字的三位数

题目:
有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

程序分析:
可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。

程序源代码:

#include <stdio.h>
int main()
{int i, j, k;printf("\n");for (i = 1; i < 5; i++) /*以下为三重循环*/for (j = 1; j < 5; j++)for (k = 1; k < 5; k++){if (i != k && i != j && j != k) /*确保i、j、k三位互不相同*/printf("%d,%d,%d\n", i, j, k);}return 0;
}

002 发放奖金总数

题目:
企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?

程序分析:
请利用数轴来分界,定位。注意定义时需把奖金定义成长浮点型。

程序源代码:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{long int i;long double bonus1, bonus2, bonus4, bonus6, bonus10, bonus;scanf("%ld", &i);bonus1 = 100000 * 0.1; bonus2 = bonus1 + 100000 * 0.75;bonus4 = bonus2 + 200000 * 0.5;bonus6 = bonus4 + 200000 * 0.3;bonus10 = bonus6 + 400000 * 0.15;if (i <= 100000)bonus = i * 0.1;else if (i <= 200000)bonus = bonus1 + (i - 100000)*0.075;else if (i <= 400000)bonus = bonus2 + (i - 200000)*0.05;else if (i <= 600000)bonus = bonus4 + (i - 400000)*0.03;else if (i <= 1000000)bonus = bonus6 + (i - 600000)*0.015;elsebonus = bonus10 + (i - 1000000)*0.01;printf("bonus=%lf", bonus);return 0;
}

003 100和68的完全平方数

题目:
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

程序分析:
在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。

程序源代码:

#include <stdio.h>
#include <math.h>
int main()
{long int i;long double x, y;for (i = 1; i < 100000; i++){x = sqrt(i + 100); /*x为加上100后开方后的结果*/y = sqrt(i + 268); /*y为再加上168后开方后的结果*/if (x*x == i + 100 && y*y == i + 268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/printf("\n%ld\n", i);}return 0;
}

004 判断这一天是这一年的第几天

题目:
输入某年某月某日,判断这一天是这一年的第几天?

程序分析:
以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。

程序源代码:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>int main()
{int day, month, year, sum, leap;printf("\nplease input year,month,day\n");scanf("%d,%d,%d", &year, &month, &day);switch (month)/*先计算某月以前月份的总天数*/{case 1:sum = 0; break;case 2:sum = 31; break;case 3:sum = 59; break;case 4:sum = 90; break;case 5:sum = 120; break;case 6:sum = 151; break;case 7:sum = 181; break;case 8:sum = 212; break;case 9:sum = 243; break;case 10:sum = 273; break;case 11:sum = 304; break;case 12:sum = 334; break;default:printf("data error"); return 0;}sum += day;/*再加上某天的天数*/if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))/*判断是不是闰年*/leap = 1;elseleap = 0;if (leap == 1 && month > 2)/*如果是闰年且月份大于2,总天数应该加一天*/sum++;printf("It is the %dth day.", sum);return 0;
}

005 三个数由小到大输出

题目:
输入三个整数x,y,z,请把这三个数由小到大输出。

程序分析:
我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。

程序源代码:

#include <stdio.h>int main()
{int x, y, z, t;scanf("%d%d%d", &x, &y, &z);if (x > y){t = x; x = y; y = t;} /*交换x,y的值*/if (x > z){t = z; z = x; x = t;}/*交换x,z的值*/if (y > z){t = y; y = z; z = t;}/*交换z,y的值*/printf("small to big: %d %d %d\n", x, y, z);return 0;
}

006 用*号输出字母C的图案

题目:
用*号输出字母C的图案。

程序分析:
可先用’*'号在纸上写出字母C,再分行输出。

程序源代码:

#include <stdio.h>int main()
{printf("Hello C-world!\n");printf(" ****\n");printf(" *\n");printf(" * \n");printf(" ****\n");return 0;
}

007 输出特殊图案

题目:
输出特殊图案,请在c环境中运行,看一看,Very Beautiful!

程序分析:
字符共有256个。不同字符,图形不一样。 
     
程序源代码:

#include <stdio.h>int main()
{char a = 176, b = 219;printf("%c%c%c%c%c\n", b, a, a, a, b);printf("%c%c%c%c%c\n", a, b, a, b, a);printf("%c%c%c%c%c\n", a, a, b, a, a);printf("%c%c%c%c%c\n", a, b, a, b, a);printf("%c%c%c%c%c\n", b, a, a, a, b);return 0;
}

008 输出9*9口诀

题目:
输出9*9口诀。

程序分析:
分行与列考虑,共9行9列,i控制行,j控制列。

程序源代码:

#include <stdio.h>int main()
{int i, j, result;printf("\n");for (i = 1; i < 10; i++){for (j = 1; j < 10; j++){result = i * j;printf("%d*%d=%-3d", i, j, result); /*-3d表示左对齐,占3位*/}printf("\n");/*每一行后换行*/}return 0;
}

009 输出国际象棋棋盘

题目:
要求输出国际象棋棋盘。

程序分析
用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格。

程序源代码:

#include <stdio.h>int main()
{int i, j;for (i = 0; i < 8; i++){for (j = 0; j < 8; j++)if ((i + j) % 2 == 0)printf("%c%c", 219, 219);elseprintf(" ");printf("\n");}return 0;
}

010 打印楼梯

题目:
打印楼梯,同时在楼梯上方打印两个笑脸。

程序分析:
用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数。

程序源代码:

#include <stdio.h>int main()
{int i, j;printf("\1\1\n");/*输出两个笑脸*/for (i = 1; i < 11; i++){for (j = 1; j <= i; j++)printf("%c%c", 219, 219);printf("\n");}return 0;
}

011-020

011 兔子总数

题目:
古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

程序分析:
兔子的规律为数列1,1,2,3,5,8,13,21…

程序源代码:

#include <stdio.h>int main()
{long f1, f2;int i;f1 = f2 = 1;for (i = 1; i <= 20; i++){printf("%12ld %12ld", f1, f2);if (i % 2 == 0) printf("\n"); /*控制输出,每行四个*/f1 = f1 + f2; /*前两个月加起来赋值给第三个月*/f2 = f1 + f2; /*前两个月加起来赋值给第三个月*/}return 0;
}

012 101-200之间有多少个素数

题目:
判断101-200之间有多少个素数,并输出所有素数。

程序分析:
判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。

程序源代码:

#include <stdio.h>
#include <math.h>int main()
{int m, i, k, h = 0, leap = 1;printf("\n");for (m = 101; m <= 200; m++){k = sqrt(m + 1);for (i = 2; i <= k; i++)if (m%i == 0){leap = 0; break;}if (leap) {printf("%-4d", m); h++;if (h % 10 == 0)printf("\n");}leap = 1;}printf("\nThe total is %d", h);return 0;
}

013 水仙花数

题目:
打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。

程序分析:
利用for循环控制100-999个数,每个数分解出个位,十位,百位。

程序源代码:

#include <stdio.h>
#include <math.h>int main()
{int i, j, k, n;printf("'water flower'number is:");for (n = 100; n < 1000; n++){i = n / 100;/*分解出百位*/j = n / 10 % 10;/*分解出十位*/k = n % 10;/*分解出个位*/if (i * 100 + j * 10 + k == i * i*i + j * j*j + k * k*k){printf("%-5d", n);}}printf("\n");return 0;
}

014 正整数分解质因数

题目:
将一个正整数分解质因数。例如:输入90,打印出90=233*5。

程序分析:
对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

程序源代码:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>int main()
{int n, i;printf("\nplease input a number:\n");scanf("%d", &n);printf("%d=", n);for (i = 2; i <= n; i++){while (n != i){if (n%i == 0){printf("%d*", i);n = n / i;}elsebreak;}}printf("%d", n);return 0;
}

015 成绩分等

题目:
利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

程序分析:
(a>b)?a:b这是条件运算符的基本例子。

程序源代码:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>int main()
{int score;char grade;printf("please input a score\n");scanf("%d", &score);grade = score >= 90 ? 'A' : (score >= 60 ? 'B' : 'C');printf("%d belongs to %c", score, grade);return 0;
}

016 最大公约数和最小公倍数

题目:
输入两个正整数m和n,求其最大公约数和最小公倍数。

程序分析:
利用辗除法。

程序源代码:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{int a, b, t, r;printf("请输入两个数字:\n");scanf("%d %d", &a, &b);if (a < b){t = b;b = a;a = t;}r = a % b;int n = a * b;while (r != 0)/*利用辗除法,直到r为0为止*/{a = b;b = r;r = a % b;}printf("这两个数的最大公约数为%d,最小公倍数为%d\n", b, n / b);return 0;
}

017 统计字符个数

题目:
输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

程序分析:
利用while语句,条件为输入的字符不为’\n’.
    
程序源代码:

#include<stdio.h>
int main()
{char c;int letters = 0, space = 0, digit = 0, others = 0;printf("please input some characters\n");while ((c = getchar()) != '\n'){if (c >= 'a'&&c <= 'z' || c >= 'A'&&c <= 'Z')letters++;else if (c == ' ')space++;else if (c >= '0'&&c <= '9')digit++;elseothers++;}printf("all in all:char=%d space=%d digit=%d others=%d\n", letters, space, digit, others);return 0;
}

018 a+aa+aaa+aaaa+aa…a

题目:
求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

程序分析:
关键是计算出每一项的值。此处注意,若不使用double而使用int,则最多输出到10位数的整数。

程序源代码:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>int main() {printf("input a, n:");long double a, n;scanf("%lf%lf", &a, &n);long double i, k = a;  // 保留a的初值long double sum = 0;for (i = 1; i <= n; i++) {printf("a = %lf\n", a);sum += a;      // sum = a + aa + aaa + aaaa..........a = a * 10 + k;  // 依次为a, aa, aaa, aaaa, aaaaa........ }printf("sum = %lf\n", sum);return 0;
}

019 完数

题目:
一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数。

程序分析:
遍历1000以内所有数,判断是否满足

程序源代码:

#include<stdio.h>void main()
{int i, j;j = 1;for (i = 3; i < 1000; i++){int sum = 0;while (j < i){if (i % j == 0)sum = sum + j;j++;}j = 1;if (sum == i)printf("%d是完数\n", i);}}

020 自由落体

题目:
一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

程序分析:
见注释

程序源代码:

#include<stdio.h>int main()
{float sn = 100.0, hn = sn / 2;int n;for (n = 2; n <= 10; n++){sn = sn + 2 * hn;/*第n次落地时共经过的米数*/hn = hn / 2; /*第n次反跳高度*/}printf("the total of road is %f\n", sn);printf("the tenth is %f meter\n", hn);return 0;
}

021-030

021 猴子吃桃问题

题目:
猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

程序分析:
采取逆向思维的方法,从后往前推断。

程序源代码:

#include<stdio.h>int main()
{int day, x1, x2;day = 9;x2 = 1;while (day > 0){x1 = (x2 + 1) * 2; /*第一天的桃子数是第2天桃子数加1后的2倍*/x2 = x1;day--;}printf("the total is %d\n", x1);return 0;
}

022 三队赛手的名单

题目:
两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。

程序分析:
判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。  
     
程序源代码:

#include<stdio.h>int main()
{char i, j, k; /*i是a的对手,j是b的对手,k是c的对手*/for (i = 'x'; i <= 'z'; i++)for (j = 'x'; j <= 'z'; j++){if (i != j)for (k = 'x'; k <= 'z'; k++){if (i != k && j != k){if (i != 'x'&&k != 'x'&&k != 'z')printf("order is a--%c\tb--%c\tc--%c\n", i, j, k);}}}return 0;
}

023 打印(菱形)

题目:
打印出如下图案(菱形)
在这里插入图片描述

程序分析:
先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for循环,第一层控制行,第二层控制列。

程序源代码:

#include<stdio.h>int main()
{int i, j, k;for (i = 0; i <= 3; i++){for (j = 0; j <= 2 - i; j++)printf(" ");for (k = 0; k <= 2 * i; k++)printf("*");printf("\n");}for (i = 0; i <= 2; i++){for (j = 0; j <= i; j++)printf(" ");for (k = 0; k <= 4 - 2 * i; k++)printf("*");printf("\n");}return 0;
}

024 2/1,3/2,5/3,8/5,13/8,21/13…前20项和

题目:
有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。

程序分析:
请抓住分子与分母的变化规律。

程序源代码:

#include<stdio.h>int main()
{int n, t, number = 20;float a = 2, b = 1, s = 0;for (n = 1; n <= number; n++){s = s + a / b;t = a; a = a + b; b = t;/*这部分是程序的关键,请读者猜猜t的作用*/}printf("sum is %9.6f\n", s);return 0;
}

025 求1+2!+3!+…+20!的和

题目:
求1+2!+3!+…+20!的和

程序分析:
此程序只是把累加变成了累乘。

程序源代码:

main()
{
float n,s=0,t=1;
for(n=1;n<=20;n++){t*=n;s+=t;}
printf("1+2!+3!...+20!=%e\n",s);
}

026 递归方法求5!

题目:
利用递归方法求5!。

程序分析:
递归公式:fn=fn_1*4!

程序源代码:

#include<stdio.h>int main()
{int i;int fact(int j);for (i = 0; i < 6; i++)printf("\40:%d!=%d\n", i, fact(i));
}int fact(int j)
{int sum;if (j == 0)sum = 1;elsesum = j * fact(j - 1);return sum;
}

027 5个字符逆序输出

题目:
利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。

程序源代码:

#include<stdio.h>int main()
{int i = 5;void palin(int n);printf("\40:");palin(i);printf("\n");return 0;
}
void palin(int n)
{char next;if (n <= 1){next = getchar();printf("\n\0:");putchar(next);}else{next = getchar();palin(n - 1);putchar(next);}
}

028 第五个人多大岁数

题目:
有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?

程序分析:
利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。

程序源代码:

#include<stdio.h>int age(int n)
{int c;if (n == 1) c = 10;else c = age(n - 1) + 2;return(c);
}
int main()
{printf("%d", age(5));return 0;
}

029 正整数是几位数

题目: 给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

程序分析: 学会分解出每一位数,如下解释:

程序源代码:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>int main()
{long a, b, c, d, e, x;scanf("%ld", &x);a = x / 10000; /*分解出万位*/b = x % 10000 / 1000; /*分解出千位*/c = x % 1000 / 100; /*分解出百位*/d = x % 100 / 10; /*分解出十位*/e = x % 10; /*分解出个位*/if (a != 0) printf("there are 5, %ld %ld %ld %ld %ld\n", e, d, c, b, a);else if (b != 0) printf("there are 4, %ld %ld %ld %ld\n", e, d, c, b);else if (c != 0) printf(" there are 3,%ld %ld %ld\n", e, d, c);else if (d != 0) printf("there are 2, %ld %ld\n", e, d);else if (e != 0) printf(" there are 1,%ld\n", e);return 0;
}

030 回文数

题目: 一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

程序分析: 同29例

程序源代码:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>int main()
{long ge, shi, qian, wan, x;scanf("%ld", &x);wan = x / 10000;qian = x % 10000 / 1000;shi = x % 100 / 10;ge = x % 10;if (ge == wan && shi == qian)/*个位等于万位并且十位等于千位*/printf("this number is a huiwen\n");elseprintf("this number is not a huiwen\n");return 0;
}

031-040

031 根据字母来判断一下是星期几

题目:
请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。

程序分析:
用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。

程序源代码:

#include<stdio.h>
#include<conio.h>
int main()
{char letter;printf("please input the first letter of someday\n");while ((letter = _getch()) != 'Y') /*当所按字母为Y时才结束*/{switch (letter){case 'S':printf("please input second letter\n");if ((letter = _getch()) == 'a')printf("saturday\n");else if ((letter = _getch()) == 'u')printf("sunday\n");else printf("data error\n");break;case 'F':printf("friday\n"); break;case 'M':printf("monday\n"); break;case 'T':printf("please input second letter\n");if ((letter = _getch()) == 'u')printf("tuesday\n");else if ((letter = _getch()) == 'h')printf("thursday\n");else printf("data error\n");break;case 'W':printf("wednesday\n"); break;default: printf("data error\n");}}return 0;
}

032 change color

题目:
Press any key to change color, do you want to try it. Please hurry up!

程序源代码:

#include <conio.h>
#include <stdio.h>
#include <windows.h>int textbackground(short iColor)
{HANDLE hd = GetStdHandle(STD_OUTPUT_HANDLE);CONSOLE_SCREEN_BUFFER_INFO csbInfo;GetConsoleScreenBufferInfo(hd, &csbInfo);return SetConsoleTextAttribute(hd, (iColor << 4) | (csbInfo.wAttributes&~0xF0));
}
int main(void)
{int color;for (color = 0; color < 8; color++){textbackground(color);//设置文本的背景颜色_cprintf("this is color%d\r\n", color);_cprintf("press any key to continue\r\n");_getch();//输入的字符看不见}return 0;
}

在这里插入图片描述

033 gotoxy()与clrscr()函数

题目:
学习gotoxy()与clrscr()函数

程序源代码:

#include <conio.h>
#include <stdio.h>
#include <windows.h>void clrscr(void);
void gotoxy(int, int);int textbackground(short iColor)
{HANDLE hd = GetStdHandle(STD_OUTPUT_HANDLE);CONSOLE_SCREEN_BUFFER_INFO csbInfo;GetConsoleScreenBufferInfo(hd, &csbInfo);return SetConsoleTextAttribute(hd, (iColor << 4) | (csbInfo.wAttributes&~0xF0));
}
int main(void)
{clrscr(); /*清屏函数*/textbackground(2);gotoxy(1, 5); /*定位函数*/_cprintf("Output at row 5 column 1\n");textbackground(3);gotoxy(20, 10);_cprintf("Output at row 10 column 20\n");return 0;
}void clrscr(void)
{CONSOLE_SCREEN_BUFFER_INFO    csbiInfo;HANDLE    hConsoleOut;COORD    Home = { 0,0 };DWORD    dummy;hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE);GetConsoleScreenBufferInfo(hConsoleOut, &csbiInfo);FillConsoleOutputCharacter(hConsoleOut, ' ', csbiInfo.dwSize.X * csbiInfo.dwSize.Y, Home, &dummy);csbiInfo.dwCursorPosition.X = 0;csbiInfo.dwCursorPosition.Y = 0;SetConsoleCursorPosition(hConsoleOut, csbiInfo.dwCursorPosition);
}void gotoxy(int x, int y)
{CONSOLE_SCREEN_BUFFER_INFO    csbiInfo;HANDLE    hConsoleOut;hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE);GetConsoleScreenBufferInfo(hConsoleOut, &csbiInfo);csbiInfo.dwCursorPosition.X = x;csbiInfo.dwCursorPosition.Y = y;SetConsoleCursorPosition(hConsoleOut, csbiInfo.dwCursorPosition);
}

034 练习函数调用

题目: 练习函数调用

程序源代码:

#include <stdio.h>void hello_world(void)
{printf("Hello, world!\n");
}
void three_hellos(void)
{int counter;for (counter = 1; counter <= 3; counter++)hello_world();/*调用此函数*/
}
void main(void)
{three_hellos();/*调用此函数*/
}

035 文本颜色设置

题目: 文本颜色设置

程序源代码:

#include <stdio.h>
#include <conio.h>
#include <windows.h>void color(int c)
{SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c);
}
int main()
{color(0);printf("这是0号颜色\n");color(1);printf("这是1号颜色\n");color(2);printf("这是2号颜色\n");color(3);printf("这是3号颜色\n");color(4);printf("这是4号颜色\n");color(5);printf("这是5号颜色\n");color(6);printf("这是6号颜色\n");color(7);printf("这是7号颜色\n");color(8);printf("这是8号颜色\n");color(9);printf("这是9号颜色\n");color(10);printf("这是10号颜色\n");color(11);printf("这是11号颜色\n");color(12);printf("这是12号颜色\n");color(13);printf("这是13号颜色\n");color(14);printf("这是14号颜色\n");color(15);printf("这是15号颜色\n");//数值超过15改变的就不是文本的颜色了改变的是背景色return 0;
}

在这里插入图片描述

036 求100之内的素数

**题目:**求100之内的素数

程序源代码:

#include <stdio.h>
#include <math.h>
#define N 101
int main()
{int i, j, line, a[N];for (i = 2; i < N; i++) a[i] = i;for (i = 2; i < sqrt(N); i++)for (j = i + 1; j < N; j++){if (a[i] != 0 && a[j] != 0)if (a[j] % a[i] == 0)a[j] = 0;}printf("\n");for (i = 2, line = 0; i < N; i++){if (a[i] != 0){printf("%5d", a[i]);line++;}if (line == 10){printf("\n");line = 0;}}return  0;
}

对10个数进行排序

题目:
对10个数进行排序

程序分析:
可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,下次类推,即用第二个元素与后8个进行比较,并进行交换。  
     
程序源代码:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define N 10
int main()
{int i, j, min, tem, a[N];/*input data*/printf("please input ten num:\n");for (i = 0; i < N; i++){printf("a[%d]=", i);scanf("%d", &a[i]);}printf("\n");for (i = 0; i < N; i++)printf("%5d", a[i]);printf("\n");/*sort ten num*/for (i = 0; i < N - 1; i++){min = i;for (j = i + 1; j < N; j++)if (a[min] > a[j]) min = j;tem = a[i];a[i] = a[min];a[min] = tem;}/*output data*/printf("After sorted \n");for (i = 0; i < N; i++)printf("%5d", a[i]);return 0;
}

038 求一个3*3矩阵对角线元素之和

题目: 求一个3*3矩阵对角线元素之和

程序分析: 利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。

程序源代码:

#include <stdio.h>
#define N 10
int main()
{float a[3][3], sum = 0;int i, j;printf("please input rectangle element:\n");for (i = 0; i < 3; i++)for (j = 0; j < 3; j++)scanf("%f", &a[i][j]);for (i = 0; i < 3; i++)sum = sum + a[i][i];printf("duijiaoxian he is %6.2f", sum);return 0;
}

039 数组插入数

题目:
有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

程序分析:
首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。

程序源代码:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define N 10
int main()
{int a[11] = { 1,4,6,9,13,16,19,28,40,100 };int temp1, temp2, number, end, i, j;printf("original array is:\n");for (i = 0; i < 10; i++)printf("%5d", a[i]);printf("\n");printf("insert a new number:");scanf("%d", &number);end = a[9];if (number > end)a[10] = number;else{for (i = 0; i < 10; i++){if (a[i] > number){temp1 = a[i];a[i] = number;for (j = i + 1; j < 11; j++){temp2 = a[j];a[j] = temp1;temp1 = temp2;}break;}}}for (i = 0; i < 11; i++)printf("%6d", a[i]);return 0;
}

040 将一个数组逆序输出

题目: 将一个数组逆序输出。

程序分析: 用第一个与最后一个交换。

程序源代码:

#include <stdio.h>
#define N 5
int main()
{int a[N] = { 9,6,5,4,1 }, i, temp;printf("\n original array:\n");for (i = 0; i < N; i++)printf("%4d", a[i]);for (i = 0; i < N / 2; i++){temp = a[i];a[i] = a[N - i - 1];a[N - i - 1] = temp;}printf("\n sorted array:\n");for (i = 0; i < N; i++)printf("%4d", a[i]);return 0;
}

041-050

041 static定义静态变量

题目: 学习static定义静态变量的用法

程序源代码:

#include <stdio.h>void varfunc()
{int var = 0;static int static_var = 0;printf("\40:var equal %d \n", var);printf("\40:static var equal %d \n", static_var);printf("\n");var++;static_var++;
}
int main()
{int i;for (i = 0; i < 3; i++)varfunc();return 0;
}

042 使用auto定义变量

题目: 学习使用auto定义变量的用法

程序源代码:


#include <stdio.h>int main()
{int i, num;num = 2;for (i = 0; i < 3; i++){printf("\40: The num equal %d \n", num);num++;{auto num = 1;printf("\40: The internal block num equal %d \n", num);num++;}}return 0;
}

043 static的另一用法

题目: 学习使用static的另一用法。

程序源代码:

#include <stdio.h>int main()
{int i, num;num = 2;for (i = 0; i < 3; i++){printf("\40: The num equal %d \n", num);num++;{static int num = 1;printf("\40:The internal block num equal %d\n", num);num++;}}return 0;
}

044 学习使用external的用法

题目: 学习使用external的用法。

程序源代码:

#include <stdio.h>
#include <stdlib.h>int x = 0;
int y = 5;
int func1()
{extern int p, q;printf("p is %d, q is %d\n", p, q);return 0;
}int p = 8;
int q = 10;
int main()
{func1();printf("x is %d, y is %d\n", x, y);
}

045 使用register定义变量

题目: 学习使用register定义变量的方法。

程序源代码:

#include <stdio.h>int main()
{register int i;int tmp = 0;for (i = 1; i <= 100; i++)tmp += i;printf("The sum is %d\n", tmp);return 0;
}

046 宏#define命令练习(1)

**题目:**宏#define命令练习(1)

程序源代码:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>#define TRUE 1
#define FALSE 0
#define SQ(x) (x)*(x)
void main()
{int num;int again = 1;printf("\40: Program will stop if input value less than 50.\n");while (again){printf("\40:Please input number==>");scanf("%d", &num);printf("\40:The square for this number is %d \n", SQ(num));if (num >= 50)again = TRUE;elseagain = FALSE;}
}

047 宏#define命令练习(2)

**题目:**宏#define命令练习(2)

程序源代码:

#include <stdio.h>
/*宏定义中允许包含两道衣裳命令的情形,此时必须在最右边加上"\"*/
#define exchange(a,b){ \
int t = a; \
a = b; \
b = t; \
}
int main(void)
{int x = 10;int y = 20;printf("x=%d; y=%d\n", x, y);exchange(x, y);printf("x=%d; y=%d\n", x, y);return 0;
}

048 宏#define命令练习(3)

题目: 宏#define命令练习(3)

程序源代码:

#include <stdio.h>#define LAG >
#define SMA <
#define EQ ==int main()
{int i = 10;int j = 20;if (i LAG j)printf("\40: %d larger than %d \n", i, j);else if (i EQ j)printf("\40: %d equal to %d \n", i, j);else if (i SMA j)printf("\40:%d smaller than %d \n", i, j);elseprintf("\40: No such value.\n");return 0;
}

049 #if #ifdef和#ifndef的综合应用

题目:#if #ifdef和#ifndef的综合应用。

程序源代码:

#include <stdio.h>#define MAX
#define MAXIMUM(x,y) (x>y)?x:y
#define MINIMUM(x,y) (x>y)?y:xint main()
{int a = 10, b = 20;
#ifdef MAXprintf("\40: The larger one is %d\n", MAXIMUM(a, b));
#elseprintf("\40: The lower one is %d\n", MINIMUM(a, b));
#endif
#ifndef MINprintf("\40: The lower one is %d\n", MINIMUM(a, b));
#elseprintf("\40: The larger one is %d\n", MAXIMUM(a, b));
#endif
#undef MAX
#ifdef MAXprintf("\40: The larger one is %d\n", MAXIMUM(a, b));
#elseprintf("\40: The lower one is %d\n", MINIMUM(a, b));
#endif
#define MIN
#ifndef MINprintf("\40: The lower one is %d\n", MINIMUM(a, b));
#elseprintf("\40: The larger one is %d\n", MAXIMUM(a, b));
#endifreturn 0;
}

050 #include 的应用练习

题目:#include 的应用练习

程序源代码:

//test.h 文件如下:
#define LAG >
#define SMA <
#define EQ ==
//#include "test.h" /*一个新文件50.c,包含test.h*/
#include <stdio.h>
int main()
{int i = 10;int j = 20;if (i LAG j)printf("\40: %d larger than %d \n", i, j);else if (i EQ j)printf("\40: %d equal to %d \n", i, j);else if (i SMA j)printf("\40:%d smaller than %d \n", i, j);elseprintf("\40: No such value.\n");return 0;
}

051-060

051 学习使用按位与 &

题目: 学习使用按位与 & 。

程序分析: 0&0=0; 0&1=0; 1&0=0; 1&1=1

程序源代码:

#include <stdio.h>
int main()
{int a, b;a = 077;b = a & 3;printf("\40: The a & b(decimal) is %d \n", b);b &= 7;printf("\40: The a & b(decimal) is %d \n", b);return 0;
}

052 学习使用按位或 |

题目: 学习使用按位或 | 。

程序分析: 0|0=0; 0|1=1; 1|0=1; 1|1=1

程序源代码:

#include <stdio.h>
int main()
{int a, b;a = 077;b = a | 3;printf("\40: The a & b(decimal) is %d \n", b);b |= 7;printf("\40: The a & b(decimal) is %d \n", b);return 0;
}

053 学习使用按位异或 ^

题目: 学习使用按位异或 ^ 。

程序分析: 0^0=0; 0^1=1; 1^0=1; 1^1=0

程序源代码:

#include <stdio.h>
int main()
{int a, b;a = 077;b = a ^ 3;printf("\40: The a & b(decimal) is %d \n", b);b ^= 7;printf("\40: The a & b(decimal) is %d \n", b);return 0;
}

054 取一个整数a从右端开始的4~7位

题目: 取一个整数a从右端开始的4~7位。

程序分析: 可以这样考虑:
(1)先使a右移4位。
(2)设置一个低4位全为1,其余全为0的数。可用(0<<4)
(3)将上面二者进行&运算。

程序源代码:

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>
int main()
{unsigned a, b, c, d;scanf("%o", &a);b = a >> 4;c = ~(~0 << 4);d = b & c;printf("%o\n%o\n", a, d);return 0;
}

055 按位取反~

题目: 学习使用按位取反~。

程序分析:~0=1; ~1=0;

程序源代码:

#include <stdio.h>
int main()
{int a, b;a = 234;b = ~a;printf("\40: The a's 1 complement(decimal) is %d \n", b);a = ~a;printf("\40: The a's 1 complement(hexidecimal) is %x \n", a);return 0;
}

056 circle画圆形

题目: 画图,学用circle画圆形。

程序分析: 需要安装graphics https://blog.csdn.net/weixin_41586634/article/details/89554355

程序源代码:

#include <stdio.h>
#include <graphics.h> /*circle*/
int main()
{int driver, mode, i;float j = 1, k = 1;driver = VGA; mode = VGAHI;initgraph(&driver, &mode, (char*)"");setbkcolor(YELLOW);for (i = 0; i <= 25; i++){setcolor(WHITE);circle(310, 250, k);k = k + j;j = j + 0.3;}system("pause");return 0;
}

057 学用line画直线

题目: 画图,学用line画直线。

程序源代码:

#include <stdio.h>
#include <graphics.h> int main()
{int driver, mode, i;float x0, y0, y1, x1;float j = 12, k;driver = VGA; mode = VGAHI;initgraph(&driver, &mode, (char*)"");setbkcolor(BLUE);x0 = 263; y0 = 263; y1 = 275; x1 = 275;for (i = 0; i <= 18; i++){setcolor(YELLOW);line(x0, y0, x0, y1);x0 = x0 - 5;y0 = y0 - 5;x1 = x1 + 5;y1 = y1 + 5;j = j + 10;}x0 = 263; y1 = 275; y0 = 263;for (i = 0; i <= 20; i++){setcolor(WHITE);line(x0, y0, x0, y1);x0 = x0 + 5;y0 = y0 + 5;y1 = y1 - 5;}system("pause");return 0;
}

058 学用rectangle画方形

题目: 画图,学用rectangle画方形。

程序分析: 利用for循环控制100-999个数,每个数分解出个位,十位,百位。这里需要注意outtextxy的乱码问题,强转或者直接定义都不行。需使用MultiByteToWideChar方法去避免。

程序源代码:

#include <graphics.h> 
#include <conio.h>void CharToTCHAR(const char* _char, TCHAR* tchar)
{int iLength = MultiByteToWideChar(CP_UTF8, 0, _char, strlen(_char) + 1, NULL, 0);MultiByteToWideChar(CP_UTF8, 0, _char, strlen(_char) + 1, tchar, iLength);
}int main()
{int x0, y0, y1, x1, driver, mode, i;driver = VGA; mode = VGAHI;initgraph(&driver, &mode, (char*)"");setbkcolor(BLUE);x0 = 263; y0 = 263; y1 = 275; x1 = 275;for (i = 0; i <= 18; i++){setcolor(WHITE);rectangle(x0, y0, x1, y1);x0 = x0 - 5;y0 = y0 - 5;x1 = x1 + 5;y1 = y1 + 5;}settextstyle(0, 0, NULL);const char* content = "How beautiful it is!";TCHAR content_t[21];CharToTCHAR(content, content_t);outtextxy(150, 40, content_t);line(130, 60, 480, 60);setcolor(2);circle(269, 269, 137);system("pause");return 0;
}

059 画图,综合例子(1)

题目: 画图,综合例子(1)

程序分析: 这里需要注意outtextxy的乱码问题,强转或者直接定义都不行。需使用MultiByteToWideChar方法去避免。

程序源代码:


#include <graphics.h>
#include <math.h>
#include <conio.h># define PAI 3.1415926
# define B 0.809void CharToTCHAR(const char* _char, TCHAR* tchar)
{int iLength = MultiByteToWideChar(CP_UTF8, 0, _char, strlen(_char) + 1, NULL, 0);MultiByteToWideChar(CP_UTF8, 0, _char, strlen(_char) + 1, tchar, iLength);
}int main()
{int i, j, k, x0, y0, x, y, driver, mode;float a;driver = CGA; mode = CGAC0;initgraph(&driver, &mode, (char*)"");setcolor(3);setbkcolor(GREEN);x0 = 150; y0 = 100;circle(x0, y0, 10);circle(x0, y0, 20);circle(x0, y0, 50);for (i = 0; i < 16; i++){a = (2 * PAI / 16)*i;x = ceil(x0 + 48 * cos(a));y = ceil(y0 + 48 * sin(a)*B);setcolor(2); line(x0, y0, x, y);}setcolor(3); circle(x0, y0, 60);/* Make 0 time normal size letters *//*DEFAULT_FONT               0         8 * 8点阵字型(缺省字体)TRIPLEx_FONT                1         笔划式三倍字型(三倍字体)SMALL_FONT                  2         笔划式小字型(小字体)SANS_SERIF_FONT             3         笔划式字(Sanserif字体)GOTHIC_FONT                 4         笔划黑体字型(哥特体)HORIZ_DIR               0        从左到右显示(水平方向)VERT_DIR                1        从底向上显示(垂直方向)*/settextstyle(0, 0, 0);const char* content = "press a key:";TCHAR content_t[13];CharToTCHAR(content, content_t);outtextxy(10, 170, content_t);_getch();/*EMPTy_FILL               0         用背景色填充区域(空填)SOLID_FILL               1         用实填充色填充(实填)LINE_FILL                2         ----填充LTSLASH_FILL             3         ///填充SLASH_FILL               4         ///用粗线填充BKSLASH_FILL             5         用粗线填充LTBKSLASH_FILL           6         填充HATCH_FILL               7         网格线填充xHATCH_FILL              8         斜网格线填充INTEREAVE_FILL           9         间隔点填充WIDE_DOT_FILL            10        大间隔点填充CLOSE_DOT_FILL           11        小间隔点填充USER_FILL                12        用户定义图样填充*/setfillstyle(7, YELLOW);floodfill(202, 100, WHITE);_getch();for (k = 0; k <= 500; k++){setcolor(3);for (i = 0; i <= 16; i++){a = (2 * PAI / 16)*i + (2 * PAI / 180)*k;x = ceil(x0 + 48 * cos(a));y = ceil(y0 + 48 + sin(a)*B);setcolor(2); line(x0, y0, x, y);}for (j = 1; j <= 50; j++){a = (2 * PAI / 16)*i + (2 * PAI / 180)*k - 1;x = ceil(x0 + 48 * cos(a));y = ceil(y0 + 48 * sin(a)*B);line(x0, y0, x, y);}}system("pause");return 0}

补充:网上有很多综合性的画法,有兴趣可以研究下。
https://blog.csdn.net/ssAfterHard/article/details/80779344
在这里插入图片描述

https://blog.csdn.net/zggzgw/article/details/75070894
在这里插入图片描述

061-070

061 打印出杨辉三角形

题目: 打印出杨辉三角形(要求打印出10行如下图)

程序分析:
       1
      1  1
      1  2  1
      1  3  3  1
      1  4  6  4  1
      1  5  10 10 5  1

程序源代码:

#include <stdio.h>int main()
{int i, j;int a[10][10];printf("\n");for (i = 0; i < 10; i++){a[i][0] = 1;a[i][i] = 1;}for (i = 2; i < 10; i++)for (j = 1; j < i; j++)a[i][j] = a[i - 1][j - 1] + a[i - 1][j];for (i = 0; i < 10; i++){for (j = 0; j <= i; j++)printf("%5d", a[i][j]);printf("\n");}system("pause");return 0;
}

062 学习putpixel画sin曲线

题目: 学习putpixel画sin曲线。
在这里插入图片描述

程序源代码:

#include<math.h> 
#include<graphics.h>
#include<conio.h>
int main()
{initgraph(640, 480);/*sin函数曲线*/int i, j, n;for (j = 200; j >= 100; j--) // 用100 - 200代替sin值的0 - 1,相当于放大{i = 200 + 20 * asin(double(200 - j) / 100);//预先右移200(只是为了位置清晰)n = i;putpixel(i,j,RED);//color可根据RGB自行选择putpixel(400 + 40 * asin(1) - i,j,RED);//对称画点,坐标计算即可得到}for (j = 200; j <= 300; j++){i = 20 * asin(1) + n + 20 * asin(double(j - 200) / 100);putpixel(i, j, RED);putpixel(2 * n + 80 * asin(1) - i, j, RED);}_getch();closegraph();return 0;
}

063 画椭圆ellipse

题目: 画椭圆ellipse

程序源代码:

#include <graphics.h>
#include <conio.h>int main()
{int x = 360, y = 160, driver = VGA, mode = VGAHI;int num = 20, i;int top, bottom;initgraph(&driver, &mode, (char*)"");top = y - 30;bottom = y - 30;for (i = 0; i < num; i++){ellipse(0,top, 360, bottom);top -= 5;bottom += 5;}_getch();return 0;
}

064 ellipse and rectangle 画图

题目: 利用ellipse and rectangle 画图。

程序源代码:

#include <graphics.h>
#include <conio.h>int main()
{int x = 360, y = 160, driver = VGA, mode = VGAHI;int num = 20, i;int top, bottom;initgraph(&driver, &mode, (char*)"");top = y - 30;bottom = y - 30;for (i = 0; i < num; i++){ellipse(0,top, 360, bottom);top -= 5;bottom += 5;}int x0 = 263, y0 = 263, y1 = 275, x1 = 275;for (i = 0; i <= 18; i++){setcolor(WHITE);rectangle(x0, y0, x1, y1);x0 = x0 - 5;y0 = y0 - 5;x1 = x1 + 5;y1 = y1 + 5;}_getch();return 0;
}

065 一个最优美的图案。

题目: 一个最优美的图案。

程序源代码:

#include <graphics.h>
#include <math.h>
#include <dos.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>
#define MAXPTS 15
#define PI 3.1415926
struct PTS {int x, y;
};
double AspectRatio = 0.85;
void LineToDemo(void)
{//struct viewporttype vp;struct PTS points[MAXPTS];int i, j, h, w, xcenter, ycenter;int radius, angle, step;double rads;printf(" MoveTo / LineTo Demonstration");//getviewsettings(&vp);//h = vp.bottom - vp.top;//w = vp.right - vp.left;h = 400;w = 800;xcenter = w / 2 -100; /* Determine the center of circle */ycenter = h / 2 +50;radius = (h - 30) / (AspectRatio * 2);step = 360 / MAXPTS; /* Determine # of increments */angle = 0; /* Begin at zero degrees */for (i = 0; i < MAXPTS; ++i) { /* Determine circle intercepts */rads = (double)angle * PI / 180.0; /* Convert angle to radians */points[i].x = xcenter + (int)(cos(rads) * radius);points[i].y = ycenter - (int)(sin(rads) * radius * AspectRatio);angle += step; /* Move to next increment */}circle(xcenter, ycenter, radius); /* Draw bounding circle */for (i = 0; i < MAXPTS; ++i) { /* Draw the cords to the circle */for (j = i; j < MAXPTS; ++j) { /* For each remaining intersect */moveto(points[i].x, points[i].y); /* Move to beginning of cord */lineto(points[j].x, points[j].y); /* Draw the cord */}}
}
int main()
{int driver, mode;driver = CGA; mode = CGAC0;initgraph(&driver, &mode, (char*)"");setcolor(WHITE);setbkcolor(GREEN);LineToDemo();system("pause");return 0;
}

066 输入3个数a,b,c,按大小顺序输出

题目: 输入3个数a,b,c,按大小顺序输出。

程序分析: 利用指针方法。

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>int main()
{int n1, n2, n3;int *pointer1, *pointer2, *pointer3;printf("please input 3 number:n1,n2,n3:");scanf("%d,%d,%d", &n1, &n2, &n3);pointer1 = &n1;pointer2 = &n2;pointer3 = &n3;void swap(int * p1, int *p2);if (n1 > n2) swap(pointer1, pointer2);if (n1 > n3) swap(pointer1, pointer3);if (n2 > n3) swap(pointer2, pointer3);printf("the sorted numbers are:%d,%d,%d\n", n1, n2, n3);
}
void swap(int * p1, int *p2)
{int p;p = *p1; *p1 = *p2; *p2 = p;
}

067 数组交换

题目:
输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。

程序分析: 谭浩强的书中答案有问题。

程序源代码:

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>
#include <stdlib.h>
#define N 10
//输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
int main()
{int array[N];int i, j;int nin, max, n = 0, m = 0;for (i = 0; i < N; i++){scanf("%d", &array[i]);}nin = max = array[0];for (i = 0; i < N; i++){if (array[i] < nin){n = i;nin = array[i];}if (array[i] > max){m = i;max = array[i];}}int temp;temp = array[n]; array[n] = array[0]; array[0] = temp;int temp1;temp1 = array[m]; array[m] = array[N - 1]; array[N - 1] = temp1;printf("After:");for (i = 0; i < N; i++){printf("%d  ", array[i]);}return 0;
}

068 m个数变成最前面的n个数

题目:
有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的n个数

程序源代码:

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>int main()
{int number[20], n, m, i;printf("the total numbers is:");scanf("%d", &n);printf("back m:");scanf("%d", &m);for (i = 0; i < n; i++){printf("number[%d]:\n",i);scanf("%d,", &number[i]);}void move(int array[], int n, int m);move(number, n, m);for (i = 0; i < n - 1; i++)printf("%d,", number[i]);printf("%d", number[n - 1]);return 0;
}
void move(int array[], int n,int m)
{int *p, array_end;array_end = *(array + n - 1);for (p = array + n - 1; p > array; p--)*p = *(p - 1);*array = array_end;m--;if (m > 0) move(array, n, m);
}

069 最后留下的是原来第几号的那位

题目:
有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

程序源代码:

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#define nmax 50
int main()
{int i, k, m, n, num[nmax], *p;printf("please input the total of numbers:");scanf("%d", &n);p = num;for (i = 0; i < n; i++)*(p + i) = i + 1;i = 0;k = 0;m = 0;while (m < n - 1){if (*(p + i) != 0) k++;if (k == 3){*(p + i) = 0;k = 0;m++;}i++;if (i == n) i = 0;}while (*p == 0) p++;printf("%d is left\n", *p);return 0;
}

070 高度优化的strlen

题目:
写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。

程序分析: 高度优化的strlen

程序源代码:

#include <stdio.h>int main()
{const char* p = "qwerasdfkalkdsfjoqkf12314sdfs";unsigned int strlen(const char *str);printf("%u", strlen(p));return 0;
}
unsigned int strlen(const char *str) {const char *char_ptr;const unsigned long int *longword_ptr;unsigned long int longword, himagic, lomagic;for (char_ptr = str; ((unsigned long int) char_ptr & (sizeof(longword) - 1)) != 0; ++char_ptr)if (*char_ptr == '\0')return char_ptr - str;longword_ptr = (unsigned long int *) char_ptr;himagic = 0x80808080L;lomagic = 0x01010101L;if (sizeof(longword) > 4) {himagic = ((himagic << 16) << 16) | himagic;lomagic = ((lomagic << 16) << 16) | lomagic;}for (;;) {longword = *longword_ptr++;if (((longword - lomagic) & ~longword & himagic) != 0) {const char *cp = (const char *)(longword_ptr - 1);if (cp[0] == 0) return cp - str;if (cp[1] == 0) return cp - str + 1;if (cp[2] == 0) return cp - str + 2;if (cp[3] == 0) return cp - str + 3;if (sizeof(longword) > 4) {if (cp[4] == 0) return cp - str + 4;if (cp[5] == 0) return cp - str + 5;if (cp[6] == 0) return cp - str + 6;if (cp[7] == 0) return cp - str + 7;}}}
}

071-080

071 输出5个学生的数据记录

题目:
编写input()和output()函数输入,输出5个学生的数据记录。

程序源代码

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#define N 5
struct student
{char num[6];char name[8];int score[4];
} stu[N];void input(struct student stu[])
{ int i, j;for (i = 0; i < N; i++){printf("\n please input %d of %d\n", i + 1, N);printf("num: ");scanf("%s", stu[i].num);printf("name: ");scanf("%s", stu[i].name);for (j = 0; j < 3; j++){printf("score %d.", j + 1);scanf("%d", &stu[i].score[j]);}printf("\n");}
}
void print(struct student stu[])
{ int i, j;printf("\nNo. Name Sco1 Sco2 Sco3\n");for (i = 0; i < N; i++){printf("%-6s%-10s", stu[i].num, stu[i].name);for (j = 0; j < 3; j++)printf("%-8d", stu[i].score[j]);printf("\n");}
}
int main()
{input(stu);print(stu);return 0;
}

072 创建一个链表

题目: 创建一个链表。

程序源代码:

#include <stdlib.h>
#include <stdio.h>struct list
{int data;struct list *next;
};typedef struct list node;
typedef node *link;int main()
{link ptr = NULL;link head = (link)malloc(sizeof(node));int num, i;ptr = head;printf("please input 5 numbers==>\n");for (i = 0; i <= 4; i++){scanf("%d", &num);ptr->data = num;ptr->next = (link)malloc(sizeof(node));if (i == 4) ptr->next = NULL;else ptr = ptr->next;}ptr = head;while (ptr != NULL){printf("The value is ==>%d\n", ptr->data);ptr = ptr->next;}return 0;
}

073 反向输出一个链表

题目: 反向输出一个链表。

程序源代码:

#define _CRT_SECURE_NO_WARNINGS#include <stdlib.h>
#include <stdio.h>struct list
{int data;struct list *next;
};
typedef struct list node;
typedef node *link;
int main()
{link ptr, head, tail;int num, i;tail = (link)malloc(sizeof(node));tail->next = NULL;ptr = tail;printf("\nplease input 5 data==>\n");for (i = 0; i <= 4; i++){scanf("%d", &num);ptr->data = num;head = (link)malloc(sizeof(node));head->next = ptr;ptr = head;}ptr = ptr->next;while (ptr != NULL){printf("The value is ==>%d\n", ptr->data);ptr = ptr->next;}return 0;
}

074 连接两个链表

题目: 连接两个链表。

程序源代码:

#define _CRT_SECURE_NO_WARNINGS#include <stdlib.h>
#include <stdio.h>struct list
{int data;struct list *next;
};
typedef struct list node;
typedef node *link;link delete_node(link pointer, link tmp)
{if (tmp == NULL) /*delete first node*/return pointer->next;else{if (tmp->next->next == NULL)/*delete last node*/tmp->next = NULL;else /*delete the other node*/tmp->next = tmp->next->next;return pointer;}
}
void selection_sort(link pointer, int num)
{link tmp, btmp;int i, min;for (i = 0; i < num; i++){tmp = pointer;min = tmp->data;btmp = NULL;while (tmp->next){if (min > tmp->next->data){min = tmp->next->data;btmp = tmp;}tmp = tmp->next;}printf("\40: %d\n", min);pointer = delete_node(pointer, btmp);}
}
link create_list(int array[], int num)
{link tmp1, tmp2, pointer;int i;pointer = (link)malloc(sizeof(node));pointer->data = array[0];tmp1 = pointer;for (i = 1; i < num; i++){tmp2 = (link)malloc(sizeof(node));tmp2->next = NULL;tmp2->data = array[i];tmp1->next = tmp2;tmp1 = tmp1->next;}return pointer;
}
link concatenate(link pointer1, link pointer2)
{link tmp;tmp = pointer1;while (tmp->next)tmp = tmp->next;tmp->next = pointer2;return pointer1;
}
int main(void)
{int arr1[] = { 3,12,8,9,11 };link ptr;ptr = create_list(arr1, 5);selection_sort(ptr, 5);return 0;
}

075 一道简单的题目

题目: 放松一下,算一道简单的题目。

程序源代码:

#include <stdio.h>int main()
{int i, n;for (i = 1; i < 5; i++){n = 0;if (i != 1)n = n + 1;if (i == 3)n = n + 1;if (i == 4)n = n + 1;if (i != 4)n = n + 1;if (n == 3)printf("zhu hao shi de shi:%c", 64 + i);}return 0;
}

076 函数指针

题目:
编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n,当输入n为奇数时,调用函数1/1+1/3+…+1/n(利用函数指针)

程序源代码:

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>typedef float(*funp)(int n);int main()
{float peven(int n); float podd(int n);float dcall(funp fp, int n);float sum;int n;while (1){scanf("%d", &n);if (n > 1)break;}if (n % 2 == 0){printf("Even=");sum = dcall(peven, n);}else{printf("Odd=");sum = dcall(podd, n);}printf("%f", sum);return 0;
}
float peven(int n)
{float s;int i;s = 1;for (i = 2; i <= n; i += 2)s += 1 / (float)i;return(s);
}
float podd(int n)
{float s;int i;s = 0;for (i = 1; i <= n; i += 2)s += 1 / (float)i;return(s);
}float dcall(funp fp, int n)
{float s;s = (*fp)(n);return(s);
}

077 填空练习(指向指针的指针)

题目: 填空练习(指向指针的指针)

程序分析: 将q直接指向字符串数组,然后通过p后移去指向s[]中的元素,从而使用*p获取里面的值。

程序源代码:

int main()
{char *s[] = { (char *)"man",(char *)"woman",(char *)"girl",(char *)"boy",(char *)"sister" };char **q = NULL;int k;for (k = 0; k < 5; k++){q = s + k;/*这里填写什么语句*/printf("%s\n", *q);}
}

078 找到年龄最大的人

题目:
找到年龄最大的人,并输出。请找出程序中有什么问题。

程序源代码

#include <stdio.h>
#define N 4static struct man
{char name[20];int age;
} person[N] = { "li",18,"wang",19,"zhang",20,"sun",22 };
int main()
{struct man *q=NULL, *p=NULL;int i, m = 0;p = person;for (i = 0; i < N; i++){if (m < p->age)q = p++;m = q->age;}printf("%s,%d", (*q).name, (*q).age);return 0;
}

079 字符串排序

题目: 字符串排序。

程序分析: 比较并交换

程序源代码:

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>
#include <string.h>int main()
{char str1[20], str2[20], str3[20];void swap(char *p1, char *p2);printf("please input three strings\n");scanf("%s", str1);scanf("%s", str2);scanf("%s", str3);if (strcmp(str1, str2) > 0) swap(str1, str2);if (strcmp(str1, str3) > 0) swap(str1, str3);if (strcmp(str2, str3) > 0) swap(str2, str3);printf("after being sorted\n");printf("%s\n%s\n%s\n", str1, str2, str3);
}
void swap(char *p1, char *p2)
{char p[20];strcpy(p, p1); strcpy(p1, p2); strcpy(p2, p);
}

080 海滩上原来最少有多少个桃子

题目:
海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?

程序源代码:

#include <stdio.h>int main()
{int i, m, j, k, count;for (i = 4; i < 10000; i += 4){count = 0;m = i;for (k = 0; k < 5; k++){j = i / 4 * 5 + 1;i = j;if (j % 4 == 0)count++;elsebreak;}i = m;if (count == 4){printf("%d\n", count);break;}}return 0;
}

081-090

081 809*??=800*??+9*??+1

题目:
809*??=800*??+9*??+1 其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。

程序源代码:

#include <stdio.h>void output(long b, long i)
{printf("\n%ld/%ld=809*%ld+%ld", b, i, i, b%i);
}
int main()
{long int a, b, i;a = 809;for (i = 10; i < 100; i++){b = i * a + 1;if (b >= 1000 && b <= 10000 && 8 * i < 100 && 9 * i >= 100)output(b, i);}return 0;
}

082 八进制转换为十进制

**题目:**八进制转换为十进制

程序源代码:

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>
#include <math.h>long long convertOctalToDecimal(int octalNumber);
int main()
{int octalNumber;printf("输入一个八进制数: ");scanf("%d", &octalNumber);printf("八进制数 %d  转换为十进制为 %lld", octalNumber, convertOctalToDecimal(octalNumber));return 0;
}long long convertOctalToDecimal(int octalNumber)
{int decimalNumber = 0, i = 0;while (octalNumber != 0){decimalNumber += (octalNumber % 10) * pow(8, i);++i;octalNumber /= 10;}i = 1;return decimalNumber;
}

083 求0—7所能组成的奇数个数

题目: 求0—7所能组成的奇数个数。

程序源代码:

#include <stdio.h>int main()
{long sum = 4, s = 4;int j;for (j = 2; j <= 8; j++)/*j is place of number*/{printf("\n%ld", sum);if (j <= 2)s *= 7;elses *= 8;sum += s;}printf("\nsum=%ld", sum);return 0;
}

084 一个偶数总能表示为两个素数之和

**题目:**一个偶数总能表示为两个素数之和。

程序源代码:

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>
#include <math.h>int main()
{int a, b, c, d;printf("请输入一位偶数:\n");scanf("%d", &a);for (b = 3; b <= a / 2; b += 2){for (c = 2; c <= sqrt(b); c++)if (b%c == 0) break;if (c > sqrt(b))d = a - b;elsebreak;for (c = 2; c <= sqrt(d); c++)if (d%c == 0) break;if (c > sqrt(d))printf("%d=%d+%d\n", a, b, d);}return 0;
}

085 判断一个素数能被几个9整除

题目: 判断一个素数能被几个9整除

程序分析: 需解决整形溢出的问题,因为即使是long long整形也无法表示18位数,即使换成long double也会随着我们输入溢出,但这里我们仅仅是训练思想,至于溢出的问题可以自己去了解。

程序源代码:

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>
#include <math.h>bool isprime(int a)
{for (int i = 2; i <= sqrt(a); i++)if (a%i == 0)return false;return true;
}int main()
{int p, i;long double sum = 9;printf("请输入一个数:\n");scanf("%d", &p);if (isprime(p)) {printf("%d isprime\n",p);for (i = 1;; i++) {if (fmodl(sum, p) == 0)break;//能被9整除,跳出循环elsesum = sum * 10 + 9;//累加}printf("素数 %d 能整除 %d 个9组成的数 %lf", p ,i,sum);}return 0;
}

086 两个字符串连接

题目: 两个字符串连接程序

程序源代码:

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>
#include <string.h>int main()
{char str1[100], str2[100];int i, n;i = n = 0;printf("请输入您的第一个字符串:\n");gets_s(str1);printf("请输入您的第二个字符串:\n");gets_s(str2);printf("通过strcat函数串接结果为:\n%s", strcat(str1, str2));while (str1[n] != '\0') {n++;}while (str2[i] != '\0') {str1[++n] = str2[i++];}printf("\n不通过strcat函数串接结果为:\n%s", str1);return 0;
}

087 回答结果(结构体变量传递)

题目: 回答结果(结构体变量传递)

程序源代码:


#include <stdio.h>
#include <string.h>struct student
{int x;char c;
} a;
int main()
{a.x = 3;a.c = 'a';void f(struct student b);f(a);printf("%d,%c", a.x, a.c);return 0}
void f(struct student b)
{b.x = 20;b.c = 'y';
}

088 读取7个数(1—50)的整数值

题目: 读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*。

程序源代码:

#include <stdio.h>int main()
{int i, a, n = 1;while (n <= 7){do {scanf("%d", &a);} while (a < 1 || a>50);for (i = 1; i <= a; i++)printf("*");printf("\n");n++;}return 0;
}

089 电话传递数据加密

题目: 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。

程序源代码:

#include <stdio.h>int main()
{int a, i, aa[4], t;scanf("%d", &a);aa[0] = a % 10;aa[1] = a % 100 / 10;aa[2] = a % 1000 / 100;aa[3] = a / 1000;for (i = 0; i <= 3; i++){aa[i] += 5;aa[i] %= 10;}for (i = 0; i <= 3 / 2; i++){t = aa[i];aa[i] = aa[3 - i];aa[3 - i] = t;}for (i = 3; i >= 0; i--)printf("%d", aa[i]);return 0;
}

090 专升本一题,读结果。

题目: 专升本一题,读结果。

程序源代码:

#include <stdio.h>
#include <conio.h>
#define M 5
int main()
{   /*专升本一题:读结果*/int a[M] = { 1,2,3,4,5 };int i, j, t;i = 0; j = M - 1;while (i <= j){t = *(a + i);*(a + i) = *(a + j);*(a + j) = t;i++; j--;}for (i = 0; i < M; i++){printf("%d", *(a + i));}printf("\n");_getch();return 0;
}//54321

091-100

091 时间函数举例1

题目: 时间函数举例1

程序源代码:

#include <stdio.h>
#include <time.h>int main()
{   time_t lt; /*define a longint time varible*/lt = time(NULL);/*system time and date*/printf(ctime(&lt)); /*english format output*/printf(asctime(localtime(&lt)));/*tranfer to tm*/printf(asctime(gmtime(&lt))); /*tranfer to Greenwich time*/return 0;
}

092 时间函数举例2

题目: 时间函数举例2

程序源代码:

#include <stdio.h>
#include <time.h>int main()
{time_t start, end;int i;start = time(NULL);for (i = 0; i < 3000; i++){printf("\1\1\1\1\1\1\1\1\1\1\n");}end = time(NULL);printf("\1: The different is %6.3f\n", difftime(end, start));return 0;
}

093 时间函数举例3

题目: 时间函数举例3

程序源代码:

#include <stdio.h>
#include <time.h>int main()
{clock_t start, end;int i;double var;start = clock();for (i = 0; i < 10000; i++){printf("\1\1\1\1\1\1\1\1\1\1\n");}end = clock();printf("\1: The different is %6.3f\n", (double)(end - start));return 0;
}

094 时间函数举例4 猜数游戏

题目: 时间函数举例4(一个猜数游戏,判断一个人反应快慢)。

程序源代码:

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>int main()
{char c;clock_t start, end;time_t a, b;double var;int i, guess;srand(time(NULL));printf("do you want to play it.('y' or 'n') \n");
loop:while ((c = getchar()) == 'y'){i = rand() % 100;printf("\nplease input number you guess:\n");start = clock();a = time(NULL);scanf("%d", &guess);while (guess != i){if (guess > i){printf("please input a little smaller.\n");scanf("%d", &guess);}else{printf("please input a little bigger.\n");scanf("%d", &guess);}}end = clock();b = time(NULL);printf("\1: It took you %6.3f seconds\n", var = (double)(end - start) / 18.2);printf("\1: it took you %6.3f seconds\n\n", difftime(b, a));if (var < 15)printf("\1\1 You are very clever! \1\1\n\n");else if (var < 25)printf("\1\1 you are normal! \1\1\n\n");elseprintf("\1\1 you are stupid! \1\1\n\n");printf("\1\1 Congradulations \1\1\n\n");printf("The number you guess is %d", i);}printf("\ndo you want to try it again?(\"yy\".or.\"n\")\n");if ((c = _getch()) == 'y')goto loop;
}

095 家庭财务管理小程序

题目: 家庭财务管理小程序

程序源代码:

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>
#include <dos.h>
#include <time.h>
#include <conio.h>
#include <string.h>
#include <windows.h>
void clrscr(void)
{CONSOLE_SCREEN_BUFFER_INFO    csbiInfo;HANDLE    hConsoleOut;COORD    Home = { 0,0 };DWORD    dummy;hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE);GetConsoleScreenBufferInfo(hConsoleOut, &csbiInfo);FillConsoleOutputCharacter(hConsoleOut, ' ', csbiInfo.dwSize.X * csbiInfo.dwSize.Y, Home, &dummy);csbiInfo.dwCursorPosition.X = 0;csbiInfo.dwCursorPosition.Y = 0;SetConsoleCursorPosition(hConsoleOut, csbiInfo.dwCursorPosition);
}void gotoxy(int x, int y)
{CONSOLE_SCREEN_BUFFER_INFO    csbiInfo;HANDLE    hConsoleOut;hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE);GetConsoleScreenBufferInfo(hConsoleOut, &csbiInfo);csbiInfo.dwCursorPosition.X = x;csbiInfo.dwCursorPosition.Y = y;SetConsoleCursorPosition(hConsoleOut, csbiInfo.dwCursorPosition);
}int main()
{FILE *fp;float sum, chm = 0.0;int len, i, j = 0;int c;char ch[4] = "", ch1[16] = "", chtime[12] = "", chshop[16], chmoney[8];
pp: clrscr();sum = 0.0;gotoxy(1, 1); printf("|---------------------------------------------------------------------------|");gotoxy(1, 2); printf("| money management system(C1.0) 2000.03 |");gotoxy(1, 3); printf("|---------------------------------------------------------------------------|");gotoxy(1, 4); printf("| -- money records -- | -- today cost list -- |");gotoxy(1, 5); printf("| ------------------------ |-------------------------------------|");gotoxy(1, 6); printf("| date: -------------- | |");gotoxy(1, 7); printf("| | | | |");gotoxy(1, 8); printf("| -------------- | |");gotoxy(1, 9); printf("| thgs: ------------------ | |");gotoxy(1, 10); printf("| | | | |");gotoxy(1, 11); printf("| ------------------ | |");gotoxy(1, 12); printf("| cost: ---------- | |");gotoxy(1, 13); printf("| | | | |");gotoxy(1, 14); printf("| ---------- | |");gotoxy(1, 15); printf("| | |");gotoxy(1, 16); printf("| | |");gotoxy(1, 17); printf("| | |");gotoxy(1, 18); printf("| | |");gotoxy(1, 19); printf("| | |");gotoxy(1, 20); printf("| | |");gotoxy(1, 21); printf("| | |");gotoxy(1, 22); printf("| | |");gotoxy(1, 23); printf("|---------------------------------------------------------------------------|");i = 0;for (;;){time_t rawtime;struct tm * timeinfo = NULL;time(&rawtime);timeinfo = localtime(&rawtime);sprintf(chtime, "%4d.%02d.%02d %02d:%02d:%02d", timeinfo->tm_year + 1990, timeinfo->tm_mon, timeinfo->tm_mday, timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec);timeinfo = NULL;gotoxy(3, 24); printf(" Tab __browse cost list Esc __quit");gotoxy(13, 10); printf(" ");gotoxy(13, 13); printf(" ");gotoxy(13, 7); printf("%s", chtime);j = 18;ch[0] = _getch();if (ch[0] == 27)break;strcpy(chshop, "");strcpy(chmoney, "");if (ch[0] == 9){mm:i = 0;fp = fopen("home.dat", "r+");gotoxy(3, 24); printf(" ");gotoxy(6, 4); printf(" list records ");gotoxy(1, 5); printf("|-------------------------------------|");gotoxy(41, 4); printf(" ");gotoxy(41, 5); printf(" |");while (fscanf(fp, "%10s%14s%f\n", chtime, chshop, &chm) != EOF){if (i == 36){_getch();i = 0;}if ((i % 36) < 17){gotoxy(4, 6 + i);printf(" ");gotoxy(4, 6 + i);}elseif ((i % 36) > 16){gotoxy(41, 4 + i - 17);printf(" ");gotoxy(42, 4 + i - 17);}i++;sum = sum + chm;printf("%10s %-14s %6.1f\n", chtime, chshop, chm);}gotoxy(1, 23); printf("|---------------------------------------------------------------------------|");gotoxy(1, 24); printf("| |");gotoxy(1, 25); printf("|---------------------------------------------------------------------------|");gotoxy(10, 24); printf("total is %8.1f$", sum);fclose(fp);gotoxy(49, 24); printf("press any key to....."); _getch(); goto pp;}else{while (ch[0] != '\r'){if (j < 10){strncat(chtime, ch, 1);j++;}if (ch[0] == 8){len = strlen(chtime) - 1;if (j > 15){len = len + 1; j = 11;}strcpy(ch1, "");j = j - 2;strncat(ch1, chtime, len);strcpy(chtime, "");strncat(chtime, ch1, len - 1);gotoxy(13, 7); printf(" ");}gotoxy(13, 7); printf("%s", chtime); ch[0] = _getch();if (ch[0] == 9)goto mm;if (ch[0] == 27)exit(1);}gotoxy(3, 24); printf(" ");gotoxy(13, 10);j = 0;ch[0] = _getch();while (ch[0] != '\r'){if (j < 14){strncat(chshop, ch, 1);j++;}if (ch[0] == 8){len = strlen(chshop) - 1;strcpy(ch1, "");j = j - 2;strncat(ch1, chshop, len);strcpy(chshop, "");strncat(chshop, ch1, len - 1);gotoxy(13, 10); printf(" ");}gotoxy(13, 10); printf("%s", chshop); ch[0] = _getch();}gotoxy(13, 13);j = 0;ch[0] = _getch();while (ch[0] != '\r'){if (j < 6){strncat(chmoney, ch, 1);j++;}if (ch[0] == 8){len = strlen(chmoney) - 1;strcpy(ch1, "");j = j - 2;strncat(ch1, chmoney, len);strcpy(chmoney, "");strncat(chmoney, ch1, len - 1);gotoxy(13, 13); printf(" ");}gotoxy(13, 13); printf("%s", chmoney); ch[0] = _getch();}if ((strlen(chshop) == 0) || (strlen(chmoney) == 0))continue;if ((fp = fopen("home.dat", "a+")) != NULL);fprintf(fp, "%10s%14s%6s", chtime, chshop, chmoney);fputc('\n', fp);fclose(fp);i++;gotoxy(41, 5 + i);printf("%10s %-14s %-6s", chtime, chshop, chmoney);}}return 0;
}

096 计算字符串中子串出现的次数

题目: 计算字符串中子串出现的次数

程序源代码:

#include <stdio.h>
#include <conio.h>
#include <string.h>int main()
{char str1[20], str2[20], *p1, *p2;int sum = 0;printf("please input two strings\n");scanf("%s%s", str1, str2);p1 = str1; p2 = str2;while (*p1 != '\0'){if (*p1 == *p2){while (*p1 == *p2&&*p2 != '\0'){p1++;p2++;}}elsep1++;if (*p2 == '\0')sum++;p2 = str2;}printf("%d", sum);_getch();return 0;
}

097 字符串输入文件直到#为止

题目: 从键盘输入一些字符,逐个把它们送到磁盘上去,直到输入一个#为止。

程序源代码:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>int main()
{FILE *fp;char filename[10];char ch;scanf("%s", filename);if ((fp = fopen(filename, "wt+")) == NULL) {printf("Cannot open file strike any key exit!");_getch();exit(1);}printf("input a string:\n");ch = getchar();			// 此语句用来接收在执行scanf语句时最后输入的回车符printf("请输入一个准备存储到磁盘的字符串(以#结束):");ch = getchar();			// 接收从键盘输入的第一个字符while (ch != '#'){fputc(ch, fp);		// 向磁盘文件输出一个字符putchar(ch);		// 将输出的字符显示在屏幕上ch = getchar();		// 再接收从键盘输入的一个字符 }fclose(fp);				// 关闭文件 putchar(10);            // 向屏幕输出一个换行符,换行符的ASCII代码为10return 0;
}

098 小写字母全部转换成大写字母输出到文件

题目: 从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件“test”中保存。输入的字符串以!结束。

程序源代码:

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>
#include <stdlib.h>int main()
{FILE *fp;char ch, filename[10];printf("please input the name of the file:\n");scanf("%s", filename);if ((fp = fopen(filename, "w")) == NULL){printf("can't open file!\n");exit(0);}ch = getchar();printf("please a string:\n");ch = getchar();if (ch >= 'a'&&ch <= 'z'){ch = ch - 32;}while (ch != '!'){fputc(ch, fp);putchar(ch);ch = getchar();if ('a' <= ch && ch <= 'z'){ch = ch - 32;}}fclose(fp);putchar(10);return 0;
}

099 合并两个文件到一个新文件

题目: 有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件C中。

程序分析: 此处是要求字母,若要求合并文件内容,需要注意中文乱码问题。

程序源代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{FILE*fa, *fb, *fc;int i, j, k;char str[100], str1[100];char tem;if ((fa = fopen("A.txt", "r")) == NULL) // A.txt 文件需要存在{printf("error: cannot open A file!\n");exit(0);}fgets(str, 99, fa);fclose(fa);if ((fb = fopen("B.txt", "r")) == NULL)  // B.txt 文件需要存在{printf("error: cannot open B file!\n");exit(0);}fgets(str1, 100, fb);fclose(fb);strcat(str, str1);for (i = strlen(str) - 1; i > 1; i--)for (j = 0; j < i; j++)if (str[j] > str[j + 1]){tem = str[j];str[j] = str[j + 1];str[j + 1] = tem;}if ((fc = fopen("C.txt", "w")) == NULL)  // 合并为 C.txt{printf("error: cannot open C file!\n");exit(0);}fputs(str, fc);fclose(fc);system("pause");return 0;
}

100 学生信息写入文件

题目: 有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,况原有的数据和计算出的平均分数存放在磁盘文件"stud"中。

程序源代码:

#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
typedef struct {int ID;int math;int English;int C;int avargrade;char name[20];
}Stu;
int main()
{FILE*fp;Stu stu[5];int i, avargrade = 0;printf("请输入5个同学的信息:学生号,姓名,3门成绩:\n");for (i = 0; i < 5; i++){printf("请输入第%d个同学的信息:学生号,姓名,3门成绩:\n",i+1);scanf("%d %s %d %d %d", &(stu[i].ID), stu[i].name, &(stu[i].math), &(stu[i].English), &(stu[i].C));stu[i].avargrade = (stu[i].math + stu[i].English + stu[i].C) / 3;}if ((fp = fopen("stud", "w")) == NULL){printf("error :cannot open file!\n");exit(0);}for (i = 0; i < 5; i++)fprintf(fp, "%d %s %d %d %d %d\n", stu[i].ID, stu[i].name, stu[i].math, stu[i].English,stu[i].C, stu[i].avargrade);fclose(fp);system("pause");return 0;
}

http://www.ppmy.cn/news/832217.html

相关文章

Photoshop设计精讲精练笔记

第一章 PS设计基础 1.1 工作区和工作流程 Photoshop 初步掌握PS的工作环境&#xff0c;工作流程以及基本特色&#xff0c;对于怎样使用PS有基本的体会&#xff0c;尽管现在市面上有各式各样的修图软件&#xff0c;PS仍然是最主流的数字图像处理软件。 面板和工作区&#xff1a;…

[oeasy]python0108_谷腾堡活字_哥特字体_罗马帝国_希腊文化_文艺复兴

谷腾堡活字 回忆上次内容 上次回顾了字型编码的进化过程 7-seg 七位数码管显示数字 14-seg 十四位数码管显示字母 米字管是数码管的进化版本 效果比较生硬 字符字型编码 后来又是如何显示的呢&#xff1f;&#x1f914; 曾经的字形 德国地区有自己独特的扁头笔 写出来的…

小学教师评职称计算机考试题,中小学美术教师职称晋升招聘考试题库(含答案)1...

(填空、选择、判断、简答、论述、连线) 填空题 1、中国美术史上至今发现最古老的装饰品&#xff0c;是距今约28940年前峙峪人制作的一件 石墨 装饰品。 2、仰韶文化彩陶以 半坡 类型和 庙底沟 类型的彩陶艺术成就最为杰出。 3、龙山文化阶段&#xff0c;作为当时建筑质量提高的…

【Latex 写作】基础语法

Latex 公式在线编辑器 目录 一. 公式1. 插入公式2. 注释3. 公式编号4. 换行5. 对齐6. 空格 二. 公式修饰1. 字体2. 上下标3. 上下划线4. 符号上下注释 三. 常见符号1. 运算符号2. 希腊字母3. 括号4. 省略号5. 箭头 参考资料 一. 公式 1. 插入公式 行中公式&#xff1a;使用单…

2020-02-18

photoshop读书笔记 一、工作和工作流程 1、窗口中的工作栏是按字母排序 2、排列文档的方式 &#xff08;1&#xff09;直接通过鼠标拖动 &#xff08;2&#xff09;在窗口选择排列菜单 3、更改屏幕方式 &#xff08;1&#xff09;快捷键Tab&#xff1a;隐藏式显示工具面板和其他…

文字设计原理

看到一篇讲解字体的&#xff0c;随手记录一下 初识东西方语系文字 原文链接&#xff1a;https://mp.weixin.qq.com/s/GLBBYqFUOG7lqXgwc1gBxw// 前言 // 在我们的设计工作中&#xff0c;“图像”和“文字”的重要性无须多言。无论是平面设计、电商设计、还是UI设计&#xff…

转:Latex数学宏包集锦

<div style"width: 656px; margin: 0; padding: 0; height: 0;"></div><center>algorithm2e 它提供一个 Algorithm2e 环境&#xff0c;用于在 LaTeX2e 中排版算法步骤。它将算法步骤定义为浮动体&#xff1b;它提供一组关键词供排版使用&#xf…

LaTex实战笔记 3-宏包与控制命令

1. LaTeX 命令的基本架构 LaTex 排版系统对于格式控制、公式编辑比 Word 更加灵活、准确。 Tex 环境中&#xff0c;字符、图片等各种文档内容都装在不同的盒子&#xff08;box&#xff09;容器内。这些盒子根据 Tex/Latex 的默认规则和控制命令组合为更大的盒子。字符组合为单…