Q1113.(10分数, 语言: C)输入一个字符串保存到数组str中,将str中的数字字符存储到数组tOrigin中,并将其转换为整数输出,用k记录字符串中数字字符的个数。例如:用户输入字符串1243abc3,则将12433取出以整数形式输出。阅读程序,找出其中的错误,并改正之(允许改变数据类型)。 #include <math.h> #include <stdio.h> void fun(char *s, char *t, int k) { int i; k = 0; for (i = 0; s[i]; i++) if (0 <= s[i] && s[I] <= 9) { t[*k] = s[i]; *k += 1; } -- } void main() { char str[100], tOrigin[9]; long int n; int i, k; printf("Please enter string s:"); scanf("%s", str); fun(str, tOrigin, &k); for (i = 0; i < k; i++) n += (tOrigin [k - 1 - i] - '0') * pow(10, i); printf("The result is: %d", n); }
答案:
#include <math.h>
#include <stdio.h>
void fun(char *s, char *t, int *k)
{
int i;
//this
*k = 0;
for (i = 0; s[i]; i++)
//this
if ('0' <= s[i] && s[i] <= '9')
{
t[*k] = s[i];
*k += 1;
}
//this
t[*k] = '\0';
}
void main()
{
char str[100], tOrigin[9];
long int n;
int i, k;
printf("Please enter string s:");
scanf("%s", str);
//this
fun(str, tOrigin, &k);
for (i = 0; i < k; i++)
n += (tOrigin [k - 1 - i] - '0') * pow(10, i);
printf("The result is: %d", n);
}
Q202.(10分数, 语言: C)请用指针数组编程,依照国名的字典序,对将进行外交访谈的国家进行排序。 假设外交访谈的国家不超过150个,且国名不超过9个字符。 下面程序中存在比较隐蔽的错误,请通过分析和调试程序,发现并改正程序中的错误。 #include <stdio.h> #define MAX_LEN 10 #define N 150 void SortString(char *ptr[], int n); main() { int i, n; char *pStr[N]; printf("How many countries?\n"); scanf("%d",&n); printf("Input their names:\n"); for (i=0; i<n; i++) { gets(pStr[i]); } SortString(pStr[i], n); printf("Sorted results:\n"); for (i=0; i<n; i++) { puts(pStr[i]); } } void SortString(char *ptr[], int n) { int i, j; char temp; for (i=0; i<n-1; i++) { for (j = i+1; j<n; j++) { if (ptr[j] < ptr[i]); { temp = ptr[i]; ptr[j] = ptr[i]; ptr[j] = temp; } } } } 注意: (1)请将修改正确后的完整源程序拷贝粘贴到答题区内。 (2)对于没有错误的语句,请不要修改,修改原本正确的语句也要扣分。 (3)当且仅当错误全部改正,且程序运行结果调试正确,才给加5分。 (4)改错时不能改变程序原有的意图,也不要改变代码的输入输出格式。 (5)经教师手工核对后,如果未使用指针数组做函数参数编程,那么即使运行结果正确也不给分。
#include <stdio.h>
#include <string.h>
#define MAX_LEN 10
#define N 150
void SortString(char *ptr[], int n);
main()
{
int i, n;
//this
char a[N][MAX_LEN];
char *pStr[N];
printf("How many countries?\n");
scanf("%d",&n);
//this
getchar();
printf("Input their names:\n");
for (i=0; i<n; i++)
{
//this
pStr[i] = a[i];
gets(pStr[i]);
}
//tihs
SortString(pStr, n);
printf("Sorted results:\n");
for (i=0; i<n; i++)
{
puts(pStr[i]);
}
}
void SortString(char *ptr[], int n)
{
int i, j;
//tihs
char *temp=NULL;
for (i=0; i<n-1; i++)
{
for (j = i+1; j<n; j++)
{
//tihs
if (strcmp(ptr[j],ptr[i])<0)
{
temp = ptr[i];
ptr[i] = ptr[j];
ptr[j] = temp;
}
}
}
}
Q582.(10分数, 语言: C)现要求大家设计程序,通过键盘读入选调生的学号和分数,当输入的学号为0时表示链表创建结束,并将读入的选调生生学号和成绩打印输出。创建动态链表并打印链表内容。下面程序中存在比较隐蔽的错误,请通过分析和调试程序,发现并改正程序中的错误。改错时不能改变程序原有的意图。 注意:将修改后的完整的源程序写在答题区内。 #include <stdio.h> #define SIZE sizeof(struct node) struct node { long num; float score; struct node *next; } int main() { int n = 0; struct node *head = NULL, *p1, *p2; p1 = p2 = (struct node*)malloc(SIZE); printf("Input %d node data:\n", n + 1); scanf("%d%f", &p1->num, &p1->score); while (p1->num != 0) { if (++n == 1) head = p1; else p2->next = p1; p1 = p2; p1 = (struct node*)malloc(SIZE); printf("Input %d node data:\n", n + 1); scanf("%d%f", &p1->num, &p1->score); } free(p1); printf("Prit list:\n"); p2->next = NULL; if (head != NULL) { p2=head; while (p1 != NULL) { printf("num:%d\tscore:%.2f\n", p1->num, p1->score); p1 = p1->next; } } return 0; }
#include <stdio.h>
#define SIZE sizeof(struct node)
struct node
{
long num;
float score;
struct node *next;
};
int main()
{
int n = 0;
struct node *head = NULL, *p1, *p2;
p1 = p2 = (struct node*)malloc(SIZE);
printf("Input %d node data:\n", n+1);
scanf("%d%f", &p1->num, &p1->score);
while (p1->num != 0)
{
if (++n == 1)
head = p1;
else
p2->next = p1;
p2 = p1;
p1 = (struct node*)malloc(SIZE);
printf("Input %d node data:\n", n+1);
scanf("%d%f", &p1->num, &p1->score);
}
free(p1);
printf("Prit list:\n");
p2->next = NULL;
if (head != NULL)
{
p2=head;
while (p2 != NULL)
{
printf("num:%d\tscore:%.2f\n", p2->num, p2->score);
p2 = p2->next;
}
}
return 0;
}
Q3515.(10分数, 语言: C)下面程序用于计算两个30位正整数的和。在sum和main函数(input和output函数中没有错误不需要修改)中有若干错误,请修改错误。注意:改错不能增减语句! 输入输出样例: 输入:123456789012345678901234567890+999999999999999999999999999999 输出:=1123456789012345678901234567889 #include <stdio.h> #define MAX 30 #define CMAX 31 void input(int A[],int B[]); void output(int A[],int B[], int C[]); void sum(int A[], int B[], int C[]); int main(){ int A[MAX]={0}, B[MAX]={0}, C[CMAX]={0}; input(A, B); sum(A, B, C); output(A, B, C); return 0; } void sum(int A[], int B[], int C[]) { int i; int c; for(i=0; i<=MAX; i++) { c = A[i] + B[i]; C[i] = c/10 ; C[i+1] = c%10; } } void input(int A[],int B[]) { int i; for(i=MAX-1; i>=0; i--) scanf("%1d",&A[i]); getchar(); for(i=MAX-1; i>=0; i--) scanf("%1d",&B[i]); } void output(int A[],int B[], int C[]){ int i; printf("=") ; for(i=(C[MAX] == 0? MAX-1:MAX ) ; i>=0; i--) printf("%1d", C[i]) ; }
#include <stdio.h>
#define MAX 30
#define CMAX 31
void input(int A[],int B[]);
void output(int A[],int B[], int C[]);
void sum(int A[], int B[], int C[]);
int main(){
int A[MAX]={0}, B[MAX]={0}, C[CMAX]={0};
input(A, B);
sum(A, B, C);
output(A, B, C);
return 0;
}
void sum(int A[], int B[], int C[])
{
int i;
int c;
for(i=0; i<MAX; i++)
{
c = A[i] + B[i]+C[i];
C[i+1] = c/10 ;
C[i] = c%10;
}
}
void input(int A[],int B[])
{
int i;
for(i=MAX-1; i>=0; i--)
scanf("%1d",&A[i]);
getchar();
for(i=MAX-1; i>=0; i--)
scanf("%1d",&B[i]);
}
void output(int A[],int B[], int C[]){
int i;
printf("=") ;
for(i=(C[MAX] == 0? MAX-1:MAX ) ; i>=0; i--)
printf("%1d", C[i]) ;
}
Q176.(10分数, 语言: C)#include <stdio.h> unsigned long Factorial(unsigned int n); { if (n < 0) { printf("data error!"); return 0; } else if (n==0 && n==1) { return 1; } else { return n * Factorial(n-1); } } main() { int n; unsigned long x; printf("Input n:\n"); scanf("%d", n); x = Factorial(n); printf("%d!=%ld\n", n, x); }
#include <stdio.h>
unsigned long Factorial( int n)
{
if (n < 0)
{
printf("data error!");
return 0;
}
else if (n==0 || n==1)
{
return 1;
}
else
{
return n * Factorial(n-1);
}
}
main()
{
int n;
unsigned long x;
printf("Input n:\n");
scanf("%d", &n);
x = Factorial(n);
if(x!=0){
printf("%d!=%ld\n", n, x);
}
}
Q1581.(10分数, 语言: C)给下面程序改错。程序功能是输入10个数,按从小到大顺序排序。 #include <stdio.h> #define SIZE 10; main( ) { int i, j, t, a[SIZE]; printf("input 10 numbers: \n"); for(i = 1;i <= SIZE;i++) scanf("%d", a[i]); printf("\n"); for (i = 0; i< SIZE; i++) for (j = SIZE - 1; j >= i + 1; j--) if (a[j] > a[j-1]) { t=a[j]; a[j-1]=a[j]; a[j]=t; } for (i = 0; i < SIZE; i++) printf("%d\n", a[i]); } 注意: (1)请将修改正确后的完整源程序拷贝粘贴到答题区内。 (2)对于没有错误的语句,请不要修改,修改原本正确的语句也要扣分。 (3)当且仅当错误全部改正,且程序运行结果调试正确,才给加5分。 (4)改错时不能改变程序原有的意图,也不要改变代码的输入输出格式。
#include <stdio.h>
#define SIZE 10
main( )
{
int i, j, t, a[SIZE];
printf("input 10 numbers: \n");
for (i = 0; i < SIZE; i++)
scanf("%d", &a[i]);
printf("\n");
for (i = 0; i < SIZE; i++){
for (j = SIZE - 1; j >= 1; j--){
if (a[j] < a[j - 1])
{
t = a[j-1];
a[j - 1] = a[j];
a[j] = t;
}
}
}
for (i = 0; i < SIZE; i++)
printf("%d\n", a[i]);
}
Q390.(10分数, 语言: C)编写程序对读入的国家名称按字典顺序排序(最多20个国名,且长度不超过40)。要求:需排序的国家个数在主函数读入,调用Input函数读入需排序的国名,调用Sort函数对国名按字典顺序排序,调用Print函数打印按字典顺序排序的国名。Input、Sort、Print函数原型如下: void Input(char *p[], int n); void Sort(char *p[], int n); void Print(char *p[], int n); 下面程序中存在比较隐蔽的错误,请通过分析和调试程序,发现并改正程序中的错误。 #include<stdio.h> void Input(char *p[], int n); void Sort(char *p[], int n); void Print(char *p[], int n); int main() { char str[40][20]; int i, n; printf("Input n(n<=20):\n"); scanf("%d", &n); -- Input(str, n); Sort(str, n); printf("Results:\n"); Print(str, n); return 0; } void Input(char *p[], int n) { int i; for (i = 0; i < n; i++) { gets(p[i]); } } void Sort(char *p[], int n) { char t; int i, j; for (i = 0; i < n - 1; i++) { for (j = 1; j < n; j++) { if (p[j] < p[i]) ) { t = p[i]; p[i] = p[j]; p[j] = t; } } } } void Print(char *p[], int n); { int i; for (i = 0; i < n; i++) { printf("%s\n", p[i]); } } 注意: (1)请将修改正确后的完整源程序拷贝粘贴到答题区内 (2)对于没有错误的语句,请不要修改,修改原本正确的语句也要扣分 (3)当且仅当错误全部改正,且程序运行结果调试正确,才给加分 (4)改错时不能改变程序原有的意图,也不要改变代码的输入输出格式
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
void Input(char *p[], int n);
void Sort(char *p[], int n);
void Print(char *p[], int n);
int main()
{
char str[20][40];
int i, n;
char *pstr[20];
printf("Input n(n<=20):\n");
scanf("%d", &n);
getchar();
for (int i = 0; i < n; i++)
{
pstr[i] = str[i];
}
Input(pstr, n);
Sort(pstr, n);
printf("Results:\n");
Print(pstr, n);
return 0;
}
void Input(char *p[], int n)
{
int i;
for (i = 0; i < n; i++)
{
gets(p[i]);
}
}
void Sort(char *p[], int n)
{
char *t;
int i, j;
for (i = 0; i < n - 1; i++)
{
for (j = i + 1; j < n; j++)
{
if (strcmp(p[j] , p[i]) < 0 )
{
t = p[i];
p[i] = p[j];
p[j] = t;
}
}
}
}
void Print(char *p[], int n)
{
int i;
for (i = 0; i < n; i++)
{
printf("%s\n", p[i]);
}
}
Q3077.(10分数, 语言: C)程序改错-3 从键盘任意输入两个符号各异的整数,直到输入的两个整数满足要求为止,然后打印这两个数。请通过测试找出下面这个程序存在的问题(不止一个问题哦),并改正。同时用下面给出的运行结果示例检查修改后的程序。 #include <stdio.h> int main() { int x1, x2; do { printf("Input x1, x2:"); scanf("%d,%d", &x1, &x2); } while (x1 * x2 > 0); printf("x1=%d,x2=%d\n", x1, x2); return 0; }
#include <string.h>
int x;
x = scanf("%d,%d", &x1, &x2);
while(getchar()!='\n');
while (x!=2 || x1 * x2 >= 0 );//顺序 一定不能换
#include <stdio.h>
#include <string.h>
int main()
{
int x1, x2;
int x;
do
{
printf("Input x1, x2:\n");
x = scanf("%d,%d", &x1, &x2);
while(getchar()!='\n');
}
while (x!=2 || x1 * x2 >= 0 );
printf("x1=%d,x2=%d\n", x1, x2);
return 0;
}