【C语言答案】第五次练习---数组

以下题目是由老师布置的《 谭浩强C程序设计(第四版)》的oj第四次练习题,共五道
使用软件是Devc++5.11。

希望大家抄了作业顺手点个赞,谢谢,爱宁

A. C语言_ex06_01

题目描述

输入:第一行为一个正整数n(1<=n<10)。后边是n行,为nXn个整数矩阵,整数间均以一个空格分隔。要求计算并输出该数组的每行每列之和。
输出格式如下所示,每个整数包含符号占五位,右对齐,两个数之间隔一个空格。行末无空格。测试用例保证所有整数可以用int型存储。

输入样例
3
1 2 3
-4 -5 -6
7 8 9

输出样例
1 2 3 6
-4 -5 -6 -15
7 8 9 24
4 5 6

#include<stdio.h>
int main()
{int n,a[10][10],hangsum[10],liesum[10],i,j;
scanf("%d",&n);
	for(i=0;i<n;i++)
	for(j=0;j<n;j++)
	scanf("%d",&a[i][j]);

	for(i=0;i<n;i++)
	{hangsum[i]=a[i][0];
		for(j=1;j<n;j++)
	hangsum[i]=hangsum[i]+a[i][j];
	a[i][n]=hangsum[i];
	}


	for(j=0;j<n;j++)
	{liesum[j]=a[0][j];
		for(i=1;i<n;i++)
	liesum[j]=liesum[j]+a[i][j];
	}
	
	
	for(i=0;i<n;i++)
	
	{for(j=0;j<n+1;j++)
	printf(" %d",a[i][j]);//投机:如果他不让最后有空格就把空格放前面,最前面有空格一般没关系。
	
	
	printf("\n");

	}	for(j=0;j<n;j++)
	printf(" %d",liesum[j]);
	
	return 0;
}

B. C语言_ex06_03

题目描述

输入:第一行为一个整数n(0<n<10),后边是n行,每行都是一个整数(大于0且小于100,且这n个数各不相同)和一个字符串(长度不超过20,且不包含空格)。最后一行是一个整数m,m为前边n个整数中的一个。
输出只有一行,为整数m后边跟着的那个字符串。

输入样例
2
1 Hello
2 World
2

输出样例
World

#include<stdio.h>
int main()
	{
		char s[100][21];
 	int i,n,k,a[100];
 	scanf("%d",&n);
 	for(i=0;i<n;i++)
 	  scanf("%d%s",&a[i],s[i]);
	 scanf("%d",&k);
	 for(i=0;i<n;i++)
  if(a[i]==k)printf("%s\n",s[i]);
	 return 0;
}

C. C语言_ex06_05

题目描述

X公司最近研究出了一种新的编码方式,这种编码是将一串大写字母转化为数字。下面是每个字母所代表的数字。
B, F, P, V 代表 1
C, G, J, K, Q, S, X, Z 代表 2。
D , T 代表 3
L 代表 4
M , N 代表 5
R 代表 6。
另外字母A, E, I, O, U, H, W,Y不代表任何数字。你需要将每个字母转化为所代表的数字,但注意,如果连续几个字母都代表同一个数字,那么你只需要转化成一个数字就可以。比如PF,P和F都代表1,所以你只需要输出一个1,而不是两个1。不代表数字的字母不用转化
输入格式
第一行为整数T(0<T<10)代表T行测试数据,后边是T行,每行为一个只含大写字母的字符串,串长不超过20。
输出格式
为T行,每行对应输入的T行测试数据,为该行测试数据的字符串转化后的数字编码,如果没有任何编码,则输出一个空行。

输入样例
3
KHAWN
PFISTER
BOBBY

输出样例
25
1236
11

# include<stdio.h>
int main()
{
 int n,i,j,b=0,a[10][21]={};//关键在数组后面这个中括号!!!! 
 char str[10][21];
 scanf("%d",&n);
 for(i=0;i<n;i++)
 {
  scanf("%s",str[i]);//读入第i行字符串 
  for(j=0;(str[i][j]!='\0');j++)
  {
   if(str[i][j]=='B'||str[i][j]=='V'||str[i][j]=='F'||str[i][j]=='P')
   b=1;
   else
   {
    if(str[i][j]=='C'||str[i][j]=='G'||str[i][j]=='J'||str[i][j]=='K'||str[i][j]=='Q'||str[i][j]=='S'||str[i][j]=='X'||str[i][j]=='Z')//C, G, J, K, Q, S, X, Z 代表 2。
    b=2;
    else
    {
     if(str[i][j]=='D'||str[i][j]=='T')
     b=3;
     else
     {
      if(str[i][j]=='L')
      b=4;
      else
      {
       if(str[i][j]=='M'||str[i][j]=='N')
       b=5;
       else
       {
        if(str[i][j]=='R')
        b=6;
        else
        {
         if(str[i][j]=='A'||str[i][j]=='E'||str[i][j]=='I'||str[i][j]=='O'||str[i][j]=='U'||str[i][j]=='H'||str[i][j]=='W'||str[i][j]=='Y')//A, E, I, O, U, H, W,Y
         b=0;
        }
       }
      }
     }
    }
   }
   a[i][j]=b;
  }
 }
 for(i=0;i<n;i++)
 {
  for(j=0;j<21;j++)
  {
   if(a[i][j]!=0&&a[i][j]!=a[i][j+1])
   printf("%d",a[i][j]);
  }
  printf("\n");
 }
 return 0;
}

D. C语言_ex06_06

题目描述

输入为一个二进制大整数(大整数大于0,不带符号,无前导0,至少1位数字,且不超过100位数字)。要求将该整数转换成十进制数,并输出。
建议:用字符数组存储大整数。

输入样例
1001001100101100000001011010010

输出样例
1234567890

#include <stdio.h>

int main( void )
{
    char bin[101];
    scanf( "%s", bin );

    unsigned long long dec[2] = { 0, 0 }; // base 10^18
    for( const char* p=bin; *p; ++p )
    {
        dec[1] = dec[0]*2/1000000000000000000 + dec[1]*2;
        dec[0] = dec[0]*2%1000000000000000000 + (*p-'0');
    }

    if( dec[1] != 0 )
        printf( "%llu%018llu\n", dec[1], dec[0] );
    else
        printf( "%llu\n", dec[0] );
}

E. 回文质数

题目描述

因为151既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以151是回文质数。请写一个程序来找出范围[a,b] (5≤a≤b≤100000)间的所有回文质数。
输入:只有一行,为两个整数,依次代表a,b 。
输出:每个回文质数输出一行。测试用例保证输入合法且输出至少包含一个回文质数。

输入样例
100 200

输出样例
101
131
151
181
191

#include<stdio.h>

#include<math.h>

bool c[10000000];

int main(){

    int k,j,a,b,i;

scanf("%d%d",&a,&b);

if (b>9999999) b=9999999;

for (i=2;i<=int (sqrt(b));i++)

   if (!c[i])

       for (j=i*i;j<=b;j=j+i)

           c[j]=1;

for (i=a;i<=b;i++){

k=i;j=0;

while (k){

   j=j*10+k%10;

   k=k/10;

   }

   if ((!c[i])&&(i==j))

       printf("%d\n",i);

    }

    return 0;

}

(日常拖更,宝贝们加油oj)

  • 16
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基于三维数组的四则运算练习器的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { // 定义题目数量和数字范围 const int NUM_OF_QUESTIONS = 5; const int NUM_RANGE = 10; // 随机数生成器种子 srand(time(NULL)); // 生成题目 int questions[NUM_OF_QUESTIONS][3]; char operators[NUM_OF_QUESTIONS]; for (int i = 0; i < NUM_OF_QUESTIONS; i++) { // 随机生成运算符 int operatorIndex = rand() % 4; switch (operatorIndex) { case 0: operators[i] = '+'; break; case 1: operators[i] = '-'; break; case 2: operators[i] = '*'; break; case 3: operators[i] = '/'; break; } // 随机生成数字 for (int j = 0; j < 2; j++) { questions[i][j] = rand() % NUM_RANGE; } // 根据运算符计算答案 switch (operators[i]) { case '+': questions[i][2] = questions[i][0] + questions[i][1]; break; case '-': questions[i][2] = questions[i][0] - questions[i][1]; break; case '*': questions[i][2] = questions[i][0] * questions[i][1]; break; case '/': questions[i][2] = questions[i][0] / questions[i][1]; break; } } // 输出题目 printf("请回答以下 %d 道数学题:\n", NUM_OF_QUESTIONS); for (int i = 0; i < NUM_OF_QUESTIONS; i++) { printf("%d %c %d = ?\n", questions[i][0], operators[i], questions[i][1]); } // 用户输入答案 int answers[NUM_OF_QUESTIONS]; for (int i = 0; i < NUM_OF_QUESTIONS; i++) { printf("请输入第 %d 题的答案:", i + 1); scanf("%d", &answers[i]); } // 检查答案并输出结果 int correctNum = 0; for (int i = 0; i < NUM_OF_QUESTIONS; i++) { if (answers[i] == questions[i][2]) { correctNum++; printf("第 %d 题回答正确!\n", i + 1); } else { printf("第 %d 题回答错误,正确答案为 %d。\n", i + 1, questions[i][2]); } } printf("您一共回答正确了 %d 道题,正确率为 %.2f%%。\n", correctNum, (float)correctNum / NUM_OF_QUESTIONS * 100); return 0; } ``` 这个程序会生成 5 道随机的加减乘除运算题目,数字范围在 0 到 10 之间。程序会先输出题目,然后等待用户输入答案,最后检查答案并输出结果。程序使用了一个二维数组来存储题目和答案,运算符则使用了一个 char 类型的一维数组

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值