文章目录

  • 前言
  • 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;
}

经典c程序100例详解相关推荐

  1. C/C++趣味编程经典100例详解

    更新记录   2019-08-27 28题 重写     C/C++语言经典.实用.趣味程序设计编程百例精解 1.绘制余弦曲线 在屏幕上用"*"显示0~360度的余弦函数cos(x ...

  2. 经典linux c程序,经典 c 程序 100 例

    show_tme 于 2014-01-31 15:27:44发表: 学习学习 lastgod1997 于 2014-01-04 21:12:47发表: 好资源,要顶!好资源,要顶!:0wmjh(1 x ...

  3. 1000以内完数c语言程序_C语言经典面试题目及答案详解(二)

    接着上次来说,C语言经典面试题目及答案详解(一)当中大部分是一些概念和理解的东西 ,今天说一说实践操作,有关c的经典程序. 1.输出9*9口诀.共9行9列,i控制行,j控制列. #include &q ...

  4. 经典C语言程序100例之一零零

    经典C语言程序100例之一零零 如题 话不多说了,直接上代码 如题 [程序100] 题目:有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出 平均成绩,况原 ...

  5. 经典C语言程序100例之九九

    经典C语言程序100例之九九 如题 话不多说了,直接上代码 如题 [程序99] 题目:有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列), 输出到一个新文件C中. 1 ...

  6. 经典C语言程序100例之九八

    经典C语言程序100例之九八 如题 话不多说了,直接上代码 如题 [程序98] 题目:从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件"test"中保存. ...

  7. 经典C语言程序100例之九七

    经典C语言程序100例之九七 如题 话不多说了,直接上代码 如题 [程序97] 题目:从键盘输入一些字符,逐个把它们送到磁盘上去,直到输入一个#为止. 1.程序分析: 话不多说了,直接上代码 2.程序 ...

  8. 经典C语言程序100例之九六

    经典C语言程序100例之九六 如题 话不多说了,直接上代码 如题 [程序96] 题目:计算字符串中子串出现的次数 1.程序分析: 话不多说了,直接上代码 2.程序源代码: #include " ...

  9. 经典C语言程序100例之九五

    经典C语言程序100例之九五 如题 话不多说了,直接上代码 如题 [程序95] 题目:家庭财务管理小程序 1.程序分析: 话不多说了,直接上代码 2.程序源代码: /money management ...

  10. 经典C语言程序100例之九四

    经典C语言程序100例之九四 如题 话不多说了,直接上代码 如题 [程序94] 题目:时间函数,一个猜数游戏,判断一个人反应快慢. 话不多说了,直接上代码 程序源代码: #include " ...

最新文章

  1. 从方法到实践!深度解读:企业数据治理到底治什么?怎么治?
  2. 案例丨神策数据赋能物流服务行业数字化转型
  3. iframe父子级页面传值支持跨域访问javascript
  4. 数据结构思维 第九章 `Map`接口
  5. 借给朋友两万块钱,已经两年,每次要钱都各种借口,我该怎么办?
  6. linux ssh 推送文件_通过SSH实现Windows与linux之间传输文件
  7. LINUX SHELL能不能调用桌面刷新命令,或者模拟键盘输入F5?
  8. GridView日期列使用DataFormatString格式化技巧
  9. 职业学校计算机课评课,信息技术课评课范文
  10. pyltp依存句法分析_依存句法分析 python pyltp实现
  11. pepe:从Pastebin收集邮件地址的信息
  12. 咸鱼Maya笔记—特殊复制
  13. Python OpenCV 读取USB摄像头报错问题解决
  14. 如何解决IAR不能设置断点的问题
  15. 在win20008上运行U890破解提示sorry,this application cannot run under a virtual machine
  16. 哪些人适合做产品经理
  17. 前端实现浏览器下载文件
  18. 介绍ReLU6!计算机视觉实习面经(京东/商汤/思谋/依图/图森/字节/腾讯)
  19. 计算机信息检索课程小结,计算机信息检索课程教案.doc
  20. 《调和分析与非线性发展方程》简介

热门文章

  1. 用电机进行简单的PID参数整定
  2. asp.net 与donet(.net)的区别
  3. hive 如何将数组转成字符串_HIve字符串函数
  4. 3Dmax移动,旋转,缩放图标不显示
  5. 洞态IAST检测RuoYi的sql注入漏洞
  6. 高效的六面体变换算法实现(一) —— 等圆柱映射 与 六面体映射
  7. T1-商贸宝服务无法启动解决办法
  8. cad卸载工具_「Windows」不足10M的卸载软件,卸载得可真干净啊
  9. ArcFace的原理以及代码的理解
  10. 【机器学习15】决策树模型详解