这道题主要牵涉到指针:
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语言题怎么做万分感谢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)