C语言 DLUT 作业六

C语言 DLUT 作业六

这次感觉有点难

1、鞍点

#include<stdio.h>
#define row 2
#define line 3
int main()
{
	int i,j,a[row][line],m=0,n=0,max=0,min=0,temp=0,k;
	printf("输入二维数组:\n");
	for(i=0;i<row;i++)
	{  for(j=0;j<line;j++)
		scanf("%d",&a[i][j]);
	 } 
	 /*找出各行最大值*/
	for(i=0;i<row;i++)
	{  for(j=0;j<line;j++)
	   if(a[i][m]<a[i][j])
	   {
	   	 m=j;
		 a[i][m]=a[i][j];	
	   }
	   max=a[i][m];
	   min=a[0][m];
	   for(k=0;k<row;k++)
	   if(a[k][m]<min)
	   {
	   	  min=a[k][m];
		  n=k;
	   }
	   if(max==min)
	   {	
	    temp=1;
		printf("鞍点为:a[%d][%d]=%d",n,m,a[n][m]);  
		break;
	   } 
	}
	if(temp==0)
	printf("该二维数组不存在鞍点!");
	 return 0;
}

2、成绩

/* 一个学习小组有3个人,每个人有5门课的考试成绩,输出每门课的平均成绩。
若每个课程有不同的学分,计算每人的加权平均分与平均学分绩点GPA成绩。
平均学分绩点是将分数换算为绩点,之后按学分加权平均分方法计算。90以上算4分,80到90算3分,70到80算2分,60到70算1分,60以下0分。平均学分绩点一般3.7分以上为优秀,3.5分左右为良好,2.5分左右为中等,1分为及格
平均学分绩点=∑(课程学分×成绩绩点)/∑课程学分=各门课程学分绩点和/各门课程学分数和*/
#include<stdio.h>
#define s1  
int main()
{
	char c[]={"甲\t乙\t丙\t各科平均成绩"};
	int i,j,k=0,a[5][3],b[5]={1,2,3,4,5};
	float score[5][4],avergrade[3],sum=0,total=0;
	printf("输入成绩:\n");
	for(i=0;i<5;i++)
	  for(j=0;j<3;j++)
	  scanf("%f",&score[i][j]);
	puts(c);
	for(i=0;i<5;i++)
	{ 
	   sum=0; 
	   for(j=0;j<3;j++)
	   {
	   	
	   	sum+=score[i][j];
	    printf("%.1f\t",score[i][j]);
	   }
	    printf("%.1f\n",sum/3.0);
	}   	
	for(i=0;i<5;i++)
		{ for(j=0;j<3;j++)
		  {
		   	 if(score[i][j]>90&&score[i][j]<=100)
		   	 a[i][j]=4;
		   	 else if(score[i][j]>80&&score[i][j]<=90)
		   	 a[i][j]=3;
		   	 else if(score[i][j]>70&&score[i][j]<=80)
		   	 a[i][j]=2;
		   	 else if(score[i][j]>60&&score[i][j]<=70)
		   	 a[i][j]=1;
		   	 else
		   	 a[i][j]=0;
		  } 
	    }
	for(i=0;i<3;i++)
	{
		total=0;
		k=0;
		for(j=0;j<5;j++)   
	  {
	  	total+=a[j][i]*b[k++];
	  } 
	  printf("%.1f\t",total/(1+2+3+4+5));	
	}
	  
}

3、大数求和

//大数求和问题。
#include<stdio.h>
#include<string.h>
int main()
{
	char ch1[1000]={'0'},ch2[1000]={'0'},c;
	int i,j,n,in1[1000]={0},in2[1000]={0},max,len1,len2,result[1000]={0},m=0;
	printf("输入两个大数:\n");
	gets(ch1);
//	c=getchar();
	gets(ch2);
	len1=strlen(ch1);
	len2=strlen(ch2);
	max=len1>len2?len1:len2;
	for(i=0,j=len1-1;j>=0;i++,j--)
	{
		in1[i]=ch1[j]-'0';
	}
	for(i=0,j=len2-1;j>=0;i++,j--)
	{
		in2[i]=ch2[j]-'0';
	}
	printf("求和结果为:\n");
	for(i=0;i<max;i++)
	{
		result[i]=in1[i]+in2[i];
		if(result[i]>9)
		{
			result[i+1]++;
			result[i]-=10;
		}
	}
	if(result[max]>0)
	max++;
	for(i=max-1;i>=0;i--)
	{
		printf("%d",result[i]);
	}
	return 0;
}

4、二进制转换

/*输入一个不超过40亿的正整数,将其转换为二进制字符串输出*/
#include<stdio.h>
int main()
{
	long int n;
	int a[100],i=0,j=0;
	printf("输入一个不超过四亿的正整数\n");
	scanf("%d",&n);
	while(n!=0)
	{
		a[i++]=n%2;
		n=n/2;
		j++;
	}
	printf("转化为二进制数为:\n");
	for(i=j-1;i>=0;i--)
	{
		printf("%d",a[i]);
	}
	return 0;
}

5、二维数组奇偶数

#include<stdio.h>
#include<stdlib.h>
#include<time.h> 
int main()
{
	int i,j[40],p[20][2],k=0,m=0,n=0,q=0,x=0;
	srand(time(NULL));
	printf("原随机数组:\n");
	for(i=0;i<40;i++)
	{
		j[i]=-1;
//		printf("%d",j[i]);
	}
	for(i=0;i<20;i++)
	{   for(k=0;k<2;k++)
		{
		  p[i][k]=-1;	
		}
	}	
	for(i=0;i<=19;i++)
	{
		j[i]=rand()%10+0;
		printf("%d\t",j[i]);
	}
	k=0;
	q=0;
	for(i=0;i<40;i++)
	{
		if(j[i]%2==0&&j[i]!=-1)
		{
			p[k++][0]=j[i];
			n+=1;	
		}
		if(j[i]%2==1&&j[i]!=-1)
		{
			p[q++][1]=j[i];
		//	printf("\n%d",p[q][1]);
			m+=1;
		}
	}
/*	for(i=0;i<20;i++)
	{     
	    for(k=0;k<2;k++)
		{
		printf("%d\t",p[i][k]);
		}
		printf("\n");
	}*/
	printf("\n偶数:\t奇数:\n");
	for(i=0;i<20;i++)
	{
		/*for(x=0;x<2;x++)
		{
			if(p[i][x]!=-1)
			{printf("%d\t",p[i][x]);}
			
		}*/
		if((p[i][0]!=-1)&&(p[i][1]!=-1))
		{printf("%d\t%d",p[i][0],p[i][1]);} 
		else if((p[i][0]==-1)&&(p[i][1]!=-1))
		{printf(" \t%d",p[i][1]);}
		else if((p[i][0]!=-1)&&(p[i][1]==-1))  
		{printf("%d\t ",p[i][0]);}
		else
		{printf(" \t ");}
		printf("\n");
	}
	printf("\n偶数总数为%d\n奇数总数为%d",n,m);
	return 0;
}

6、字符排序

#include<stdio.h>
#include<string.h>
int main()
{
	int i,j,k,n;
	char ch[1000],temp;
	gets(ch);
	n=strlen(ch);
	for(i=0;i<n-1;i++)
	{
		k=i;
		for(j=i+1;j<n;j++)
		{
			k=i;
			if(ch[k]>ch[j])
			{
				k=j;
			}
			temp=ch[k];
			ch[k]=ch[i];
			ch[i]=temp;
		}
	}
	for(i=0;i<n;i++)
	{
		printf("%c",ch[i]);
	}
	return 0;
 } 

7、杨辉三角前十行

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

8、矩阵加法乘法和转置

#include<stdio.h>
#define row 3
#define line 3
#define p 3
int main()
{
	int a[row][line],b[row][line],c[p][row],i,j,sum=0,k;
/*	printf("输入初始二维数组:\n");
	for(i=0;i<row;i++)
	  for(j=0;j<line;j++)
	  {
		scanf("%d",&a[i][j]);	
	  }
	printf("转置后数组为:\n");
	for(i=0;i<line;i++)
	  {
		for(j=0;j<row;j++)
		{ 
		    a[i][j]=a[j][i];
		  	printf("%d\t",a[i][j]);
		}  
		printf("\n");
	  }*/
/*	printf("输入两个同阶二维数组:\n");
	for(i=0;i<row;i++)
	  for(j=0;j<line;j++)
	  {
	    scanf("%d",&a[i][j]);	
	  }
	for(i=0;i<row;i++)
	  for(j=0;j<line;j++)
	  {
		scanf("%d",&b[i][j]);	
	  }
	printf("进行加法后得:\n");
	for(i=0;i<row;i++)
	  {
		for(j=0;j<line;j++)  
		{
		  printf("%d\t",a[i][j]+b[i][j]);
		}
		printf("\n");
	  }*/
	 /* 	printf("输入行等于另一个列的两个二维数组:\n");
	  	for(i=0;i<row;i++)
		  for(j=0;j<p;j++)
		  {
		    scanf("%d",&a[i][j]);	
		  }
		for(i=0;i<p;i++)
		  for(j=0;j<line;j++)
		  {
		    scanf("%d",&c[i][j]);	
		  }
		for(i=0;i<row;i++)
		  {
		  	sum=0;
			  for(j=0;j<p;j++)
			  {
			    sum+=a[i][j]*c[j][i];	
			  }
			  for(k=0;k<line;k++)
			  b[i][k]=sum;
		  }
		  for(i=0;i<row;i++)
		    { 
			  for(k=0;k<line;k++)
			  {
			  	printf("%d\t",b[i][k]);
			  }
			  printf("\n");
			}*/
	  return 0;
}

9、英文文章

/*读入一段英文文章,统计其中的英文字符数以及单词数并输出。
单词和单词的间隔是由以下标点符号形成的:空格、tab、回车换行、逗号、句号、问号、括号、双引号和冒号。
单引号(表示缩写的‘)和连字号(-)视做单词的一部分,所以“he’s”是一个单词,
输入数据中不会出现两个连续的连字号。 */
#include<stdio.h>
int main()
{
   char ch[10000],c,n;
   int i=0,j=0,num=0,word=0;
   gets(ch);
   for(i=0;(c=ch[i])!='\0';i++)
   {
   	/*	if(ch[i]>=32 && ch[i]<=47 && ch[i+1]>=32 && ch[i+1]<=47)
		{
			num--;
		}
		if(ch[i]>=58 && ch[i]<=64 && ch[i+1]>=58 && ch[i+1]<=64)
		{
			num--;
		}*/
   	 if(c==' '||c=='	'||c=='\n'||c==','||c=='.'||c=='?'||c=='('||c=='\"'||c==':')
   	 {word=0;
/*	  n=ch[i+1];
   	  if(n==' '||n=='	'||n=='\n'||n==','||n=='.'||n=='?'||n=='('||n=='\"'||n==':')
   	 {word=1;}*/
	 }
   	 
	 if(word==0)
	 {word=1;
	  num+=1;}
	 if((c>='a'&&c<='z')||(c>='A'&&c<='Z')||c=='\''||c=='-')
	 {word=1;
	 j++;}
	 if(c==' '||c=='\n'||c==','||c=='.'||c=='?'||c=='('||c=='\"'||c==':'||c=='\''||c=='-')
	 {j++;}
	 
   }
   printf("有%d个单词\n有%d个英文字符",num,j);	 
   return 0;
} 

10、邮箱

/*注册大工邮箱
有效的邮箱有户名名ID不少于6个并不多于12个字符,必须由大写字母、小写字母与数字组合而成,并且不能和已有ID冲突。
输入1个字符串,检测是否是有效ID,如果有效则存储起来,若无效则输出提示并继续尝试注册。例如, 
输入Linlin247, 输出“注册成功”
输入tian9,linlin, 123455, 输出“无效用户名”
输入 Linlin247, 输出“该用户名已注册”
请完成3个有效ID的注册,并输出所有有效的完整邮箱,例如
Linlin247@dlut.edu.cn
linlinTian12@dlut.edu.cn
ssDUT123@dlut.edu.cn*/
#include<stdio.h>
#include<string.h>
int main()
{
	char c[12],e[12],f[12];
	int i,j,n,flag=0,num=0,a=0,b=0,d=0,p,q,x,y;
	do
	{
		printf("请输入用户名ID:\n");
		if(num==0)
		{
			gets(c);
			n=strlen(c);
		}
		if(num==1)
		{
			gets(e);
			n=strlen(e);
			p=strcmp(c,e);
		}
		if(num==2)
		{
			gets(f);
			n=strlen(f);
			q=strcmp(c,f);
			x=strcmp(e,f);
		}
		if(n<6||n>12)
		{
			printf("无效用户名\n");
			flag=1;
		}
		for(i=0;i<n;i++)
		{
			if(c[i]<'0'||(c[i]>'9'&&c[i]<'A')||(c[i]>'Z'&&c[i]<'a')||c[i]>'z')
			{
		     printf("无效用户名\n");
			 flag=1;
			}
		}
		for(i=0;i<n;i++)
		{
			if(c[i]>='0'&&c[i]<='9')
			a++;
			if(c[i]>='a'&&c[i]<='z')
			b++;
			if(c[i]>='A'&&c[i]<='Z')
			d++;
		}
		if(a==0||b==0||d==0)
		{
			printf("无效用户名\n");
			flag=1;
		}
		if(num==1&&p==0)
		{
		    printf("该用户名已注册\n");
			flag=1;
		}
		if((num==2)&&(q==0||x==0))
		{
			printf("该用户名已注册\n");
			flag=1;
		}
		if(flag==0)
			{
				for(i=0;i<n;i++)
				{printf("%c",c[i]);}
				printf("@dlut.edu.cn\n");
				printf("注册成功\n");
				num++;
			}	
	}while(num<3);
return 0;	
}

11、邮箱修正

/*注册大工邮箱
有效的邮箱有户名名ID不少于6个并不多于12个字符,必须由大写字母、小写字母与数字组合而成,并且不能和已有ID冲突。
输入1个字符串,检测是否是有效ID,如果有效则存储起来,若无效则输出提示并继续尝试注册。例如, 
输入Linlin247, 输出“注册成功”
输入tian9,linlin, 123455, 输出“无效用户名”
输入 Linlin247, 输出“该用户名已注册”
请完成3个有效ID的注册,并输出所有有效的完整邮箱,例如
Linlin247@dlut.edu.cn
linlinTian12@dlut.edu.cn
ssDUT123@dlut.edu.cn*/
#include<stdio.h>
#include<string.h>
int main()
{
    char c[12], e[12], f[12];
    int i, n;
    int flag, a, b, d, p, q, x;
    int num = 0;
    do {
      a = 0;
      b = 0;
      d = 0;
      flag = 0;
      printf("请输入用户名ID:\n");
      if (num == 0) {
        gets(c);
        n = strlen(c);
        // 判断是不是包含三类元素
        for (i = 0; i < n; i++) {
          if (c[i] >= '0' && c[i] <= '9')
		  a++;
          if (c[i] >= 'a' && c[i] <= 'z') 
		  b++;
          if (c[i] >= 'A' && c[i] <= 'Z') 
		  d++;
        }
        // 判断是不是合法字符
        for (i = 0; i < n; i++) 
		{
          if (c[i] < '0' || (c[i] > '9' && c[i] < 'A') ||(c[i] > 'Z' && c[i] < 'a') || c[i] > 'z')
          {
            flag = 1;
          }
        }
      } else if (num == 1) {
        gets(e);
        n = strlen(e);
        p = strcmp(c, e);
        // 判断是不是包含三类元素
        for (i = 0; i < n; i++) {
          if (e[i] >= '0' && e[i] <= '9') a++;
          if (e[i] >= 'a' && e[i] <= 'z') b++;
          if (e[i] >= 'A' && e[i] <= 'Z') d++;
        }
        // 判断是不是合法字符
        for (i = 0; i < n; i++) {
          if (e[i] < '0' || (e[i] > '9' && e[i] < 'A') ||
              (e[i] > 'Z' && e[i] < 'a') || e[i] > 'z') {
            flag = 1;
          }
        }
      } else if (num == 2) {
        gets(f);
        n = strlen(f);
        q = strcmp(c, f);
        x = strcmp(e, f);
        // 判断是不是包含三类元素
        for (i = 0; i < n; i++) {
          if (f[i] >= '0' && f[i] <= '9') a++;
          if (f[i] >= 'a' && f[i] <= 'z') b++;
          if (f[i] >= 'A' && f[i] <= 'Z') d++;
        }
        // 判断是不是合法字符
        for (i = 0; i < n; i++) {
          if (f[i] < '0' || (f[i] > '9' && f[i] < 'A') ||
              (f[i] > 'Z' && f[i] < 'a') || f[i] > 'z') {
            flag = 1;
          }
        }
      }
      if (n < 6 || n > 12) {  // 字符长度不对
        printf("无效用户名\n");
        continue;
      }
      if (a == 0 || b == 0 || d == 0) {  // 没有至少包含三类字符
        printf("无效用户名\n");
        continue;
      }
      if (flag == 1) {  // 字符不合法
        printf("无效用户名\n");
        continue;
      }
      if (num == 1 && p == 0) {  // 被注册
        printf("该用户名已注册\n");
        continue;
      }
      if ((num == 2) && (q == 0 || x == 0)) {  // 被注册
        printf("该用户名已注册\n");
        continue;
      }
      // 注册成功//
      for (i = 0; i < n; i++) {
        printf("%c", c[i]);
      }
      printf("@dlut.edu.cn\n");
      printf("注册成功\n");
      num++;
    } while (num < 3);
    return 0;
  }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

残夜.寒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值