这是我在整理资料时发现的,网上虽然有,但大都不全,且代码有缺省。从csdn中c语言模块问答的问题来看,这里的很多问题都能映射过去。同时利用这次机会把笔记记录下来,温习一遍C语言,其实整个看下来也相当于把c语言的语法知识点也复习了一遍,笔记的话以后在手机上阅读思考也方便,不会的题也能查阅一下。
另外,部分代码我做了修改。
1.01^365 = 37.7834343329
0.99^365 = 0.0255179644523
积跬步以致千里,积怠堕以致深渊
以下代码测试均在vs2017上测试运行
题目:
有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
程序分析:
可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。
程序源代码:
#include
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;
}
题目:
企业发放的奖金根据利润提成。利润(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
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;
else
bonus = bonus10 + (i - 1000000)*0.01;
printf("bonus=%lf", bonus);
return 0;
}
题目:
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
程序分析:
在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。
程序源代码:
#include
#include
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;
}
题目:
输入某年某月某日,判断这一天是这一年的第几天?
程序分析:
以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
程序源代码:
#define _CRT_SECURE_NO_WARNINGS
#include
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;
else
leap = 0;
if (leap == 1 && month > 2)/*如果是闰年且月份大于2,总天数应该加一天*/
sum++;
printf("It is the %dth day.", sum);
return 0;
}
题目:
输入三个整数x,y,z,请把这三个数由小到大输出。
程序分析:
我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。
程序源代码:
#include
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;
}
题目:
用*号输出字母C的图案。
程序分析:
可先用’*'号在纸上写出字母C,再分行输出。
程序源代码:
#include
int main()
{
printf("Hello C-world!\n");
printf(" ****\n");
printf(" *\n");
printf(" * \n");
printf(" ****\n");
return 0;
}
题目:
输出特殊图案,请在c环境中运行,看一看,Very Beautiful!
程序分析:
字符共有256个。不同字符,图形不一样。
程序源代码:
#include
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;
}
题目:
输出9*9口诀。
程序分析:
分行与列考虑,共9行9列,i控制行,j控制列。
程序源代码:
#include
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;
}
题目:
要求输出国际象棋棋盘。
程序分析:
用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格。
程序源代码:
#include
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);
else
printf(" ");
printf("\n");
}
return 0;
}
题目:
打印楼梯,同时在楼梯上方打印两个笑脸。
程序分析:
用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数。
程序源代码:
#include
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;
}
题目:
古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
程序分析:
兔子的规律为数列1,1,2,3,5,8,13,21…
程序源代码:
#include
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;
}
题目:
判断101-200之间有多少个素数,并输出所有素数。
程序分析:
判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
程序源代码:
#include
#include
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;
}
题目:
打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
程序分析:
利用for循环控制100-999个数,每个数分解出个位,十位,百位。
程序源代码:
#include
#include
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;
}
题目:
将一个正整数分解质因数。例如:输入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
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;
}
else
break;
}
}
printf("%d", n);
return 0;
}
题目:
利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
程序分析:
(a>b)?a:b这是条件运算符的基本例子。
程序源代码:
#define _CRT_SECURE_NO_WARNINGS
#include
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;
}
题目:
输入两个正整数m和n,求其最大公约数和最小公倍数。
程序分析:
利用辗除法。
程序源代码:
#define _CRT_SECURE_NO_WARNINGS
#include
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;
}
题目:
输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
程序分析:
利用while语句,条件为输入的字符不为’\n’.
程序源代码:
#include
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++;
else
others++;
}
printf("all in all:char=%d space=%d digit=%d others=%d\n", letters, space, digit, others);
return 0;
}
题目:
求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
程序分析:
关键是计算出每一项的值。此处注意,若不使用double而使用int,则最多输出到10位数的整数。
程序源代码:
#define _CRT_SECURE_NO_WARNINGS
#include
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;
}
题目:
一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数。
程序分析:
遍历1000以内所有数,判断是否满足
程序源代码:
#include
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);
}
}
题目:
一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
程序分析:
见注释
程序源代码:
#include
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;
}
题目:
猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
程序分析:
采取逆向思维的方法,从后往前推断。
程序源代码:
#include
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;
}
题目:
两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
程序分析:
判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
程序源代码:
#include
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;
}
程序分析:
先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for循环,第一层控制行,第二层控制列。
程序源代码:
#include
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;
}
题目:
有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
程序分析:
请抓住分子与分母的变化规律。
程序源代码:
#include
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;
}
题目:
求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);
}
题目:
利用递归方法求5!。
程序分析:
递归公式:fn=fn_1*4!
程序源代码:
#include
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;
else
sum = j * fact(j - 1);
return sum;
}
题目:
利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
程序源代码:
#include
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);
}
}
题目:
有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
程序分析:
利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。
程序源代码:
#include
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;
}
题目: 给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
程序分析: 学会分解出每一位数,如下解释:
程序源代码:
#define _CRT_SECURE_NO_WARNINGS
#include
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;
}
题目: 一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
程序分析: 同29例
程序源代码:
#define _CRT_SECURE_NO_WARNINGS
#include
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");
else
printf("this number is not a huiwen\n");
return 0;
}
题目:
请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
程序分析:
用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。
程序源代码:
#include
#include
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;
}
题目:
Press any key to change color, do you want to try it. Please hurry up!
程序源代码:
#include
#include
#include
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;
}
题目:
学习gotoxy()与clrscr()函数
程序源代码:
#include
#include
#include
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);
}
题目: 练习函数调用
程序源代码:
#include
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();/*调用此函数*/
}
题目: 文本颜色设置
程序源代码:
#include
#include
#include
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;
}
**题目:**求100之内的素数
程序源代码:
#include
#include
#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个数进行排序
程序分析:
可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,下次类推,即用第二个元素与后8个进行比较,并进行交换。
程序源代码:
#define _CRT_SECURE_NO_WARNINGS
#include
#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;
}
题目: 求一个3*3矩阵对角线元素之和
程序分析: 利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。
程序源代码:
#include
#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;
}
题目:
有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
程序分析:
首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。
程序源代码:
#define _CRT_SECURE_NO_WARNINGS
#include
#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;
}
题目: 将一个数组逆序输出。
程序分析: 用第一个与最后一个交换。
程序源代码:
#include
#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;
}
题目: 学习static定义静态变量的用法
程序源代码:
#include
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;
}
题目: 学习使用auto定义变量的用法
程序源代码:
#include
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;
}
题目: 学习使用static的另一用法。
程序源代码:
#include
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;
}
题目: 学习使用external的用法。
程序源代码:
#include
#include
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);
}
题目: 学习使用register定义变量的方法。
程序源代码:
#include
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;
}
**题目:**宏#define命令练习(1)
程序源代码:
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#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;
else
again = FALSE;
}
}
**题目:**宏#define命令练习(2)
程序源代码:
#include
/*宏定义中允许包含两道衣裳命令的情形,此时必须在最右边加上"\"*/
#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;
}
题目: 宏#define命令练习(3)
程序源代码:
#include
#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);
else
printf("\40: No such value.\n");
return 0;
}
题目:#if #ifdef和#ifndef的综合应用。
程序源代码:
#include
#define MAX
#define MAXIMUM(x,y) (x>y)?x:y
#define MINIMUM(x,y) (x>y)?y:x
int main()
{
int a = 10, b = 20;
#ifdef MAX
printf("\40: The larger one is %d\n", MAXIMUM(a, b));
#else
printf("\40: The lower one is %d\n", MINIMUM(a, b));
#endif
#ifndef MIN
printf("\40: The lower one is %d\n", MINIMUM(a, b));
#else
printf("\40: The larger one is %d\n", MAXIMUM(a, b));
#endif
#undef MAX
#ifdef MAX
printf("\40: The larger one is %d\n", MAXIMUM(a, b));
#else
printf("\40: The lower one is %d\n", MINIMUM(a, b));
#endif
#define MIN
#ifndef MIN
printf("\40: The lower one is %d\n", MINIMUM(a, b));
#else
printf("\40: The larger one is %d\n", MAXIMUM(a, b));
#endif
return 0;
}
题目:#include 的应用练习
程序源代码:
//test.h 文件如下:
#define LAG >
#define SMA <
#define EQ ==
//#include "test.h" /*一个新文件50.c,包含test.h*/
#include
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);
else
printf("\40: No such value.\n");
return 0;
}
题目: 学习使用按位与 & 。
程序分析: 0&0=0; 0&1=0; 1&0=0; 1&1=1
程序源代码:
#include
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;
}
题目: 学习使用按位或 | 。
程序分析: 0|0=0; 0|1=1; 1|0=1; 1|1=1
程序源代码:
#include
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;
}
题目: 学习使用按位异或 ^ 。
程序分析: 0^0=0; 0^1=1; 1^0=1; 1^1=0
程序源代码:
#include
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;
}
题目: 取一个整数a从右端开始的4~7位。
程序分析: 可以这样考虑:
(1)先使a右移4位。
(2)设置一个低4位全为1,其余全为0的数。可用(0<<4)
(3)将上面二者进行&运算。
程序源代码:
#define _CRT_SECURE_NO_WARNINGS
#include
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;
}
题目: 学习使用按位取反~。
程序分析:~0=1; ~1=0;
程序源代码:
#include
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;
}
题目: 画图,学用circle画圆形。
程序分析: 需要安装graphics https://blog.csdn.net/weixin_41586634/article/details/89554355
程序源代码:
#include
#include /*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;
}
题目: 画图,学用line画直线。
程序源代码:
#include
#include
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;
}
题目: 画图,学用rectangle画方形。
程序分析: 利用for循环控制100-999个数,每个数分解出个位,十位,百位。这里需要注意outtextxy的乱码问题,强转或者直接定义都不行。需使用MultiByteToWideChar方法去避免。
程序源代码:
#include
#include
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;
}
题目: 画图,综合例子(1)
程序分析: 这里需要注意outtextxy的乱码问题,强转或者直接定义都不行。需使用MultiByteToWideChar方法去避免。
程序源代码:
#include
#include
#include
# define PAI 3.1415926
# define B 0.809
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 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
题目: 打印出杨辉三角形(要求打印出10行如下图)
程序分析:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
程序源代码:
#include
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;
}
程序源代码:
#include
#include
#include
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;
}
题目: 画椭圆ellipse
程序源代码:
#include
#include
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;
}
题目: 利用ellipse and rectangle 画图。
程序源代码:
#include
#include
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;
}
题目: 一个最优美的图案。
程序源代码:
#include
#include
#include
#include
#include
#include
#include
#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;
}
题目: 输入3个数a,b,c,按大小顺序输出。
程序分析: 利用指针方法。
#define _CRT_SECURE_NO_WARNINGS
#include
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;
}
题目:
输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
程序分析: 谭浩强的书中答案有问题。
程序源代码:
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#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;
}
题目:
有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的n个数
程序源代码:
#define _CRT_SECURE_NO_WARNINGS
#include
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);
}
题目:
有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
程序源代码:
#define _CRT_SECURE_NO_WARNINGS
#include
#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;
}
题目:
写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。
程序分析: 高度优化的strlen
程序源代码:
#include
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;
}
}
}
}
题目:
编写input()和output()函数输入,输出5个学生的数据记录。
程序源代码
#define _CRT_SECURE_NO_WARNINGS
#include
#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;
}
题目: 创建一个链表。
程序源代码:
#include
#include
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;
}
题目: 反向输出一个链表。
程序源代码:
#define _CRT_SECURE_NO_WARNINGS
#include
#include
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;
}
题目: 连接两个链表。
程序源代码:
#define _CRT_SECURE_NO_WARNINGS
#include
#include
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;
}
题目: 放松一下,算一道简单的题目。
程序源代码:
#include
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;
}
题目:
编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n,当输入n为奇数时,调用函数1/1+1/3+…+1/n(利用函数指针)
程序源代码:
#define _CRT_SECURE_NO_WARNINGS
#include
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);
}
题目: 填空练习(指向指针的指针)
程序分析: 将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);
}
}
题目:
找到年龄最大的人,并输出。请找出程序中有什么问题。
程序源代码
#include
#define N 4
static 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;
}
题目: 字符串排序。
程序分析: 比较并交换
程序源代码:
#define _CRT_SECURE_NO_WARNINGS
#include
#include
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);
}
题目:
海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
程序源代码:
#include
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++;
else
break;
}
i = m;
if (count == 4)
{
printf("%d\n", count);
break;
}
}
return 0;
}
题目:
809*??=800*??+9*??+1 其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。
程序源代码:
#include
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;
}
**题目:**八进制转换为十进制
程序源代码:
#define _CRT_SECURE_NO_WARNINGS
#include
#include
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;
}
题目: 求0—7所能组成的奇数个数。
程序源代码:
#include
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;
else
s *= 8;
sum += s;
}
printf("\nsum=%ld", sum);
return 0;
}
**题目:**一个偶数总能表示为两个素数之和。
程序源代码:
#define _CRT_SECURE_NO_WARNINGS
#include
#include
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;
else
break;
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;
}
题目: 判断一个素数能被几个9整除
程序分析: 需解决整形溢出的问题,因为即使是long long整形也无法表示18位数,即使换成long double也会随着我们输入溢出,但这里我们仅仅是训练思想,至于溢出的问题可以自己去了解。
程序源代码:
#define _CRT_SECURE_NO_WARNINGS
#include
#include
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整除,跳出循环
else
sum = sum * 10 + 9;//累加
}
printf("素数 %d 能整除 %d 个9组成的数 %lf", p ,i,sum);
}
return 0;
}
题目: 两个字符串连接程序
程序源代码:
#define _CRT_SECURE_NO_WARNINGS
#include
#include
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;
}
题目: 回答结果(结构体变量传递)
程序源代码:
#include
#include
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';
}
题目: 读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*。
程序源代码:
#include
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;
}
题目: 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
程序源代码:
#include
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;
}
题目: 专升本一题,读结果。
程序源代码:
#include
#include
#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
题目: 时间函数举例1
程序源代码:
#include
#include
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;
}
题目: 时间函数举例2
程序源代码:
#include
#include
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;
}
题目: 时间函数举例3
程序源代码:
#include
#include
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;
}
题目: 时间函数举例4(一个猜数游戏,判断一个人反应快慢)。
程序源代码:
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#include
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");
else
printf("\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;
}
题目: 家庭财务管理小程序
程序源代码:
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#include
#include
#include
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);
}
else
if ((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;
}
题目: 计算字符串中子串出现的次数
程序源代码:
#include
#include
#include
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++;
}
}
else
p1++;
if (*p2 == '\0')
sum++;
p2 = str2;
}
printf("%d", sum);
_getch();
return 0;
}
题目: 从键盘输入一些字符,逐个把它们送到磁盘上去,直到输入一个#为止。
程序源代码:
#include
#include
#include
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代码为10
return 0;
}
题目: 从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件“test”中保存。输入的字符串以!结束。
程序源代码:
#define _CRT_SECURE_NO_WARNINGS
#include
#include
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;
}
题目: 有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件C中。
程序分析: 此处是要求字母,若要求合并文件内容,需要注意中文乱码问题。
程序源代码:
#include
#include
#include
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;
}
题目: 有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,况原有的数据和计算出的平均分数存放在磁盘文件"stud"中。
程序源代码:
#define _CRT_SECURE_NO_WARNINGS
#include
#include
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;
}