资源描述
1、10个人的成绩存放在score数组中,编写函数fun,求出平均分,并作为函数值返回,且输出不及格人数。
#include<stdio.h>
float fun (int a[10])
{
int i,aver,sum=0;
for(i=0;i<10;i++)
sum=sum+a[i];
aver=sum/10;
return aver;
}
void main()
{
int i,j=0,a[10]={10,20,30,40,50,60,70,80,90,100};
float aver;
for(i=0;i<10;i++)
if(a[i]<60)
j++;
aver=fun (a);
printf("10个人的成绩平均分为:%5.2f\n",aver);
printf("\n");
printf("不及格人数:%d\n",j);
}
2、 求出1到100之内能被7或者11整除,但不能同时被7和11整除的所有整数,并将他们放在指定的数组a中。
#include<stdio.h>
void main()
{
int i,n,a[500];
n = fun(a);
for(i = 0; i < n; i++)
printf("%8d",a[i]);
}
int fun (int a[])
{
int i = 7, j = 0;
for(; i <= 100; i++)
if ((i % 7 == 0 || i % 11 == 0)&&( !(i % 7== 0 && i % 11 == 0) ) )
a[j++] = i;
return j ;}
3、求方程的解。
#include<stdio.h>
#include<math.h>
void main()
{
float a,b,c,d,x1,x2,m,n;
printf("请输入方程的3个系数,a,b,c:");
scanf("%f,%f,%f",&a,&b,&c);
printf("该方程\n");
if(fabs(a)<=1e-6)
{
if(fabs(b)<=1e-6)
{
if(fabs(c)<=1e-6)
printf("有无穷多个解\n");
else
printf("无解\n");
}
else printf("有一个根:%8.4f\n",-c/b);
}
else
{
d=b*b-4*a*c;
if(fabs(d)<=1e-6)
printf("有两个相等的实根:%8.4f\n",-b/(2*a));
else
if(d>1e-6)
{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
printf("有两个不等的实根:%8.4f和%8.4f\n",x1,x2);
}
else
{
m=-b/(2*a);
n=sqrt(-d)/(2*a);
printf("有两个复根:\n");
printf("%8.4f+%8.4fi\n",m,n);
printf("%8.4f-%8.4fi\n",m,n);
}
}
}
4、给出一个百分制成绩,规定输出成绩等级A、B、C、D、E,90分以上为A,80~89分为B,70~79分为C,60~69分为D,60分以下为E。规定:当输入分数为负值,或大于100时,告知用户“输入数据错误,重新输入”。
#include<stdio.h>
void main()
{
float x;
char y;
printf("输入学生成绩:x=");
scanf("%f",&x);
while(x>100||x<0)
{
printf("输入错误,请重新输入学生成绩:x=");
scanf("%f",&x);
}
if(x>=90)
y='A';
else
if(x>=80)
y='B';
else
if(x>=70)
y='C';
else
if(x>=60)
y='D';
else
y='E';
printf("\n学生的等级为:y=%c\n",y);
}
5、 求数组中最大元素在数组中的下标并存放在指针k所指的储存单元中。
# include <stdio.h>
void fun(int *s, int t , int *k)
{
int i ,max;
max=s[0];
for (i=0;i<t;i++)
if (s[i]>max)
{
max=s[i];
*k=i;
}
}
void main( )
{
int a[10]={876,675,896,101,301,401,980,431,451,777}, k ;
fun(a,10, &k);
printf("最大值在a中的位置为:i=%d\n最大值为:%d\n", k, a[k]);
}
6、编写函数fun,功能是:根据以下攻势计算s,计算结果作为函数值返回;n通过形参传入。S=1+1/(1+2)+1/(1+2+3)+……+1/(1+2+3+4+……+n)。
#include<stdio.h>
float fun(int n)
{
int i;
float s=1.0,t=1.0;
for(i=2;i<=n;i++)
{
t=t+i;
s=s+1/t;
}
return s;
}
void main()
{
float y;
int n;
printf("输入n的值:\n");
scanf("%d",&n);
y=fun(n);
printf("y=%f\n",y);
}
7、定义了7×7的二维数组,并在主函数中自动赋值。编写函数 fun(int a[][7]),该函数的功能是:使数组左下半三角元素中的值所有置成0。
#include<stdio.h>
int fun(int a[][7])
{
int i,j;
for(i=0;i<7;i++)
for(j=0;j<7;j++)
{
if(i>j)
a[i][j]=0;
}
}
void main()
{
int a[7][7],i,j;
for(i=0;i<7;i++)
{
for(j=0;j<7;j++)
{
a[i][j]=i+j+1;
printf("%3d",a[i][j]);
}
printf("\n");
}
fun(a);
printf("输出解决后的数组a:\n");
for(i=0;i<7;i++)
{
for(j=0;j<7;j++)
{
printf("%3d",a[i][j]);
}
printf("\n");
}
}
8、 编写一个函数void fun(int tt[5][6],int pp[6]),tt指向一个5行6列的二维函数组,求出二维函数组每列中最小元素,并依次放入pp所指定一维数组中。二维数组中的数已在主函数中初始化。
#include <stdio.h>
void fun(int tt[5][6],int pp[6])
{ int i,j,min;
for(j = 0;j < 6;j++)
{ min = tt[0][j];
for(i= 0;i < 5;i++)
{ if(tt[i][j] < min)
min = tt[i][j];
}
pp[j] = min;
}
}
void main()
{
int t[5][6]={{68,56,32,44,54,12},{14,56,24,47,88,58},{42,85,22,75,44,56},{45,12,3,5,78,45},{45,65,25,75,85,41}};
int p[6],i,j,k;
printf("The riginal data is:\n");
for(i = 0;i < 5;i++)
{ for(j = 0;j < 6;j++)
printf("%6d",t[i][j]);
printf("\n");
}
fun(t,p);
printf("\n二维函数组每列中最小元素为:\n");
for(k = 0;k < 6;k++)
printf("%4d",p[k]);
printf("\n");
}
9、求出4行5列的二维数组周边元素之和。
#include<stdio.h>
void main()
{
int a[4][5],i,j,sum=0,sum1=0,sum2=0;
printf("请输入4*5矩阵数据:");
for(i=0;i<4;i++)
for(j=0;j<5;j++)
scanf("%d",&a[i][j]);
{
for(i=0;i<4;i++)
sum1=sum1+a[i][0]+a[i][4];
}
{
for(j=0;j<5;j++)
sum2=sum2+a[0][j]+a[3][j];
}
sum=sum1+sum2-a[0][0]-a[0][4]-a[3][0]-a[3][4];
printf("矩阵周边元素之和为:%d\n",sum);
}
10、 编写程序,把字符串中的内容逆置(不准使用多个字符数组)。
#include<stdio.h>
void main()
{
char a[80];
char t;
int i,n;
printf("输入一行字符串:\n");
gets(a);
n=strlen(a);
for(i=0;i<=n/2;i++)
{
t=a[i];
a[i]=a[n-i-1];
a[n-i-1]=t;
}
printf("字符串中的内容逆置为:\n");
puts(a);
}
11、 编写程序,从字符串中删除指定的字符,同一字母的大、小写按不同字符解决。并把删除好的字符以字符串的形式输出(不准使用多个字符数组)。
#include <stdio.h>
#include <string.h>
void main()
{
char ch,str[100];
int i,j=0;
printf("输入字符串:\n");
gets(str); \\无上限读取字符
printf("输入要删除的字符:");
ch=getchar();
for(i=0;i<strlen(str);i++)
if(str[i]!=ch)
str[j++]=str[i];
str[j]='\0';
printf("\n字符串str为:%s\n",str);
}
#include<stdio.h>
#include<string.h>
void main()
{
char a[80];
char ch;
int i,j;
int n;
printf("输入一串字符字符:\n");
gets(a);
printf("输入要删除的字符:");
ch=getchar();
i=0;
while(a[i]!='\0')
{
while(a[i]!='\0'&&a[i]!=ch)
i++;
n=strlen(a);
for(j=i;j<n-1;j++)
a[j]=a[j+1];
a[j]='\0';
}
printf("删除后的字符串:");
puts(a);
}
12、 编写程序,对长度为7个字符的字符串,除首尾字符外,将其余5个字符按ascii码降序排列。
#include <stdio.h>
void main()
{
char c[8];
char i,j,temp;
printf("长度为7个字符的c字符串:");
gets(c);
for (i=1;i<=5;i++)
{
for (j=i+1;j<=5;j++)
{
if (c[i]<c[j])
{
temp=c[i];
c[i]=c[j];
c[j]=temp;
}
}
}
printf("首尾字符外,将其余5个字符按ascii码降序排列为:%s\n",c);
}
13、 编写函数fun,它的功能是:比较两个字符串的长度,(不得调用c语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字符串。
#include <stdio.h>
#include <string.h>
char *fun(char *a,char *b)
{
int i,j;
for(i=0;*(a+i);i++);
for(j=0;*(b+j);j++);
if(i>=j)
return a;
else
return b;
}
void main()
{
char a[100],b[100],*c;
printf("输入a字符串: ");
gets(a);
printf("输入b字符串 :");
gets(b);
c=fun(a,b);
printf("输出较长的c字符串:");
puts(c);
}
14、给一个不多于5位的正整数,规定求出它是几位数,打印出每一位数字,并按逆序打印出各位数字。
#include<stdio.h>
void main()
{
long int num;
int a,b,c,d,f,place;
printf("输入num的数值:");
scanf("%d",&num);
if(num>9999)
place=5;
else
if(num>999)
place=4;
else
if(num>99)
place=3;
else
if(num>9)
place=2;
else
place=1;
printf("place=%d\n",place);
f=num/10000;
d=num/1000%10;
c=num/100%10;
b=num/10%10;
a=num%10;
switch(place)
{
case 5: printf("%d,%d,%d,%d,%d",f,d,c,b,a);
printf("\n反序数为:");
printf("%d,%d,%d,%d,%d\n",a,b,c,d,f); break;
case 4: printf("%d,%d,%d,%d",d,c,b,a);
printf("\n反序数为:");
printf("%d,%d,%d,%d\n",a,b,c,d); break;
case 3: printf("%d,%d,%d",c,b,a);
printf("\n反序数为:");
printf("%d,%d,%d\n",a,b,c); break;
case 2: printf("%d,%d",b,a);
printf("\n反序数为:");
printf("%d,%d\n",a,b); break;
case 1: printf("%d",a);
printf("\n反序数为:");
printf("%d\n",a); break;
}
}
15、 编写一个函数fun,它的功能是:求出一个6×8的整型二维数组中最大元素的值,并将此值返回调用函数。 数组在主函数中初始化,并最终输出结果。
#include<stdio.h>
int fun(int a[6][8])
{
int i,j,max=a[0][0];
for(i=0;i<6;i++)
for(j=0;j<8;j++)
if(max<a[i][j])
max=a[i][j];
return max;
}
void main()
{
int arr[6][8]={{1,8,7,4,6,1,2,3},{65,75,12,45,62,18,65,24},{32,1,5,4,6,7,8,9},{5,5,5,9,9,9,8,8,},{9,5,2,4,7,81,2,5},{3,2,1,4,5,6,9,8}};
int i,j,max;
printf("array a:\n");
for(i=0;i<6;i++)
{
for(j=0;j<8;j++)
{
printf("%4d",arr[i][j]);
}
printf("\n");
}
max=fun(arr);
printf("max=%d\n",max);
}
16、将字符数组s中的字符串,除了下标为偶数、同时ascii值也为偶数的字符外,其余的全都删除;串中剩余字符所形成的一个新串放在新的字符数组t中。
#include <stdio.h>
#include <string.h>
void main()
{
char s[100], t[100];
int i,j=0,n;
printf("\n输入字符串 S:");
gets(s);//scanf("%s", s);
n=strlen(s);
for(i=0;i<n;i++)
if(i%2==0&&s[i]%2==0)
{
t[j]=s[i];
j++;
}
t[j]='\0';
printf("\nThe result is : %s\n", t);
}
#include <stdio.h>
#include <string.h>
void fun(char *s,char t[])
{
int i,j=0,n;
n=strlen(s);
for(i=0;i<n;i++)
if(i%2==0&&s[i]%2==0)
{
t[j]=s[i];
j++;
}
t[j]='\0';
}
void main()
{
char s[100], t[100];
printf("\nPlease enter string S:");
gets(s);//scanf("%s", s);
fun(s, t);
printf("\nThe result is : %s\n", t);
}
17、 假定输入的字符串中只包含字母和*号。则使字符串中的*号不得多于3个;若多于3个,则删除多于的*号;若少于或等于3个,则什么也不做。
#include<stdio.h>
#include<string.h>
void main()
{
char str[50],c[50],b;
int i,j,n,a[50]={0},k,l;
gets(str);
n=strlen(str);
for(l=0,j=0,i=0;i<n;i++)
{
if(str[i]=='*')
{
l++;
if(l<=3)
{
a[j]=i;
j++;
}
}
else
{
a[j]=i;
j++;
}
}
for(i=0;i<j;i++)
{
k=a[i];
b=str[k];
str[i]=b;
}
for(i=j;i<n;i++)
str[i]='\0';
puts(str);
}
18、编程计算1!+2!+3!+……n!的值,其中,n值由键盘输入。
#include<stdio.h>
void main()
{
int n;
int i=1,t=1,sum=0;
printf("输入n的数值:");
scanf("%d",&n);
do
{
t=t*i;
sum=sum+t;
i++;
}
while(i<=n);
printf("sum=%d\n",sum);
}
19、 编写程序,删除字符串中的所有空格。
#include <stdio.h>
#include <string.h>
void main()
{
char str[100];
int i,j=0;
printf("输入字符串:\n");
gets(str);
for(i=0;i<strlen(str);i++)
if(str[i]!=' ') str[j++]=str[i];
str[j]='\0';
printf("\n新字符串str为:%s\n",str);
}
20、 求出字符数组ss中存储的字符串中指定字符的个数。
#include<stdio.h>
void main()
{
int fun(char a[],char ch);
char a[100],ch;
printf("\nPlease enter a string:");
gets(a);
printf("\nPlease enter a char:");
ch=getchar();
printf("The number is:%d\n",fun(a,ch));
}
int fun(char a[],char ch)
{
int i,j=0;
for(i=0;a[i]!='\0';i++)
if(a[i]==ch)
j++;
return j;
}
#include<stdio.h>
void main()
{
char a[100],ch;
int i,j=0;
printf("输入字符串:");
gets(a);
printf("\n");
printf("输入要查找的字符:");
ch=getchar();
for(i=0;a[i]!='\0';i++)
if(a[i]==ch)
j++;
printf("\n");
printf("字符串a中指定字符的个数:%d\n",j);
}
21、输入一行字符,分别记录出其中的大小写字母、空格、数字和其他字符的个数。
#include<stdio.h>
void main()
{
int i=0,j=0,k=0,l=0;
char c;
printf("输入一行字符:\n");
while((c=getchar())!='\n')
{
if((c>='A'&&c<='Z')||(c>='a'&&c<='z'))
i++;
else
if(c>='0'&&c<='9')
j++;
else
if(c==' ')
k++;
else
l++;
}
printf("大小写字母数:i=%3d\n数字数:j=%3d\n空格数:k=%3d\n其他符号数:l=%3d\n",i,j,k,l); }
22、 将5行6列的二维数组中的数据,按列的顺序依次放到一个一维数组中。
#include <stdio.h>
void main()
{
int a[5][6]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,
1,2,3,4,5,6,7,8,9,10};
int b[30];
int i,j,k=0;
for (j=0;j<6;j++)
{
for(i=0;i<5;i++)
{
b[k++]=a[i][j];
}
}
printf("二维数组:\n");
for (i = 0; i < 5; i++)
{
for(j=0;j<6;j++)
{
printf("%3d",a[i][j]);
}
printf("\n");
}
printf("\n");
printf("一维数组:\n");
for (i= 0;i<k;i++)
{
printf(" %3d",b[i]);
}
printf("\n");
}
#include <stdio.h>
void fun( int (*s)[4], int *b)
{
int i,j,k=0;
for(j=0;j<4;j++)
for(i=0;i<3;i++)
{
b[k]=*(*(s+i)+j);
k++;
}
b[k]= '\0';
}
main()
{
int a[30],w[3][4]={{1,2,3,4},{4,5,6,7},{6,7,8,9}};
int i,j;
printf("输出数组w:\n");
for(i=0; i<3; i++)
{
for(j=0;j<4; j++)
printf("%3d",w[i][j]);
printf("\n");
}
fun(w,a);
printf("按列的顺序依次放到一个一维数组b:\n");
for(i=0;i<12;i++)
printf("%3d",a[i]);
printf("\n\n");
}
23、求两个2×3和3×2的矩阵之积,并把结果显示出来。
#include<stdio.h>
void main()
{
int a[2][3],b[3][2],c[2][2]={0},i,j,x;
printf("输入一个2行3列的矩阵a:\n");
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",&a[i][j]);
printf("%5d",a[i][j]);
}
printf("\n");
}
printf("输入一个3行2列的矩阵b:\n");
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
{
scanf("%d",&b[i][j]);
printf("%5d",b[i][j]);
}
printf("\n");
}
printf("a*b=:\n");
for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
{
for(x=0;x<3;x++)
c[i][j]+=a[i][x]*b[x][j];
printf("%5d",c[i][j]);
}
printf("\n");
}
}
24、 定义了一个6×6的二维数组,并进行初始化。将数组右上半三角元素中的值乘以10。
#include<stdio.h>
void fun(int a[][6]);
void main()
{
int i,j;
int a[6][6];
printf("array a:\n");
for(i=0;i<6;i++)
{
for(j=0;j<6;j++)
{
a[i][j]=i+j+1;
printf("%3d",a[i][j]);
}printf("\n");
}
fun(a);
printf("通过解决后的数组元素array a:\n");
for(i=0;i<6;i++)
{
for(j=0;j<6;j++)
{
printf("%5d",a[i][j]);
}
printf("\n");
}
}
void fun(int a[][6])
{
int i,j;
for(i=0;i<6;i++)
for(j=0;j<6;j++)
{
if(i<j)
a[i][j]=10*a[i][j];
}
}
#include<stdio.h>
void main()
{
int i,j;
int a[6][6];
printf("array a:\n");
for(i=0;i<6;i++)
{
for(j=0;j<6;j++)
{
a[i][j]=i+j+1;
printf("%3d",a[i][j]);
}
printf("\n");
}
printf("通过解决后的数组元素array a:\n");
for(i=0;i<6;i++)
{
for(j=0;j<6;j++)
{
if(i<j)
a[i][j]=10*a[i][j];
printf("%4d",a[i][j]);
}
printf("\n");
}
}
25、编写程序,实现矩阵(5行6列)的转置(即行列互换)。
#include<stdio.h>
void main()
{
int i,j;
int a[5][6]={{4,5,7,8,1,6},{8,4,6,5,1,5},{7,8,9,4,5,6},{1,2,3,4,5,6},{1,2,3,6,5,2}};
int b[6][5];
printf("array a:\n");
for(i=0;i<5;i++)
{
for(j=0;j<6;j++)
{
printf("%3d",a[i][j]);
b[j][i]=a[i][j];
}
printf("\n");
}
展开阅读全文