题目:有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,况原有的数据和计算出的平均分数存放在磁盘文件"stud"中。
程序分析:无。
程序源代码:
#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++)
{
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;
}题目:有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件C中。
程序分析:你需要先创建 A.txt 与 B.txt。
A.txt文件内容:
123
B.txt文件内容:
456
程序源代码:
#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;
}题目:从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件"test"中保存。 输入的字符串以!结束。
程序分析:无。
程序源代码:
#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);
system("pause");
return 0;
}题目:从键盘输入一些字符,逐个把它们送到磁盘上去,直到输入一个#为止。
程序分析:无。
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE*fp=NULL;
char filename[25];
char ch;
printf("输入你要保存到的文件的名称:\n");
gets(filename);
if((fp=fopen(filename,"w"))==NULL)
{
printf("error: cannot open file!\n");
exit(0);
}
printf("现在你可以输入你要保存的一些字符,以#结束:\n");
getchar();
while((ch=getchar())!='#'){
fputc(ch,fp);
}
fclose(fp);
system("pause");
return 0;
}题目:计算字符串中子串出现的次数 。
程序分析:无。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int i,j,k,TLen,PLen,count=0;
char T[50],P[10];
printf("请输入两个字符串,以回车隔开,母串在前,子串在后:\n");
gets(T);
gets(P);
TLen=strlen(T);
PLen=strlen(P);
for(i=0;i<=TLen-PLen;i++)
{
for(j=0,k=i;j<PLen&&P[j]==T[k];j++,k++)
;
if(j==PLen)count++;
}
printf("%d\n",count);
system("pause");
return 0;
}题目:简单的结构体应用实例。
程序分析:无。
程序源代码:
#include <stdio.h>
struct programming
{
float constant;
char *pointer;
};
int main()
{
struct programming variable;
char string[] = "菜鸟教程:http://www.runoob.com";
variable.constant = 1.23;
variable.pointer = string;
printf("%f\n", variable.constant);
printf("%s\n", variable.pointer);
return 0;
}题目:猜谜游戏。
程序分析:无。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void caizi(void)
{
int n;
char begin;
int count = 1;
srand((int)time(NULL));
int m = (rand() % 100) + 1;
puts("游戏开始,请输入数字:");
while (1)
{
scanf("%d", &n);
if (n == m)
{
printf("猜中了,使用了 %d 次!\n", count);
if (count == 1)
{
printf("你是神级人物了!膜拜\n");
getchar();
printf("你已经达到最高级别,还需要玩吗?Y/N \n");
scanf("%c", &begin);
if (begin == 'Y' || begin == 'y') //重复玩的一个嵌套循环
{
caizi();
}
else
{
printf("谢谢,再见!\n");
}
}
else if (count <= 5)
{
printf("你是王级人物了!非常赞\n");
getchar();
printf("需要挑战最高级别不?Y/N \n");
scanf("%c", &begin);
if (begin == 'Y' || begin == 'y')
{
caizi();
}
else
{
printf("谢谢,再见!\n");
}
}
else if (count <= 10)
{
printf("你是大师级人物了!狂赞\n");
getchar();
printf("需要挑战最高级别不?Y/N \n");
scanf("%c", &begin);
if (begin == 'Y' || begin == 'y')
{
caizi();
}
else
{
printf("谢谢,再见!\n");
}
}
else if (count <= 15)
{
printf("你是钻石级人物了!怒赞\n");
getchar();
printf("需要挑战最高级别不?Y/N \n");
scanf("%c", &begin);
if (begin == 'Y' || begin == 'y')
{
caizi();
}
else
{
printf("谢谢,再见!\n");
}
}
else
{
getchar();
printf("你的技术还有待提高哦!重玩? Y/N\n");
scanf("%c",&begin);
if (begin == 'Y' || begin == 'y')
{
caizi();
}
else
{
printf("谢谢,再见!\n");
}
}
break;
}
else if (n < m)
{
puts("太小了!");
puts("重新输入:");
}
else
{
puts("太大了!");
puts("重新输入:");
}
count++;//计数器
}
}
int main(void)
{
caizi();
system("pause");
return 0;
}题目:时间函数举例2
程序分析:无。
程序源代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
long i=10000000L;
clock_t start,finish;
double TheTimes;
printf("做%ld次空循环需要的时间为",i);
start=clock();
while(i--);
finish=clock();
TheTimes=(double)(finish-start)/CLOCKS_PER_SEC;
printf("%f秒。\n",TheTimes);
return 0;
}题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下: 每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
程序分析:无。
程序源代码:
#include <stdio.h>
int main()
{
int a,i,aa[4],t;
printf("请输入四位数字:");
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;
}
printf("加密后的数字:");
for(i=3;i>=0;i--)
printf("%d",aa[i]);
printf("\n");
}题目:两个字符串连接程序 。
程序分析:无。
程序源代码:
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
char* strconnect(char *str1,char *str2);
int main()
{
char str1[20],str2[20];
char *str;
puts("请输入两个字符串,用回车分开:");
scanf("%s%s", str1, str2);
str=strconnect(str1,str2);
puts("连接后的字符串为:");
puts(str);
return 0;
}
char* strconnect(char *str1,char *str2)
{
char*str;
str=(char*)malloc(strlen(str1)+strlen(str2)+1);
str[0]='\0';
strcat(str,str1);
strcat(str,str2);
return str;
}题目:判断一个素数能被几个9整除。
程序分析:丫的!这题目的意思是判断一个素数能整除几个9组成的数吧?我就这么理解吧。素数是不 能被除1和自身之外的数整除的
程序源代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int p,i;
long int sum=9;
printf("请输入一个素数:\n");
scanf("%d",&p);
for(i=1;;i++)
if(sum%p==0)break;
else sum=sum*10+9;
printf("素数%d能整除%d个9组成的数%ld\n",p,i,sum);
return 0;
}题目:一个偶数总能表示为两个素数之和。
程序分析:我去,这是什么题目,要我证明这个问题吗?真不知道怎么证明。那就把一个偶数分解成两个素数吧
#include<stdio.h>
#include<stdlib.h>
int Isprimer(unsigned int n);
int main()
{
unsigned int n,i;
do{
printf("请输入一个偶数:\n");
scanf("%d",&n);
}while(n%2!=0);
for(i=1;i<n;i++)
if(Isprimer(i)&&Isprimer(n-i))
break;
printf("偶数%d可以分解成%d和%d两个素数的和\n",n,i,n-i);
return 0;
}
int Isprimer(unsigned int n)
{
int i;
if(n<4)return 1;
else if(n%2==0)return 0;
else
for(i=3;i<sqrt(n)+1;i++)
if(n%i==0)return 0;
return 1;
}题目:求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>
int main(int agrc, char*agrv[])
{
long sum = 4, s = 4;//sum的初始值为4表示,只有一位数字组成的奇数个数为4个
int j;
for (j = 2; j <= 8; j++)
{
printf("%d位数为奇数的个数%ld\n", j-1, s);
if (j <= 2)
s *= 7;
else
s *= 8;
sum += s;
}
printf("%d位数为奇数的个数%ld\n", j-1, s);
printf("奇数的总个数为:%ld\n", sum);
// system("pause");
return 0;
}题目:809*??=800*??+9*?? 其中??代表的两位数, 809*??为四位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。
程序分析:无。
#include <stdio.h>
void output(long int b, long int i){
printf("\n%ld = 800 * %ld + 9 * %ld\n", b,i,i);
}
int main(){
void output(long int b, long int i);
long int a,b,i;
a = 809;
for(i = 10; i < 100; i++){
b = i * a;
if (b >= 1000 && b <= 10000 && 8 * i < 100 && 9 * i >= 100){
output(b, i);
}
}
return 0;
}题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只 猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了 一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的, 问海滩上原来最少有多少个桃子?
程序分析:无。
程序源代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int x
,i=0,j=1;
while(i<5){
x=4*j;
for(i=0;i<5;i++)
{
if(x%4!=0){break;}
x=(x/4)*5+1;
}
j++;
}
printf("%d\n",x);
return 0;
}题目:字符串排序。
程序分析:无。
程序源代码:
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
void swap(char*str1,char*str2);
int main()
{
char str1[20],str2[20],str3[20];
printf("请输入3个字符串,每个字符串以回车结束!:\n");
fgets(str1, (sizeof str1 / sizeof str1[0]), stdin);
fgets(str2, (sizeof str2 / sizeof str2[0]), stdin);
fgets(str3, (sizeof str3 / sizeof str3[0]), stdin);
if(strcmp(str1,str2)>0)swap(str1,str2);
if(strcmp(str2,str3)>0)swap(str2,str3);
if(strcmp(str1,str2)>0)swap(str1,str2);
printf("排序后的结果为:\n");
printf("%s\n%s\n%s\n",str1,str2,str3);
return 0;
}
void swap(char*str1,char*str2)
{
char tem[20];
strcpy(tem,str1);
strcpy(str1,str2);
strcpy(str2,tem);
}题目:找到年龄最大的人,并输出。请找出程序中有什么问题。
程序分析:无。
#include<stdio.h>
#include<stdlib.h>
struct man{
char name[20];
int age;
}
person[3]={"li",18,"wang",25,"sun",22};
int main()
{
struct man *q,*p;
int i,m=0;
p=person;
for(i=0;i<3;i++)
{
if(m<p->age)
{
m=p->age;
q=p;
}
p++;
}
printf("%s %d\n",q->name,q->age);
return 0;
}题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数)。
程序分析:无。
#include<stdio.h>
#include<stdlib.h>
double evenumber(int n);
double oddnumber(int n);
int main()
{
int n;
double r;
double (*pfunc)(int);
printf("请输入一个数字:");
scanf("%d",&n);
if(n%2==0) pfunc=evenumber;
else pfunc=oddnumber;
r=(*pfunc)(n);
printf("%lf\n",r);
system("pause");
return 0;
}
double evenumber(int n)
{
double s=0,a=0;
int i;
for(i=2;i<=n;i+=2)
{
a=(double)1/i;
s+=a;
}
return s;
}
double oddnumber(int n)
{
double s=0,a=0;
int i;
for(i=1;i<=n;i+=2)
{
a=(double)1/i;
s+=a;
}
return s;
}