问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言问题 求助

发布网友 发布时间:2023-05-01 19:15

我来回答

5个回答

热心网友 时间:2023-10-13 01:38

代码:

#include <stdio.h>

void main()
{
 double a=10,b=1,sum[2]={0,0};
 int i;

 for (i=0;i<30;i++)
 {
  sum[0]+=a;
  sum[1]+=b;
  b*=2;
 }
 printf("陌生人共给了富翁%.0f万元\n",sum[0]);
 printf("富翁共给了陌生人%.6f万元\n",sum[1]/1000000.0);
}

结果:

热心网友 时间:2023-10-13 01:39

在while(n!=0){后加一句sum=0;就对了——你的代码若再输入2 1 2 2 1,则还会是NO,就是因为sum没有清0。不过代码写得不太好,数组用得太大,1<n<10也没有体现出来等。提供一个作参考:

#include "stdio.h"
int main(int argv,char *argc[]){
int n,i,j,x[9][9];
while(1){
if(scanf("%d",&n)!=1 || n<2 && n || n>9){
printf("Input error, exit...\n");
return 0;
}
if(n==0)
break;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&x[i][j]);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(x[i][j]!=x[j][i])
break;
if(i>=n && j>=n)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}

运行样例:

热心网友 时间:2023-10-13 01:39

没看你的图,不知道你指的是什么.转帖了二维数组的解释.好好看看吧.理解了就好

from :网页链接

二维数组的定义

二维数组定义的一般形式是:
类型说明符 数组名[常量表达式1][常量表达式2]
其中常量表达式1表示第一维下标的长度,常量表达式2 表示第二维下标的长度。例如:
int a[3][4];
说明了一个三行四列的数组,数组名为a,其下标变量的类型为整型。该数组的下标变量共有3×4个,即:
a[0][0], a[0][1], a[0][2], a[0][3]
a[1][0], a[1][1], a[1][2], a[1][3]
a[2][0], a[2][1], a[2][2], a[2][3]

二维数组在概念上是二维的,即是说其下标在两个方向上变化,下标变量在数组中的位置也处于一个平面之中,而不是象一维数组只是一个向量。但是,实际的硬件存储器却是连续编址的,也就是说存储器单元是按一维线性排列的。如何在一维存储器中存放二维数组,可有两种方式:一种是按行排列, 即放完一行之后顺次放入第二行。另一种是按列排列, 即放完一列之后再顺次放入第二列。

在C语言中,二维数组是按行排列的。即,先存放a[0]行,再存放a[1]行,最后存放a[2]行。每行中有四个元素也是依次存放。由于数组a说明为int类型,该类型占两个字节的内存空间,所以每个元素均占有两个字节。



二维数组的元素也称为双下标变量,其表示的形式为:
数组名[下标][下标]
其中下标应为整型常量或整型表达式。例如:
a[3][4]
表示a数组三行四列的元素。

下标变量和数组说明在形式中有些相似,但这两者具有完全不同的含义。数组说明的方括号中给出的是某一维的长度,即可取下标的最大值;而数组元素中的下标是该元素在数组中的位置标识。前者只能是常量,后者可以是常量,变量或表达式。

【例1】一个学习小组有5个人,每个人有三门课的考试成绩。求全组分科的平均成绩和各科总平均成绩。
--     张     王     李     赵     周
Math     80     61     59     85     76
C     75     65     63     87     77
Foxpro     92     71     70     90     85
可设一个二维数组a[5][3]存放五个人三门课的成绩。再设一个一维数组v[3]存放所求得各分科平均成绩,设变量average 为全组各科总平均成绩。编程如下:

#include <stdio.h>
int main(void){
    int i,j,s=0,average,v[3],a[5][3];
    printf("input score\n");
    for(i=0;i<3;i++){
        for(j=0;j<5;j++){
            scanf("%d",&a[j][i]);
            s=s+a[j][i];
        }
        v[i]=s/5;
        s=0;
    }
    average =(v[0]+v[1]+v[2])/3;
    printf("math:%d\nc languag:%d\ndbase:%d\n",v[0],v[1],v[2]);
    printf("total:%d\n", average );
    return 0;
}

程序中首先用了一个双重循环。在内循环中依次读入某一门课程的各个学生的成绩,并把这些成绩累加起来,退出内循环后再把该累加成绩除以5送入v[i]之中,这就是该门课程的平均成绩。外循环共循环三次,分别求出三门课各自的平均成绩并存放在v数组之中。退出外循环之后,把v[0]、v[1]、v[2]相加除以3即得到各科总平均成绩。最后按题意输出各个成绩。
二维数组的初始化

二维数组初始化也是在类型说明时给各下标变量赋以初值。二维数组可按行分段赋值,也可按行连续赋值。

例如对数组a[5][3]:
按行分段赋值可写为:
int a[5][3]={ {80,75,92}, {61,65,71}, {59,63,70}, {85,87,90}, {76,77,85} };
按行连续赋值可写为:
int a[5][3]={ 80,75,92,61,65,71,59,63,70,85,87,90,76,77,85};
这两种赋初值的结果是完全相同的。

【例2】求各科平局分和总成绩平均分。

#include <stdio.h>
int main(void){
    int i,j,s=0, average,v[3];
    int a[5][3]={{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}};
    for(i=0;i<3;i++){
        for(j=0;j<5;j++)
            s=s+a[j][i];
        v[i]=s/5;
        s=0;
    }
    average=(v[0]+v[1]+v[2])/3;
    printf("math:%d\nc languag:%d\ndFoxpro:%d\n",v[0],v[1],v[2]);
    printf("total:%d\n", average);
    return 0;
}


对于二维数组初始化赋值还有以下说明:
1) 可以只对部分元素赋初值,未赋初值的元素自动取0值。例如:
int a[3][3]={{1},{2},{3}};
是对每一行的第一列元素赋值,未赋值的元素取0值。 赋值后各元素的值为:
1  0  0
2  0  0
3  0  0
int a [3][3]={{0,1},{0,0,2},{3}};
赋值后的元素值为:
0  1  0
0  0  2
3  0  0

2) 如对全部元素赋初值,则第一维的长度可以不给出。例如:

int a[3][3]={1,2,3,4,5,6,7,8,9};

可以写为:

int a[][3]={1,2,3,4,5,6,7,8,9};


3) 数组是一种构造类型的数据。二维数组可以看作是由一维数组的嵌套而构成的。设一维数组的每个元素都又是一个数组,就组成了二维数组。当然,前提是各元素类型必须相同。根据这样的分析,一个二维数组也可以分解为多个一维数组。C语言允许这种分解。

如二维数组a[3][4],可分解为三个一维数组,其数组名分别为:
a[0]
a[1]
a[2]
对这三个一维数组不需另作说明即可使用。这三个一维数组都有4个元素,例如:一维数组a[0]的元素为a[0][0],a[0][1],a[0][2],a[0][3]。必须强调的是,a[0],a[1],a[2]不能当作下标变量使用,它们是数组名,不是一个单纯的下标变量。

热心网友 时间:2023-10-13 01:40

1 下面程序段是把从终端读入的一行字符作为字符串放在字符数组中,然后输出。
int i;
char s[80], *p;
for (i=0; i<79; i++)
{ s[i]=getchar();
if (s[i]==’\n’) break;
}
s[i]= 【 '\0' 】;
p = 【 s 】;
while (*p!=’\0’) {
putchar(*p);
p++;
}

2. 下面程序段的运行结果是【 hELLO! 】
char s[80], *sp=”HELLO!”;
sp=strcpy(s,sp);
s[0]=’h’;
puts(sp);

3. 下面程序段的运行结果是【 bcdABCD 】
char s[20]=”abcd”;
char *sp=s;
sp++;
puts(strcat(sp, “ABCD”));

选择:
1.下列程序完成的功能是将字符串a复制到字符串b,并显示这两个字符串。请将程序补充完整。(99年北京市试题)
main()
{char a[100]={“I am a student”};
char b[100], *p1, *p2;
p1=a; p2=b;
while (【① D 】)
{p1++;
p2++;
}
printf(“%s\n%s\n”, 【② B 】);
}
① A) *p1 !=’\0’ B) *p2 !=’\0’
C) (*p1=*p2)!=’\0” D) (*p2=*p1) !=’\0’
② A) a[],b[] B) a,b
C) a[100],b[100] D) a[0],b[0]

2.下列程序是检查一个字符串是否回文。所谓回文即正向,反向的拼写都一样,如moom,aba等。当是回文时,输出“yes!”.否则输出”no!”。填空。(99年北京市试题)
main()
{ char *p, *q;
int i,m,n,k;
printf(“please input a string:\n”);
scanf(【① C 】);
n = strlen(p);
m=n/2; 【② A 】; k=0;
for (i=0; i<=m; i++)
if (*p++ !=*q--) k=1;
if (【 ③ D 】)
printf(“yes! \n”);
else
printf(“no! \n”);
}
①A) (%c”,p) B)(“%c”,&p) C)(“%s”, p) D)(“%s”,&p)
②A) q=p+n-1 B) q=p+n+1 C)q=p+n D) q=q-n
③A) k=1 B) k C) k==1 D) k==0

三:一.填空题
1.定义语句 int *f(); 和int (*f)();的含义分别【 f是函数返回整型指针的函数 】和【 f是指针指向返回整型数据的函数 】。
2.请根据运行结果,完成main函数中的填空。
arr_sum(int arr[], int n)
{ int i,sum=0;
for (i=0; i<n; i++) sum=sum+arr[i];
return(sum);
}
main()
{ int arr_sum();
static int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
int *p,total1, total2;
【 int (*pt)()=arr_sum 】;
pt=arr_sum;
p=a[0];
total1=arr_sum(p,12);
total2=(*pt)(【 p,12 】);
printf("total1=%d\ntotal2=%d\n",total1,total2);
}
程序运行结果:
total1=144
total2=144

热心网友 时间:2023-10-13 01:41

int fac(int n);这句是声明,作用就是告诉main函数 有fac这样一个函数可以调用

fac函数体内 声明了一个static类型的f 也就是说给f分配了一个固定的地址 每个对f的操作都会使他变化

i=1时候 执行fac(1); 此时声明一个static int f=1
f=f*n=1*1;return 1; 所以输出是 1! = 1 此时f=1
i=2时候 执行fac(2); 应为f是静态的不会重复初始化 此时f仍然是上一步的执行结果 f=1; 执行f=f*n=1*2; return 2 输出为 2!=2 此时f=2
i=3时候 执行fac(3); 应为f是静态的不会重复初始化 此时f仍然是上一步的执行结果 f=2; 执行f=f*n=2*3; return 6 输出为 3!=6 此时f=6
i=4时候 执行fac(4); 应为f是静态的不会重复初始化 此时f仍然是上一步的执行结果 f=6; 执行f=f*n=6*4; return 24 输出为 4!=24

以此类推
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
U盘更新专用需要电脑打开怎么让我的U盘和电脑文件夹同步更新啊_百度知 ... 为什么我的硬盘一打开就弹出对话框说选择打开方式. 倒霉的是右键也打... 磁盘右键是打开方式怎么办 我双机盘符总是打开 打开方式 让我选择,右健第一项是打开.不知道是中了... 罗技Lightspeed怎么用? 罗技无线鼠标怎么样?怎么连接电脑使用? 为什么不建议去融资公司上班 融资担保公司一般账务处理及所涉及的会计科目有哪些 月经期间可以游泳吗 经期能不能游泳 辰字取名女孩有寓意属鸡最搭的名字有哪些? 在医院副高级药师难凭吗 副高级职称怎么考药师证书 影像id为空是什么意思 智桂通入群用户id为空是什么意思 开发票显示业务ID不存在是什么意思 分时id为空是什么意思 梦见自己在高出不敢往下跳的预兆 led32k30jd不通电故障 长虹led39b2200不通电 led50m3000a不通电 Lg滚筒洗衣机好吗?我用的这个lg滚筒洗衣机脱水时总跑动,质量不好?怎么才能平稳? 拿出一部分硬盘空间来充当内存使用,当内存占用完时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张 独立显卡显存不够用时电脑会自动调用系统内存吗? 显存不足,会自动调用内存去补充吗 虚拟内存开启时,为什么就会占用d盘空间,虚拟内存,是指c盘空间不够时,自动调用d盘空间的意思吗? 自动内存转储什么意思 济南交通学院有哪些专业 卫东的人物简介 十天前去医院做婚检,白细胞三个加号,卵磷脂多少忘了,医生说是有前列腺炎,要做场效消融,已经做了九天 三菱FAc64AS系统上的报警显示911000? 给天蝎男朋友昨天下午发的信息他说当时有事情说等一会一直没有回什么意思? 温暖治愈的朋友圈文案句子,简约又走心 手表表带扣不上保修吗 贤士隐居者的介绍 东汉时期佛教的传入 梦见跟官员吃饭的预兆 梦见和官员一起吃白米饭的预兆 梦见跟皇帝和官员在一起吃饭的预兆 投屏软件是什么意思 *全自动洗衣机双动力洗衣机和普通全自动洗衣机的区别 网站内容错误该怎么修改? 手机上网显示内容格式错误是怎么回事? 华为平板换屏去哪儿换 Win10玩游戏不能全屏如何解决 海南高考考什么卷 2021海南高考标准分对照表 维修未经验证的正品apple电池是什么意思 歌唱水平如何提高 如何提升小学生的语文水平?