C语言程序设计习题

文章目录

1.用筛选法求100之内的素数

#include <stdio.h>
#include <math.h>
int main()
{
int a[101],i,j,n;
for(i=1; i<101;i++)
a[i] = i;
for(i=2;i<=100;i++)
{
for(j=2;j<=sqrt(i);j++)
	{if(i%j == 0)
	a[i] = 0;
	}
}
for(i=2,n=0;i<=100;i++)
{
if(a[i]!=0)
{
printf("%5d",a[i]);
n++;
}
if(n%10==0)
printf("\n");
}
return 0;
}

2.用选择法对10个整数进行排序。

#include <stdio.h>
int main()
{
int i,j,min,temp,a[11];
for(i=1;i<=10;i++)
{
	printf("a[%d]=",i);
	scanf("%d",&a[i]);
	printf("\n");
}	
for(i = 1;i<10;i++)
	{min = i;
		for(j=i+1;j<=10;j++)
			if(a[min] > a[j])
				min = j;
				temp = a[i];
				a[i] = a[min];
				a[min] = temp;
	}
	for(i=1;i<=10;i++)
	printf("%5d",a[i]);
return 0;
}

3.求一个3*3的整型矩阵对角线元素之和

#include <stdio.h>
int main()
{
int a[3][3],i,j,sum = 0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
	printf("a[%d][%d]=",i+1,j+1);
	scanf("%d",&a[i][j]);
	printf("\n");
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf("%5d",a[i][j]);
if(i == j)
sum+=a[i][j];
}
printf("\n");
}
printf("Sum = %d\n",sum);
return 0;
}

4.有一个已排好的数组,要求输入·一个数后,按原来的排序规则将它插入数组中。

#include <stdio.h>
int main()
{
int a[11] = {1,2,4,6,8,11,45,67,98,100,102};
int x,i,t;
printf("请输入一个数字:\n");
scanf("%d",&x);	
if(a[0] < a[9])
{
	for(i=0;x>a[i];i++);
	t = i;
	for(i = 11;i>t;i--)
	a[i]=a[i-1];
	a[t]=x;
}
else
{
	for(i=0;x<a[i];i++);
	t = i;
	for(i = 11;i>t;i--)
	a[i]=a[i-1];
	a[i]=x;
}
for(i=0;i<11;i++)
printf("%5d",a[i]);
return 0;
}

5.将一个数组中的值按逆序重新存放。例如,原来顺序为8,6,5,4,1,要求改为1,4,5,6,8.

#include <stdio.h>
#define N 5
int main()
{
int a[N],i,t;
for(i=0;i<N;i++)
{
printf("a[%d]=",i);
scanf("%d",&a[i]);
printf("\n");
}
for(i=0;i<N/2;i++)
{
t = a[i];
a[i]=a[N-i-1];
a[N-i-1] = t;
}
for(i=0;i<N;i++)
printf("%5d",a[i]);
return 0;
}

6.输出以下的杨辉三角(要求输出10行)

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1

#include <stdio.h>
#define N 10
int main(){
	int i,j,a[N][N] ={0};
	for(i=0;i<N;i++)
	{
		a[i][0]=1;
		a[i][i]=1;
	}
	for(i= 2;i<N;i++)
	for(j = 1;j<i;j++)
		a[i][j]=a[i-1][j]+a[i-1][j-1];
	for(i=0;i<N;i++)
	{
		for(j=0;j<=i;j++)
		printf("%5d",a[i][j]);
		printf("\n");
	}
return 0;
}

7.输出魔方阵。所谓魔方阵是指这样的方阵,它的每一行,每一列和对角线之和均相等。求输出1-n的平方构成的魔方阵。

#include <stdio.h>
#define N 5
int main(){
	int a[N][N] ={0},i,j,k,x,y,t;
	i=0;
	j = N/2;
	t = N-1	;
	for(k=1;k<=N*N;k++)
	{
		a[i][j] = k;
		x=i;
		y=j;
		if(i==0)
		i=t;
		else
		i = i -1;
		if(j!=t)
		j=j+1;
		else
		j=0;
		if(a[i][j]!=0)
		{
			i=x+1;
			j=y;
		}
	}
		printf("生成的魔方阵为:\n");
		for(i=0;i<N;i++)
		{
			for(j=0;j<N;j++)
			printf("%3d",a[i][j]);
			printf("\n");
		}
return 0;
} 

8.找出一个二维数组的鞍点,即该位置上的元素在该行最大,在该列上最小,也可能没有鞍点。

#include <stdio.h>
#define N 4
#define M 5
int main()
{
	int i,j,k,max,maxi,maxj,a[N][M],flag;
	printf("please input matrix:\n");
	for(i=0;i<N;i++)
	for(j=0;j<M;j++)
	scanf("%d",&a[i][j]);
	for(i=0;i<N;i++)
	{
		max=a[i][0];
		maxj = 0;
		for(j=0;j<M;j++)
			if(max <a[i][j])
			{
				max=a[i][j];
				maxj = j;
			}
			flag =1;
			for(k=0;k<N;k++)
				if(max > a[k][maxj])
				flag = 0;
			if(flag)
			{
				printf("a[%d][%d]=%d\n",i,maxj,max);
				break;
			}
		}
	if(!flag)
	printf("It is not exist!\n");
	return 0;
 } 

9.有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。

#include <stdio.h>
#define N 10
int main()
{
	int  a[N],mid,sign,local,top,bottom,i,flag = 1,number;
	char c;
	printf("please 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("please enter this data again!\n");
	}
	printf("\n");
	for(i=0;i<N;i++)
	printf("%5d",a[i]);
	printf("\n");
	while(flag)
	{
		printf("please input number to look for:");
		scanf("%d",&number);
		sign = 0;
		bottom = 0;
		top = N-1;
		if((number <a[0]) || (number >a[N-1]))
		local = -1;
		while((!sign) && (bottom <=
		 top))
		{
			mid = (bottom+top)/2;
			if(a[mid] == number)
			{
			local = mid;
			printf("Has found %d ,its position is %d\n",number,local+1);
			sign = 1;
			}
			else if(a[mid]<number)
			bottom = mid+1;
			else
			top = mid-1;
		}
		if(!sign || local == -1)
			printf("can't find %d\n",number);
		printf("continue or not(Y/N)?");
getchar();
		scanf("%c",&c);
		if(c=='N'||c=='n')
		flag =0;
	}
	return 0;
 } 

10.有一篇文章,共有三行文字,每行有80个字符。要求分别统计出其中英文大写字母,小写字母,数字,空格和其他字符的个数。

#include <stdio.h>
int main()
{
	char a[3][80];
	int i,j,upper,lower,space,digit,other;
	upper=lower=space=digit=other=0;
	for(i=0;i<3;i++)
	{
		printf("请输入第%d行字符\n",i+1);
		gets(a[i]);
	for(j=0;j<80&&a[i][j]!='\0';j++)
	{
		if(a[i][j]>='A'&&a[i][j]<='Z')
		upper++;
		if(a[i][j]>='a'&&a[i][j]<='z')
		lower++;
		if(a[i][j]>='0'&&a[i][j]<='9')
		digit++;
		if(a[i][j]==' ')
		space++;
		else
		other++;
	}
}
printf("upper:%d\n",upper);
printf("lower:%d\n",lower);
printf("digit:%d\n",digit);
printf("space:%d\n",space);
printf("other:%d\n",other);
	return 0;
 } 

11,输出以下图案

*****
 *****
  *****
   *****
    *****
#include <stdio.h>

int main()
{
	char a[5] = {'*','*','*','*','*'};
	int i,j,k;
	for(i=0;i<5;i++)
	{
		printf("\n");
		for(k=0;k<i;k++)
		printf(" ");
		for(j=0;j<5;j++)
		printf("%c",a[j]);
	}
	return 0;
 } 

12.有一行电文,已按下面规律翻译成密码:将第一个字母变成第26个字母,第i个字母变成第26-i+1个字母,非字母字符不变。要求编程序将密码翻译回原文,并输出密码和原文。

#include <stdio.h>
int main()
{
	char ch[80],tran[80];
	int j, n;
	printf("input cipher code:");
	gets(ch);
	printf("ncipher code :%s",ch);
	j=0;
	while(ch[j]!='\0')
	{
		if(ch[j]>='a'&&ch[j]<='z')
		tran[j]= 219-ch[j];
		else if(ch[j]>='A'&& ch[j]<='Z')
		tran[j]= 155-ch[j];
		else
		tran[j]=ch[j];
		j++;
	}
	printf("\n");
	n=j;
	printf("noriginal text:");
	for(j=0;j<n;j++)
	putchar(tran[j]);
	printf("\n");
	return 0;
}

13,编一程序,将两个字符串连接起来,不要用strcat函数。

#include <stdio.h>
int main()
{
	char s1[80],s2[40];
	int i=0,j=0;
	printf("please input s1:\n");
	gets(s1);
	printf("please input s2:\n");
	gets(s2);
	while(s1[i]!='\0')
	i++;
	while(s2[j]!='\0')
	s1[i++]=s2[j++];
	s1[i]='\0';
	printf("The new string is %s\n",s1);
	return 0;
}

14.编一程序,将两个字符串s1和s2比较,若s1>s2,输出一个正数;若s1=s2,输出0;若s1<s2,输出一个负数。不要用strcmp函数。

#include <stdio.h>
#include <stdio.h>
int main()
{
	char s1[80],s2[80];
	int i=0,resu;
	printf("please input s1:\n");
	gets(s1);
	printf("please input s2:\n");
	gets(s2);
	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("result:%d\n",resu);
	return 0;
}

15,编写一个程序,将字符串s2中全部字符复制到字符数组s1中。不用strcpy函数。复制时’\0’也要复制过去。’\0’后面的字符不复制。

#include <stdio.h>
int main()
{
	char s1[80],s2[80];
	int i;
	printf("please input s2:\n");
	gets(s2);
	for(i=0;s2[i]!='\0';i++)
	s1[i]=s2[i];
	s1[i] = '\0';
	i=0;
		printf("s1:%s\n",s1);
		printf("s2:%s\n",s2);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值