文章目录
- 前言
- 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(<)); /*english format output*/printf(asctime(localtime(<)));/*tranfer to tm*/printf(asctime(gmtime(<))); /*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;
}