| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4988 人关注过本帖
标题:大家都来看阿,瞧一瞧看一看啊
只看楼主 加入收藏
孤单的帅哥
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-10-28
收藏
得分:0 
8写一函数,输入一个4位数字,要求输出4个数字字符,但每两个数字间有一个空格。如输入1990,应输出“1 9 9 0“。
解:
main()
{
char str[80];
voud insert(char str []);
printf(“\nInput four digits:”);
scanf(“%s”,str);
insert(str);
}
void insert(char str[])
{ int i;
for (i=strlen(str);i>0;i--)
{ int i;
for(i=strlen(str);i>0;i--)
{ str[2*i]=str[i];
str[2*i-1]=’’;
}
printf(“\nOutpur:\n%s”,str);
}
9编写一个函数,由实参数传来一个字符串,统计此字符串中字母、数字、空格和其他字符的个数,在主函数中输入字符串以及输出上述的结果。
解:
int letter,digit,space,others; /*全局变量 */
main()
{ int count(char str[]); /*函数声明*/
char text[80];
printf(“\nInput string :\n”);
gets(text);
jprintf(“string:”);
puts(text);
letter=0;
digit=0;
space=0;
others=0;
count(text);
printf(“letter:%d,digit:%d,space:%d,others:%d\n”,letter,digit,space,others);
}
int count(char str[])
{ inti;
for (i=0;str[i]!=’\0’;i++)
if((str[i]>=’a’ &&str[i]<=’z’)||(str[i]>=’A’&&str[i]<=’Z’))
letter++;
else if (str[i]>=’0’&&str[i]<=’9’)
digit++;
else if(strcmp(str[i],’’)= =0)
space++;
else
others++;
}
10写一函数,输入一行字符,将此字符此中最长的单词输出。
解:
int alphabetic(char c) /*判断当前字符是否字母,若是则返回1,否则返回0 */
{
if ((c>’a’&&c<=’z’)||(x>=’A’&&c<=’Z’))
return(1);
else
return(0);
}
int longest(char string[]) /*寻找最长的单词的起始位置 */
{
int len=0,i,length=0,flag=1,place=0,point;
for(i=0;i<=strlen(string);i++)
if(alphabetic(string[i]))
if (flag)
{
point=i;
flag=0;
}
else
len++;
else
{
flag=1;
if(len>=length)
{ length=len;
place=point;
len=0;
}
}
return(place);
}
main()
{ int i;
char ling[100];
printf(“Input one line:\n”);
gets(line);
printf(“\nThe longest word is :”);
for (i=longest(line);alphabetic(line[i];i++)
printf(“%c”),line[i]);
printf(“\n”);
}
11写一函数,用“起泡法”对输入的10个字符按由小到大的顺序排列。
解:
#deine N 10
char str[N];
main()
{ void sort(char str[]);
int i,,flag;
for (flag=1;flag= =1;)
{
printf(“\nInput string :\n”);
scanf(“%s”,&str);
if(strlen(str)>N)
printf(“String too long ,input again!”);
else
flag0;
}
sort(str);
printf(“string sorted :\n”);
for (i=0;i<N;i++)
printf(“%c”, str[i]);
}
void sort (char str[])
{ int i,j;
char t;
for (j=1,j<N;j++)
for(i=0;(i<N-j)&&( str[i]!=’\0’);i++)
if (str[i]> str[i+1])
{
t= str[i];
str[i]= str[i+1];
str[i+1]=t;
}
}
12用牛顿迭代法求根。方程为ax3   +bx2   +cx+d=0.系数a、b、c、d的值依次为1、2、3、4,求x在1附近的一个实根,求出根后由主函数输出。
解:
#include<math.h>
float solut(foat a,float b,float c float d)
{
float x=1,x0,f,f1;
do
{ x0=x;
f=((a*x0+b)*x0+c)*x0+d;
f1=(3*a*x0+2*b)*x0+c;
x=x0-f/f1;
}
while(fabs(x-x0)>=le3);
return(x);
}
main()
{
float a,b,c,d;
printf(“\nInput a,b,c,d:”);
scanf(“%f,%f,%f,%f”,&a,&b,&c,&d);
printf(“Equation is :%5.2fx^3+%5.2fx^2+%5.2fx+%5.2f=0”,a,b,c,d);
printf(“\nx=%10.7f\n”,solut(a,b,c,d));
}
13用递归方法求n阶勒让德多项式的值,递归公式为:P ={
解:
main()
{
int x,n;
float p(int,int);
printf(“\nInput n &x:”);
scanf(“%d,%d”,&n,&x);
printf(“n=%d,x=%d\n”,nx);
printf(“P%d(%d(%d)=%6.2f”,n,x,p(n,x));
}
float p(int n,int x)
{
if(n= =0)
return(1);
else if (n= =1)
return(x);
else
return(((2*n-1)*x*p((n-1),x)-(n-1)*p((n-2),x))/n;
}

2006-10-28 22:19
孤单的帅哥
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-10-28
收藏
得分:0 
14输入10个学生5门课的成绩,分别用函数求:⑴每个学生的平均分;⑵每门课的平均分;⑶找出最高分的分数所对的学生和课程;⑷求出平均分方差:σ= , 为某一学生的平均分。
解:
#define N 10
#define N 5
float score[N][M]; /*全局数组 */
float a_stu[N],a_cour[M]; /*全局数组 */
int r,c; /*全局变量*/
main()
{
float s_var(void); /*函数原型声明 */
float highest(); /*函数原型声明 */
void input_stu(void); /*函数原型声明 */
void aver_stu(void); /*函数原型声明 */
void aver_cour(void); /*函数原型声明 */
int i,j;
floath;
input_stu (); /*函数调用,输入10个学生成绩*/
aver_stu(); /*函数调用,计算10个学生平均成绩*/
aver_cour(); /*函数调用,计算5门课平均成绩*/
pringf(“\nNO. Cour1 cour2 cour3 cour4 cour5 aver”);
for(i=0;i<N;i++)
{ printf(“\Nno.%2d”,i+1); /*输出1个学生号码 */
for(j=0;j<M;j++) /*输出1个学生各门课的成绩*/
printf(“%8.2f”,score[i][j]);
printf(“%8.2f”,a_stu[i]); /*输出1个学生的平均成绩*/
}
printf(“\naverage:”);
for (j=0;j<M;j++) /*输出5门课的平均成绩*/
printf(“%8.2f”,a_cour[j]);
h=highest(); /*调用函数,求最高分和它属于哪个学生、哪门课 */
printf(“\nhighest:%7.2f NO.%2d course%2d\n”,h,r,c);
/*输出最高分和学生号、课程号 */
printf(“\n variance:%8.2f”,s_var()); /*调用函数,计算和输出方差 */
}
void input_stu(void) /*输入10个学生成绩的函数*/
{ int i,j;
for (i=0;i<N;i++)
{ printf(“\nInput scorce of studeng%2d:\n”,i+1); /*学号从1开始 */
for(j=0;j<M;j++)
scanf(“%f”,&scorce[i][j]);
}
}
void aver_stu(void) /*计算10个学生平均成绩的函数*/
{ int i,j;
float s;
for (i=0;i<N;i++)
{ for(j=0,s=0;j<M;j++)
s+=scorce[i][j];
a_stu[i]=s/5.0;
}
}
void aver_cour(void) /*计算5门课平均成绩的函数*/
{ int i,j;
float s;
for(j=0;j<M;j++)
{ s=0;
for (i=0;i<N;i++)
s+=scorce[i][j];
a_cour[j]=s/(float)N;
}
}
float highest() /*求最高分和体属于哪个学生、哪门课的函数 */
{ float high;
int i,j;
high=score[0][0];
for (i=0;i<N;i++)
for(j=0;j<M;j++)
if(scorce[i][j]>high)
{high= scorce[i][j];
r=i+1; /*数组行号i从0开始,学号r从1开始,顾r=i+1 */
c=j+1; /*数组行号j从0开始,学号c从1开始,顾c=j+1 */
}
return(high);
}
float s_var(viod) /*求方差的函数 */
{
int i,j;
float sumx,sumxn;
sumx=0.0;
sumxn=0.0;
for (i=0;i<N;i++)
{ sumx+=a-stu[i]*a_stu[i];
sumxn+=a_stu[i];
}
return(sumx/N-(sumx/N)*(sumx/N));
}
15写几个函数:⑴输入10个职工的姓名和职工号;⑵按职工号由小到大排序,姓名顺序也随之调整;⑶要求输入一个职工号,用折半查找法找出该职工的姓名。从主函数输入要查找的职工号,输出该职工姓名。
解:
#include<stdio.h>
#define N 10
void input (int num,char name[N][8]) /*输入数据的函数 */
{ int i;
for (i=0;i<N;i++)
printf(“\nInput NO,:”);
scanf(“%d”,&num[i]);
printf(“Input name:”);
gerchar();
gets(name[i]);
}
}
void sort(int num[],char name[N]8)) /*排序的函数 */
{ int i,j,min,temp1;
char temp2[8];
for (i=0;i<N-1;i++)
{
min=i;
for(j=i;j<N;j++)
if(num[min]>num[j]) min=j;
temp1=num[i];
strcpy(temp2,name[i]);
num[i]=num[min];
strcpu(name[i],name[min]);
num[min]=temp1;
strcpu(name[min],temp2);
}
printf(“\n result:\n”;
for (i=0;i<N;i++)
printf(“\n%5d%10s”,num[i],name[i];
}
void search(int n,num[],char name[N][8]) /*折半查找的函数 */
{
int top,bott,mid,loca;
loca=0;
top=0;
bott=N-1;
if((n<num[0])||(n>num[N-1])
loca=-1;
while((sign= =1)&&(top<=boot))
{
min=(bott+top)/2;
if(n= =num[mid])
{
loca=mid;
printf(“NO.%d, his name is %s.\n”n,name[loca]);
sign=-1;
else
if 9n<num[mid])
bott=mif-1;
else
top=mid+1;
}
if (sing= =-1||loca= =-1)
printf(“Can not find%d,\n”,n);
}
main()
{
int num[N],number, flag=1,c,n;
char name[N][8];
input(num,name);
sort(num,name);
while (flag= =10
{
printf(“\nInput number to look for :”);
scanf(“%d”,&number);
search(number,num,name);
printf(“Continue or not(Y/N)?”);
getchar();
c=getchar;
if (c= =’N’||c= =’n’)
flag=0;
}
}
16写一个函数,输入一个十六进制书输出相应的十进制数。
解:
include<stdio.h>
define MAX 1000
main()
{ char t[MAX];
i=0;
flag=0;
flag1=1;
printf(“\nInput a hex number:”);
while((c=getchar()!=’\0’&i<MAX&&flag1)
{
if(c>=’0’&&x<=’9’||c>=’a’&&c<=’f’||c>’A’&&c<=’F’)
{
flag=1;
t[i++]=c;
}
else
if(flag)
{
t[i]=’\0’;
printf(“decima number %d:\n”,htoi(t));
printf(“Continue or not?”);
c=getchar();
if (c= =’N’||c= =’n’)
flag1=0;
else
{
flag=0;
i=0;
printf(“\nInput a hex number :”);
}
}
}
}
htoi(char s[])
{
int i,n;
n=0;
for (i=0;s[i]!=’\0’;i++)
{
if(s[i]>=’0’& s[i]<=’9’)
n=n*16+ s[i]-‘0’;
if(s[i]>=’a’&& s[i]<=’f’)
n=n*16+ s[i]-‘a’+10;
if(s[i]>=’A’&& s[i]< ‘F’)
n=n*16+ s[i]-‘A’+10;
}
return(n);
}

2006-10-28 22:20
孤单的帅哥
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-10-28
收藏
得分:0 

17用递归法将一个整数n转换成字符串。例如输入483,应输出字符串“483”。N的位数 不确定,可以是任意位数的整数。
解:
#include<stdio.h>
void convert(int n)
{ int i;
if ((i=n/10)!=0)
convert(int n);
putchar(n%10+’0’);
}
main()
{
int number;
printf(“\nInput an integer:”);
scanf(“%d”,&number);
printf(“Output:”);
if (number<0)
{
putchar(‘-‘);
number=-number;
}
conert(cnumber);
}
18给出年、月、日,计算该日是该年的第几天。
解:
mian()
{
int year,moneh,day,days;
printf(“\nInput date (year,month,day):”);
scanf(“%d,%d,%d”,&year,&month,&day);
days=sum_day(month,day); /*调用函数一 */
if(leap(year)&&month>=3) /*调用函数二 */
days=days+1;
printf(“is the %dth day in this year .\n”,days);
}
int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; /*外部数组 */
int sum_day(int month,int day) /*函数一 :计算日期*/
{
int i; /*累加所在月之前的天数 */
for (i=,i<month;i++)
day+=day-tab[i];
return(day);
}
int leap (int year) /*函数二:判断是否是闰年 */
{
int leap;
leap=year%4= =0&&year%100!=0||year%400= =0;
reurn(leap);
}


2006-10-28 22:20
孤单的帅哥
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-10-28
收藏
得分:0 

循环控制综合测试

1 输入两个正整数m和n,求其最大公约数和最小公倍数。
解:
main()
{ int p,r,n,m,temp;
printf(“请输入两个正整数n,m:”);
scanf(“%d,%d,&n,&m);
if(n<m)
{ temp=n;
n=m;
m=temp; /* 把大数放在n中,小数放在m中*/
}
p=n*m; /* 先将n和m的乘积保存在p中,以便求最小公倍数时用 */
while(m!=0) /* 求n和m的最大公约数 */
{r=n%m;
n=m;
m=r;
}
printf(“它们的最大公约数为:%d\n”,n);
printf(“它们的最小公约数为:%d\n”,p/n); /* p是原来两个整数的乘积 */
}
2 输入一行字符,分别统计出其中的英文字母、空格、数字和其它字符的个数。
解:
#include<stdio.h>
main()
{char c;
int letter=0,space=0,digit=0,other=0;
printf(“请输入一行字符:\n”);
while((c=getchar())!=’\n’);
{if (c>=’a’&&c<=’z’||x>=’A&&c<=’Z’)
letter++;
else if (c= =’’)
space++;
else if(c>=’0’&&c<=’9’)
digit++;
else
other++;
}
printf(“字母数=%d,空格数=%d,数字数=%d,其他字符=%d\n,letter,space,digit,other);
}
3 求Sn=a+aa+aaa+…+aa…a之值,其中a是一个数字。例如:2+22+222+2222+22222(此时n=5),n由键盘输入。
解:
mian()
{ int a,n,I=1,sn=0,tn=0;
printf(“a,n=:”);
scanf(%d,%d”,&a,&n);
while(i<=n)
{ tn=tn+a; /* 赋值后的tn为I个a 组成的值 */
sn=sn+tn; /* 赋值后的sn为多项式前i项之和*/
a=a*10;
++i
}
printf(“a+aa+aaa+…=%d\n”,sn);
}
4求 既求1+2!+…+20!)。
解:
main0
{ float s=0,t=1;
int n;
for(n=1;n<=20;n++)
{
t=t*n; /* 求n! */
s=s+t; /* 将各项累加 */
}
printf(“1!+2!+…+20!=%e\n”,s);
}
5求 + + .
解:
main()
{ int n1=100,n2=50,n3=10;
float k;
float s1=0,s2=0,s3=0;
for(k=1;k<=n1;k++) /* 计算1到100的和 */
s1=s1+k;
for(k=1;k<=n2;k++) /* 计算1到50的各数的平方和 */
s2=s2+k*k;
for(k=1;k<=n3;k++) /* 计算1到10的各数的倒数和 */
s3=s3+1/k;
printf(“总和=%8.2f\n”,s1+s2+s3);
}
6 打印所有的“水仙花数“。所谓“水仙花数“是指一个3位书,其各位数字的立方和等于该数本身。例如,153是一个“水仙花数“,以为153=1 3 +5 3 +3 3 。
解:
main()
{ int i,j,k,n;
printf(““水仙花“数是:”);
for(n=100;n<1000;n++)
{ i=n/100;
j=n/10-i*10;
k=n%10;
if(n==i*i*i+j*j*j+k*k*k)
printf(“%4d”,n);
}
printf(“\n”);
}
7 一个数如果恰好等于它的因子之和,这个数就称为“完数“。例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数“。编程找出1000以内的所有“完数“,并按下面的格式输出其因子:
6 It factors are 1,2,3
解:方法一:
#define M1000 /*定义寻找范围*/
main()
{ int k1,k2,k3,k4,k5,k6,k7,k8,k9,k10;
int i,a,n,s;
for(a=2;a<=M;a++) /* a是2~1000之间的整数,检查它是否完数 */
{ n=0; /* n用来累计a的因子的个数 */
s=a; /* s用来存放尚未求出的因子之和,开始时等于a */
for(i=1;i<a;i++) /* 检查i是否a的因子 */
{
if(a%i= =0) /* 如果i是a的 因子*/
{ n++; /* n加1表示新找到一个因子 */
s=s-i; /* s减去已找到的因子,s 的新值是尚未求出的因子之和*/
switch(n) /* 将找到的因子赋给k1,k2…k10 */
{
case1: k1=i; break; /*找出的第一个因子赋给k1*/
case2: k2=i; break; /*找出的第一个因子赋给k2*/
case3: k3=i; break; /*找出的第一个因子赋给k3*/
case4: k4=i; break; /*找出的第一个因子赋给k4*/
case5: k5=i; break; /*找出的第一个因子赋给k5*/
case6: k6=i; break; /*找出的第一个因子赋给k6*/
case7: k7=i; break; /*找出的第一个因子赋给k7*/
case8: k8=i; break; /*找出的第一个因子赋给k8*/
case9: k9=i; break; /*找出的第一个因子赋给k9*/
case10: k10=i; break; /*找出的第一个因子赋给k10*/
}
}
if(s= =0) /* s=0表示全部因子都已找到*/
{ printf(“%d Its facter are”,a);
if(n>1) printf(“%d,%d”,k1,k2); /* n>1表示a 至少有2个因子*/
if(n>2) printf(“,%d”,k3); /* n>2表示a 至少有3个因子,故应再输出一个子*/
if(n>3) printf(“,%d”,k4); /*以下类似*/
if(n>4) printf(“,%d”,k5);
if(n>5) printf(“,%d”,k6);
if(n>6) printf(“,%d”,k7);
if(n>7) printf(“,%d”,k8);
if(n>8) printf(“,%d”,k9);
if(n>9) printf(“,%d”,k10);
printf(“\n);
}
}
}
方法二:
mian()
int m,s,i;
for( m=2;m<1000;m++)
{ s=0;
for(i=1;i<m;i++)
if ((m%i) = =0) s=s+i;
if(s= =m)
{ printf(“%d是一个“完数“,它的因子是:”,m);
for(i=1;i<m;i++)
if (m%i= =0) printf(“%d”,i);
printf(“\n”);
}
}
}
方法三:
main()
{ k[11];
int i,a,n,s;
for(a=2;a<=1000;a++)
{ n=0;
s=a;
for(i=1;i<a;i++)
if ((a%i)= =0)
{ n++;
s=s-i;
k[n]=i; /* 将找到的因子赋给k[1],…,k[10] */
}
if (s= =0)
{ printf(“\n%d是一个“完数“,它的因子是:“,a);
for( i=1;i<n;i++)
printf(“%d\n”,k[n]);
}
}
}


2006-10-28 22:21
孤单的帅哥
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-10-28
收藏
得分:0 

8有一分数序列: 2/1,3/2,5/3,8/5,13/21,… 求出这个数的前20项 之和。
解:
main()
{ int i,t,n=20;
float a=2,b=1,s=0;
for(i=1;i<=n;i++)
{ s=s+a/b;
t=a;
a=a+b; /* 将前一项分子与分母之和作为下一项的分子 */
b=t; /* 将前一项的分子 作为下一项的分母 */
}
printf(“sum=%9.6f\n”,s);
}
9一球从100m高度自由落下,每次落地后反跳回远高度的一半,再落下。求它在第10次落地时,共经过多少m?第10次反弹多高?
解:
main()
{ float sn=100,hn=sn/2;
int n;
for (n=2;n<=10;n++)
{ sn=sn+2*hn; /* 第n次落地时共经过的米数 */
hn=hn/2; /* 第n次反跳的高度 */
}
printf(“第10次落地时共经过%f m.\n”,sn);
printf(“第10次反弹%f m.\n”,hn);
}
10猴子吃桃问题。猴子第一天摘下若干个桃子,当即下了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,有多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上再吃时,见只剩下一个桃子了,求第一天共摘了多少个桃子。
解:
main()
{ int day,x1,x2;
day=9;
x2=1;
while(day>0)
{ x1=(x2+1)*2; /* 第1天的桃子是第2天的桃子数加1后的2倍 */
x2=x1;
day--;
}
printf(“total=%d\n”,x1);
}
11用迭代法求x= .求平方根的迭代公式为: xn+1=1/2(xn+a/ xn ) 要求前后两次求出的x的差的绝对值小于10-5 。
解:用迭代发求平方根的算法如下:
〔1〕 设定一个x的初值x 0;
〔2〕 用上述公式求出x的下一个值x 1;
〔3〕 再将x 1代如上述公式,求出x的下一个值x 2;
〔4〕 如此继续下去,直到前后两次求出的x值(x n+1和x n)满足以下关系: | x n+1-x n|<10-5
〔5〕 为了便于程序处理,今只用变量x 0和x 1,先令x 的初值x 0=a/2(也可以是另外的值),求出x 1;如果此时| x n+1-x n|<10-5 ,则使x 1=>x 0,然后用这个新的x 0求出下一个x 1;如此反复,直到| x n+1-x n|<10-5 为止。
程序如下:
#include<math.h>
main()
{ float a,x0,x1;
printf(“Enter a positive number:”);
scanf(“%f”,&a); /* 输入a的值 */
x0=a/2;
x1=(x0+a/x0)/2;
do
{ x0=x1;
x1=(x0+a/x0)/2;
}
while(fabs(x0-x1)>=le-5);
printf(“This square root of %5d.2f is %8.5%f\n”,a,x1);
}
12 用牛顿迭代法求下面方程在1.5附近的根。
2x3 -4x2 +3x-6=0
解:
#include<math.h>
main()
{float x, x0,f,f1;
x=1.5;
do
{ x0=x;
f=((2*x0-4*x0+3)*x0-6;
f1=(6*x0-8)*x0+3;
x=x0-f/f1;
}
while(fabs(x-x0)>=le-5);
printf(“The root of equation is %5.2f\n”);
}
13用而分法求下面的方程在(-10,10)之间的根。
2x3 -4x2 +3x-6=0
解:
#include<math.h>
main()
{float x0, x1,x2,fx0,fx1,fx2;
do
{ printf(“Enter x1& x2:”);
scanf(“%f,%f”,&x1,x2);
fx1=x1*((2*x1-4)*x1+3)-6;
fx2=x2*((2*x2-4)*x2+3)-6;
}
while (fx1*fx2>0);
do{x0=(x1+x2)/2;
fx0=x0*((2*x0-4)*x0+3)-6;
if ((fx0*fx1)<0)
{x2=x0;
fx2=fx0;
}
else
{ x1=x0;
fx1=fx0;
}
while(fabs(fx0)>=le5);
printf(“x=%6.2f\n”,x0);
}
14打印以下图案。
*
* * *
* * * * *
* * * * * * *
* * * * *
* * *
*
解:
main()
{ int i,j,k;
{ for (i=0;i<=3;i++) /* 输出上面4行*号 */
for (j=0;j<=2-j;j++)
printf(“ ”); /* 输出*号前面的空格 */
for(k=0;k<=2*i;k++)
printf(“*”); /* 输出*号 */
printf(“\n”); /* 输出完一行*号后换行 */
}
for(i=0;i<=2;i++) /* 输出下面3行*号 */
{ for(j=0;j<=i;j++)
printf(“”); /* 输出*号前的空格 */
for(k=0;k<=4-2*i;k++)
printf(“*”); /* 输出*号 */
printf(“\n”); /* 输出完一行*号后换行 */
}
}
15两个乒乓球队进行比赛,各出三人。甲队为A、B、C三人,乙队为X、Y、Z三人。已抽签比赛名单。友人向队员打听比赛的名单,A说他不和X,C说他不和X、Z比。请编程序找出三个对手的名单。
解:
main()
{ char i,j,k;
for (i=’X’;j<=’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(“A--%c\tB--%c\tC--%c\n”,i,j,k);
}



2006-10-28 22:21
孤单的帅哥
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-10-28
收藏
得分:0 

数据类型、运算符与表达式

1 请将C语言的数据类型和其他高级语言的数据类型做比较。C有哪些特点?
2 C语言为什么要规定对所有用到的变量“先定义,后使用”。这样做有什么好处?
3 请将下面各数用八进制和十六进制数(补码)表示:
(1)10 (2)32 (3)75 (4)-617
(5)-111 (6)2483 (7)-28654 (8)21003
4 将以下3个整数分别赋给不同类型的变量,请画出赋值后数据在内存中的存储形式。
变量的类型 25 -2 32769
int型(16位)
long型(32位)
short型(16位)
signed char(8位)
unsigned int型
unsigned long型
unsigned short型
unsigned char型
5 字符常量与字符串常量有什么区别?
6 写出以下程序运行的结果。
main()
{char c1=’a’,c2=’b’,c3=’c’,c4=’\101’,c5=’\116’;
printf(“a%cb%c\tc%c\tabc\n”,c1,c2,c3);
printf(“\t\b%c %c”,c4,c5);
}
7 要将“China”译成密码,密码规律是:用原来的字母后面第4个字母代替原来的字母。例如,字母“A”后面第4个字母是“E”,用“E”代替“A”。因此,“China”应译为“Glmre”。请编写一程序,用赋初值的方法使c1、c2、c3、c4、c5分别变为‘G’、‘l’、‘m’、‘r’、‘e’,并输出。
8 例6能否改成如下:
main()
{int c1,c2; (原为char c1,c2)
c1=97;
c2=98;
printf(“%c %c\n”,c1,c2);
printf(“%d %d\n”,c1,c2);
}
分析运行时会显示什么信息?为什么?
9 求下面算术表达式的值。
(1)x+a%3*(int)(x+y)%2/4
设x=2.5,a=7,y=4.7
(2)(float)(a+b)/2+(int)x%(int)y
设a=2,b=3,x=5,y=2.5
10 写出程序运行结果。
main()
{int i,j,m,n;
i=8;
j=10;
m=++i;
n=j++;
printf(“%d,%d,%d,%d”,i,j,m,n);
}
11 写出下面赋值的结果。格中写了数值的是要将它赋给其他类型变量,将所有空格填上赋值后的数值。
int 99 42
char ‘d’ X
unsigned int 76 65535
float 565
long int 68

12 写出下面表达式运算后a的值,设原来a=12。设a和n已定义为整型变量。
(1)a+=a (2)a-+=2
(3)a*=2+3 (4)a/=a+a
(5)a%=(n%=2),n的值等于5 (6)a+=a-=a*=a


2006-10-28 22:22
韩剧鼻祖
Rank: 1
等 级:新手上路
帖 子:168
专家分:0
注 册:2006-10-1
收藏
得分:0 
您着人心眼太好了,主要今天太困了,所以懒了,没给大家贴出来。有了孤单的帮助,大家下看看吧,好像是北大青鸟的题

2006-10-28 22:22
孤单的帅哥
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-10-28
收藏
得分:0 

数组综合测试

1 用筛选法求100之内的素数
#include<math>
main()
{ int i,j,line,a[101];
for(i=2;i<101;i++) a[i]=i;
for(i=2;i<squt(101);i++)
for(j=i+1;j<101;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<101;i++)
{ if(a[i]!=0)
{ printf("%5dJ",a[i]);
line++;}
if(line==10)
{ printf("\n");
line=0;}
}
}
2用选择法对10个整数排序
#dfine N 10
main()
{ int i,j,min,temp,a[N];
printf("请输入十个数:\n");
for(i=0;i<N;i++)
{ printf("a[%d]=",i);
scanf("%d",&a[i]); /*输入10个数*/
}
printf("\n");
for(i=0;i<N;i++)
printf("%5d",a[i]); /*输出10个数*/
printf("\n");
for(i=0;i<N-1;i++) /*以下8行是对10个数排序*/
{ min=i;
for(j=i+1;j<N;j++)
if(a[min]>a[j]) min=j;
temp=a[i]; /*以下3行将a[i+1]到a[10]中最小者与a[i]对换*/
a[i]=a[min];
a[min]=temp;
}
printf("\n 排序结果为:\n");
for(i=0;i<N;i++) /*输出已排好序的10个数*/
printf("%5d",a[i]);
}
3求一个3*3矩阵对角线元素的和。
main()
{ float a[3][3],sum=0;
int i,j;
printf("请输入矩阵元素:\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][j];
printf("对角线元素的和=%6.2f",sum);
}
4有一个已排好序的数组,今输入一个数,要求按原来顺序的
规律将它插入数组中。
main()
{ int a[11]={1,4,6,9,13,16,19,28,40,100};
int t1,t2,number,end,i,j;
printf("初始数组如下: ");
for(i=0;i<10;i++)
printf("%5d",a[i]);
printf("\n");
printf("输入插入数据:");
scanf("%d",&number);
end=a[9];
if(nuber>end)
a[10]=number;
else
{ for(i=0;i<10;i++)
{ if(a[i]>number)
{ t1=a[i];
a[i]=number;
for(j=i+1;j<11;j++)
{ t2=a[j];
a[j]=t1
t1=t2;
}
break;
}
}
}
for(i=0;i<11;i++)
printf("%6d",a[i]);
}
5将一个数组中的值按逆序重新存放.例如原来顺序为:8,6,5,4,1
要求改为:1,4,5,6,8
main()
{ int a[5],i,temp;
printf("enter a array:\n");
for(i=0;i<5;i++)
scanf("%d",&a[i]);
printf("array a:\n");
for(i=0;i<5;i++)
printf("%4d",a[i]);
for(i=0;i<5/2;i++)
{ temp=a[i];
a[i]=a[5-i-1];
a[5-i-1]=temp;
printf("\n now,array a:\n");
for(i=0;i<5;i++)
printf("%4d",a[i]);
printf("\n");
}
6打印出以下的杨辉三角形(要求打印10行).
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
. . . . . .
. . . . . .
main()
{ int i,j,a[11];
for(i=1;i<11;i++)
{ a[i][i]=1;
a[i][1]=1;
}
for(i=3;i<11;i++)
for(j=2;j<=i-1;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=1;i<11;i++)
{ for(j=1;j<=i;j++)
printf("%6d",a[i][j]);
printf("\n");
}
printf("\n");
}
7打印“魔方阵”,所谓魔方阵是指这样的方阵,它的每一行,每一列
和对角线之和均相等。例如,三阶魔方阵为
8 1 6
3 5 7
4 9 2
要求打印出由1到n的2次方的自然数构成的魔方阵。
main()
{ int a[16][16],i,j,k,p,m,n;
p=1;
while(p==1) /*要求阶数为1到15的奇数*/
{ printf("enter n(n=1--5):");
scanf("%d",&n);
if((n!=0)&&(n<=15)&&(n%2!=0))
p=0;
}
for(i=1;i<=n;i++) /*初始化*/
for(j=1;j<=n;j++)
a[i][j]=0;
j=n/2+1;
a[1][j]=1;
for(k=2;k<=n*n;k++)
{ i=i-1;
j=j+1;
if((i<1)&&(j>n))
{ i=i+2;
j=j-1;
}
else
{ if(i<1) i=n;
if(j>n) j=1;
}
if(a[i][j]==0)
a[i][j]=k;
else
{ i=i+2
j=j-1;
a[i][j]=k;
}
}
for(i=1;i<=n;i++) /*输出魔方*/
{ for(j=1;j<=n;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
8找出一个二维数组中的鞍点,即该位置上的元素在该行上最大
在该列上最小。也可能没有鞍点。
#define N 10
#define M 10
main()
{ int i,j,k,m,n,f1,f2,a[N][M],max,maxi,maxj;
printf("\n输入行数n:");
scanf("%d",&n);
printf("输入列数m:");
scanf("%d",&m);
for(i=0;i<n;i++)
{ for(j=0;j<m;j++)
printf("%5d",a[i][j]);
printf("\n");
}
f2=0;
for(i=0;i<n;i++)
{ max=a[i][0];
for(j=0;j<m;j++)
if(a[i][j]>max)
{ max=a[i][j];
maxj=j;
}
for(k=0,f1=1;k<n&&f1;k++)
if(max>a[k][maxj])
f1=0;
if(f1)
{ printf("\n第%d行,第%d列的%d是鞍点\n",i,maxj,max);
f2=1;
}
}
if(!f2)
printf("\n矩阵中无鞍点!\n");
}
5 有15个数由大到小的顺序存放在一个数组中,输入一个数,要求用半
折查找法找出该数是数组中第几个元素的值。如果该数不在数组中,打印出
“无此数”
#include<stdio.h>
#define N 15
main()
{ int i,j,number,top,bott,mid,loca,a[N],f=1,sign=1;
char c;
printf("enter data:\n");
scanf("%d",&a[0]);
i=1;
while(i<N)
{ scanf("%d",&a[i]);
if(a[i]>=a[i-1])
i++;
else
printf("enter this data again:\n");
}
printf("\n");
for(i=0;i<N;i++)
printf("%4d",a[i]);
printf("\n");
f=1;
while(f)
{ printf("input number to look for:");
scanf("%d",&number);
loca=0,top=0,bott=N-1;
if((number<a[0])||(number>a[N-1]))
loca=-1;
while((sign=1)&&(top<=bott))
{ mid=(bott+top)/2;
if(number==a[mid])
{ loca=mid;
printf("find %d,its position is %d\n"number,loca+1);
sign=0;
}
else if(number<a[mid])
bott=mid-1;
else
top=mid+1;
}
if(sign==1||loca==-1)
printf("%d is not found\n",number);
printf("continue or not(Y/N)?");
scanf("%c",&c)
if(c=='N'||c=='n')
f=0;
}
}
10 有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中
英文大写字母、小写字母、数字、空格以及其他字符个数.
main()
{ int i,j,upp,low,dig,spa,oth;
char text[3][80];
upp=low=dig=spa=oth=0;
for(i=0;i<3;i++)
{ printf("\n please input line %d:\n",i+1);
gets(text[i]);
for(j=0;j<80&&text[i][j]!='\0';j++)
{ if(text[i][j]>='A'&&text[i][j]<='Z')
upp++;
else if(text[i][j]>'a'&&text[i][j]<'z')
low++;
else if(text[i][j]>='0'&&text[i][j]<='9')
dig++;
else if(text[i][j]==' ')
spa++;
else
oth++;
}
}
for(i=0;i<3;i++)
printf("%s\n",text[i]);
printf("upper case: %d\n",upp);
printf("lower case: %d\n",low);
printf("digit: %d\n",dig);
printf("space: %d\n",spa);
printf("other: %d\n",oth);
}
11 打印以下图案:
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
main()
{ char a[5]={'*','*','*','*','*'};
int i,j,k;
char space=' ';
for(i=0;i<5;i++) /*输出5行*/
{ printf("\n"); /*输出每行前先换行*/
printf(" "); /*每行前面留4个空格*/
for(j=1;j<=i;j++)
printf("%c",space); /*每行再留1个空格*/
for(k=0;k<5;k++)
printf("%c",a[k]); /*每行输出5个*号*/
}
}
12 有一行电文,已按下面规律翻译成密码:
A--Z a--z
B--Y b--y
C--X c--x
. .
' '
即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母。非字母
字符不变。要求编程将密码译成原文,并打印出密码和原文。
#include<stdio.h>
main()
{ int j,n;
char ch[80],tran[80];
printf("\ninput cipher code:");
gets(ch);
printf("\n\cipher code:%s",ch);
j=0;
while(ch[j]!='\0')
{ if((ch[j]>='A')&&(ch[j]<='Z'))
tran[j]=155-ch[j];
else if((ch[j]>='a'&&(ch[j]<='z'))
tran[j]=219-ch[j];
else
tran[j]=ch[j];
j++;
}
n=j;
printf("\n oringinal text:");
for(j=0;j<n;j++)
putchar(tran[j]);
printf("\n");
}
13 编一个程序,将两个字符串连接起来,不要用strcat函数。
main()
{ char s1[80],s2[40];
int i=0,j=0;
printf("\ninput string1:");
scanf("%s",s1);
printf("input string2:");
scanf("%s",s2);
while(s1[i]!='\0')
i++
while(s2[j]!='\0')
s1[i++]=s2[j++];
s1[i]='\0';
printf("the new string is %s",s1);
}
14 编一个程序,将两个字符串s1和s2进行比较,如果s1>s2,输出一个正数;
s1=s2,输出0;s1<s2,输出一个负数。不要用strcmp函数。两个字符串用gets
函数输入。输出的正数或负数的绝对值应是相比较的两个字符串的ASCII码的
差值。例如,'A'与'C'相比,由于'A'<'C',应输出负数,由于'A'与'C'的ASCII
码的差值为2,因此,应输出“-2”。同理,"And"和"Aid"比较,根据第二个字符
比较结果,'n'比'i'大5,因此应输出'5'.
#include<stdio.h>
main()
{ int i,resu;
char s1[100],s2[100];
printf("\n input string1:");
gets(s1);
printf("\n input string2:");
gets(s2);
i=0;
while((s1[i]==s2[i])&&(s1[i]!='\0') i++;
if(s1[i]=='\0'&&s2[i]=='\0') resu=0;
else
resu=s1[i]-s2[i];
printf("\n result:%d.\n",resu);
}
15 编写一个程序将字符数组s2中的全部字符拷贝到字符数组s1中,不用strcpy函数
拷贝时,'\0'也要拷贝过去,'\0'后面的字符不拷贝。
#include"stdio.h"
main()
{ char s1[80],s2[80];
int i;
printf("input s2:");
scanf("%s",s2);
for(i=0;i<=stren(s2);i++)
s1[i]=s2[i];
printf("s1:%s\n",s1);
}


2006-10-28 22:23
孤单的帅哥
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-10-28
收藏
得分:0 

文件综合测试

1 对C文件操作有些什么特点?什么是缓冲文件系统?什么是非缓冲文件系统?这二者
的缓冲区有什么区别?
解: 略.
2 什么是文件型指针?通过文件指针访问文件有什么好处?
解: 略.
3 对文件的打开和关闭的含义是什么?为什么要打开和关闭文件?
解:略.
4 从键盘输入一个字符串,将其中的小写字母全部转化成大写字母,然后输出到一个
键盘文件"test"中保存.输入的字符串以"!"结束.
解:
#include"stdio.h"
main()
{ FILE *fp;
char str[100];
int i=0;
if((fp=fopen("test","w"))==NULL)
{ printf("can not open the file\n");
exit(0);
}
printf("input a string:\n");
gets(str);
while(str[i]!='!')
{ if(str[i]>='a'&&str[i]<='z')
str[i]=str[i]-32;
fputc(str[i],fp);
i++;
}
fclose(fp);
fp=fopen("test","r");
fgets(str,strlen(str)+1,fp);
printf("%s\n",str);
fclose(fp);
}
5 有两个磁盘文件"A"和"B",各自存放一行字母,要求把这两个文件中的信息合并(按字
顺序排列,输出到一个新文件"C"中.
解:
#include"stdio.h"
main()
{ FILE *fp;
int i,j,n,i1;
char c[100],t,ch;
if((fp=fopen("a1","r"))==NULL)
{ printf("can not open the file\n");
exit(0);
}
printf("\n file A:\n");
for(i=0;(ch=fgetc(fp))!=EOF;i++)
{ c[i]=ch;
putchar(c[i]);
}
fclose(fp);
i1=i;
if((fp=fopen("b1","r")==NULL)
{ printf("\ncan not open the file");
exit(0);
}
printf("\n file B:\n");
for(i=i1;(ch=fgetc(fp))!=EOF;i++)
{ c[i]=ch;
putchar(c[i]);
}
fclose(fP);
n=i;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(c[i]>c[j])
{ t=c[i];
c[i]=c[j];
c[j]=t;
}
printf("\n file C:\n");
fp=fopen("c1","w");
for(i=0;i<n;i++)
{ putc(c[i],fp);
putchar(c[i]);
}
fclose(fp);
}
6 有5个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生学号,姓名,三
门课的成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件stud中
解:
#include"stdio.h"
struct student
{ char num[10];
char name[8];
int score[3];
float ave;
} stu[5];
main()
{ int i,j,sum;
FILE *fp;
for(i=0;i<5;i++)
{ printf("\ninput score of student %d:\n",i+1);
printf(NO.:");
scanf("%s",stu[i].num);
printf("name:");
scanf("%s",stu[i].name);
sum=0;
for(j=0;j<3;j++)
{ printf("score %d:",j+1);
scanf("%d",&stu[i].score[j]);
sum+=stu[i].score[j];
}
stu[i].ave=sum/3.0;
}
fp=fopen("stu","w");
for(i=0;i<5;i++)
if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
printf("file write error\n");
fclose(fp);
fp=fopen("stud","r");
for(i=0;i<5;i++)
{ fread(&stud[i],sizeof(struct student),1,fp);
printf("%s,%s,%d,%d,%d,%6.2f\n",stud[i].num,stud[i].name,stud[i].score[0]
stud[i].score[1],stud[i].score[2],stud[i].ave;
}
}
7 将上题stud文件中的学生数据按平均分进行排序处理,并将已排序的学生数据存入
一个新文件stu_sort中
解:
#include"stdio.h"
#define N 10
struct student
{ char num[10];
char name[8];
int score[3];
float ave;
} st[N],temp;
main()
{ FILE *fp;
int i,j,n;
if((fp=fopen("stud","r")==NULL)
{ printf("\ncan not open the file");
exit(0);
}
printf("\nfile'stud':");
for(i=0;fread(&st[i],sizeof(struct student),1,fp)!=0;i++)
{ printf("\n%8s%8s",st[i].num,st[i].name);
for(j=0;j<3;j++)
printf("%8d",st[i].score[j]);
printf("%10.2f",st[i].ave);
}
fclose(fp);
n=i;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(st[i].ave<st[j].ave)
{ temp=st[i];
st[i]=st[j];
st[j]=temp;
}
printf("\nnow:");
fp=fopen("stu_sort","w");
for(i=0;i<n;i++)
{ fwrite(&st[i],sizeof(struct student),1,fp);
printf("\n%8s%8s",st[i].num,st[i].name);
for(j=0;j<3;j++)
printf("%8d",st[i].score[j]);
printf("%10.2f",st[i].ave);
}
}
fclose(fp);
}
8 将上题已经排好序的学生成绩文件插入处理,插入一个学生的3门课成绩,程序先计算
新插入学生的平均成绩,然后将它按平均成绩高低顺序插入,插入后建立一个新的文件
解:
#include"stdio.h"
struct student
{ char num[10];
char name[8];
int score[3];
float ave;
} st[10],s;
main()
{ FILE *fp,*fp1;
int i,j,t,n;
printf("\nNO.:");
scanf("%s",s.num);
printf("name:");
scanf("%s",s.name);
printf("score1,score2,score3:");
scanf("%d,%d,%d",&s.score[o],&s.score[1],&s.score[2]);
s.ave=(s.score[o]+s.score[1]+s.score[2])/3.0;
if((fp=fopen("stu_sort","r")==NULL)
{ printf("\ncan not open the file");
exit(0);
}
printf("original data:\n");
for(i=0;fread(&st[i],sizeof(struct student),1,fp)!=0);i++)
{ printf("\n%8s%8s",st[i].num,st[i].name);
for(j=0;j<3;j++)
printf("%8d",st[i].score[j]);
printf("%10.2f",st[i].ave);
}
n=i;
for(t=0;st[t].ave>s.ave&&t<n;t++);
printf("now:");
fp1=fopen("sort1.dat","w");
for(i=0;i<t;i++)
{ fwrite(&st[i],sizeof(struct student),1,fp);
printf("\n%8s%8s",st[i].num,st[i].name);
for(j=0;j<3;j++)
printf("%8d",st[i].score[j]);
printf("%10.2f",st[i].ave);
}
fclose(fp);
fclose(fp1);
}
9 上题结果仍存入原有的stu_sort文件而不另建立新文件.
解:
#include"stdio.h"
struct student
{ char num[10];
char name[8];
int score[3];
float ave;
} st[10],s;
main()
{ FILE *fp,*fp1;
int i,j,t,n;
printf("\nNO.:");
scanf("%s",s.num);
printf("name:");
scanf("%s",s.name);
printf("score1,score2,score3:");
scanf("%d,%d,%d",&s.score[o],&s.score[1],&s.score[2]);
s.ave=(s.score[o]+s.score[1]+s.score[2])/3.0;
if((fp=fopen("stu_sort","r")==NULL)
{ printf("\ncan not open the file");
exit(0);
}
printf("original data:\n");
for(i=0;fread(&st[i],sizeof(struct student),1,fp)!=0);i++)
{ printf("\n%8s%8s",st[i].num,st[i].name);
for(j=0;j<3;j++)
printf("%8d",st[i].score[j]);
printf("%10.2f",st[i].ave);
}
fclose(fp);
n=i;
for(t=0;st[t].ave>s.ave&&t<n;t++);
printf("\nnow:\n");
fp=fopen("stu_sort","w");
for(i=0;i<t;i++)
{ fwrite(&st[i],sizeof(struct student),1,fp);
printf("\n%8s%8s",st[i].num,st[i].name);
for(j=0;j<3;j++)
printf("%8d",st[i].score[j]);
printf("%10.2f",st[i].ave);
}
fwrite(&s,sizeof(struct student),1,fp);
printf("\n%9s%8s%8d%8d%10.2f",s.num,s.name,s.score[0],s.score[1],s.score[2]
,s.ave);
for(i=t;i<n;i++)
{ fwrite(&st[i],sizeof(struct student),1,fp);
printf("\n%8s%8s",st[i].num,st[i].name);
for(j=0;j<3;j++)
printf("%8d",st[i].score[j]);
printf("%10.2f",st[i].ave);
}
fclose(fp);
}
10 有一磁盘文件emploee,内存放职工的数据,每个职工的数据包括:职工的姓名,性别
工号,年龄,住址,工资,健康状况,文化程度.要求将职工名和工资的信息单独抽出来
建立一个简明的职工工资文件.
解:
#include"stdio.h"
struct emploee
{ char num[6];
char name[10];
char sex[2];
int age;
char addr[20];
int salary;
char health[8];
char class[10];
}em[10];
struct em[10]
{ char name[10];
int salary;
}em_case[10];
main()
{ FILE *fp1,*fp2;
int i,j;
if((fp1=fopen("emploee","r"))==NULL)
{ printf("\ncan not open the file");
exit(0);
}
printf("\n NO. name sex age addr salary health class\n");
for(i=0;fread(&em[i],sizeof(struct emploee),1,fp1)!=0);i++)
{ printf("\n%4s%8s%4s%6d%10s%6d%10s%8s",em[i].num,em[i].name,em[i].sex,
em[i].age,em[i].addr,em[i].salary,em[i].health,em[i].class);
strcpy(em_case[i].name,em[i].name);
em_case[i].salary=em[i].salary;
}
printf("\n\n* * * * * * * * * * * * * * * * * * * * * * * * * ");
if((fp2=fopen("emp_salary","wb"))==NULL)
{ printf("\ncan not open the file");
exit(0);
}
for(j=0;j<i;j++)
{ if(fwrite(&em_case[j],sizeof(struct emp),1,fp2)!=1);
printf("error");
printf("\n %12s%10d",em_case[j].name,em_case[j].salary);
}
printf("\n\n* * * * * * * * * * * * * * * * * * * * * * * * * ");
fclose(fp1);
fclose(fp2);
}
说明:数据文件emploee是事先建立好的,其中已有职工数据,而文件则是由程序建立的.
建立emploee文件的程序如下:
#include"stdio.h"
struct emploee
{ char num[6];
char name[10];
char sex[2];
int age;
char addr[20];
int salary;
char health[8];
char class[10];
}em[10];
main()
{ FILE *fp1,*fp2;
int i,j;
printf("\n NO. name sex age addr salary health class\n");
for(i=0;i<4;i++)
scanf("%s%s%s%d%s%d%s%s",em[i].num,em[i].name,em[i].sex,
&em[i].age,em[i].addr,&em[i].salary,em[i].health,em[i].class);
if((fp=fopen("emploee","w"))==NULL)
{ printf("\ncan not open the file");
exit(0);
}
for(i=0;i<4;i++)
if(fwrite(&em[i],sizeof(struct emploee),1,fp)!=1);
printf("error\n");
fclose(fp);
}
11 从上题的"职工工资文件"中删去一个职工的数据,再存回原文件.
解:
#include"stdio.h"
#include"string.h"
struct emploee
{ char name[10];
int salary;
}emp[20];
main()
{ FILE *fp;
int i,j,n,flag;
char name[10];
int salary;
if((fp=fopen("emp_salary","rb"))==NULL)
{ printf("\ncan not open the file");
exit(0);
}
printf("\n original data:");
for(i=0;fread(&emp[i],sizeof(struct emploee),1,fp)!=0);i++)
printf("\n %8s%7d,emp[i].name,emp[i].salary);
fclose(fp);
n=i;
printf("\nInput name deleted:");
scanf("%s",name);
for(flag=1,i=0;flag&&i<n;i++)
{ if(strcmp(name,emp[i].name)==0)
{ for(j=i;j<n-1;j++)
{ strcpy(emp[j].name,emp[j+1].name);
emp[j].salary=emp[j+1].salary;
}
flag=0;
}
}
if(!flag)
n=n-1;
else
printf("\nNot found!");
printf("\nNow,the content of file:\n");
fp=fopen("emp_salary","wb");
for(i=0;i<n;i++)
fwrite(&emp[i],sizeof(struct emploee),1,fp);
fclose(fp);
fp=fopen("emp_salary","r");
for(i=0;fread(&emp[i],sizeof(struct emploee),1,fp)!=0);i++)
printf("\n %8s%7d,emp[i].name,emp[i].salary);
fclose(fp);
}
12 从键盘输入若干字符(每行长度不等),输入后把它们存放到一磁盘文件中.再从该
文件中读入这些数据,将其中小写字母转换成大写字母后在显示屏上输出.
解:
#include"stdio.h"
main()
{ int i,flag;
char str[80],c;
FILE *fp;
fp=fopen("text","w");
flag=1;
while(flag==1)
{ printf("\n input string:\n");
gets(str);
fprintf(fp,"%s",str);
printf("\nContinue?");
c=getchar();
if((c=='N')||(c=='n'))
flag=0;
getchar();
}
fclose(fp);
fp=fopen("text","r");
while(fscanf(fp,"%s",str)!=EOF)
{ for(i=0;str[i]!='\0';i++)
if((str[i]>='a')&&(str[i]<='z'))
str[i]-=32;
printf("\n%s\n",str);
}
fclose(fp);
}


2006-10-28 22:24
孤单的帅哥
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-10-28
收藏
得分:0 

算法综合测试

1 什么是算法?试从日常生活中找三个例子,描述它们的算法。
2 什么叫结构化的算法?为什么要提倡结构化的算法?
3 试述三种基本结构的特点,你能否自己另外设计两种基本结构(要符合基本结构的特点)。
4 用传统流程图表示求解以下问题的算法。
(1) 有两个瓶子A和B,分别盛放醋和酱油,要求将它们互换(即A瓶原来盛醋,现改盛酱油,B瓶则相反)。
(2) 依次将10个数输入,要求将其中最大的数打印出来。
(3) 有3个数a、b、c,要求按大小顺序把它们打印出来。
(4) 求1+2+3+…+100。
(5) 判断一个数n能否同时被3和5整除。
(6) 将100~200之间的素数打印出来。
(7) 求两个数m和n的最大公约数。
(8) 求方程式ax2+bx+c=0的根。分别考虑:①有两个不等的实根;②有两个相等的实根。
5 用N-S图表示4题中各题的算法。
6 用伪代码表示4题中各题的算法。
7 什么叫结构化程序设计?它的主要内容是什么?
8 用自顶向下、逐步细化的方法进行以下算法的设计:
(1) 打印出1900—2000年中是闰年的年份,闰年的条件是:①能被4整除但不能被100整除;或②能被100整除且能被400整除。
(2) 求ax2+bx+c=0的根。分别考虑d=b2-4ac大于0、等于0和小于0三种情况。
(3) 输入10个数,找出最大的一个数,并打印出来。



2006-10-28 22:25
快速回复:大家都来看阿,瞧一瞧看一看啊
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.041859 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved