求解一道C语言程序题~~

求解一道C语言程序题~~,第1张

这道题主要牵涉到指针:

1)第一个printf 的值:

有 struct str1 p[2];

p[0]=&s1[0];p[1]=&s1[1];

可得到(p+1)指向s1[1](即 "IJK","LMN")。

又因为 ++ ((p+1))->s意思是指向字符串 "IJK" 的指针自增1,所以打印值为 JK

2)第二个printf的打印值:

有 struct str2

{

struct str1 sr;

int d;

}s2={"OPQ","RST",0}; 和 s2src[2] 是指向字符串 "RST" 的第三个字符 T,(因为数组从0开始,c[2]为第三个字符),即结果为 T。

故输出为 JKT

int x1, x2;

char y1, y2;

scanf("%d%c%d%c", &x1, &y1, &x2, &y2);

若要求x1、x2、y1、y2的值分别为10、20、A、B,正确的数据输入是( )。(注:└┘代表空格)

A.10A└┘20B B.10└┘A20B 

C.10 └┘A└┘20└┘ B D.10A20└┘B

>>>>A

若变量已正确说明为float类型, 要通过语句scanf("%f %f%f", &a, &b, &c);给a赋予100, b赋予220, c赋予330, 不正确的输入形式为()。

A.10<回车> B.100,220,330<回车>

22<回车>

33

C.100<回车> D.10 22<回车>

220 330<回车> 33<回车>

>>>>B

有如下程序,若要求x1、x2、y1、y2的值分别为10、20、A、B,正确的数据输入是( )。(注:└┘代表空格)

int x1, x2;

char y1, y2;

scanf("%d%d", &x1,&x2);

scanf("%c%c", &y1,&y2);

A.1020AB B.10└┘20└┘ABC

C.10└┘20<回车> D.10└┘20AB

AB

>>>>D

有如下程序段,对应正确的数据输入是( )。

float x,y;

scanf("%f%f", &x,&y);

printf("a=%f,b=%f", x,y);

A.204<回车> B.204,567<回车>

567<回车>

C.A=204,B=567<回车> D.205567<回车>

>>>>A

规则只有一个, 就是scanf中的格式,和实际输入的格式,必须完全匹配

先给你第一题的,百度知道的这个编辑器真的不适合粘贴代码

#include<stdioh>

#include<stringh>

#define MAX_ARRAY_SIZE 1024

#define MAX_MAP_SIZE 10

/ 输入数组,连续输入,如:aedabcdaeas  /

int inputArray(char buff) {

      int len = 0;

      / 使用fgets来防止缓冲区溢出  /

      if (NULL == fgets(buff, MAX_ARRAY_SIZE, stdin)) {

              return 0;

      }

      len = strlen(buff);

      / fgets 返回的数据可能是换行符结尾的,也可能不是,对换行符结尾的进行处理 /

      if (buff[len - 1] == '\n') {

              buff[len - 1] = '\0';

              len -= 1;

      }

      return len;

}

int processArray(int len, char chars, char map) {

      / 保存反向映射便于查找  /

      int tmap[128];

      int maplen = 0;

      int i = 0;

      char p = chars;

      memset(tmap, -1, sizeof(int) 128);

      for (i = 0; i < len; i++) {

              if (p > 'z' || p < 'a') {

                      return -p;

              }

              if (tmap[p] == -1) {

                      if (maplen >= MAX_MAP_SIZE) {

                              return -1;

                      }

                      tmap[p] = maplen;

                      map[maplen] = p;

                      maplen += 1;

              }

              p = '0' + tmap[p];

              p++;

      }

      return maplen;

}

int main() {

      / 用于输入的字符数组  /

      char buff[MAX_ARRAY_SIZE];

      / 用于保存转换规则的数组  /

      char map[MAX_MAP_SIZE];

      / 保存字符数组长度  /

      int len = 0;

      int maplen = 0;

      int i = 0;

      len = inputArray(buff);

      if (len <= 0) {

              puts("Cancelled");

      } else if (len < 10) {

              puts("Not enough 10 chars");

      } else {

              maplen = processArray(len, buff, map);

              if (maplen >= 0) {

                      puts("转换结果:");

                      for (i = 0; i < len; i++) {

                              printf("%c ", buff[i]);

                      }

                      puts("");

                      puts("映射规则:");

                      for (i = 0; i < maplen; i++) {

                              printf("%c -> %d\n", map[i], i);

                      }

                      puts("");

              } else if (maplen == -1) {

                      puts("Different Chars count is OverLimit of 10");

              } else if (maplen <= -2) {

                      printf("Unexpected char %c\n", -maplen);

              }

      }

      return 0;

}

执行结果:

第一题,写了一点代码,但是结果很离谱,误差挺大的,仅供参考

#include <stdioh>

#include <mathh>

double _cos(double x);

int main(int argc, char argv[])

{

float x;

printf("plesae input x: \n");

scanf("%g", &x);

printf("cos(%g) = %g\n", x, _cos(x));

}

int factorial(int n)

{

if(n <= 1)

return 1;

n = factorial(n - 1);

return n;

}

double _pow(double x, int n)

{

int i;

double tmp, result;

tmp = x;

result = 10;

for(i = 0; i < n; i++)

{

result = x;

if(fabs(result- tmp) < 1e-10)

break;

tmp = result;

}

return result;

}

double _cos(double x)

{

int i;

double result, tmp, forhead;

i = 1;

result = 10;

forhead = 00;

while(fabs(forhead - result) > 1e-6)

{

forhead = result;

tmp = _pow(x, 2i) / (double) factorial(2i);

if(i % 2 == 0)

result += tmp;

else

result -= tmp;

if(tmp < 1e-10)

break;

i++;

}

return result;

}

计算给定公式的近似值,直到最后一项的绝对值小于eps:

#include <stdioh>

#include <mathh>

double factorial(int n) {

double result = 1;

for (int i = 1; i <= n; ++i) {

result = i;

}

return result;

}

double power(double x, int n) {

double result = 1;

for (int i = 0; i < n; ++i) {

result = x;

}

return result;

}

double approximate(double x, double eps) {

double sum = 0;

int k = 0;

double term;

do {

term = (pow(-1, k) / 20) (factorial(2 k) / factorial(2 k + 1)) (power(x, 2 k + 1) / (2 k + 1));

sum += term;

k++;

} while (fabs(term) >= eps);

return sum;

}

int main() {

double x, eps;

printf("请输入x: ");

scanf("%lf", &x);

printf("请输入eps (epx > 0): ");

scanf("%lf", &eps);

double result = approximate(x, eps);

printf("近似值: %10lf\n", result);

return 0;

}

这个程序首先定义了两个辅助函数factorial()和power(),分别用于计算阶乘和幂。approximate()函数计算给定公式的近似值,当最后一项的绝对值小于eps时停止计算。在main()函数中,我们从用户那里接收x和eps的值,然后调用approximate()函数计算近似值,并将结果打印到控制台。

以上就是关于求解一道C语言程序题~~全部的内容,包括:求解一道C语言程序题~~、C语言的题目、初学编程,大家帮忙看下这道c语言题怎么做万分感谢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9868959.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存