C语言经典100例精选
1、题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?#include<stdio.h>//题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?int main(){int cnt = 0;for(int i = 1; i <= 4; i++){for(int j =1;...
目录
3、题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
5、题目:输入三个整数x,y,z,请把这三个数由小到大输出。
11、题目:古典问题(兔子生崽):有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(输出前40个月即可)
13、题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数 本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
14、题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
16、题目:输入两个正整数a和b,求其最大公约数和最小公倍数。
17、题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
18、题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制
19、题目一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
20、题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
22、题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
24、题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
27、题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
29、题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
30、题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
31、题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
32、题目:删除一个字符串中的指定字母,如:字符串 "aca",删除其中的 a 字母。
35、题目:字符串反转,如将字符串 "www.runoob.com" 反转为 "moc.boonur.www"。
39、题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
67、题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
68、题目:有 n个整数,使其前面各数顺序向后移 m 个位置,最后m个数变成最前面的 m 个数。
69、题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
71、题目:编写input()和output()函数输入,输出5个学生的数据记录
89、 题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下: 每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
97、题目:从键盘输入一些字符,逐个把它们送到磁盘上去,直到输入一个#为止。
98、题目:从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件"test"中保存。 输入的字符串以!结束。
99、题目:有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件C中。
100、题目:有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,况原有的数据和计算出的平均分数存放在磁盘文件"stud"中
变形:把文件stud.txt的内容读取到结构体中输出到控制台
1、题目求符合给定条件的整数集
给定不超过6的正整数A,考虑从A开始的连续4个数字。请输出所有由它们组成的无重复数字的3位数。
输入格式:
输入在一行中给出A。
输出格式:
输出满足条件的的3位数,要求从小到大,每行6个整数。整数间以空格分隔,但行末不能有多余空格。
输入样例:
2
输出样例:
234 235 243 245 253 254
324 325 342 345 352 354
423 425 432 435 452 453
523 524 532 534 542 543
#include <stdio.h>
void main(){
int a ;
scanf("%d",&a);
int cnt = 0;
for(int i = a; i < a+4; i++){
for(int j = a; j < a+4; j++){
for(int k = a; k < a+4; k++){
if(i!=j && i!=k &&j!=k){
cnt++;
printf("%d%d%d",i,j,k);
//每六个数一换行,不然就隔开
if(cnt % 6 == 0){
printf("\n");
}else{
printf(" ");
}
}
}
}
}
}
2、题目:企业发放的奖金根据利润提成。
- 利润(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,求应发放奖金总数?
if语句
#include<stdio.h>
//利用数轴进行定位,10W 20W 40W 60W 100W
int main(){
double i; //利润
double bonus,bonus1,bonus2,bonus3,bonus4,bonus5;//奖金
bonus1 = 100000*0.1; //利润10万元时的奖金
bonus2 = bonus1+100000*0.075; //利润20万元时奖金
bonus3 = bonus2+200000*0.05; //利润40万元时奖金
bonus4 = bonus3+200000*0.03; //利润60万元时奖金
bonus5 = bonus4+400000*0.015; //利润100万元时奖金
scanf("%lf",&i);
if(i <= 100000){//利润(I)低于或等于10万元时,奖金可提10%;
bonus=i*0.1;
}else if(i <= 200000){//利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;
bonus=bonus1+(i-100000)*0.075;
}else if(i <= 400000){//20万到40万之间时,高于20万元的部分,可提成5%;
bonus=bonus2+(i-200000)*0.05;
}else if(i <= 600000){//40万到60万之间时高于40万元的部分,可提成3%;
bonus=bonus3+(i-400000)*0.03;
}else if(i <= 1000000){//60万到100万之间时,高于60万元的部分,可提成1.5%;
bonus=bonus4+(i-600000)*0.015;
}else{//高于100万元时,超过100万元的部分按1%提成。
bonus=bonus5+(i-1000000)*0.01;
}
printf("奖金总数:%lf\n",bonus);
}
switch语句
#include<stdio.h>
//利用数轴进行定位,10W 20W 40W 60W 100W
int main(){
double i; //利润
double bonus,bonus1,bonus2,bonus3,bonus4,bonus5;//奖金
bonus1 = 100000*0.1; //利润10万元时的奖金
bonus2 = bonus1+100000*0.075; //利润20万元时奖金
bonus3 = bonus2+200000*0.05; //利润40万元时奖金
bonus4 = bonus3+200000*0.03; //利润60万元时奖金
bonus5 = bonus4+400000*0.015; //利润100万元时奖金
scanf("%lf",&i);
int n = i / 100000;
if(n > 10){
n=10;
}
printf("%d\n",n);
switch(n){
case 0: bonus=i*0.1;break; //利润(I)低于或等于10万元时,奖金可提10%;
case 1: bonus=bonus1+(i-100000)*0.075;break;//利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;
case 2:
case 3: bonus=bonus2+(i-200000)*0.05;break;//20万到40万之间时,高于20万元的部分,可提成5%;
case 4:
case 5: bonus=bonus3+(i-400000)*0.03;break;//40万到60万之间时高于40万元的部分,可提成3%;
case 6:
case 7:
case 8:
case 9: bonus=bonus4+(i-600000)*0.015;break;//60万到100万之间时,高于60万元的部分,可提成1.5%;
case 10: bonus=bonus5+(i-1000000)*0.01;break;//高于100万元时,超过100万元的部分按1%提成。
}
printf("奖金总数:%lf\n",bonus);
}
3、题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
#include<stdio.h>
#include<math.h>
//题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
int main() {
for (int i = 1; i < 50; i++) {
//对第一个数开平方
int n = sqrt(i+100);
printf("n=%d\n",n);
//对第二个数开平方
int m = sqrt(i+100+168);
printf("m=%d\n",m);
//判断是否满足条件
if(n*n==(i+100) && m*m==(i+100+168)){
printf("%d\n",i);
}
}
return 0;
}
4、题目:输入某年某月某日,判断这一天是这一年的第几天?
#include<stdio.h>
#include<math.h>
//题目:输入某年某月某日,判断这一天是这一年的第几天?
//31 59 90 120 151 181 212 243 273 304 334
int main() {
int year,month,day,sum;
printf("请输入年:");
scanf("%d",&year);
printf("请输入月:");
scanf("%d",&month);
printf("请输入日:");
scanf("%d",&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");break;
}
//加上天数
sum+=day;
//判断是不是闰年
//1.普通年能被4整除且不能被100整除的为闰年。(如2004年就是闰年,1900年不是闰年)
//2.世纪年能被400整除的是闰年。(如2000年是闰年,1900年不是闰年)
int leap;
if(year%400 ==0 || (year%4==0 && year%100!=0 )){
leap=1;
}else{
leap=0;
}
//如果是闰年且月份大于2 天数加1
if(leap && month>2){
sum+=1;
}
printf("一年中第%d天\n",sum);
return 0;
}
5、题目:输入三个整数x,y,z,请把这三个数由小到大输出。
#include<stdio.h>
//题目:输入三个整数x,y,z,请把这三个数由小到大输出。
void swap(int *a, int *b){
int temp; //交换的临时变量
temp=*a;
*a=*b;
*b=temp;
}
int main() {
int x, y ,z;
printf("请输入三个数:");
scanf("%d%d%d",&x,&y,&z);
if(x>y){
swap(&x,&y);
}
if(x>z){
swap(&x,&z);
}
if(y>z){
swap(&y,&z);
}
printf("%d %d %d",x,y,z);
}
8、打印九九口诀表
下面是一个完整的下三角九九口诀表:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
本题要求对任意给定的1位正整数N,输出从1*1到N*N的部分口诀表。
输入格式:
输入在一行中给出一个正整数N(1<=N<=9)。
输出格式:
输出下三角N*N部分口诀表,其中等号右边数字占4位、左对齐。
输入样例:
4
输出样例:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
#include <stdio.h>
void main(){
int n;
// scanf("%d",n);
n=9;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= i; j++){
printf("%d*%d=%-4d",j,i,j*i);
}
printf("\n");
}
}
11、题目:古典问题(兔子生崽):有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(输出前40个月即可)
可以看出,每个月的兔子总数依次为1, 1, 2, 3, 5, 8, 13…这就是 斐波那契数列(Fibonacci sequence)。总结数列规律即从前两个月的兔子数可以推出第3个月的兔子数
#include<stdio.h>
int f(int month){
if(month==1 || month==2){
return 1;
}else{
return f(month-1)+f(month-2);
}
}
int main() {
for(int i = 1; i <= 40; i++){
printf("%12d",f(i));
if(i%4==0){ //每四个换行
printf("\n");
}
}
return 0;
}
法二:
#include<stdio.h>
int main() {
int fi1=1,fi2=1;
for(int i = 1; i <=20; i++){
printf("%12d%12d",fi1,fi2);
if(i%2==0) printf("\n"); //每次输出两个,所以四个一换行
fi1=fi1+fi2;
fi2=fi1+fi2;
}
return 0;
}
12:题目:判断101到200之间的素数。
程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。
#include<stdio.h>
//素数:除了1和它自身外,不能被其他自然数整除的数叫做素数
int main() {
int cnt = 0; //计数器
for(int i = 101; i < 201; i++ ){
int flag = 1; //假如是素数
//这个循环判断是不是素数
for(int j = 2; j < i; j++){
if(i%j==0){
flag=0; //不是素数就跳出循环
break;
}
}
//如果是素数就输出
if(flag){
printf("%d ",i);
cnt++;
if (cnt % 5 == 0){
printf("\n");
}
}
}
}
变形:统计素数并求和
本题要求统计给定整数M和N区间内素数的个数并对它们求和。
输入格式:
输入在一行中给出2个正整数M和N(1<=M<=N<=500)。
输出格式:
在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。
输入样例:
10 31
输出样例:
7 143
#include <stdio.h>
//除了1和它自身外,不能被其他自然数整除的数叫做素数
void main(){
int m,n;
int cnt=0; //计数器
int sum=0; //素数和
scanf("%d %d",&m,&n);
if(m==1) m = 2;
for(int i = m; i < n+1; i++){
//判断这个数字是不是素数
int isPrime = 1; //假如是
for(int j = 2; j < i; j++){
if(i % j ==0){
isPrime = 0; //不是素数
break;
}
}
if(isPrime){
cnt++;
sum+=i;
}
}
printf("%d %d\n",cnt,sum);
}
13、题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数 本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
#include<stdio.h>
// %取个位数 比如 123%10=3
// /去个位数 比如 123/10=12
int main() {
for(int i = 100; i < 1000; i++){
int sum = 0; //累计和
int temp = i;//用临时变量拆分,原数还要用于比较是不是水仙花数
//这个循环把每个数拆开求其三次方之和
do{
int a=temp%10;
temp=temp/10;
sum+=a*a*a;
}while(temp >0);
//判断:是不是水仙花数
if(i==sum){
printf("%d ",i);
}
}
}
法二:
#include<stdio.h>
int main()
{
int i,x,y,z;
for(i=100;i<1000;i++)
{
x=i%10;
y=i/10%10;
z=i/100%10;
if(i==(x*x*x+y*y*y+z*z*z))
printf("%d\n",i);
}
return 0;
}
变形:水仙花数
水仙花数是指一个N位正整数(N>=3),它的每个位上的数字的N次幂之和等于它本身。例如:1^3 + 5^3+ 3^3 = 153。本题要求编写程序,计算所有N位水仙花数。
输入格式:
输入在一行中给出一个正整数N(3<=N<=7)。
输出格式:
按递增顺序输出所有N位水仙花数,每个数字占一行。
输入样例:
3
输出样例:
153
370
371
407
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
//如果n=3,while执行二次 first=100
//如果n=4,while执行三次 first=1000
int first=1;
int i=1;//循环变量
while(i<n){
first*=10;
i++;
}
//输入 n=3时候:100 - 1000 之间数字
for(i = first; i< first*10; i++){
int sum=0; //三次方的和
int temp = i;
do{
int a =temp%10; // %取最低位数(个位数)
temp/=10; // /去掉最低位数(个位数)
//j=0 n=3 循环执行三次 a*a*a 求三次幂
int p=1;
int j = 0;//循环变量
while(j<n){
p=p*a;
j++;
}
//每次的三次幂求和
sum+=p;
}while(temp>0);
//满足水仙花数要求 打印
if(sum == i){
printf("%d\n",i);
}
}
return 0;
}
14、题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
- 首先找到一个最小的质数k,最小的质数为2
- 如果这个质因数k等于n那么分解过程就结束了
- 如果k不等于n,但是n可以被k整除,那么输出这个k,并用n/k(n除以k)作为n的新值,并重复步骤2(用循环)
- 如果n不能被k整除,那么是k=k+1; 重复执行第2步
注意:仔细理解2,3,4的循环步骤,可在纸上演练一遍
#include <stdio.h>
int main(){
int n;
printf("请输入一个正整数:");
scanf("%d",&n);
printf("%d=",n);
//1、最小质因数k=2
for(int k = 2; k < n; k++){
//2、当质因数k等于n时,分解结束
while(k!=n){
//3、n可以被k整除,那么输出k*,并用n/k作为n的新值,重复2
if(n%k==0){
printf("%d*",k);
n/=k;
}else{
//4、如果n不能被k整除,那么k++;重复2
break;
}
}
}
//补充最后一个质因数
printf("%d\n",n);
return 0;
}
16、题目:输入两个正整数a和b,求其最大公约数和最小公倍数。
- 如果b等于0,计算结束,a就是最大公约数
- 否则,计算a除以b的余数,让a等于b,而b等于那个余数;
- 回到第一步
求最大公约数——辗转相除法
最小公倍数=输入的两个数之积除于它们的最大公约数
#include <stdio.h>
/*
求最大公约数——辗转相除法
最小公倍数=输入的两个数之积除于它们的最大公约数
a=12 b=18 t=12
a=18 b=12 t=6
a=12 b=6 t=0
a=6 b=0 循环结束
*/
int main(){
int a,b,n;
scanf("%d %d",&a,&b);
n=a*b;
while(b!=0){
int t = a % b;
a = b;
b = t;
printf("a=%d b=%d t=%d\n", a,b,t);
}
printf("最大公约数是%d\n",a);
printf("最小公倍数是%d\n",n/a);
}
17、题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
#include <stdio.h>
int main(){
int letters=0,numbers=0,emptys=0,others=0;
char c;
printf("输入一些字母\n");
while((c=getchar())!='\n'){
if((c>='a' && c <= 'z') || (c >='A' && c <='Z') ){
letters++;
}else if( c >= '0' && c <='9'){
numbers++;
}else if(c==' '){
emptys++;
}else{
others++;
}
}
printf("字母=%d,数字=%d,空格=%d,其他=%d\n",letters,numbers,emptys,others);
}
18、题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制
#include <stdio.h>
int main(){
int s=0,a,n;
scanf("%d %d",&a,&n);
int temp=a;
for(int i =1; i <= n; i++){
s+=temp;
temp=temp*10+a;
}
printf("%d\n",s);
}
19、题目一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
#include <stdio.h>
int main(){
for(int i = 2; i <= 1000; i++) {
int sum=1;//因子之和(1是所有数的因子)
//for循环找出当前数的所有因子
for(int j = 2; j <= i/2; j++){
if(i%j==0){
sum+=j;//所有因子相加
}
}
//完数输出
if(sum==i){
printf("%d=1",i);
for(int j = 2; j <= i/2; j++){
if(i%j==0){
printf("+%d",j);
}
}
printf("\n");
}
}
return 0;
}
20、题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
#include <stdio.h>
int main(){
double height = 100;
double sum = 100;//第一次落地时,小球经过100m
for(int i = 2; i <= 10; i++){ //计算小球第2到第10次落地经过的高度
height/=2;
sum=sum+2*height;
}
height/=2;//第10次弹起的高度
printf("第10次落地时,共经过%f米,第10次反弹高%f米\n",sum,height);
return 0;
}
21、题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下 的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
#include <stdio.h>
int main(){
int peach = 1; //第10天桃子
for(int i = 9; i >=1; i--){
peach = 2*(peach+1);
printf("第%d天的桃子为: %d 个\n",i,peach);
}
return 0;
}
递归解法:
#include <stdio.h>
//返回第n天时的桃子数
int func(int n) {
if (n >= 10) {
return 1;
} else {
return (func(n + 1) + 1) * 2;
}
}
int main() {
int i;
for (i = 1; i <= 10; i++) {
printf("第 %d 天桃子数:%d \n", i, func(i));
}
return 0;
}
22、题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
#include <stdio.h>
int main() {
char a,b,c;
for(a ='x'; a<='z'; a++){
for(b ='x'; b<='z'; b++){
for(c='x'; c<='z'; c++){
if(a!='x' && c!='x' && c!='z' && a!=b && a!=c && b!=c){
printf("a->%c\n",a);
printf("b->%c\n",b);
printf("c->%c\n",c);
}
}
}
}
return 0;
}
23、题目:打印出如下图案(菱形)。
*
***
*****
*******
*****
***
*
法一:
#include <stdio.h>
/*外层循环控制行 ,内层循环控制列
上面四行 下面三行
空格 星星 空格 星星
行 列 行 列 行 列 行 列
i j i j i j i j
1 3 1 1 1 1 1 5
2 2 2 3 2 2 2 3
3 1 3 5 3 3 3 1
4 0 4 7 j=i j=7-i*2
j=4-i j=i*2-1
*/
int main() {
int i, j;
//上面四行
for( i =1; i<=4; i++){
//输出空格
for(j=1; j<=4-i;j++){
printf(" ");
}
//输出星星
for(j=1; j<=(i*2-1); j++){
printf("*");
}
printf("\n");
}
// 下面三行
for( i =1; i<=3; i++){
//输出空格
for(j=1; j<=i; j++){
printf(" ");
}
//输出星星
for(j=1; j<=(7-i*2); j++){
printf("*");
}
printf("\n");
}
return 0;
}
法二:
#include<stdio.h>
#include<stdlib.h>
int main(){
int i,j;
for(i=0; i<7; i++){
for(j=0; j<abs(3-i); j++){
printf(" ");
}
for(j=0; j<(i<=3?2*i+1:13-2*i); j++){
printf("*");
}
printf("\n");
}
system("pause");
}
变形题:
*
* *
* * *
* * * *
* * * * *
* * * *
* * *
* *
*
#include<stdio.h>
#include<stdlib.h>
int main(){
int i,j;
for(i=0; i<9; i++){
for(j=0; j<abs(4-i); j++){
printf(" ");
}
for(j=0; j<9-2*abs(4-i); j++){//上下对称
if(j%2){
printf(" ");
}else{
printf("*");
}
}
printf("\n");
}
system("pause");
}
变形题:
*
* *
* *
* *
* *
* *
* *
* *
*
#include<stdio.h>
#include<stdlib.h>
int main(){
int i,j;
for(i=1; i<=5; i++){
for(j=1; j<=5-i; j++){
printf(" ");
}
for(j=1; j<=i; j++){
if(j==1||j==i)
printf("* ");
else
printf(" ");
}
printf("\n");
}
for(i=1; i<=4; i++){
for(j=1; j<=i; j++){
printf(" ");
}
for(j=1; j<=5-i; j++){
if(j==1||j==(5-i))
printf("* ");
else
printf(" ");
}
printf("\n");
}
system("pause");
}
24、题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
#include <stdio.h>
int main() {
float a = 2, b = 1,sum = 0;
float temp;
for(int i=0; i<20; i++){
sum+=a/b;
temp=a;
a=a+b;
b=temp;
}
printf("%9.6f\n",sum);
return 0;
}
25、题目:求1+2!+3!+...+20!的和。
#include <stdio.h>
int main() {
int sum=0;
for(int i =1; i <=20; i++){
//阶乘
int t =1;
for(int j =2; j <=i; j++){
t=t*j;
}
//累加
sum+=t;
}
printf("%d\n",sum);
return 0;
}
法二:累加变成累乘
#include <stdio.h>
int main() {
int sum=0,temp=1;
for(int i =1; i <=20; i++){
temp=temp*i;//累加变成累乘
sum=sum+temp;
}
printf("%d\n",sum);
return 0;
}
法三:递归
#include <stdio.h>
//递归
int fact(int n) {
if(n == 0 || n == 1)
return 1;
else
return n * fact(n - 1);
}
int main(void) {
int sum=0;
for(int i = 1; i <= 20; i++) {
sum+=fact(i);
}
printf("%d\n",sum);
return 0;
}
26、题目:利用递归方法求5!。
#include <stdio.h>
int main()
{
int i;
int fact(int);
for(i=0;i<6;i++){
printf("%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;
}
27、题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
#include<stdio.h>
/*
程序【27】
题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来
【分析】递归最重要的是压栈和出栈的顺序
*/
void fun(void)
{
char c;
if ((c = getchar()) != '\n') //出栈条件
{
fun();
}
if (c != '\n') //出栈
{
printf("%c", c);
}
}
int main(void){
printf("请输入5个字符\n");
fun();
return 0;
}
28、题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
int f(int n){
if(n==1){
return 10
}else{
return (n-1)+2;
}
}
int main(void){
printf("%d\n",f(5));
}
29、题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
#include<stdio.h>
int main(void){
int num;//不多于5位的正整数
int cnt=0; //几位数
int t;
printf("请输入不多于5位的正整数:");
scanf("%d",&num);
do{
t = num%10;
printf("%d",t);
num/=10;
cnt++;
}while(num>0);
printf("\n这是%d位数",cnt);
return 0;
}
30、题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
#include<stdio.h>
int main(void){
int num,reverse_num=0;
printf("请输入一个5位数:");
scanf("%d",&num);
//逆序
int temp=num;
while(temp>0){
reverse_num=reverse_num*10+temp%10;
temp/=10;
}
printf("%d",reverse_num);
if(num==reverse_num){
printf("是回文");
}else{
printf("不是回文");
}
return 0;
}
31、题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
#include<stdio.h>
//monday tuesday wednesday thursday friday saturday sunday
/*
前面的scanf()在读取输入时会在缓冲区中留下一个字符'\n'(输入完s[i]的值后按回车键所致),
所以如果不在此加一个getchar()把这个回车符取走的话,gets()就不会等待从键盘键入字符,而
是会直接取走这个“无用的”回车符,从而导致读取有误
*/
int main(void){
char i,j;
printf("请输入第一次字母:");
scanf("%c",&i);
getchar();//scanf("%c",&j);的问题,第二次是读入的一个换行符,而不是输入的字符,因此需要加一个getchar() 吃掉换行符
switch(i){
case 'm':printf("monday\n"); break;
case 'w':printf("wednesday\n");break;
case 'f':printf("friday\n");break;
case 't':
printf("请输入下一个字母:");
scanf("%c",&j);
if(j=='u') printf("tuesday\n");break;
if(j=='h') printf("thursday\n");break;
case 's':
printf("请输入下一个字母:");
scanf("%c",&j);
if (j=='a') {printf("saturday\n");break;}
if (j=='u') {printf("sunday\n"); break;}
default :
printf("error\n"); break;
}
return 0;
}
32、题目:删除一个字符串中的指定字母,如:字符串 "I love this program",删除其中的 o字母。
#include<stdio.h>
int main(void) {
char s[100]= "I love this program";
char c;
printf("请输入要删除的字母:");
c=getchar();
int j =0;
for(int i=0; s[i]!='\0';i++){
if(s[i]!=c){
s[j]=s[i];
j++;
}
}
s[j]='\0';
puts(s);
return 0;
}
33、题目:判断一个数字是否为质数。
程序分析:质数(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除。
#include<stdio.h>
int main(void) {
int num, flag = 1;
printf("输入一个大于1的自然数:\n");
scanf("%d", &num);
for(int i = 2; i < num; i++) {
if(num % i == 0) {
flag = 0; //不是素数
break;
}
}
if(flag || num == 2) {
printf("%d是素数", num);
} else {
printf("%d不是素数", num);
}
return 0;
}
35、题目:字符串反转,如将字符串 "www.runoob.com" 反转为 "moc.boonur.www"。
#include<stdio.h>
int main() {
char ch[100];
gets(ch);
int i =0;
while(ch[i]!='\0'){
i++;
}
while(--i>=0){
putchar(ch[i]);
}
return 0;
}
法二:
#include<stdio.h>
#include<string.h>
void reverse(char *ch){
int i=0;
int j = strlen(ch)-1;
while(i<j){
int temp = *(ch+i);
*(ch+i) = *(ch+j);
*(ch+j) = temp;
i++;
j--;
}
}
void main() {
char ch[100];
printf("输入一个字符串: ");
gets(ch);
reverse(ch);
puts(ch);
}
38、题目:求一个3*3矩阵对角线元素之和
#include<stdio.h>
#define N 3
int main()
{
int i,j,a[N][N],sum=0;
printf("请输入矩阵(3*3):\n");
for(i=0;i<N;i++)
for(j=0;j<N;j++)
scanf("%d",&a[i][j]);
for(i=0;i<N;i++)
sum+=a[i][i];
printf("对角线之和为:%d\n",sum);
return 0;
}
39、题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
#include<stdio.h>
void insert(int *n, int number) {
if(number > *(n + 9)) {
*(n + 10) = number;
} else {
int i ;
for( i = 9; i >= 0; i--) {
if(*(n + i) > number) {
*(n + i + 1) = *(n + i);
}else{
break;
}
}
*(n + i + 1) = number;
}
}
int main() {
int number;
int n[11] = {1, 2, 4, 5, 6, 7, 8, 9, 10, 11};
printf("插入前:\n");
for(int i = 0; i < 10; i++) {
printf("%d ", n[i]);
}
printf("\n插入一个新的数字: ");
scanf("%d", &number);
insert(n, number);
printf("插入后:\n");
for(int i = 0; i < 11; i++) {
printf("%d ", n[i]);
}
return 0;
}
40、题目:将一个数组逆序输出
#include<stdio.h>
#define N 10
int main() {
int array[N]={1,2,3,4,5,6,7,8,9,10};
printf("原始数组:\n");
for(int i=0;i<N;i++){
printf("%d ",array[i]);
}
for(int i =0; i < N/2; i++ ){
int t = array[i];
array[i]=array[N-i-1];
array[N-i-1]=t;
}
printf("逆序数组:\n");
for(int i=0;i<N;i++){
printf("%d ",array[i]);
}
return 0;
}
67、题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
#include<stdio.h>
void swap(int *a, int *b){
int t = *a;
*a=*b;
*b=t;
}
void compare(int a[], int n){
int max=0;//假设最大元素的下标
int min=0;//假设最小元素的下标
for(int i =1; i < n; i++){
if(a[max] < a[i]){
max=i;
}
if(a[min] > a[i]){
min=i;
}
}
swap(&a[max],&a[0]); //交换最大与第一个元素
swap(&a[min],&a[4]);//交换最小与最后一个元素
}
int main() {
int a[5];
printf("请输入5个整数:\n");
for(int i = 0; i < 5; i++){
scanf("%d",&a[i]);
}
compare(a,5);
for(int i = 0; i < 5; i++){
printf("%d ",a[i]);
}
}
68、题目:有 n个整数,使其前面各数顺序向后移 m 个位置,最后m个数变成最前面的 m 个数。
#include<stdio.h>
#define N 100
void reverse(int a[], int i, int j){
while(i < j){
int temp = a[i];
a[i]=a[j];
a[j]=temp;
i++;
j--;
}
}
int main() {
int a[N],n,m;
printf ("请输入数组元素个数:\n");
scanf("%d",&n);
printf ("请输入后移几个元素\n");
scanf("%d",&m);
printf("请输入%d个元素\n",n);
for (int i=0;i<n;i++){
scanf("%d",&a[i]);
}
reverse(a,0,n - 1);
reverse(a,0,m - 1);
reverse(a,m,n - 1);
for (int i=0;i<n;i++){
printf("%d ",a[i]);
}
}
69、题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
#include <stdio.h>
void main()
{
int num[50],n,*p,j,loop,i,m,k;
printf("请输入这一圈人的数量:\n");
scanf("%d",&n);
p=num;
//开始给这些人编号
for (j=0;j<n;j++)
{
*(p+j)=j+1;
}
i=0;//i用于计数,即让指针后移
m=0;//m记录退出圈子的人数
k=0;//k报数1,2,3
while(m<n-1)//当退出的人数不大于总人数时,即留下的人数至少是一个人
//这句不能写成m<n,因为假设有8人,当退出了6人时,此时还是进行人数退出,即m++,
//这时是7<8,剩下的一个人自己喊1,2,3那么他也就退出了,将不会有输出
{
if (*(p+i)!=0)//如果这个人的头上编号不是0就开始报数加1,这里采用的方法是报数为3的人头上编号重置为0
{
k++;
}
if (k==3)
{ k=0; //报数清零,即下一个人从1开始报数
*(p+i)=0;//将报数为3的人编号重置为0
m++; //退出人数加1
}
i++; //指针后移
if (i==n)//这句很关键,如果到了队尾,就要使指针重新指向对头
//并且它只能放在i++后面,因为只有i++了才有可能i==n
{
i=0;
}
}
printf("现在剩下的人是:");
for (loop=0;loop<n;loop++)
{
if (num[loop]!=0)
{
printf("%2d号\n",num[loop]);
}
}
}
71、题目:编写input()和output()函数输入,输出5个学生的数据记录
#include<stdio.h>
typedef struct{
char name[50];
char sex[5];
int age;
}Stu;
void input(Stu *stu);
void output(Stu *stu);
int main() {
Stu stu[5];
printf("请输入5个学生的信息:姓名 性别 年龄:\n");
input(stu);
printf("5个学生的信息如下:\n姓名 性别 年龄\n");
output(stu);
return 0;
}
void input(Stu *stu){
for(int i =0; i < 5; i++){
scanf("%s%s%d",stu[i].name,stu[i].sex,&(stu[i].age));
}
}
void output(Stu *stu){
for(int i =0; i < 5; i++){
printf("%s\t%s\t%d\n",stu[i].name,stu[i].sex,stu[i].age);
}
}
80、题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只 猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了 一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的, 问海滩上原来最少有多少个桃子?
#include<stdio.h>
int main() {
int i = 0; //循环次数
int j = 1; //假设第五只猴子分的桃子数。(1-255,当为255时满足条件)
int n;
while(i < 5) { //i记录逆推次数,达到5说明for循环执行了5次,找到了满足条件的最小数
n = 4 * j; //n初值为最后剩下的桃子数,然后从n=4,8···寻找满足条件的数
for(i = 0; i < 5; i++) {
if(n % 4 != 0) //后面四只猴子分之前的桃子数必须是四的倍数,因为是前一只猴子剩下的,不满足则退出循环
break;
n = n / 4 * 5 + 1; //一次求第5只猴子分桃子前的桃子数,判断是否是4的倍数
printf("第五只猴子分得桃子为%d个时,剩余桃子数为%d\n",j,n);
}
j++;
}
printf("海滩上原来最少有%d个桃子\n", n);
return 0;
}
法二:
#include <stdio.h>
#include <stdlib.h>
/*
A、B、C、D、E 五人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。
日上三杆,A 第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。
B 第二个醒来,也将鱼分为五份,把多余的一条鱼扔掉拿走自己的一份。 。
C、D、E依次醒来,也按同样的方法拿鱼。
问他们台伙至少捕了多少条鱼?以及每个人醒来时见到了多少鱼?
*/
int main(){
int n;//至少捕了多少条鱼
int A,B,C,D,E;
for(n=6;;n++){//这个n是一开始总共鱼的数量,最起码得能分成五份还余1吧
A=4*(n-1)/5; //A=(n-1)乘五分之四
B=4*(A-1)/5;
C=4*(B-1)/5;
D=4*(C-1)/5;
if(n%5==1 && A%5==1 && B%5==1 && C%5==1 && D%5==1){ //平均分成5份多一
printf("至少合伙捕鱼:%d条\n",n);
printf("分别见到鱼的条数:%d %d %d %d\n",A,B,C,D);
break;
}
}
return 0;
}
82、题目:八进制转换为十进制
#include<stdio.h>
#include<math.h>
int main() {
int n,sum=0;
int i =0;
printf("请输入一个八进制数:\n");
scanf("%d",&n);
while(n){
sum+=(n%10)*pow(8,i++);
n/=10;
}
printf("刚输入的8进制数转化为十进制为\n%d\n",sum);
return 0;
}
83、题目:求0—7所能组成的奇数个数
程序分析:
这个问题其实是一个排列组合的问题,设这个数为 sun=a1a2a3a4a5a6a7a8,a1-a8 表示这个数的某位的数值,当一个数的最后一位为奇数时,那么这个数一定为奇数,不管前面几位是什么数字。如果最后一位数为偶数,则这个数一定为偶数。
a1-a8可以取 0-7 这个八个数字,首位数字不为 0。
从该数为一位数到该数为8位数开始统计奇数的个数:
- 1.当只有一位数时也就是该数的最后一位,奇数个数为4
- 2.当该数为两位数时,奇数个数为4*7=28
- 3.当该数为三位数时,奇数个数为:4*8*7=224
- ...
- 8.当该数为八位数时,奇数个数为:4*8*8*8*8*8*8*7(依次为最后一位到第一位)
#include<stdio.h>
#include<math.h>
//个位1 3 5 7是奇数
int main() {
int s,sum = 0;;
for(int i =1; i <=8; i++){ //i表示有几位数
if(i==1){ //最后一位是奇数有4种情况,其他是0-7八种情况,首位数字不能为0有七种情况
s=4;
}else if(i==2){ //两位数 奇数个数为7*4,三位数7*8*4
s=4*7;
}else{
s*=8;
}
sum+=s;
printf("%d位数奇数有%d个\n",i,s);
}
printf("奇数的总个数为:%d\n", sum);
return 0;
}
89、 题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下: 每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
#include<stdio.h>
#include<math.h>
//个位1 3 5 7是奇数
int main() {
int tel,a1,a2,a3,a4,t;
printf("请输入四位整数:\n");
scanf("%d",&tel);
a1=tel%10;
a2=tel/10%10;
a3=tel/100%10;
a4=tel/1000;
//加密
a1=(a1+5)%10;
a2=(a2+5)%10;
a3=(a3+5)%10;
a4=(a4+5)%10;
t=a1; a1=a4; a4=t;
t=a2; a2=a3; a3=t;
printf("加密后的数字:\n");
printf("%d%d%d%d\n",a1,a2,a3,a4);
return 0;
}
97、题目:从键盘输入一些字符,逐个把它们送到磁盘上去,直到输入一个#为止。
#include <stdio.h>
#include<stdlib.h>
//题目:从键盘输入一些字符,逐个把它们送到磁盘上去,直到输入一个#为止。
int main(){
FILE*fp=NULL;
char fileName[20]; //文件名
char ch; //要输入的字符
printf("请输入你要保存的文件的名称:\n");
gets(fileName);
if((fp=fopen(fileName,"w"))==NULL){
printf("打开文件失败\n");
exit(0);
}
printf("请输入你要保存的一些字符,以#结束\n");
while((ch=getchar())!='#'){
fputc(ch,fp);
}
fclose(fp);
return 0;
}
98、题目:从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件"test"中保存。 输入的字符串以!结束。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//98题目:从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件"test"中保存。 输入的字符串以!结束
int main()
{
FILE *fp = NULL;
char ch;
//打开文件
if((fp=fopen("test.txt","w"))==NULL){
printf("写入失败\n");
exit(0);
}
printf("请输入一个字符串(以!结束):\n");
while((ch=getchar()) != '!'){
if(ch <='z' && ch >= 'a'){
ch -= 32;
}
fputc(ch,fp);
}
//关闭文件流
fclose(fp);
return 0;
}
法二:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
FILE*fp=NULL;
char str[50];
int i,len;
printf("输入一个字符串:\n");
gets(str);
len=strlen(str);
for(i=0;i<len;i++)
{
if(str[i]<='z'&&str[i]>='a')
str[i]-=32;
}
if((fp=fopen("test","w"))==NULL)
{
printf("error: cannot open file!\n");
exit(0);
}
fprintf(fp,"%s",str);
fclose(fp);
return 0;
}
99、题目:有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件C中。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NUM 200
//99 题目:有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件C中。
int main(){
FILE *fa=NULL,*fb=NULL,*fc=NULL;
char *str=NULL;
//打开文件
fa=fopen("A.txt","r");
fb=fopen("B.txt","r");
fc=fopen("C.txt","w");
if(fa==NULL || fb==NULL || fc==NULL){
printf("ERROR,cannot open file\n");
exit(0);
}
str=(char*)malloc((NUM*sizeof(char)));
//读取文件A B 并合并排序
fgets(str,100,fa);
printf("%s",str);
int i=0;//记a.txt文件字符串个数
while(*(str+i)!='\0'){
i++;
}
//此时*(str+i)='\0'
fgets(str+i,100,fb);
int len = strlen(str)-1;//减去末尾的换行符
//冒泡排序
for(i=0; i < len-1; i++){
for(int j=0; j<=len-i-1;j++){
if(str[j]>str[j+1]){
char temp=str[j];
str[j]=str[j+1];
str[j+1]=temp;
}
}
}
fputs(str,fc);
free(str);
//关闭文件
fclose(fa);
fclose(fb);
fclose(fc);
return 0;
}
100、题目:有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,况原有的数据和计算出的平均分数存放在磁盘文件"stud"中
#include <stdio.h>
#include <stdlib.h>
typedef struct{
int id;
char name[20];
int math,english,c;
int avarg; //平均成绩
}Stu;
int main(){
FILE*fp;
Stu stu[5];
printf("请输入5个同学的信息:学生号,姓名,3门成绩:\n");
//键入5位同学成绩,计算平均分
for(int i=0; i<5; i++){
scanf("%d %s %d %d %d",&(stu[i].id),stu[i].name,&(stu[i].math),&(stu[i].english),&(stu[i].c));
stu[i].avarg=(stu[i].math+stu[i].english+stu[i].c)/3;
}
//打开文件
if((fp=fopen("stud.txt","w"))==NULL){
printf("ERROR");
exit(0);
}
//写入文件
for(int 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].avarg);
}
//关闭文件
fclose(fp);
return 0;
}
变形:把文件stud.txt的内容读取到结构体中输出到控制台
stud.txt内容:
1 小红 100 100 100 100
2 小白 100 100 100 100
3 小黑 100 100 100 100
4 小兰 100 100 100 100
5 小狗 100 100 100 100
#include <stdio.h>
#include <stdlib.h>
//把文件stud.txt的内容读取到结构体中输出到控制台
typedef struct Stu{
int id;
char name[20];
int math,english,c;
int avarg;
}Stu;
int main(){
FILE*fp;
Stu stu[5];
//打开文件
if((fp=fopen("stud.txt","r"))==NULL){
printf("ERROR");
exit(0);
}
//从文件读取到结构体中方法一
/* int i=0;
while(!feof(fp)){
fscanf(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].avarg);
i++;
}*/
//从文件读取到结构体中方法二
for(int i=0; i<5; i++){
fscanf(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].avarg);
}
//关闭文件
fclose(fp);
//输出到控制台
for(int i=0; i<5; i++){
printf("%d %s %d %d %d %d\n",stu[i].id,stu[i].name,stu[i].math,stu[i].english,stu[i].c,stu[i].avarg);
}
return 0;
}
补充:以二进制形式写入和读取操作
#include<stdio.h>
#include<stdlib.h>
#define N 2
struct Student{
char name[10];
int age;
float score;
}stu[N],stu2[N],st;
//写入
void write(){
FILE*fp;
//打开文件
if((fp=fopen("E://a.txt","wb"))==NULL){
printf("打开文件失败");
exit(1);
}
//以二进制写入文件写入文件
fwrite(stu,sizeof(struct Student),N,fp);
//关闭文件流
fclose(fp);
}
//读取
void display(){
FILE*fp;
if((fp=fopen("E://a.txt","rb"))==NULL){
printf("打开文件失败");
exit(1);
}
fread(stu2,sizeof(struct Student),N,fp);
for(int i = 0; i < N; i++){
printf("%s %d %f \n",stu2[i].name,stu2[i].age,stu2[i].score);
}
fclose(fp);
}
int main(){
for(int i = 0; i < N; i++){
printf("输入第%d位学生姓名,年纪,得分:\n",i+1);
scanf("%s %d %f",stu[i].name,&stu[i].age,&stu[i].score);
}
//把输入的成绩以位二进制写入到文件里
write();
//从文件里读取输出到控制台
display();
return 0;
}
题目14来源: https://blog.csdn.net/weixin_44018859/article/details/88087467
题目3来源:https://blog.csdn.net/hello_word2/article/details/80951731
题目来源->菜鸟教程:https://www.runoob.com/cprogramming/c-100-examples.html
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)