递归函数c语言求年龄,C语言 用递归方法计算学生的年龄,已知第一位学生年龄最小,为10岁,其余学生一个比一个大2岁,
递归函数c语言求年龄,C语言 用递归方法计算学生的年龄,已知第一位学生年龄最小,为10岁,其余学生一个比一个大2岁,详细介绍
本文目录一览: C语言 用递归方法计算学生的年龄,已知第一位学生年龄最小,为10岁,其余学生一个比一个大2岁,
#include
#define N 10int age(int x){ if(x==1) return N; return age(x-1)+2;}int main(){ printf("%d\n",age(5)); return 0;}
C语言:有5个人围坐在一起问第五个人多大年纪,他说比第四个人大两岁,问第四个人他说比第三个人大两岁
这个题是C语言的递归算法。
参考代码:
#include
int main()
#include
int main()
{
int number();
printf("%d",number(5));
}
int number(int n)
{
int age;
if(n==1)
age=10;
else
age=number(n-1)+2;
return age;
}
C语言年龄计算
#include
int main()#include
int main(){int number();printf("%d",number(5));}int number(int n){int age;if(n==1)age=10;elseage=number(n-1)+2;return age;}热心
帮忙用C语言做几个作业题,急!满意再加分。
都是些基本的题目,建议LZ看些c入门书籍
vc6.0 运行通过,如果LZ觉得还算可以的话,希望加些分,毕竟调了这么多,很费神的,前前后后花了三四个小时
1.1
#include
#include
int main()
{
int i,n,len;
char str[200];
gets(str);
len=strlen(str);
for(i=0;i
<len;i++)
{
if('a'<=str[i] && str[i]<='z')
str[i]-=32;
else if('A'<=str[i] && str[i]<='Z')
str[i]+=32;
}
puts(str);
return 0;
}
------------------------------------------------------------------------------------------------------------------------------------------
1.2
#include
#define N 3 // 可改 50
int main()
{
int i;
int score[N][3];
int s[3]={0,0,0};
printf("输入%d个学生3门课的成绩\n",N);
for(i=0;i
<n;i++)
{
printf("输入第%d个学生3门课的成绩\n",i+1);
scanf("%d %d %d",&score[i][0],&score[i][1],&score[i][2]);
s[0]+=score[i][0];
s[1]+=score[i][1];
s[2]+=score[i][2];
}
printf("%d个学生3门课程的总成绩分别是:%d\t%d\t%d\n",N,s[0],s[1],s[2]);
printf("%d个学生3门课程的平均成绩分别是:%.2f\t%.2f\t%.2f\n",N,s[0]*1.0/N,s[1]*1.0/N,s[2]
*1.0/N);
return 0;
}
------------------------------------------------------------------------------------------------------------------------------------------
2.1
#include
float fmin(float a,float b)
{
if(a
<b) return a;
else return b;
}
int main()
{
float f1,f2,min;
printf("请输入两个实数:\n");
scanf("%f %f",&f1,&f2);
min=fmin(f1,f2);
printf("其最小值是:%f\n",min);
return 0;
}
-----------------------------------------------------------------------------------------------------------------------------------------
2.2
#include
#define N 10
float f_ave(int a[])
{
int i,sum=0;
float f;
for(i=0;i
<n;i++) sum+="a[i];
f=sum*1.0/N;
return f;
}
int main()
{
int i;
int sco[N];
float ave;
printf("请输入10名学生的成绩:\n");
for(i=0;i
<n;i++) scanf("%d",&sco[i]);
ave=f_ave(sco);
printf("%d名学生的平均成绩是:%.2f\n",N,ave);
return 0;
}
-------------------------------------------------------------------------------------------------------------------
2.3
#include
int gcd(int a, int b)
{
int temp;
if (a < b)
{
temp=a;
a=b;
b=temp;
}
if (b == 0)
return a;
else
return gcd(b, a%b);
}
int lcm(int a, int b)
{
return a*b/gcd(a, b);
}
int main()
{
int a,b;
printf("请输入2个整数:\n");
scanf("%d %d",&a,&b);
printf("其最小公倍数为:%d\n",lcm(a,b));
return 0;
}
--------------------------------------------------------------------------------------------------------------------------------------
2.4
#include
void d2b(int d)
{
int i,a,k=0;
int w[100];
a=d;
while(a>0)
{
w[k++]=a%2;
a/=2;
}
printf("%d的二进制表示为:",d);
for(i=k-1;i>=0;i--) printf("%d",w[i]);
printf("\n");
}
int main()
{
int a;
printf("请输入一个10进制数:\n");
scanf("%d",&a);
d2b(a);
return 0;
}
---------------------------------------------------------------------------------------------------------------------------------------
2.5
#include
void Y_1(int n)
{
int i;
double y=0.0;
for(i=1;i<=n;i++) y+=1.0/i;
printf("Y=1+1/2+1/3……+1/%d=%.2lf\n",n,y);
}
void Y_2()
{
int i;
long sum=0;
for(i=1;i<99;i++) sum+=i*(i+1)*(i+2);
printf("Y=1×2×3+2×3×4+……+98×99×100=%ld\n",sum);
}
int main()
{
int n;
printf("请输入n值:\n");
scanf("%d",&n);
Y_1(n);
Y_2();
return 0;
}
-----------------------------------------------------------------------------------------------------------------------------------------
3.1
#include
int n;
float f_ave(int a[])
{
int i,sum=0;
float ave=0.0;
for(i=0;i
<n;i++) sum+="a[i];
ave=sum*1.0/n;
return ave;
}
int main()
{
int i;
int array[200];
float ave;
printf("请输入数组的大小:\n");
scanf("%d",&n);
for(i=0;i
<n;i++) scanf("%d",&array[i]);
ave=f_ave(array);
printf("%d个数组元素的平均数为:%.2f\n",n,ave);
return 0;
}
3.2
#include
#include
char *str_conn(char a[],char b[])
{
int i,len,len1,len2;
char str[200];
len1=strlen(a);
len2=strlen(b);
len=len1+len2;
for(i=0;i
<len1;i++) str[i]="a[i];
for(i=0;i
<len2;i++) str[len1+i]="b[i];
str[len]='\0';
return str;
}
int main()
{
int i;
char str1[100],str2[100],*str;
printf("请输入第一个字符串:\n");
scanf("%s",str1);
printf("请输入第二个字符串:\n");
scanf("%s",str2);
str=str_conn(str1,str2);
printf("连接后的字符串为:%s\n",str);
return 0;
}
3.4
#include
int main()
{
int i,j,n,sum,temp;
sum=0;
printf("请输入数组的阶数:\n");
scanf("%d",&n);
printf("请输入%d*%d个数组元素:\n",n,n);
for(i=0;i
<n;i++)
{
for(j=0;j
<n;j++)
{
scanf("%d",&temp);
if(i==j) sum+=temp;
}
}
printf("数组的主对角元素之和是:%d\n",sum);
return 0;
}
3.5
#include
#include
int countc(char s[])
{
int i,n,len;
len=strlen(s);
n=0;
for(i=0;i
<len;i++)
{
if('A'<=s[i] && s[i]<='Z') n++;
}
return n;
}
int main()
{
int n;
char str[200];
printf("请输入一个字符串:\n");
gets(str);
n=countc(str);
printf("字符串中大写字母的个数是:%d\n",n);
return 0;
}
3.6
#include
#include
void f(int x,int y,int z)
{
float rst=0.0;
if(x==y && z==y)
{
printf("非法计算,分母为0!\n");
}
else
{
rst=(x+y)*1.0/(x-y)+(z+y)*1.0/(z-y);
printf("f(x,y,z)=:%.2f\n",rst);
}
}
int main()
{
int x,y,z;
printf("请输入X,Y,Z:\n");
scanf("%d %d %d",&x,&y,&z);
f(x,y,z);
return 0;
}
3.7
#include
#include
int ask_age(int n)
{
if(n==1) return 10;
else return ask_age(n-1)+2;
}
int main()
{
int n,age;
printf("请输入求第几位学生的年龄:\n");
scanf("%d",&n);
age=ask_age(n);
printf("第%d位学生的年龄为:%d\n",n,age);
return 0;
}
----------------------------------------------------------------------------------------------------------------------------
4.1
#include
int main()
{
int a,b,t;
int *p,*q,*tp;
printf("请输入两个int变量:\n");
scanf("%d %d",&a,&b);
p=&a;
q=&b;
{ // 交换 p,q
tp=p;
p=q;
q=tp;
}
{ // 交换p,q所指变量
t=*p;
*p=*q;
*q=t;
}
printf("交换后两个变量是:%d %d\n",a,b);
return 0;
}
-----------------------------------------------------------------------------------------------------------------------------
4.2
#include
int main()
{
int i,m,n,p1,p2;
int a[100];
printf("请输入数组的大小:\n");
scanf("%d",&n);
printf("输入%d个数组元素:\n",n);
for(i=0;i
<n;i++) scanf("%d",&a[i]);
printf("输入p,q指向数组元素的下标:\n");
scanf("%d %d",&p1,&p2);
m=(p1+p2)/2;
printf("p和q的中点r指向:a[%d],其值为%d\n",m,a[m]);
return 0;
}
-----------------------------------------------------------------------------------------------------------------------
5.1
#include
void s(int a[],int n)
{
int i,sum=0;
int *p=a;
float ave;
for(i=0;i
<n;i++)
{
sum+=*p;
p++;
}
ave=sum*1.0/n;
printf("数组的平均数是:%.2f\n",ave);
}
int main()
{
int i,n;
int a[100];
printf("请输入数组的大小:\n");
scanf("%d",&n);
printf("输入%d个数组元素:\n",n);
for(i=0;i
<n;i++) scanf("%d",&a[i]);
s(a,n);
return 0;
}
--------------------------------------------------------------------------------------------------------
5.2
#include
int main()
{
int k;
char str[200],*s;
printf("请输入一个字符串:\n");
gets(str);
s=str;
k=0;
while(*s!='\0')
{
k++;
s++;
}
printf("字符串的长度是:%d\n",k);
return 0;
}
-------------------------------------------------------------------------------------------------------------------
5.3
#include
int main()
{
int i;
float a[102],*min,*max;
printf("请输入100个实数:\n");
for(i=0;i<100;i++) scanf("%f",&a[i]);
min=a;
max=a;
for(i=1;i<100;i++)
{
if(*(a+i)>*max) max=a+i;
if(*(a+i)<*min) min=a+i;
}
printf("100个实数的最大值是:%.2f 最小值是:%.2f\n",*max,*min);
return 0;
}
---------------------------------------------------------------------------------------------------------------
5.4
#include
#define n 10
void sort(int a[])
{
int i,j,tp;
int *p=a;
for(i=0;i
<n-1;i++)
{
for(j=i+1;j
<n;j++)
{
if(*(p+i) > *(p+j))
{
tp=*(p+i);
*(p+i)=*(p+j);
*(p+j)=tp;
}
}
}
}
int main()
{
int i;
int a[102],*min,*max;
printf("请输入%d个整数:\n",n);
for(i=0;i
<n;i++) scanf("%d",&a[i]);
sort(a);
printf("排序后序列为:\n");
for(i=0;i<10;i++) printf("%d ",a[i]);
printf("\n");
return 0;
}
/***********************************************************
(1) 输入一个字符串,将其中所有大写字母改为小写字母,而所有小写字母全部改为大写字母,然后输出。
设计步骤
①用gets输入字符串;
②用循环判断字符串中的每个字符是大写还是小写,若是大写要转换成小写,是小写要转换成大写:大写与小写字母的转换关系是“小写字母=大写字母+32”
③用puts输出该字符串。
***********************************************************/
#include
#include
void main()
{
char *s;
int i;
gets(s);
for(i = 0; i < strlen(s); i++)
{
if( *(s+i) > 64 && *(s+i) < 91 )
*(s+i) += 32;
else if( *(s+i) > 96 && *(s+i) < 123 )
*(s+i) -= 32;
}
printf("\n");
puts(s);
}
/***********************************************************
(2) 设某班50名学生的三科成绩表如下
课程一 课程二 课程三
… … …
编一个程序,输入这50个学生的三科成绩,计算并输出每科成绩的平均分。
设计步骤:
① 可先按3个学生3门课成绩设计,通过后再改成50个学生;
② 先将3个学生3门课的成绩通过scanf函数送入字符数组score;
③ 求出3个学生每门课程的总成绩,放入s一维数组中;
④ 求出每门课程的平均成绩并输出。***********************************************************/
#include
#define STU_NUM 3
void score_input(int (*score)[3]);
void score_process(int (*score)[3], int *, float *);
void score_output(int (*score)[3], int *, float *);
int main()
{
int score[STU_NUM][3],s[STU_NUM];
float average[3];
int i,j,k;
score_input(score); //When you are inputing the scores, you can use two Tab as the separator.
score_process(score,s,average);
score_output(score,s,average);
}
void score_input(int (*score)[3] )
{
int i,j;
printf("Please input the %d students' scores:",STU_NUM);
printf("\n Subject_NO1 Subject_NO2 Subject_NO3:\n");
for(i = 0; i < STU_NUM; i++)
{
printf("The %dth student:",i+1);
printf(" ");
for(j = 0; j < 3; j++)
{
scanf("%d",*(score+i)+j);
}
}
}
void score_process(int (*score)[3], int *s, float *average)
{
int i,j;
for(i = 0; i < STU_NUM; i++)
{
int sum = 0,j;
for(j = 0; j < 3; j++)
sum += *(*(score+i)+j);
*(s+i) = sum;
}
for(j = 0; j < 3; j++)
{
int sum = 0;
for(i = 0; i < STU_NUM; i++)
sum += *(*(score+i)+j);
printf("_______%d________\n",sum);
*(average+j) = sum * 1.0 / STU_NUM;
}
}
void score_output(int (*score)[3], int *s, float *average)
{
int j;
for(j = 0; j < 3; j++)
{
printf("The %dth subject's average score is : %.2f .\n",j+1,*(average+j));
}
}
/********************************************(1)编写自定义函数,实现求两个实数最小值的功能。
(2)计算10名学生1门课成绩的平均分。(程序设计要求:用自定义函数来实现,注意自定义函数的形式及参数之间的传递,用主函数来调用自定义函数实现功能。)
(3)定义二个整数(x、y)最小公倍数的函数。
(4)利用自定义函数编写程序,实现将一个十进制数转换成二进制数。
(5)利用自定义函数编写程序,求下面的式子:
Y=1+1/2+1/3……+1/n (n的数值自定)
Y=1×2×3+2×3×4+……+98×99×100
**********************************************************************/
#include
double double_min(double x, double y)
{
return x > y ? y : x;
}
double average(double *score)
{
const int n = 10;
int i;
double aver,sum = 0;
for(i = 0; i < 10; i++)
sum += *(score+i);
aver = sum/10.0;
return aver;
}
int co_mutiple(int x, int y)
{
int temp;
temp = x > y ? x : y;
while( (temp % x != 0) || (temp % y != 0) )
temp++;
return temp;
}
void Dec_to_Bin(void)
{
int x,i,a[32],e;
scanf("%d",&x);
for(i = 0; i < 32; i++)
{
a[i] = x&0x01;
x=x>>1;
}
e = 0;
printf("It is :");
for(i = 31; i >= 0; i--)
{
if( (a[i] == 0) && (e == 0) )
continue;
e = 1;
printf("%d",a[i]);
}
printf("\n");
}
double caculate_Y1(int n)
{
int i;
double sum = 0;
for(i = 1; i < n+1; i++)
sum += 1.0/i;
return sum;
}
long caculate_Y2(int n)
{
int i;
long sum = 0;
for(i = 3; i < n; i++)
sum += i*(i-1)*(i-2);
return sum;
}
void main()
{
Dec_to_Bin();
printf("%lf\n%d\n",caculate_Y1(23),caculate_Y2(100));
}
累死了,先不写了
楼上的哥们 你穷疯了吧
虽然没看你代码 不过光凭你这精神 楼主也要给你分
花一小时做这些题,不如去做些更有意义的活动呢!跑步去……
太多了,做不来啊
1.1
#include
#include
int main()
{
int i,n,len;
char str[200];
gets(str);
len=strlen(str);
for(i=0;i
<len;i++)
{
if('a'<=str[i] && str[i]<='z')
str[i]-=32;
else if('A'<=str[i] && str[i]<='Z')
str[i]+=32;
}
puts(str);
return 0;
}
------------------------------------------------------------------------------------------------------------------------------------------
1.2
#include
#define N 3 // 可改 50
int main()
{
int i;
int score[N][3];
int s[3]={0,0,0};
printf("输入%d个学生3门课的成绩\n",N);
for(i=0;i
<n;i++)
{
printf("输入第%d个学生3门课的成绩\n",i+1);
scanf("%d %d %d",&score[i][0],&score[i][1],&score[i][2]);
s[0]+=score[i][0];
s[1]+=score[i][1];
s[2]+=score[i][2];
}
printf("%d个学生3门课程的总成绩分别是:%d\t%d\t%d\n",N,s[0],s[1],s[2]);
printf("%d个学生3门课程的平均成绩分别是:%.2f\t%.2f\t%.2f\n",N,s[0]*1.0/N,s[1]*1.0/N,s[2]
*1.0/N);
return 0;
}
------------------------------------------------------------------------------------------------------------------------------------------
2.1
#include
float fmin(float a,float b)
{
if(a
<b) return a;
else return b;
}
int main()
{
float f1,f2,min;
printf("请输入两个实数:\n");
scanf("%f %f",&f1,&f2);
min=fmin(f1,f2);
printf("其最小值是:%f\n",min);
return 0;
}
-----------------------------------------------------------------------------------------------------------------------------------------
2.2
#include
#define N 10
float f_ave(int a[])
{
int i,sum=0;
float f;
for(i=0;i
<n;i++) sum+="a[i];"
f=sum*1.0/N;
return f;
}
int main()
{
int i;
int sco[N];
float ave;
printf("请输入10名学生的成绩:\n");
for(i=0;i
<n;i++) scanf("%d",&sco[i]);
ave=f_ave(sco);
printf("%d名学生的平均成绩是:%.2f\n",N,ave);
return 0;
}
-------------------------------------------------------------------------------------------------------------------
2.3
#include
int gcd(int a, int b)
{
int temp;
if (a < b)
{
temp=a;
a=b;
b=temp;
}
if (b == 0)
return a;
else
return gcd(b, a%b);
}
int lcm(int a, int b)
{
return a*b/gcd(a, b);
}
int main()
{
int a,b;
printf("请输入2个整数:\n");
scanf("%d %d",&a,&b);
printf("其最小公倍数为:%d\n",lcm(a,b));
return 0;
}
--------------------------------------------------------------------------------------------------------------------------------------
2.4
#include
void d2b(int d)
{
int i,a,k=0;
int w[100];
a=d;
while(a>0)
{
w[k++]=a%2;
a/=2;
}
printf("%d的二进制表示为:",d);
for(i=k-1;i>=0;i--) printf("%d",w[i]);
printf("\n");
}
int main()
{
int a;
printf("请输入一个10进制数:\n");
scanf("%d",&a);
d2b(a);
return 0;
}
---------------------------------------------------------------------------------------------------------------------------------------
2.5
#include
void Y_1(int n)
{
int i;
double y=0.0;
for(i=1;i<=n;i++) y+=1.0/i;
printf("Y=1+1/2+1/3……+1/%d=%.2lf\n",n,y);
}
void Y_2()
{
int i;
long sum=0;
for(i=1;i<99;i++) sum+=i*(i+1)*(i+2);
printf("Y=1×2×3+2×3×4+……+98×99×100=%ld\n",sum);
}
int main()
{
int n;
printf("请输入n值:\n");
scanf("%d",&n);
Y_1(n);
Y_2();
return 0;
}
-----------------------------------------------------------------------------------------------------------------------------------------
3.1
#include
int n;
float f_ave(int a[])
{
int i,sum=0;
float ave=0.0;
for(i=0;i
<n;i++) sum+="a[i];"
ave=sum*1.0/n;
return ave;
}
int main()
{
int i;
int array[200];
float ave;
printf("请输入数组的大小:\n");
scanf("%d",&n);
for(i=0;i
<n;i++) scanf("%d",&array[i]);
ave=f_ave(array);
printf("%d个数组元素的平均数为:%.2f\n",n,ave);
return 0;
}
3.2
#include
#include
char *str_conn(char a[],char b[])
{
int i,len,len1,len2;
char str[200];
len1=strlen(a);
len2=strlen(b);
len=len1+len2;
for(i=0;i
<len1;i++) str[i]="a[i];"
for(i=0;i
<len2;i++) str[len1+i]="b[i];"
str[len]='\0';
return str;
}
int main()
{
int i;
char str1[100],str2[100],*str;
printf("请输入第一个字符串:\n");
scanf("%s",str1);
printf("请输入第二个字符串:\n");
scanf("%s",str2);
str=str_conn(str1,str2);
printf("连接后的字符串为:%s\n",str);
return 0;
}
3.4
#include
int main()
{
int i,j,n,sum,temp;
sum=0;
printf("请输入数组的阶数:\n");
scanf("%d",&n);
printf("请输入%d*%d个数组元素:\n",n,n);
for(i=0;i
<n;i++)
{
for(j=0;j
<n;j++)
{
scanf("%d",&temp);
if(i==j) sum+=temp;
}
}
printf("数组的主对角元素之和是:%d\n",sum);
return 0;
}
3.5
#include
#include
int countc(char s[])
{
int i,n,len;
len=strlen(s);
n=0;
for(i=0;i
<len;i++)
{
if('A'<=s[i] && s[i]<='Z') n++;
}
return n;
}
int main()
{
int n;
char str[200];
printf("请输入一个字符串:\n");
gets(str);
n=countc(str);
printf("字符串中大写字母的个数是:%d\n",n);
return 0;
}
3.6
#include
#include
void f(int x,int y,int z)
{
float rst=0.0;
if(x==y && z==y)
{
printf("非法计算,分母为0!\n");
}
else
{
rst=(x+y)*1.0/(x-y)+(z+y)*1.0/(z-y);
printf("f(x,y,z)=:%.2f\n",rst);
}
}
int main()
{
int x,y,z;
printf("请输入X,Y,Z:\n");
scanf("%d %d %d",&x,&y,&z);
f(x,y,z);
return 0;
}
3.7
#include
#include
int ask_age(int n)
{
if(n==1) return 10;
else return ask_age(n-1)+2;
}
int main()
{
int n,age;
printf("请输入求第几位学生的年龄:\n");
scanf("%d",&n);
age=ask_age(n);
printf("第%d位学生的年龄为:%d\n",n,age);
return 0;
}
----------------------------------------------------------------------------------------------------------------------------
4.1
#include
int main()
{
int a,b,t;
int *p,*q,*tp;
printf("请输入两个int变量:\n");
scanf("%d %d",&a,&b);
p=&a;
q=&b;
{ // 交换 p,q
tp=p;
p=q;
q=tp;
}
{ // 交换p,q所指变量
t=*p;
*p=*q;
*q=t;
}
printf("交换后两个变量是:%d %d\n",a,b);
return 0;
}
-----------------------------------------------------------------------------------------------------------------------------
4.2
#include
int main()
{
int i,m,n,p1,p2;
int a[100];
printf("请输入数组的大小:\n");
scanf("%d",&n);
printf("输入%d个数组元素:\n",n);
for(i=0;i
<n;i++) scanf("%d",&a[i]);
printf("输入p,q指向数组元素的下标:\n");
scanf("%d %d",&p1,&p2);
m=(p1+p2)/2;
printf("p和q的中点r指向:a[%d],其值为%d\n",m,a[m]);
return 0;
}
-----------------------------------------------------------------------------------------------------------------------
5.1
#include
void s(int a[],int n)
{
int i,sum=0;
int *p=a;
float ave;
for(i=0;i
<n;i++)
{
sum+=*p;
p++;
}
ave=sum*1.0/n;
printf("数组的平均数是:%.2f\n",ave);
}
int main()
{
int i,n;
int a[100];
printf("请输入数组的大小:\n");
scanf("%d",&n);
printf("输入%d个数组元素:\n",n);
for(i=0;i
<n;i++) scanf("%d",&a[i]);
s(a,n);
return 0;
}
--------------------------------------------------------------------------------------------------------
5.2
#include
int main()
{
int k;
char str[200],*s;
printf("请输入一个字符串:\n");
gets(str);
s=str;
k=0;
while(*s!='\0')
{
k++;
s++;
}
printf("字符串的长度是:%d\n",k);
return 0;
}
-------------------------------------------------------------------------------------------------------------------
5.3
#include
int main()
{
int i;
float a[102],*min,*max;
printf("请输入100个实数:\n");
for(i=0;i<100;i++) scanf("%f",&a[i]);
min=a;
max=a;
for(i=1;i<100;i++)
{
if(*(a+i)>*max) max=a+i;
if(*(a+i)<*min) min=a+i;
}
printf("100个实数的最大值是:%.2f 最小值是:%.2f\n",*max,*min);
return 0;
}
---------------------------------------------------------------------------------------------------------------
5.4
#include
#define n 10
void sort(int a[])
{
int i,j,tp;
int *p=a;
for(i=0;i
<n-1;i++)
{
for(j=i+1;j
<n;j++)
{
if(*(p+i) > *(p+j))
{
tp=*(p+i);
*(p+i)=*(p+j);
*(p+j)=tp;
}
}
}
}
int main()
{
int i;
int a[102],*min,*max;
printf("请输入%d个整数:\n",n);
for(i=0;i
<n;i++) scanf("%d",&a[i]);
sort(a);
printf("排序后序列为:\n");
for(i=0;i<10;i++) printf("%d ",a[i]);
printf("\n");
return 0;
}
</n;j++)
</n-1;i++)
</n;j++)
</n;i++)
求助一道C语言关于链表的问题,答对还有追加分数
一个简单的带头尾指针单向链表(C实现) 用C写了一个带头尾指针的单向链表,仅在尾部进行插入操作,在任意位置进行删除操作。因为只用到这么些功能,又因为懒,所以没有扩展。因为插入是固定在尾部进行,带一个尾指针的好处是显而易见的。当然删除时要付出一些开销。
list.h
-------------------------------------------
/* list.h
*/
#ifndef LIST_H
#define LIST_H
#include
#include
struct listnode
{
struct listnode* next;
int data;
};
struct list
{
struct listnode* head;
struct listnode* tail;
int count;
};
void list_init(struct list*);
void list_insert(struct list*, struct listnode*);
int list_delete(struct list*, struct listnode*);
#endif
------------------------------------------
list.c
------------------------------------------
/* list.c
** Copyright 2004 Coon Xu.
** Author: Coon Xu
** Date: 06 Sep 2004
*/
#include "list.h"
void list_init(struct list* myroot)
{
myroot->count = 0;
myroot->head = NULL;
myroot->tail = NULL;
}
void list_insert(struct list* myroot, struct listnode* mylistnode)
{
myroot->count++;
mylistnode->next = NULL;
if(myroot->head == NULL)
{
myroot->head = mylistnode;
myroot->tail = mylistnode;
}
else
{
myroot->tail->next = mylistnode;
myroot->tail = mylistnode;
}
}
int list_delete(struct list* myroot, struct listnode* mylistnode)
{
struct listnode* p_listnode = myroot->head;
struct listnode* pre_listnode;
//myroot is empty
if(p_listnode == NULL)
{
return 0;
}
if(p_listnode == mylistnode)
{
myroot->count--;
//myroot has only one node
if(myroot->tail == mylistnode)
{
myroot->head = NULL;
myroot->tail = NULL;
}
else
{
myroot->head = p_listnode->next;
}
return 1;
}
while(p_listnode != mylistnode && p_listnode->next != NULL)
{
pre_listnode = p_listnode;
p_listnode = p_listnode->next;
}
if(p_listnode == mylistnode)
{
pre_listnode->next = p_listnode->next;
myroot->count--;
return 1;
}
else
{
return 0;
}
}
-------------------------------------------
main.c
-------------------------------------------
#include
#include
#include "list.h"
int main(int argc, char *argv[])
{
struct list l;
list_init(&l);
int ix = 0;
for(ix = 0; ix < 10; ix++)
{
struct listnode* p_node = malloc(sizeof(struct listnode));
p_node->data = ix;
list_insert(&l, p_node);
}
struct listnode* p_listnode = l.head;
while(p_listnode != NULL)
{
printf("%d\n", p_listnode->data);
p_listnode = p_listnode->next;
}
int input;
printf("input the number you want delete:\n");
scanf("%d", &input);
while(input > 0)
{
p_listnode = l.head;
while(p_listnode->next != NULL && p_listnode->data != input)
{
p_listnode = p_listnode->next;
}
if(p_listnode->data == input)
{
printf("Delete success!!\nprint the list!!\n");
list_delete(&l, p_listnode);
free(p_listnode);
p_listnode = l.head;
while(p_listnode != NULL)
{
printf("%d\n", p_listnode->data);
p_listnode = p_listnode->next;
}
}
else
{
printf("not find %d\n", input);
}
scanf("%d", &input);
}
system("PAUSE");
return 0;
}
不明白你的含义,你问的问题是什么?提供一些这方面的东西给你
首先要确定一种排序算法,常用的几种有:
insert sort 插入排序
merge sort 归并排序
quick sort 快速排序
bubble sort 冒泡排序
heap sort 堆排序
radix sort 基数排序
算法性能的优劣取决于时间复杂度,一般来说,时间复杂度好的code编译起来较为麻烦,编译过程简单的算法时间复杂度相对较差.
insert sort 的时间复杂度较差,但是编译简单,也是最常用的一种排序算法,下面是C++的inplementation(递归):
typedef struct node* LIST;
struct node {
int key;
node* next;
};
//需要一个插入函数
LIST _insert (LIST L, node* pNew)
{
if (L == NULL)
return pNew;
if (pNew->key < L->key)
{
pNew->next = L;
return pNew;
}
L->next = _insert (L->next, pNew);
return L;
}
LIST _insertsort (LIST L)
{
if (L == NULL) //空链,无须排序,返回.(递归的跳出条件)
return L;
node* tail = L->next;
L->next = NULL;
return _insert (_insertsort(tail), L);
}
需要按照学号进行排序的!
struct _tagStudent
{
long lNo; //=========学号
char szName[20]; //==姓名
char cSex; //========性别
int nAge; //=========年龄
};
//定义Student结构
typedef struct _tagStudent Student;
struct _tagNode
{
struct _tagNode* pNext;//=======下一个节点
Student *pStudent; //===========本节点的学生信息
};
//定义Node结构(即一个节点)
typedef struct _tagNode Node;
//插入一个新的学生
//参数:
//Node* students 学生链表的头节点
//Student* newStudent 被插入的学生信息
//返回:
//新链表的头节点
Node* Insert(Node* students, Student* newStudent)
{
Node* pCurNode;//当前节点
Node* pNextNode;//下一节点
Node* pPrevNode;//上一节点
Node* pNode;
Node* pNodeHead = students;//头节点
if(pNodeHead == NULL)//尚未有节点,创建一个头节点
{
pNodeHead = (Node*)malloc(sizeof(Node));
pNodeHead->pNext = NULL; //后一项为NULL;
pNodeHead->pStudent = newStudent;
return pNodeHead;
}
pCurNode = pNodeHead;
pPrevNode = NULL;
while(1)
{
if(newStudent->lNo <= pNode->pStudent->lNo)//按学号升序插入,插到当前节点前
{
pNode = (Node*)malloc(sizeof(Node));
pNode->pStudent = newStudent;
pNode->pNext = pCurNode;
if(pPrevNode == NULL)//如果上一节点为NULL,表示插入链表头
pNodeHead = pNode;//链表头指向新节点
else
pPrevNode->pNext = pNode;
break;
}
pNextNode = pCurNode->pNext;
if(pNextNode == NULL)//如果当前节点是末节点,插入链表末尾
{
pNode = (Node*)malloc(sizeof(Node));
pNode->pStudent = newStudent;
pNode->pNext = NULL;
pCurNode->pNext = pNode;
break;
}
pPrevNode = pCurNode;
pCurNode = pNextNode;
}
return pNodeHead;//返回新的头节点
}
//在学生链表中查找指定的学生
//参数:
//Node* strudent 学生链表的头节点
//Student* searchStudent 被查找的学生
//返回:
//被查学生所在节点
Node* FindNode(Node* students, Student* searchStudent)
{
Node* pNode = students;
while(pNode != NULL)
{
if(pNode->pStudent == searchStudent)
return pNode;
pNode = pNode->pNext;
}
return NULL;
}
//根据学号查找学生信息
//参数:
//Node* students 学生链表的头节点
//long nNo 被查学生的学号
//返回:
//被查学生的信息
Student* FindStudent(Node* students, long lNo)
{
Node* pNode = students;
while(pNode != NULL)
{
if(pNode->pStudent->lNo == lNo)
return pNode->pStudent;
pNode = pNode->pNext;
}
return NULL;
}
//修改学生信息
//参数:
//Node* students 学生链表头节点
//Student* oldStudent 被修改的学生信息
//Student* newStudent 被修改后的学生信息(即用newStudent替换oldStudent)
//返回:
// true -- 成功,false -- 失败
bool Modify(Node* students, Student* oldStudent, Student* newStudent)
{
//查找被修改学生所在节点
Node* pNode = FindNode(students, oldStudent);
if(pNode == NULL)//没有找到返回false
return false;
//替换成新的学生信息
pNode->pStudent = newStudent;
return true;
}
//获取指定节点的上一个节点
//参数:
//Node* students 学生链表的头节点
//Node* pNode 指定节点
//返回:
//指定节点的上一个节点
Node* GetPrevNode(Node* students, Node* pNode)
{
Node* pCurNode = students;
if(pNode == students)//指定节点是头节点,返回上一节点NULL
return NULL;
while(pCurNode != NULL)
{
if(pNode == pCurNode->pNext)
return pCurNode;
pCurNode = pCurNode->pNext;
}
return NULL;//没有找到
}
//删除指定的学生信息
//参数:
//Node* students 学生链表头节点
//Student* pStudent 将被删除的学生
//返回:
//删除学生后的学生链表的头节点,如果为NULL,表示链表中已没有任何学生
Node* Delete(Node* students, Student* pStudent)
{
Node* pNodeHead = students;
Node* pPrevNode;//上一节点
//查找被修改学生所在节点
Node* pNode = FindNode(students, pStudent);
if(pNode == NULL)//没有找到返回原先的头节点
return pNodeHead;
if(pNode == pNodeHead)//如果该学生是头节点
{
pNodeHead = pNodeHead->pNext;
}
else
{
pPrevNode = GetPrevNode(students, pNode);
pPrevNode->pNext = pNode->pNext;
}
free(pNode);//释放该节点(没有释放节点中的学生信息,应另外释放)
return pNodeHead;//返回头节点
}
好了!以上已经有了基本的学生链表操作功能了。只要通过调用上面的几个函数就可以实现学生信息的管理和应用。
例如:
//参考样例====
//1。机器模拟生成20个学生,学号随机生成
//2。修改原学号为100的学生,替换为一个新的学号为150的学生
//3。删除学号为200的学生
void main()
{
int i = 0;
Node* students = NULL;//初始化学生链表头节点为空
Student* newStudent;
Student* oldStudent;
Node* pNode;
//1。机器模拟生成20个学生,学号随机生成
//随机产生20个学生,学号在0--1000之间,按照升序插入到学生链表中
for(i = 0; i < 20; i++)
{
newStudent = (Student*)malloc(sizeof(Student));
newStudent->lNo = rand() * 1000;//rand()为生成一个0到1的随机数,随机函数可以用别的替代,这里只是用于说明问题的
students = Insert(students, newStudent);
}
//遍历输出学生信息,用于检验学生链表是否正确,包括学生个数,学号是否排序正确等
i = 0;
pNode = students;
while(pNode != NULL)
{
printf("学生%d : 学号 -- %l\n", ++i, pNode->pStudent->lNo);
pNode = pNode->pNext;
}
//2。修改原学号为100的学生,替换为一个新的学号为150的学生
oldStudent = FindStudent(students, 100);
newStudent = (Student*)malloc(sizeof(Student));
newStudent->lNo = 150;
Modify(students, oldStudent, newStudent);
//3。删除学号为200的学生
//查找学号为200的学生
oldStudent = FindStudent(students, 200);
if(oldStudent != NULL)//如果找到
{
students = Delete(students, oldStudent);
free(oldStudent);//释放学生信息
}
//最后结束程序前,最好要把所有的学生信息释放掉
//。。。
}
中南大学c语言试题
C 语言程序设计试卷
一、单项选择题(每题1分,共20分)
1. C语言规定:在一个源程序中,main函数的位置( ① )。
A. 必须在最开始
B. 必须在系统调用的库函数的后面
C. 可以任意
D. 必须在最后
2. 下面四个选项中,均是合法浮点数的选项是( ① )。
A. +1e+1 5e-9.4 03e2
B. -.60 12e-4 -8e5
C. 123e 1.2e-.4 +2e-1
D. -e3 .8e-4 5.e-0
3. 若a=-14,b=3,则条件表达式 a
<b? a:b+1的值为 。
A. -14 B. -13 C. 3 D. 4
4. 已知:int n,i=1,j=2;执行语句n=i
<j?i++:j++;则i和j的值是( ① ).
A. 1,2 B. 1,3 C. 2,2 D. 2,3
5. 为了判断两个字符串s1和s2是否相等,应当使用( ① )
A. if (s1==s2) B. if(s1=s2)
C. if (strcmp(s1,s2))
D. if (strcmp(s1,s2)==0)
6. 以下正确的描述是( ① )。
A. 函数的定义可以嵌套,但函数的调用不可以嵌套。
B. 函数的定义不可以嵌套,但函数的调用可以嵌套。
C. 函数的定义和函数的调用均不可以嵌套。
D. 函数的定义和函数的调用均可以嵌套。
7. 在C语言中,下面对函数不正确的描述是( ① )。
A. 当用数组名作形参时,形参数组值的改变可以使实参数组之值相应改变。
B. 允许函数递归调用。
C. 函数形参的作用范围只是局限于所定义的函数内。
D. 子函数必须位于主函数之前。
8. 如果在一个函数中的复合语句中定义了一个变量,则以下正确的说法是( ① )。
A. 该变量只在该复合语句中有效
B. 该变量在该函数中有效
C. 该变量在本程序范围内均有效
D. 该变量为非法变量
9. 以下正确的函数形式是( ① )。
A. double fun(int x,int y) { z=x+y;return z;}
B. fun(int x,y) { int z; return z;}
C. fun(x,y) { int x,y; double z; z=x+y; return z;}
D. double fun( int x,int y) {double z; z=x+y; return z; }
10. 以下程序的输出结果是( ① )。
#include
#define F(y) 8.19-y
#define PRINT(a) printf("%d",(int)(a))
void main(void)
{
int x=2;
PRINT(x*F(3));
}
A. 10 B. 13 C. 11 D. 报错
11. 以下程序中编译和运行结果均正确的一个是( ① )。
A. A. void main(void)
{
union
{
int n;
float x;
} comm={1};
printf("%d",comm.n);
}
B. B. void main(void)
{
union
{
int n;
float x;
} comm={12.5};
printf("%f",comm.x);
}
C. C. void main(void)
{
union
{
float x;
int n;
} comm={12.5}
printf("%f",comm.x);
}
D. D. void main(void)
{
union
{
int n;
float x;
} comm=5;
printf("%d", comm.n);
}
12. 设有定义:int a=1,*p=&a; float b=2.0; char c='A'; 以下不合法的运算是( ① )。
A. p++; B. a--; C. b++; D. c--;
13. 以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是( ① )。
main()
{
int *p,*q,a,b;
p=&a;
printf("input a:");
scanf("%d",*p);
…
}
A. *p表示的是指针变量p的地址
B. *p表示的是变量a 的值,而不是变量a的地址
C. *p表示的是指针变量p的值
D. *p只能用来说明p是一个指针变量
14. 若num、a、b和c都是int型变量,则执行表达式num=(a=4,b=16,c=32);后num的值为( ① )。
A. 4 B. 16 C. 32 D. 52
15. 已有如下定义和输入语句,若要求a1,a2,c1,c2的值分别为10,20,A和B,当从第一列开始输入数据时,正确的数据输入方式是( ① ),(注: _ 表示空格)
int al,a2,char c1,c2;
scanf("%d%c%d%c",&a1,&c1,&a2,&c2);
A. 10A_20_B B. 10_A_20_B C. 10A20B D. 10A20_B
16. 若有说明:int a[10]; 则对a数组元素的正确引用是( ① )。
A. a[10] B. a[3.5] C. a[5-3] D. a[-1]
17. 在C语言中, 一维数组的定义方式为:
类型说明符 数组名 ① ;
A. [整型常量表达式] B. [表达式]
C. [整型常量] D. [整型表达式]
18. 以下能对一维数组a进行正确初始化的语句是( ① )。
A. in a[10]=(0,0.0,0,0);
B. int a[10]={}; C. int a[]={0};
D. int a[10]={10*1};
19. 以下程序段( ① )。
x=-1;
do
{
x=x*x;
}
while(! x);
A. 是死循环 B. 循环执行二次
C. 循环执行一次 D. 有语法错误
20. 以下关于do-while循环的不正确描述是( ① )。
A. do-while的循环体至少执行一次
B. do-while循环由do开始,用while结束,在while(表达式)后面不能写分号
C. 在do-while循环体中,一定要有能使while后面表达式的值变为零("假")的操作
D. do-while的循环体可以是复合语句
二、是非判断题(每题1分,共15分)
1. C语言规定,标识符中的字母一般区分大、小写。
2. 控制台标准输入设备一般是指键盘。
3. 使用while和do-while循环时,循环变量初始化的操作应在循环语句之前处理。
4. 循环体中continue语句的作用是结束整个循环的执行。
5. 关系表达式的值是0或1。
6. 若有说明:int a[3][4]={0},则只有元素a[0][0]可得到初值0。
7. 字符串作为一维数组存放在内存中。
8. 字符数组中的一个元素存放一个字符。
9. 字符数组中的最后一个字符必须是'\0'。
10. 形参为指针变量时,实参必须是数组名。
11. 用数组名作函数参数时传递的是数组的值。
12. 全局变量可以被任何一个函数中的任何一个表达式使用。
13. 一个函数可以带回一个整型值、字符值、实型值等,也可以带回指针型的数据。
14. 表达式i++与++i在任何场合功能完全相同。
15. 在赋值表达式中,赋值号左边的变量和右边的表达式之值的数据类型可以不相同。
三、多项选择题(每题1分,共5分)
1. 若要求在if 后一对圆跨括号中表示a不等于0的关系,则不能正确表示这一关系
的表达式为( ① ).
A.a<>0
B.!a
C.a=0
D.a
E.a!=0
2. 选出所有合法的常量( ① )。
A.3e22.5
B.-e-3
C.-.1e-1
D.'BASIC'
E.'\045'
F.0fd
G.0xfdaL
H.e8
I.'\\'
J."\""
3. 以下关于函数原型说法错误的是:
(1)对变量的定义”和“声明”是一回事,对函数的“定义”和“声明”也是一回事。
(2)在声明函数原型时,允许只写出参数的类型,而不必写出参数的名称。
(3)如果在定义函数时不指定函数类型,系统会隐含指定函数类型为int型。
(4)调用一个函数时,函数名、实参个数、实参类型必须与函数原型一致。
(5)如果被调函数的定义出现在主调函数之前,可以不必加以声明。
(6)所有的函数之间可以互相调用。
(7)在C语言中,所有函数都是平行的,一个函数不能从属于另一个函数,即不能嵌套定义的。
(8)如果函数没有返回值,在定义时可以省略函数类型。
(9)在C语言中,任何函数的定义都不允许为空。
(10)C语言规定,实参变量对形参变量的数据传递是“值传递”。
4. 请从下面关于指针的叙述中, 选出5个正确的叙述。
(1)指针即地址。
(2)指针须先赋值后使用。
(3)当指针p指向数组a的首址后,由于p[i]和a[i]都能引用数组元素,所以这里p和a是等价的。
(4)int *p表示定义了一个指向int类型数据的指针变量p。
(5)数组的指针是指数组的起始地址。
(6)若有定义int a[4],*p=a,则p++后p指向数组a所占内存的第二个字节。
(7)使用指针变量作函数参数采取的是"值传递"的方式。
(8)相同类型的指针可以进行减法运算。
(9)指针变量和许多变量一样可以进行四则运算。
(10)指针p指向数组元素a[2],若要其指向a[4],执行p=p*2即可。
5. 以下关于数组的叙述中,5个最确切的说法是:
(1)在声明一个数组变量时必须指定大小。
(2)必须用常量表达式来说明一个数组变量的大小。
(3)在对数组进行初始化时大括号中的数据个数必须和数组的大小相同。
(4)有变量定义int a[3]={0,1,2},b[3];,可以用b=a,使数组b的每个元素和a的每个元素相等。
(5)在C语言中,可以将字符串作为字符数组来处理。
(6)定义了字符数组char c[11];为了给它赋值,可以用c="china";。
(7)如果有char s[15]={"I am a\0 student"};,则strlen(s)的值为6。
(8)C语言中,二维数组中元素排列的顺序是:按行存放。
(9)在C语言中,不能对局部的数组变量进行初始化。
(10)在声明时对数组进行进行初始化必须指定数组大小。
四、程序运行结果题(每题4分,共20分)
1. (4分)
下面程序的运行结果是( ① ) 。
#include
void main(void)
{
int i;
char a[]="Time",b[]="Tom";
for(i=0;a[i]!='\0'&&b[i]!='\0';i++)
if (a[i]==b[i])
if (a[i]>='a' && a[i]<= 'z') printf("%c",a[i]-32);
else printf("%c",a[i]+32);
else printf("*");
}
2. (4分)
下面程序段的运行结果是( ① ) 。
i=1;s=3
do
{
s+=i++;
if (s%7==0) continue;
else ++i;
} whlie(s<15);
printf("%d",i);
3. (4分)
若运行时输入:5999,则以下程序的运行结果(保留小数点后一位)是( ① )。
void main(void)
{
int x;
float y;
scanf("%d",&x);
if (x>=0 && x<=2999) y=18+0.12 * x;
if (x>=3000 && x<=5999) y=36+0.6*x;
if (x>=6000 && x<=10000) y=54+0.3*x;
printf("%6.1f",y);
}
4. (4分)
以下程序的运行结果是( ① )。
void main(void)
{
int a=1,k;
for(k=0;k<3;k++) printf("%4d",f1(a))
}
int f1(int x)
{
static int z=3,y=0;
y++;
z++;
return(x+y+z);
}
5. (4分)
以下程序的功能是计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值,请选择填空。
#include
#include
float fun1(float,float);
void main(void)
{
float x,y,z,sum;
scanf("%f%f%",&x,&y,&z);
sum=fun1( ① )+ fun1 ( ② );
printf("sum=%f\n",sum);
}
float fun1(float a,float b)
{
float num;
num=a/b;
return num;
}
五、程序填空题(每题2分,共20分)
1.下面程序的功能是用公式:π×π/6=1/(1×1)+1/(2×2)+1/(3×3)+......
求π的近似值, 直到最后一项的值小于10e-6为止。
#include
#include
void main(void)
{
long i=1;
① pi=0;
while (i*i<=10e+6) { pi= ② ; i++; }
pi=sqrt(6.0*pi);
printf("pi=%10.6f\n",pi);
}
2. 下面程序的功能是把以下给定的字符按其矩阵格式读入数组str1中,并输出行列号之和是3的数组元素。
void main(void)
{
char str1[4][3]={'A','b','C','d','E','f','G','h','I','j','K','i'
};
int x,y,z;
for(x=0;x<4;x++)
for(y=0; ① ;y++)
{
z=x+y;
if ( ② ) printf("%c\n",str1[x][y]);
}
}
3. 以下程序的功能是用递归方法计算学生的年龄,已知第一位学生年龄最小,为10岁,其余学生一个比一个大2岁,求第5位学生的年龄。
递归公式如下:
age(1)=10
age(n)=age(n-1)+2 (n>1)
#include
int age(int n)
{
int c;
if (n==1) c=10;
else c= ① ;
return c;
}
4. 以下程序的功能是判断输入的年份是否是闰年。
void main(void)
{
int year,yes;
scanf("%d",&year);
if (year%400==0) yes=1;
else if ( ① ) yes=1;
else ② ;
if(yes) printf("%d is ",year);
else printf("%d is not ",year);
printf("a leap year.\n");
}
5. 以下程序实现: 输入三个整数,按从大到小的顺序进行输出。
void main(void)
{
int x,y,z,c;
scanf("%d %d %d",&x,&y,&z);
if ( ① ) { c=y;y=z;z=c;}
if ( ② ) { c=x;x=z;z=c;}
if ( ③ ) { c=x;x=y;y=c;}
printf("%d,%d,%d",x,y,z);
}
六、填空题(每题1分,共20分)
1. 在C语言中,一个float型数据在内存中所占的字节数为( ① )个字节;一个double型数据在内存中所占的字节数为( ② )个字节。
2. 若有定义:char c='\010'; 则变量C中包含的字符个数为( ① )。
3. C源程序的基本单位是( ① )。
4. 在C语言中(以16位PC机为例),一个char型数据在内存中所占的字节数为( ① );
一个int型数据在内存中所占的字节数为( ② )。
5. 已有定义:
int m;
float n,k;
char chl,ch2;
为使m=3, n=6.5, k=12.6, ch1='a', ch2='A', 输入数据的格式为:
3 6.5 12.6aA
则对应的scanf语句是( ① );。
6. 执行下面的程序片段后,x的值是( ① )。
i=10; i++; x=++i;
7. 设a、b、c均是int 型变量,则执行以下for循环后,c的值为( ① )。
for(a=1,b=5;a<=b;a++) c=a+b;
8. 以下do-while语句中循环体的执行次数是( ① )。
a=10;
b=0;
do { b+=2; a-=2+b; } while (a>=0);
9. 设x和y均为int型变量,则以下for循环中的scanf语句最多可执行的次数是( ① )。
for (x=0,y=0;y!=123&&x<3;x++)
scanf ("%d",&y);
10. 若有以下定义和语句:
int *p[3],a[9],i;
for(i=0;i<3;i++) p[i]=&a[3*i];
则*p[0]引用的是数组元素( ① ); *(p[1]+1)引用的是数组元素( ② )。
11. 设a=3,b=4,c=5,则表达式a||b+c&&b==c的值是( ① )。
12. 进行逻辑与运算的运算符是( ① )。
13. 若a=6,b=4,c=2,则表达式!(a-b)+c-1&&b+c/2的值是( ① )。
14. 下面程序片段中循环体的执行次数是( ① )次。
for(i=1,s=0;i<11;i+=2) s+=i;
15. 若有以下定义和语句:
int a[4]={0,1,2,3},*p;
p=&a[2];
则*--p的值是( ① )。
16. 执行以下程序段后, s的值是( ① )
int a[]={5,3,7,2,1,5,3,10},s=0,k;
for(k=0;k<8;k+=2)
s+=*(a+k);
17. 执行以下程序段后,m的值是( ① )
int a[]={7,4,6,3,10},m,k,*ptr;
m=10;
ptr=&a[0];
for(k=0;k<5;k+=2)
m=(*(ptr+k)
<m)?*(ptr+k):m;
答案:
一、单项选择题(20分)
1.~5.CBACD 6.~10.BDADB
11.~15.CABCC 16.~20.CACCB
二、是非判断题(15分)
√√√×√ √√√×× × √
三、多项选择题(5分)
1.ABC 2.CEGIJ 3.ADFHI 4.ABDEH 5.BEGHI
四、程序运行结果题(20分)
1. t*M
2. 8
3. 3635.4
4. 6 8 10
5. z+y,z-y^x+y,x-y
五、程序填空题(20分)
1. ①double ②pi+1.0/(i*i)
2. ①y<3 ②z==2
3. ①age(n-1)+2
4. ①year%4==0&&yeaar%100!=0 ②yes=0
5. ①z>y ②z>x ③y>x
六、填空题(20分)
1. ①4 / 四 ②8 / 八
2. ①1 / 1个
3. ①函数
4. ①1 / 一 ②2 / 二
5. ①scanf("%d%f%f%c%c",&m,&n,&k,&ch1,&ch2)
6. ①12
7. ①10
8. ①3..9. ①3..10. ①a[0] ②a[4]
11. ①112. ①&&13. ①1.14. ①5
15. ①1
16. ①16
17. ①6
</m)?*(ptr+k):m;
C语言数据结构
一、递归的写法:
#include
int g(int m,int n);int main(){ printf("g(3,5)的结果:%d\n",g(3,5)); return 0;}int g(int m,int n){ if(m==0 && n>=0) return 0; else if(m>0 && n>=0) return g(m-1,2*n)+n; return 0;}递归执行过程:
最后往上依次返回值,5返回0,所以4返回0+20,所以3返回20+10,所以2返回30+5,所以结果就是35。
二、不使用递归的写法:
#include
int g(int m,int n);int main(){ printf("g(3,5)的结果:%d\n",g(3,5)); return 0;}int g(int m,int n){ int sum=0; while(m--) { sum=sum+n; n=2*n; } return sum;}
C语言求教
1:
#include
void main( )
{ ;
for(a=1;a<=1000;a++)
{ for ( int m=1 ; i<=a/2;i++)
if(!(a%i)) ;
if (m==a) printf("%4d",a);
}
}
2:
main( )
{ int i,k;
int a[11]={2,3,8,15,19,21,28,31,45,50},n;
printf(“Original array is:\n”);
for(i=0;i<10;i++)
printf(“%4d”,a[i]);
printf(“\n”);
printf(“Insert a new number:”);
scanf(“%d”,&n);
if(n>a[9])
____ a[10]=n ___;
else
{
for(i=0;i<10;i++)
if(a[i]>n)
{
____ k=i_____;
break;
}
for(i=10;i>k;i--)
_ a[i]=a[i-1] _;
a[k]=n;
}
printf(“New array is:\n”);
for(i=0;i<11;i++)
printf(“%4d”,a[i]);
}
3:
#include
int age(int n)
{ int c;
if( n<10 ) c=10;
else c= n ;
return(c); }
void main( )
{ printf(“%d\n”, age(10)+2+2+2+2//age(自定值) ); }
4:
void findMax(int arr[][4],int m,int n,int *col)
{ int i,j,temp;
for(j=0; j
<n; j++)
{ col++ ;
for(i=0; i
<m; i++)
if (temp
<arr[i][j]) temp="arr[i][j];
col[i] =temp;
}
}
main( )
{ int brr[3][4]={{12,54,23,76},{97,23,54,66},{15,54,34,78} },c[4],i;
findmax(b[][4],3,4,c) ;
for(i=0;i<4;i++) printf("%d ",c[i]);
printf("\n");
}
5:
strcen(char a[ ], char b[] )
{ int num=0,n=0;
while(a[num++])!= '\0' ) ;
while(b[n]) {a[num]=b[n];num++; n++ ;}
a[num]=b[n];
return(num);
}
1 int m=1;
2 a[10]=n k=i a[i]=a[i-1]
3 n<10 n age(10)+2+2+2+2//age(自定值)
4 col++ col[i] findmax(b[][4],3,4,c)
5 char b[] '\0' n++
第二题有点难度,不好想,其他的都很简单。
yunsi ..
1.#include
void main( )
{
int a, m;
for(a=1;a<=1000;a++)
{
m = 0;
for (int i = 1; i<=a/2;i++)
if(!(a%i))
m += i;
if (m==a) printf("%4d",a);
}
}
2.#include
void main()
{ int i,k;
int a[11]={2,3,8,15,19,21,28,31,45,50},n;
printf("Original array is:\n");
for(i=0;i<10;i++)
printf("%4d",a[i]);
printf("\n");
printf("Insert a new number:");
scanf("%d",&n);
if(n>a[9])
a[10] = n;
else
{
for(i=0;i<10;i++)
if(a[i]>n)
{
k = i;
break;
}
for(i=10;i>k;i--)
a[i] = a[i-1];
a[k]=n;
}
printf("New array is:\n");
for(i=0;i<11;i++)
printf("%4d",a[i]);
}
3.#include
int age(int n)
{ int c;
if(1==n) c=10;
else c= age(n-1) + 2;
return(c);
}
void main( )
{
printf("%d\n", age(5));
}
4.#include
void findMax(int arr[][4],int m,int n,int *col)
{ int i,j,temp;
for(j=0; j
<n; j++)
{ temp = 0;
for(i=0; i
<m; i++)
if (temp
<arr[i][j]) temp="arr[i][j];
*col=temp;
}
}
main( )
{ int brr[3][4]={{12,54,23,76},{97,23,54,66},{15,54,34,78} },c[4],i;
;
for(i=0;i<4;i++) printf("%d ",c[i]);
printf("\n");
}
5.strcen(char a[ ], char b[])
{ int num=0,n=0;
while(a[num++])!= '\0');
while(b[n]) {a[num]=b[n];num++; n++;}
a[num]=b[n];
return(num);
}
这是我编的,真痛苦呀!要不是看在你那么诱惑的份上……
第一题:
#include "stdio.h"
#include "conio.h"
main()
{
static int k[10];
int i,j,n,s;
for(j=2;j<1000;j++)
{
n=-1;
s=j;
for(i=1;i
<j;i++)
{
if((j%i)==0)
{
n++;
s=s-i;
k[n]=i;
}
}
if(s==0)
{
printf("%d is a wanshu",j);
for(i=0;i
<n;i++)
printf("%5d,",k[i]);
printf("%5d\n",k[n]);
}
}
getch();
}
第二题:这一题费了我不少心血呀!
main( )
{ int i,k;
int a[15]={2,3,8,15,19,21,28,31,45,50},n,m,w;
printf("Original array is:\n");
for(i=0;i<10;i++)
printf("%4d",a[i]);
printf("\n");
printf("Insert a new number:");
scanf("%d",&a[i]);
for(i=1;i<12;i++)
for(w=0;w<11-i;w++)
if (a[w]>a[w+1])
{m=a[w];
a[w]=a[w+1];
a[w+1]=m;}
printf("New array is:\n");
for(i=0;i<11;i++)
printf("%4d",a[i]);getch();
}
第三题:
#include
int age(int n)
{ int c;
if(n==1) c=10;
else c=age(n-1)+2;
return (c);
}
void main()
{ printf("%d\n",age(5)); getch();
}
第四题:#include
void findMax(int arr[][4],int m,int n,int *col)
{ int i,j,temp;
for(j=0; j
<n; j++)
{ temp = 0;
for(i=0; i
<m; i++)
if (temp
<arr[i][j]) temp="arr[i][j];
*col=temp;
}
}
main( )
{ int brr[3][4]={{12,54,23,76},{97,23,54,66},{15,54,34,78} },c[4],i;
findMax(arr[][4],3,4,c); ;
for(i=0;i<4;i++) printf("%d ",c[i]);
printf("\n");getch();
}
第五题:#include "stdio.h"
main()
{int i;
char a[]="zhong";
char b[]="guo";
a[i]=strcat(a,b);
printf("%s",a[i]);
printf("\n%d",strlen(a));
getch();}
大哥,费了我两个半小时呀!!!
这5道题是谭浩强的C程序设计第三版的课后习题吧,对应的题号应该是
6.7 7.4 其它的三题大致也是课后的习题。
下面是谭浩强的C程序设计第三版的课后习题的电子档网址。
http://wenku.baidu.com/view/3a1081116c175f0e7cd13798.html
如果学期结束有课程设计,可与wyw2012@tom.com联系
本人长期在线。
</n;i++)
</j;i++)
C语言,递归函数?
对于这段代码,fun 函数是一个递归函数。让我们分析一下递归调用的过程,以便理解为什么第一个输出是 -1。
当从 main 函数调用 fun(20) 时,进入 fun 函数,由于 x / 2 > 0(20 / 2 = 10 > 0),所以递归调用 fun(20 / 2 - 2),即 fun(8)。
再次进入 fun 函数,这次 x 为 8,仍然满足 x / 2 > 0(8 / 2 = 4 > 0),再次递归调用 fun(8 / 2 - 2),即 fun(2)。
再次进入 fun 函数,这次 x 为 2,仍然满足 x / 2 > 0(2 / 2 = 1 > 0),再次递归调用 fun(2 / 2 - 2),即 fun(-1)。
这次进入 fun 函数,x 为 -1,x / 2 > 0 的条件不满足(-1 / 2 = -1,-1 不大于 0),所以不再进行递归调用。然后,执行 printf("%d ", x); 语句,输出 -1。
2/2 1 1大于0 还是会进入fun方法 在fun方法中 2/2-2 等于-1
后在场进入 fun 方法 (-1/2>0) 然后依次打印X的值
这段代码中定义了一个递归函数 fun,函数的功能是将输入的参数 x 以二进制形式输出到控制台。具体来说,函数 fun 的实现过程如下:
判断 x/2 是否大于 0,如果成立,则执行下一步操作,否则直接输出 x 的值。
调用 fun(x/2-2),即递归调用自身,将 x/2-2 作为新的参数传递给 fun 函数。
输出 x 的二进制表示。由于在递归调用后,程序会一直执行到当前调用结束,所以输出的顺序是从最高位到最低位。
根据上述描述,当 fun(20) 被调用时,函数将按照如下顺序执行:
fun(20) 调用 fun(8),输出 1。
fun(8) 调用 fun(2),输出 0。
fun(2) 调用 fun(0),输出 1。
fun(0) 直接输出 0。
因此,最终的输出结果为:10100,即二进制下的 20。
因此,选项 B) 2820 是正确答案。